feat(ui_kit): make flat button fade on transition
This commit is contained in:
parent
2baaf5c0bb
commit
32cc6e8288
@ -130,115 +130,126 @@ class FlatButtonScreen extends CubitScreen<ButtonCubit, ButtonState> {
|
||||
onPressed?.call(state.state);
|
||||
bloc(context).onClickUpOut();
|
||||
},
|
||||
child: DecoratedBox(
|
||||
child: AnimatedContainer(
|
||||
// TODO(wyatt): make it configurable, and generalize it
|
||||
duration: const Duration(milliseconds: 150),
|
||||
curve: Curves.easeOut,
|
||||
decoration: BoxDecoration(
|
||||
color: style.backgroundColors?.color,
|
||||
// If no border color => no default value
|
||||
border: (style.borderColors != null && style.stroke != null)
|
||||
? (style.borderColors?.isGradient ?? false)
|
||||
? GradientBoxBorder(
|
||||
gradient: LinearGradient(
|
||||
colors: style.borderColors!.colors,
|
||||
),
|
||||
width: style.stroke!,
|
||||
)
|
||||
: Border.all(
|
||||
color: style.borderColors!.color,
|
||||
width: style.stroke!,
|
||||
)
|
||||
: null,
|
||||
|
||||
// if no gradient colors => no default value
|
||||
gradient: (style.backgroundColors?.isGradient ?? false)
|
||||
? LinearGradient(
|
||||
colors: style.backgroundColors!.colors,
|
||||
)
|
||||
: null,
|
||||
boxShadow: [
|
||||
if (style.shadow != null) ...[style.shadow!]
|
||||
],
|
||||
|
||||
borderRadius: style.radius,
|
||||
),
|
||||
child: ConstrainedBox(
|
||||
constraints: const BoxConstraints(
|
||||
minWidth: 88,
|
||||
minHeight: 36,
|
||||
), // min sizes for Material buttons
|
||||
child: Padding(
|
||||
padding: style.padding ?? EdgeInsets.zero,
|
||||
child: Row(
|
||||
mainAxisSize: mainAxisSize ?? MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
if (prefix != null &&
|
||||
(prefix is Icon?) &&
|
||||
((prefix as Icon?)?.color != null)) ...[
|
||||
prefix!
|
||||
] else if (style.foregroundColors?.color != null &&
|
||||
prefix != null) ...[
|
||||
ColorFiltered(
|
||||
colorFilter: ColorFilter.mode(
|
||||
style.foregroundColors!.color,
|
||||
BlendMode.srcIn,
|
||||
),
|
||||
child: prefix,
|
||||
)
|
||||
] else ...[
|
||||
prefix ?? const SizedBox.shrink()
|
||||
],
|
||||
Gap(style.padding?.vertical ?? 10),
|
||||
child: DecoratedBox(
|
||||
decoration: BoxDecoration(
|
||||
// If no border color => no default value
|
||||
border: (style.borderColors != null && style.stroke != null)
|
||||
? (style.borderColors?.isGradient ?? false)
|
||||
? GradientBoxBorder(
|
||||
gradient: LinearGradient(
|
||||
colors: style.borderColors!.colors,
|
||||
),
|
||||
width: style.stroke!,
|
||||
)
|
||||
: Border.all(
|
||||
color: style.borderColors!.color,
|
||||
width: style.stroke!,
|
||||
)
|
||||
: null,
|
||||
|
||||
/// Choose color
|
||||
/// buttonStyle.label.style.color ??
|
||||
/// context.textTheme.labelLarge.color
|
||||
///
|
||||
/// Choose gradient
|
||||
/// label.gradient ??
|
||||
/// buttonStyle.foregroundColor.colors ??
|
||||
/// null
|
||||
///
|
||||
/// More infos in ThemeResolver class
|
||||
if (label != null) ...[
|
||||
Text(
|
||||
label!.data,
|
||||
style: label!.style ?? style.label,
|
||||
textAlign: label!.textAlign,
|
||||
textDirection: label!.textDirection,
|
||||
softWrap: label!.softWrap,
|
||||
overflow: label!.overflow,
|
||||
maxLines: label!.maxLines,
|
||||
selectionColor: label!.selectionColor,
|
||||
).toGradient(
|
||||
gradientColors: style.foregroundColors,
|
||||
)
|
||||
boxShadow: [
|
||||
if (style.shadow != null) ...[style.shadow!]
|
||||
],
|
||||
borderRadius: style.radius,
|
||||
),
|
||||
child: ConstrainedBox(
|
||||
constraints: const BoxConstraints(
|
||||
minWidth: 88,
|
||||
minHeight: 36,
|
||||
), // min sizes for Material buttons
|
||||
child: Padding(
|
||||
padding: style.padding ?? EdgeInsets.zero,
|
||||
child: Row(
|
||||
mainAxisSize: mainAxisSize ?? MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
if (prefix != null &&
|
||||
(prefix is Icon?) &&
|
||||
((prefix as Icon?)?.color != null)) ...[
|
||||
prefix!
|
||||
] else if (style.foregroundColors?.color != null &&
|
||||
prefix != null) ...[
|
||||
ColorFiltered(
|
||||
colorFilter: ColorFilter.mode(
|
||||
style.foregroundColors!.color,
|
||||
BlendMode.srcIn,
|
||||
),
|
||||
child: prefix,
|
||||
)
|
||||
] else ...[
|
||||
prefix ?? const SizedBox.shrink()
|
||||
],
|
||||
Gap(style.padding?.vertical ?? 10),
|
||||
|
||||
/// Choose color
|
||||
/// buttonStyle.label.style.color ??
|
||||
/// context.textTheme.labelLarge.color
|
||||
///
|
||||
/// Choose gradient
|
||||
/// label.gradient ??
|
||||
/// buttonStyle.foregroundColor.colors ??
|
||||
/// null
|
||||
///
|
||||
/// More infos in ThemeResolver class
|
||||
if (label != null) ...[
|
||||
Text(
|
||||
label!.data,
|
||||
style: label!.style ?? style.label,
|
||||
textAlign: label!.textAlign,
|
||||
textDirection: label!.textDirection,
|
||||
softWrap: label!.softWrap,
|
||||
overflow: label!.overflow,
|
||||
maxLines: label!.maxLines,
|
||||
selectionColor: label!.selectionColor,
|
||||
).toGradient(
|
||||
gradientColors: style.foregroundColors,
|
||||
)
|
||||
],
|
||||
Gap(style.padding?.vertical ?? 10),
|
||||
if (suffix != null &&
|
||||
(suffix is Icon?) &&
|
||||
((suffix as Icon?)?.color != null)) ...[
|
||||
suffix!
|
||||
] else if (style.foregroundColors?.colors != null &&
|
||||
style.foregroundColors!.colors.isNotEmpty &&
|
||||
suffix != null) ...[
|
||||
ColorFiltered(
|
||||
colorFilter: ColorFilter.mode(
|
||||
style.foregroundColors!.colors.last,
|
||||
BlendMode.srcIn,
|
||||
),
|
||||
child: suffix,
|
||||
)
|
||||
] else if (style.foregroundColors?.color != null &&
|
||||
suffix != null) ...[
|
||||
ColorFiltered(
|
||||
colorFilter: ColorFilter.mode(
|
||||
style.foregroundColors!.color,
|
||||
BlendMode.srcIn,
|
||||
),
|
||||
child: suffix,
|
||||
)
|
||||
] else ...[
|
||||
suffix ?? const SizedBox.shrink()
|
||||
],
|
||||
],
|
||||
Gap(style.padding?.vertical ?? 10),
|
||||
if (suffix != null &&
|
||||
(suffix is Icon?) &&
|
||||
((suffix as Icon?)?.color != null)) ...[
|
||||
suffix!
|
||||
] else if (style.foregroundColors?.colors != null &&
|
||||
style.foregroundColors!.colors.isNotEmpty &&
|
||||
suffix != null) ...[
|
||||
ColorFiltered(
|
||||
colorFilter: ColorFilter.mode(
|
||||
style.foregroundColors!.colors.last,
|
||||
BlendMode.srcIn,
|
||||
),
|
||||
child: suffix,
|
||||
)
|
||||
] else if (style.foregroundColors?.color != null &&
|
||||
suffix != null) ...[
|
||||
ColorFiltered(
|
||||
colorFilter: ColorFilter.mode(
|
||||
style.foregroundColors!.color,
|
||||
BlendMode.srcIn,
|
||||
),
|
||||
child: suffix,
|
||||
)
|
||||
] else ...[
|
||||
suffix ?? const SizedBox.shrink()
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
Loading…
x
Reference in New Issue
Block a user