Implement InputDecorationTheme copyWith, ==, hashCode (#36411)

* Implement InputDecorationTheme copyWith, ==, hashCode
This commit is contained in:
Shi-Hao Hong 2019-07-18 14:40:39 -07:00 committed by GitHub
parent 0f625196cc
commit db6c362bef
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 136 additions and 0 deletions

View file

@ -3547,6 +3547,121 @@ class InputDecorationTheme extends Diagnosticable {
/// behavior of aligning the label with the center of the [TextField].
final bool alignLabelWithHint;
/// Creates a copy of this object but with the given fields replaced with the
/// new values.
InputDecorationTheme copyWith({
TextStyle labelStyle,
TextStyle helperStyle,
TextStyle hintStyle,
TextStyle errorStyle,
int errorMaxLines,
bool hasFloatingPlaceholder,
bool isDense,
EdgeInsetsGeometry contentPadding,
bool isCollapsed,
TextStyle prefixStyle,
TextStyle suffixStyle,
TextStyle counterStyle,
bool filled,
Color fillColor,
Color focusColor,
Color hoverColor,
InputBorder errorBorder,
InputBorder focusedBorder,
InputBorder focusedErrorBorder,
InputBorder disabledBorder,
InputBorder enabledBorder,
InputBorder border,
bool alignLabelWithHint,
}) {
return InputDecorationTheme(
labelStyle: labelStyle ?? this.labelStyle,
helperStyle: helperStyle ?? this.helperStyle,
hintStyle: hintStyle ?? this.hintStyle,
errorStyle: errorStyle ?? this.errorStyle,
errorMaxLines: errorMaxLines ?? this.errorMaxLines,
hasFloatingPlaceholder: hasFloatingPlaceholder ?? this.hasFloatingPlaceholder,
isDense: isDense ?? this.isDense,
contentPadding: contentPadding ?? this.contentPadding,
isCollapsed: isCollapsed ?? this.isCollapsed,
prefixStyle: prefixStyle ?? this.prefixStyle,
suffixStyle: suffixStyle ?? this.suffixStyle,
counterStyle: counterStyle ?? this.counterStyle,
filled: filled ?? this.filled,
fillColor: fillColor ?? this.fillColor,
focusColor: focusColor ?? this.focusColor,
hoverColor: hoverColor ?? this.hoverColor,
errorBorder: errorBorder ?? this.errorBorder,
focusedBorder: focusedBorder ?? this.focusedBorder,
focusedErrorBorder: focusedErrorBorder ?? this.focusedErrorBorder,
disabledBorder: disabledBorder ?? this.disabledBorder,
enabledBorder: enabledBorder ?? this.enabledBorder,
border: border ?? this.border,
alignLabelWithHint: alignLabelWithHint ?? this.alignLabelWithHint,
);
}
@override
int get hashCode {
return hashList(<dynamic>[
labelStyle,
helperStyle,
hintStyle,
errorStyle,
errorMaxLines,
hasFloatingPlaceholder,
isDense,
contentPadding,
isCollapsed,
prefixStyle,
suffixStyle,
counterStyle,
filled,
fillColor,
focusColor,
hoverColor,
errorBorder,
focusedBorder,
focusedErrorBorder,
disabledBorder,
enabledBorder,
border,
alignLabelWithHint,
]);
}
@override
bool operator==(Object other) {
if (identical(this, other))
return true;
if (other.runtimeType != runtimeType)
return false;
final InputDecorationTheme typedOther = other;
return typedOther.labelStyle == labelStyle
&& typedOther.helperStyle == helperStyle
&& typedOther.hintStyle == hintStyle
&& typedOther.errorStyle == errorStyle
&& typedOther.errorMaxLines == errorMaxLines
&& typedOther.isDense == isDense
&& typedOther.contentPadding == contentPadding
&& typedOther.isCollapsed == isCollapsed
&& typedOther.prefixStyle == prefixStyle
&& typedOther.suffixStyle == suffixStyle
&& typedOther.counterStyle == counterStyle
&& typedOther.filled == filled
&& typedOther.fillColor == fillColor
&& typedOther.focusColor == focusColor
&& typedOther.hoverColor == hoverColor
&& typedOther.errorBorder == errorBorder
&& typedOther.focusedBorder == focusedBorder
&& typedOther.focusedErrorBorder == focusedErrorBorder
&& typedOther.disabledBorder == disabledBorder
&& typedOther.enabledBorder == enabledBorder
&& typedOther.border == border
&& typedOther.alignLabelWithHint == alignLabelWithHint
&& typedOther.disabledBorder == disabledBorder;
}
@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);

View file

@ -2424,6 +2424,27 @@ void main() {
expect(getOpacity(tester, 'label'), 0.0);
}, skip: isBrowser);
test('InputDecorationTheme copyWith, ==, hashCode basics', () {
expect(const InputDecorationTheme(), const InputDecorationTheme().copyWith());
expect(const InputDecorationTheme().hashCode, const InputDecorationTheme().copyWith().hashCode);
});
test('InputDecorationTheme copyWith correctly copies and replaces values', () {
const InputDecorationTheme original = InputDecorationTheme(
focusColor: Colors.orange,
fillColor: Colors.green,
);
final InputDecorationTheme copy = original.copyWith(
focusColor: Colors.yellow,
fillColor: Colors.blue,
);
expect(original.focusColor, Colors.orange);
expect(original.fillColor, Colors.green);
expect(copy.focusColor, Colors.yellow);
expect(copy.fillColor, Colors.blue);
});
testWidgets('InputDecorationTheme outline border', (WidgetTester tester) async {
await tester.pumpWidget(
buildInputDecorator(