refactor(ui_components): add CopyWith method in ThemeStyle

This commit is contained in:
Malo Léon 2023-02-21 12:10:17 +01:00
parent 4030511f4a
commit cae4b68046
9 changed files with 171 additions and 24 deletions

View File

@ -107,6 +107,30 @@ class FileSelectionButtonStyle extends ButtonStyle<FileSelectionButtonStyle> {
final TextStyle? subTitle;
@override
FileSelectionButtonStyle mergeWith(FileSelectionButtonStyle? other) =>
FileSelectionButtonStyle.merge(this, other)!;
FileSelectionButtonStyle? mergeWith(FileSelectionButtonStyle? other) =>
FileSelectionButtonStyle.merge(this, other);
@override
FileSelectionButtonStyle? copyWith({
TextStyle? title,
TextStyle? subTitle,
BorderRadiusGeometry? radius,
EdgeInsetsGeometry? padding,
MultiColor? foregroundColors,
MultiColor? backgroundColors,
MultiColor? borderColors,
double? stroke,
BoxShadow? shadow,
}) =>
FileSelectionButtonStyle(
title: title ?? this.title,
subTitle: subTitle ?? this.subTitle,
radius: radius ?? this.radius,
padding: padding ?? this.padding,
foregroundColors: foregroundColors ?? this.foregroundColors,
backgroundColors: backgroundColors ?? this.backgroundColors,
borderColors: borderColors ?? this.borderColors,
stroke: stroke ?? this.stroke,
shadow: shadow ?? this.shadow,
);
}

View File

@ -99,6 +99,28 @@ class FlatButtonStyle extends ButtonStyle<FlatButtonStyle> {
final TextStyle? label;
@override
FlatButtonStyle mergeWith(FlatButtonStyle? other) =>
FlatButtonStyle.merge(this, other)!;
FlatButtonStyle? mergeWith(FlatButtonStyle? other) =>
FlatButtonStyle.merge(this, other);
@override
FlatButtonStyle? copyWith({
TextStyle? label,
BorderRadiusGeometry? radius,
EdgeInsetsGeometry? padding,
MultiColor? foregroundColors,
MultiColor? backgroundColors,
MultiColor? borderColors,
double? stroke,
BoxShadow? shadow,
}) =>
FlatButtonStyle(
label: label ?? this.label,
radius: radius ?? this.radius,
padding: padding ?? this.padding,
foregroundColors: foregroundColors ?? this.foregroundColors,
backgroundColors: backgroundColors ?? this.backgroundColors,
borderColors: borderColors ?? this.borderColors,
stroke: stroke ?? this.stroke,
shadow: shadow ?? this.shadow,
);
}

View File

@ -99,6 +99,28 @@ class SimpleIconButtonStyle extends ButtonStyle<SimpleIconButtonStyle> {
final double? dimension;
@override
SimpleIconButtonStyle mergeWith(SimpleIconButtonStyle? other) =>
SimpleIconButtonStyle.merge(this, other)!;
SimpleIconButtonStyle? mergeWith(SimpleIconButtonStyle? other) =>
SimpleIconButtonStyle.merge(this, other);
@override
SimpleIconButtonStyle copyWith({
double? dimension,
BorderRadiusGeometry? radius,
EdgeInsetsGeometry? padding,
MultiColor? foregroundColors,
MultiColor? backgroundColors,
MultiColor? borderColors,
double? stroke,
BoxShadow? shadow,
}) =>
SimpleIconButtonStyle(
dimension: dimension ?? this.dimension,
radius: radius ?? this.radius,
padding: padding ?? this.padding,
foregroundColors: foregroundColors ?? this.foregroundColors,
backgroundColors: backgroundColors ?? this.backgroundColors,
borderColors: borderColors ?? this.borderColors,
stroke: stroke ?? this.stroke,
shadow: shadow ?? this.shadow,
);
}

View File

@ -107,6 +107,30 @@ class SymbolButtonStyle extends ButtonStyle<SymbolButtonStyle> {
final double? dimension;
@override
SymbolButtonStyle mergeWith(SymbolButtonStyle? other) =>
SymbolButtonStyle.merge(this, other)!;
SymbolButtonStyle? mergeWith(SymbolButtonStyle? other) =>
SymbolButtonStyle.merge(this, other);
@override
SymbolButtonStyle? copyWith({
TextStyle? label,
double? dimension,
BorderRadiusGeometry? radius,
EdgeInsetsGeometry? padding,
MultiColor? foregroundColors,
MultiColor? backgroundColors,
MultiColor? borderColors,
double? stroke,
BoxShadow? shadow,
}) =>
SymbolButtonStyle(
label: label ?? this.label,
dimension: dimension ?? this.dimension,
radius: radius ?? this.radius,
padding: padding ?? this.padding,
foregroundColors: foregroundColors ?? this.foregroundColors,
backgroundColors: backgroundColors ?? this.backgroundColors,
borderColors: borderColors ?? this.borderColors,
stroke: stroke ?? this.stroke,
shadow: shadow ?? this.shadow,
);
}

View File

@ -68,7 +68,17 @@ class LoaderStyle extends ThemeStyle<LoaderStyle> {
final double? stroke;
@override
LoaderStyle mergeWith(LoaderStyle? other) => LoaderStyle.merge(this, other)!;
LoaderStyle? mergeWith(LoaderStyle? other) => LoaderStyle.merge(this, other);
@override
LoaderStyle copyWith({
MultiColor? colors,
double? stroke,
}) =>
LoaderStyle(
colors: colors ?? this.colors,
stroke: stroke ?? this.stroke,
);
@override
String toString() => 'LoaderStyle($colors, $stroke)';

View File

@ -67,6 +67,16 @@ class RichTextBuilderStyle extends ThemeStyle<RichTextBuilderStyle> {
final Map<String, TextStyle>? styles;
@override
RichTextBuilderStyle mergeWith(RichTextBuilderStyle? other) =>
RichTextBuilderStyle.merge(this, other)!;
RichTextBuilderStyle? mergeWith(RichTextBuilderStyle? other) =>
RichTextBuilderStyle.merge(this, other);
@override
RichTextBuilderStyle? copyWith({
TextStyle? defaultStyle,
Map<String, TextStyle>? styles,
}) =>
RichTextBuilderStyle(
defaultStyle: defaultStyle ?? this.defaultStyle,
styles: styles ?? this.styles,
);
}

View File

@ -58,19 +58,19 @@ class TextInputStyle extends ThemeStyle<TextInputStyle> {
if (a == null) {
return b.copyWith();
}
return a.copyWith(
labelStyle: b.labelStyle,
hintStyle: b.hintStyle,
backgroundColors: b.backgroundColors,
borderColors: b.borderColors,
boxShadow: b.boxShadow,
radius: b.radius,
inputStyle: b.inputStyle,
iconColor: b.iconColor,
prefixStyle: b.prefixStyle,
prefixIconColor: b.prefixIconColor,
suffixIconColor: b.suffixIconColor,
suffixStyle: b.suffixStyle,
return b.copyWith(
labelStyle: a.labelStyle,
hintStyle: a.hintStyle,
backgroundColors: a.backgroundColors,
borderColors: a.borderColors,
boxShadow: a.boxShadow,
radius: a.radius,
inputStyle: a.inputStyle,
iconColor: a.iconColor,
prefixStyle: a.prefixStyle,
prefixIconColor: a.prefixIconColor,
suffixIconColor: a.suffixIconColor,
suffixStyle: a.suffixStyle,
);
}
@ -103,4 +103,34 @@ class TextInputStyle extends ThemeStyle<TextInputStyle> {
@override
TextInputStyle? mergeWith(TextInputStyle? other) =>
TextInputStyle.merge(this, other);
@override
TextInputStyle copyWith({
TextStyle? labelStyle,
TextStyle? hintStyle,
MultiColor? backgroundColors,
MultiColor? borderColors,
BoxShadow? boxShadow,
BorderRadiusGeometry? radius,
TextStyle? inputStyle,
Color? iconColor,
TextStyle? prefixStyle,
Color? prefixIconColor,
TextStyle? suffixStyle,
Color? suffixIconColor,
}) =>
TextInputStyle(
labelStyle: labelStyle ?? this.labelStyle,
hintStyle: hintStyle ?? this.hintStyle,
backgroundColors: backgroundColors ?? this.backgroundColors,
radius: radius ?? this.radius,
borderColors: borderColors ?? this.borderColors,
boxShadow: boxShadow ?? this.boxShadow,
inputStyle: inputStyle ?? this.inputStyle,
prefixStyle: prefixStyle ?? this.prefixStyle,
suffixStyle: suffixStyle ?? this.suffixStyle,
prefixIconColor: prefixIconColor ?? this.prefixIconColor,
suffixIconColor: suffixIconColor ?? this.suffixIconColor,
iconColor: iconColor ?? this.iconColor,
);
}

View File

@ -19,4 +19,7 @@ abstract class ThemeStyle<T> {
/// Merges non-null `other` attributes in `this` and returns a copy.
T? mergeWith(T? other);
/// Copy with (mandatory for mergeWith, needs to be simple and ignore `null`)
T? copyWith();
}

View File

@ -15,11 +15,13 @@ dependencies:
git:
url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git
path: packages/wyatt_component_copy_with_extension
freezed_annotation: ^2.2.0
dev_dependencies:
build_runner: ^2.3.3
copy_with_extension_gen: ^5.0.0
flutter_test: { sdk: flutter }
freezed: ^2.3.2
wyatt_analysis:
hosted: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub
version: ^2.4.0