Reorder materialStateProperty
defaults (#125905)
Fixes #122250. This PR is to make sure all the MaterialStateProperty defaults are able to correctly resolve different states. * When a widget is pressed, it is also hovered, so we need to put the `MaterialState.pressed` check before `MaterialState.hovered`. * When a widget is focused, the widget should still be able to be hovered, so we should check `MaterialState.hovered` before `MaterialState.focused`. * There are also cases like in _InputDecoratorDefaultsM3, the `MaterialState.disabled` should be checked before `MaterialState.error`. the order should be disabled, (error), pressed, hovered, focused.
This commit is contained in:
parent
a48cc24077
commit
4e7e4512b6
@ -78,12 +78,6 @@ class _MediumScrollUnderFlexibleConfig with _ScrollUnderFlexibleConfig {
|
||||
TextStyle? get expandedTextStyle =>
|
||||
${textStyle('md.comp.top-app-bar.medium.headline')}?.apply(color: ${color('md.comp.top-app-bar.medium.headline.color')});
|
||||
|
||||
@override
|
||||
EdgeInsetsGeometry? get collapsedTitlePadding => const EdgeInsetsDirectional.only(start: 40);
|
||||
|
||||
@override
|
||||
EdgeInsetsGeometry? get collapsedCenteredTitlePadding => const EdgeInsetsDirectional.only(start: 40);
|
||||
|
||||
@override
|
||||
EdgeInsetsGeometry? get expandedTitlePadding => const EdgeInsets.fromLTRB(16, 0, 16, 20);
|
||||
}
|
||||
@ -107,12 +101,6 @@ class _LargeScrollUnderFlexibleConfig with _ScrollUnderFlexibleConfig {
|
||||
TextStyle? get expandedTextStyle =>
|
||||
${textStyle('md.comp.top-app-bar.large.headline')}?.apply(color: ${color('md.comp.top-app-bar.large.headline.color')});
|
||||
|
||||
@override
|
||||
EdgeInsetsGeometry? get collapsedTitlePadding => const EdgeInsetsDirectional.only(start: 40);
|
||||
|
||||
@override
|
||||
EdgeInsetsGeometry? get collapsedCenteredTitlePadding => const EdgeInsetsDirectional.only(start: 40);
|
||||
|
||||
@override
|
||||
EdgeInsetsGeometry? get expandedTitlePadding => const EdgeInsets.fromLTRB(16, 0, 16, 28);
|
||||
}
|
||||
|
@ -35,15 +35,15 @@ class ButtonTemplate extends TokenTemplate {
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return ${elevation("$tokenGroup.disabled.container")};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${elevation("$tokenGroup.pressed.container")};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${elevation("$tokenGroup.hover.container")};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${elevation("$tokenGroup.focus.container")};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${elevation("$tokenGroup.pressed.container")};
|
||||
}
|
||||
return ${elevation("$tokenGroup.container")};
|
||||
})''';
|
||||
}
|
||||
@ -92,15 +92,15 @@ class _${blockName}DefaultsM3 extends ButtonStyle {
|
||||
@override
|
||||
MaterialStateProperty<Color?>? get overlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.pressed.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('$tokenGroup.hover.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('$tokenGroup.focus.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.pressed.state-layer')};
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
|
@ -106,25 +106,25 @@ class _${blockName}DefaultsM3 extends DatePickerThemeData {
|
||||
MaterialStateProperty<Color?>? get dayOverlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.date', 'selected', 'pressed')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.date', 'selected', 'hover')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.date', 'selected', 'focus')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.date', 'selected', 'pressed')};
|
||||
}
|
||||
} else {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.date', 'unselected', 'pressed')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.date', 'unselected', 'hover')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.date', 'unselected', 'focus')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.date', 'unselected', 'pressed')};
|
||||
}
|
||||
}
|
||||
return null;
|
||||
});
|
||||
@ -173,25 +173,25 @@ class _${blockName}DefaultsM3 extends DatePickerThemeData {
|
||||
MaterialStateProperty<Color?>? get yearOverlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.year-selection.year', 'selected', 'pressed')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.year-selection.year', 'selected', 'hover')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.year-selection.year', 'selected', 'focus')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.year-selection.year', 'selected', 'pressed')};
|
||||
}
|
||||
} else {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.year-selection.year', 'unselected', 'pressed')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.year-selection.year', 'unselected', 'hover')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.year-selection.year', 'unselected', 'focus')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.year-selection.year', 'unselected', 'pressed')};
|
||||
}
|
||||
}
|
||||
return null;
|
||||
});
|
||||
@ -208,14 +208,14 @@ class _${blockName}DefaultsM3 extends DatePickerThemeData {
|
||||
@override
|
||||
MaterialStateProperty<Color?>? get rangeSelectionOverlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.range-selection.date.in-range', null, 'pressed')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.range-selection.date.in-range.', null, 'hover')};
|
||||
return ${_stateColor('md.comp.date-picker.modal.range-selection.date.in-range', null, 'hover')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.range-selection.date.in-range.', null, 'focus')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${_stateColor('md.comp.date-picker.modal.range-selection.date.in-range.', null, 'pressed')};
|
||||
return ${_stateColor('md.comp.date-picker.modal.range-selection.date.in-range', null, 'focus')};
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
@ -95,26 +95,29 @@ class IconButtonTemplate extends TokenTemplate {
|
||||
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.toggle.selected.pressed.state-layer')}.withOpacity(${opacity('$tokenGroup.pressed.state-layer.opacity')});
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('$tokenGroup.toggle.selected.hover.state-layer')}.withOpacity(${opacity('$tokenGroup.hover.state-layer.opacity')});
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('$tokenGroup.toggle.selected.focus.state-layer')}.withOpacity(${opacity('$tokenGroup.focus.state-layer.opacity')});
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.toggle.selected.pressed.state-layer')}.withOpacity(${opacity('$tokenGroup.pressed.state-layer.opacity')});
|
||||
}
|
||||
}
|
||||
if (toggleable) { // toggleable but unselected case
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.toggle.unselected.pressed.state-layer')}.withOpacity(${opacity('$tokenGroup.pressed.state-layer.opacity')});
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('$tokenGroup.toggle.unselected.hover.state-layer')}.withOpacity(${opacity('$tokenGroup.hover.state-layer.opacity')});
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('$tokenGroup.toggle.unselected.focus.state-layer')}.withOpacity(${opacity('$tokenGroup.focus.state-layer.opacity')});
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.toggle.unselected.pressed.state-layer')}.withOpacity(${opacity('$tokenGroup.pressed.state-layer.opacity')});
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.pressed.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('$tokenGroup.hover.state-layer')};
|
||||
@ -122,24 +125,24 @@ class IconButtonTemplate extends TokenTemplate {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('$tokenGroup.focus.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.pressed.state-layer')};
|
||||
}
|
||||
return Colors.transparent;
|
||||
})''';
|
||||
case 'md.comp.outlined-icon-button':
|
||||
return '''
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.selected.pressed.state-layer')}.withOpacity(${opacity('$tokenGroup.pressed.state-layer.opacity')});
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('$tokenGroup.selected.hover.state-layer')}.withOpacity(${opacity('$tokenGroup.hover.state-layer.opacity')});
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('$tokenGroup.selected.focus.state-layer')}.withOpacity(${opacity('$tokenGroup.focus.state-layer.opacity')});
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.selected.pressed.state-layer')}.withOpacity(${opacity('$tokenGroup.pressed.state-layer.opacity')});
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.unselected.pressed.state-layer')}.withOpacity(${opacity('$tokenGroup.pressed.state-layer.opacity')});
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('$tokenGroup.unselected.hover.state-layer')}.withOpacity(${opacity('$tokenGroup.hover.state-layer.opacity')});
|
||||
@ -147,9 +150,6 @@ class IconButtonTemplate extends TokenTemplate {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('$tokenGroup.unselected.focus.state-layer')}.withOpacity(${opacity('$tokenGroup.focus.state-layer.opacity')});
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.unselected.pressed.state-layer')}.withOpacity(${opacity('$tokenGroup.pressed.state-layer.opacity')});
|
||||
}
|
||||
return Colors.transparent;
|
||||
})''';
|
||||
case 'md.comp.icon-button':
|
||||
@ -157,15 +157,18 @@ class IconButtonTemplate extends TokenTemplate {
|
||||
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.selected.pressed.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('$tokenGroup.selected.hover.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('$tokenGroup.selected.focus.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.selected.pressed.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.unselected.pressed.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('$tokenGroup.unselected.hover.state-layer')};
|
||||
@ -173,9 +176,6 @@ class IconButtonTemplate extends TokenTemplate {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('$tokenGroup.unselected.focus.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('$tokenGroup.unselected.pressed.state-layer')};
|
||||
}
|
||||
return Colors.transparent;
|
||||
})''';
|
||||
}
|
||||
|
@ -39,46 +39,46 @@ class _${blockName}DefaultsM3 extends InputDecorationTheme {
|
||||
|
||||
@override
|
||||
BorderSide? get activeIndicatorBorder => MaterialStateBorderSide.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${mergedBorder('md.comp.filled-text-field.error.focus.active-indicator','md.comp.filled-text-field.focus.active-indicator')};
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return ${border('md.comp.filled-text-field.disabled.active-indicator')};
|
||||
}
|
||||
if (states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${border('md.comp.filled-text-field.error.hover.active-indicator')};
|
||||
}
|
||||
return ${border('md.comp.filled-text-field.error.active-indicator')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${border('md.comp.filled-text-field.focus.active-indicator')};
|
||||
return ${mergedBorder('md.comp.filled-text-field.error.focus.active-indicator','md.comp.filled-text-field.focus.active-indicator')};
|
||||
}
|
||||
return ${border('md.comp.filled-text-field.error.active-indicator')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${border('md.comp.filled-text-field.hover.active-indicator')};
|
||||
}
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return ${border('md.comp.filled-text-field.disabled.active-indicator')};
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${border('md.comp.filled-text-field.focus.active-indicator')};
|
||||
}
|
||||
return ${border('md.comp.filled-text-field.active-indicator')};
|
||||
});
|
||||
|
||||
@override
|
||||
BorderSide? get outlineBorder => MaterialStateBorderSide.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${mergedBorder('md.comp.outlined-text-field.error.focus.outline','md.comp.outlined-text-field.focus.outline')};
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return ${border('md.comp.outlined-text-field.disabled.outline')};
|
||||
}
|
||||
if (states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${border('md.comp.outlined-text-field.error.hover.outline')};
|
||||
}
|
||||
return ${border('md.comp.outlined-text-field.error.outline')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${border('md.comp.outlined-text-field.focus.outline')};
|
||||
return ${mergedBorder('md.comp.outlined-text-field.error.focus.outline','md.comp.outlined-text-field.focus.outline')};
|
||||
}
|
||||
return ${border('md.comp.outlined-text-field.error.outline')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${border('md.comp.outlined-text-field.hover.outline')};
|
||||
}
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return ${border('md.comp.outlined-text-field.disabled.outline')};
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${border('md.comp.outlined-text-field.focus.outline')};
|
||||
}
|
||||
return ${border('md.comp.outlined-text-field.outline')};
|
||||
});
|
||||
@ -88,70 +88,70 @@ class _${blockName}DefaultsM3 extends InputDecorationTheme {
|
||||
|
||||
@override
|
||||
Color? get prefixIconColor => MaterialStateColor.resolveWith((Set<MaterialState> states) {${componentColor('md.comp.filled-text-field.error.leading-icon') == componentColor('md.comp.filled-text-field.leading-icon') ? '' : '''
|
||||
if(states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('md.comp.filled-text-field.error.focus.leading-icon')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('md.comp.filled-text-field.error.hover.leading-icon')};
|
||||
}
|
||||
return ${componentColor('md.comp.filled-text-field.error.leading-icon')};
|
||||
}'''}${componentColor('md.comp.filled-text-field.focus.leading-icon') == componentColor('md.comp.filled-text-field.leading-icon') ? '' : '''
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('md.comp.filled-text-field.focus.leading-icon')};
|
||||
}'''}${componentColor('md.comp.filled-text-field.hover.leading-icon') == componentColor('md.comp.filled-text-field.leading-icon') ? '' : '''
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('md.comp.filled-text-field.hover.leading-icon')};
|
||||
}'''}
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return ${componentColor('md.comp.filled-text-field.disabled.leading-icon')};
|
||||
}
|
||||
if(states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('md.comp.filled-text-field.error.hover.leading-icon')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('md.comp.filled-text-field.error.focus.leading-icon')};
|
||||
}
|
||||
return ${componentColor('md.comp.filled-text-field.error.leading-icon')};
|
||||
}'''}${componentColor('md.comp.filled-text-field.hover.leading-icon') == componentColor('md.comp.filled-text-field.leading-icon') ? '' : '''
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('md.comp.filled-text-field.hover.leading-icon')};
|
||||
}'''}${componentColor('md.comp.filled-text-field.focus.leading-icon') == componentColor('md.comp.filled-text-field.leading-icon') ? '' : '''
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('md.comp.filled-text-field.focus.leading-icon')};
|
||||
}'''}
|
||||
return ${componentColor('md.comp.filled-text-field.leading-icon')};
|
||||
});
|
||||
|
||||
@override
|
||||
Color? get suffixIconColor => MaterialStateColor.resolveWith((Set<MaterialState> states) {
|
||||
if(states.contains(MaterialState.error)) {${componentColor('md.comp.filled-text-field.error.trailing-icon') == componentColor('md.comp.filled-text-field.error.focus.trailing-icon') ? '' : '''
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('md.comp.filled-text-field.error.focus.trailing-icon')};
|
||||
}'''}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('md.comp.filled-text-field.error.hover.trailing-icon')};
|
||||
}
|
||||
return ${componentColor('md.comp.filled-text-field.error.trailing-icon')};
|
||||
}${componentColor('md.comp.filled-text-field.focus.trailing-icon') == componentColor('md.comp.filled-text-field.trailing-icon') ? '' : '''
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('md.comp.filled-text-field.focus.trailing-icon')};
|
||||
}'''}${componentColor('md.comp.filled-text-field.hover.trailing-icon') == componentColor('md.comp.filled-text-field.trailing-icon') ? '' : '''
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('md.comp.filled-text-field.hover.trailing-icon')};
|
||||
}'''}
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return ${componentColor('md.comp.filled-text-field.disabled.trailing-icon')};
|
||||
}
|
||||
if(states.contains(MaterialState.error)) {${componentColor('md.comp.filled-text-field.error.trailing-icon') == componentColor('md.comp.filled-text-field.error.focus.trailing-icon') ? '' : '''
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('md.comp.filled-text-field.error.hover.trailing-icon')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('md.comp.filled-text-field.error.focus.trailing-icon')};
|
||||
}'''}
|
||||
return ${componentColor('md.comp.filled-text-field.error.trailing-icon')};
|
||||
}${componentColor('md.comp.filled-text-field.hover.trailing-icon') == componentColor('md.comp.filled-text-field.trailing-icon') ? '' : '''
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('md.comp.filled-text-field.hover.trailing-icon')};
|
||||
}'''}${componentColor('md.comp.filled-text-field.focus.trailing-icon') == componentColor('md.comp.filled-text-field.trailing-icon') ? '' : '''
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('md.comp.filled-text-field.focus.trailing-icon')};
|
||||
}'''}
|
||||
return ${componentColor('md.comp.filled-text-field.trailing-icon')};
|
||||
});
|
||||
|
||||
@override
|
||||
TextStyle? get labelStyle => MaterialStateTextStyle.resolveWith((Set<MaterialState> states) {
|
||||
final TextStyle textStyle = ${textStyle("md.comp.filled-text-field.label-text")} ?? const TextStyle();
|
||||
if(states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.error.focus.label-text')});
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.disabled.label-text')});
|
||||
}
|
||||
if(states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.error.hover.label-text')});
|
||||
}
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.error.label-text')});
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.focus.label-text')});
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.error.focus.label-text')});
|
||||
}
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.error.label-text')});
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.hover.label-text')});
|
||||
}
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.disabled.label-text')});
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.focus.label-text')});
|
||||
}
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.label-text')});
|
||||
});
|
||||
@ -159,50 +159,50 @@ class _${blockName}DefaultsM3 extends InputDecorationTheme {
|
||||
@override
|
||||
TextStyle? get floatingLabelStyle => MaterialStateTextStyle.resolveWith((Set<MaterialState> states) {
|
||||
final TextStyle textStyle = ${textStyle("md.comp.filled-text-field.label-text")} ?? const TextStyle();
|
||||
if(states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.error.focus.label-text')});
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.disabled.label-text')});
|
||||
}
|
||||
if(states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.error.hover.label-text')});
|
||||
}
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.error.label-text')});
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.focus.label-text')});
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.error.focus.label-text')});
|
||||
}
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.error.label-text')});
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.hover.label-text')});
|
||||
}
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.disabled.label-text')});
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.focus.label-text')});
|
||||
}
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.label-text')});
|
||||
});
|
||||
|
||||
@override
|
||||
TextStyle? get helperStyle => MaterialStateTextStyle.resolveWith((Set<MaterialState> states) {
|
||||
final TextStyle textStyle = ${textStyle("md.comp.filled-text-field.supporting-text")} ?? const TextStyle();${componentColor('md.comp.filled-text-field.focus.supporting-text') == componentColor('md.comp.filled-text-field.supporting-text') ? '' : '''
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.focus.supporting-text')});
|
||||
}'''}${componentColor('md.comp.filled-text-field.hover.supporting-text') == componentColor('md.comp.filled-text-field.supporting-text') ? '' : '''
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.hover.supporting-text')});
|
||||
}'''}
|
||||
final TextStyle textStyle = ${textStyle("md.comp.filled-text-field.supporting-text")} ?? const TextStyle();
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.disabled.supporting-text')});
|
||||
}
|
||||
}${componentColor('md.comp.filled-text-field.hover.supporting-text') == componentColor('md.comp.filled-text-field.supporting-text') ? '' : '''
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.hover.supporting-text')});
|
||||
}'''}${componentColor('md.comp.filled-text-field.focus.supporting-text') == componentColor('md.comp.filled-text-field.supporting-text') ? '' : '''
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.focus.supporting-text')});
|
||||
}'''}
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.supporting-text')});
|
||||
});
|
||||
|
||||
@override
|
||||
TextStyle? get errorStyle => MaterialStateTextStyle.resolveWith((Set<MaterialState> states) {
|
||||
final TextStyle textStyle = ${textStyle("md.comp.filled-text-field.supporting-text")} ?? const TextStyle();${componentColor('md.comp.filled-text-field.error.focus.supporting-text') == componentColor('md.comp.filled-text-field.error.supporting-text') ? '' : '''
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.error.focus.supporting-text')});
|
||||
}'''}${componentColor('md.comp.filled-text-field.error.hover.supporting-text') == componentColor('md.comp.filled-text-field.error.supporting-text') ? '' : '''
|
||||
final TextStyle textStyle = ${textStyle("md.comp.filled-text-field.supporting-text")} ?? const TextStyle();${componentColor('md.comp.filled-text-field.error.hover.supporting-text') == componentColor('md.comp.filled-text-field.error.supporting-text') ? '' : '''
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.error.hover.supporting-text')});
|
||||
}'''}${componentColor('md.comp.filled-text-field.error.focus.supporting-text') == componentColor('md.comp.filled-text-field.error.supporting-text') ? '' : '''
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.error.focus.supporting-text')});
|
||||
}'''}
|
||||
return textStyle.copyWith(color: ${componentColor('md.comp.filled-text-field.error.supporting-text')});
|
||||
});
|
||||
|
@ -82,25 +82,25 @@ class _${blockName}DefaultsM3 extends SegmentedButtonThemeData {
|
||||
}),
|
||||
overlayColor: MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${_stateColor(tokenGroup, 'selected', 'pressed')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${_stateColor(tokenGroup, 'selected', 'hover')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${_stateColor(tokenGroup, 'selected', 'focus')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${_stateColor(tokenGroup, 'selected', 'pressed')};
|
||||
}
|
||||
} else {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${_stateColor(tokenGroup, 'unselected', 'pressed')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${_stateColor(tokenGroup, 'unselected', 'hover')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${_stateColor(tokenGroup, 'unselected', 'focus')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${_stateColor(tokenGroup, 'unselected', 'pressed')};
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}),
|
||||
|
@ -58,15 +58,15 @@ class _${blockName}DefaultsM3 extends SliderThemeData {
|
||||
|
||||
@override
|
||||
Color? get overlayColor => MaterialStateColor.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.dragged)) {
|
||||
return ${componentColor('$tokenGroup.pressed.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('$tokenGroup.hover.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('$tokenGroup.focus.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.dragged)) {
|
||||
return ${componentColor('$tokenGroup.pressed.state-layer')};
|
||||
}
|
||||
|
||||
return Colors.transparent;
|
||||
});
|
||||
|
@ -43,26 +43,26 @@ class _${blockName}PrimaryDefaultsM3 extends TabBarTheme {
|
||||
MaterialStateProperty<Color?> get overlayColor {
|
||||
return MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('md.comp.primary-navigation-tab.active.pressed.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('md.comp.primary-navigation-tab.active.hover.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('md.comp.primary-navigation-tab.active.focus.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('md.comp.primary-navigation-tab.active.pressed.state-layer')};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('md.comp.primary-navigation-tab.inactive.pressed.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('md.comp.primary-navigation-tab.inactive.hover.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('md.comp.primary-navigation-tab.inactive.focus.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('md.comp.primary-navigation-tab.inactive.pressed.state-layer')};
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}
|
||||
@ -107,26 +107,26 @@ class _${blockName}SecondaryDefaultsM3 extends TabBarTheme {
|
||||
MaterialStateProperty<Color?> get overlayColor {
|
||||
return MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('md.comp.secondary-navigation-tab.pressed.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('md.comp.secondary-navigation-tab.hover.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('md.comp.secondary-navigation-tab.focus.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('md.comp.secondary-navigation-tab.pressed.state-layer')};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('md.comp.secondary-navigation-tab.pressed.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor('md.comp.secondary-navigation-tab.hover.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor('md.comp.secondary-navigation-tab.focus.state-layer')};
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor('md.comp.secondary-navigation-tab.pressed.state-layer')};
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
@ -96,12 +96,12 @@ class _${blockName}DefaultsM3 extends _TimePickerDefaults {
|
||||
textColor = ${componentColor("$dayPeriodComponent.selected.pressed.label-text")};
|
||||
} else {
|
||||
// not pressed
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
textColor = ${componentColor("$dayPeriodComponent.selected.focus.label-text")};
|
||||
} else {
|
||||
// not focused
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
textColor = ${componentColor("$dayPeriodComponent.selected.hover.label-text")};
|
||||
} else {
|
||||
// not hovered
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
textColor = ${componentColor("$dayPeriodComponent.selected.focus.label-text")};
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -111,12 +111,12 @@ class _${blockName}DefaultsM3 extends _TimePickerDefaults {
|
||||
textColor = ${componentColor("$dayPeriodComponent.unselected.pressed.label-text")};
|
||||
} else {
|
||||
// not pressed
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
textColor = ${componentColor("$dayPeriodComponent.unselected.focus.label-text")};
|
||||
} else {
|
||||
// not focused
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
textColor = ${componentColor("$dayPeriodComponent.unselected.hover.label-text")};
|
||||
} else {
|
||||
// not hovered
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
textColor = ${componentColor("$dayPeriodComponent.unselected.focus.label-text")};
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -205,24 +205,24 @@ class _${blockName}DefaultsM3 extends _TimePickerDefaults {
|
||||
Color overlayColor = ${componentColor('$hourMinuteComponent.selected.container')};
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
overlayColor = ${componentColor('$hourMinuteComponent.selected.pressed.state-layer')};
|
||||
} else if (states.contains(MaterialState.focused)) {
|
||||
const double focusOpacity = ${opacity('$hourMinuteComponent.focus.state-layer.opacity')};
|
||||
overlayColor = ${componentColor('$hourMinuteComponent.selected.focus.state-layer')}.withOpacity(focusOpacity);
|
||||
} else if (states.contains(MaterialState.hovered)) {
|
||||
const double hoverOpacity = ${opacity('$hourMinuteComponent.hover.state-layer.opacity')};
|
||||
overlayColor = ${componentColor('$hourMinuteComponent.selected.hover.state-layer')}.withOpacity(hoverOpacity);
|
||||
} else if (states.contains(MaterialState.focused)) {
|
||||
const double focusOpacity = ${opacity('$hourMinuteComponent.focus.state-layer.opacity')};
|
||||
overlayColor = ${componentColor('$hourMinuteComponent.selected.focus.state-layer')}.withOpacity(focusOpacity);
|
||||
}
|
||||
return Color.alphaBlend(overlayColor, ${componentColor('$hourMinuteComponent.selected.container')});
|
||||
} else {
|
||||
Color overlayColor = ${componentColor('$hourMinuteComponent.unselected.container')};
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
overlayColor = ${componentColor('$hourMinuteComponent.unselected.pressed.state-layer')};
|
||||
} else if (states.contains(MaterialState.focused)) {
|
||||
const double focusOpacity = ${opacity('$hourMinuteComponent.focus.state-layer.opacity')};
|
||||
overlayColor = ${componentColor('$hourMinuteComponent.unselected.focus.state-layer')}.withOpacity(focusOpacity);
|
||||
} else if (states.contains(MaterialState.hovered)) {
|
||||
const double hoverOpacity = ${opacity('$hourMinuteComponent.hover.state-layer.opacity')};
|
||||
overlayColor = ${componentColor('$hourMinuteComponent.unselected.hover.state-layer')}.withOpacity(hoverOpacity);
|
||||
} else if (states.contains(MaterialState.focused)) {
|
||||
const double focusOpacity = ${opacity('$hourMinuteComponent.focus.state-layer.opacity')};
|
||||
overlayColor = ${componentColor('$hourMinuteComponent.unselected.focus.state-layer')}.withOpacity(focusOpacity);
|
||||
}
|
||||
return Color.alphaBlend(overlayColor, ${componentColor('$hourMinuteComponent.unselected.container')});
|
||||
}
|
||||
@ -271,24 +271,24 @@ class _${blockName}DefaultsM3 extends _TimePickerDefaults {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor("$hourMinuteComponent.selected.pressed.label-text")};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor("$hourMinuteComponent.selected.focus.label-text")};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor("$hourMinuteComponent.selected.hover.label-text")};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor("$hourMinuteComponent.selected.focus.label-text")};
|
||||
}
|
||||
return ${componentColor("$hourMinuteComponent.selected.label-text")};
|
||||
} else {
|
||||
// unselected
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return ${componentColor("$hourMinuteComponent.unselected.pressed.label-text")};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor("$hourMinuteComponent.unselected.focus.label-text")};
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return ${componentColor("$hourMinuteComponent.unselected.hover.label-text")};
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return ${componentColor("$hourMinuteComponent.unselected.focus.label-text")};
|
||||
}
|
||||
return ${componentColor("$hourMinuteComponent.unselected.label-text")};
|
||||
}
|
||||
});
|
||||
|
@ -675,25 +675,25 @@ class _DatePickerDefaultsM2 extends DatePickerThemeData {
|
||||
MaterialStateProperty<Color?>? get dayOverlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimary.withOpacity(0.38);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onPrimary.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimary.withOpacity(0.38);
|
||||
}
|
||||
} else {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
});
|
||||
@ -746,25 +746,25 @@ class _DatePickerDefaultsM2 extends DatePickerThemeData {
|
||||
MaterialStateProperty<Color?>? get rangeSelectionOverlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimary.withOpacity(0.38);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onPrimary.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimary.withOpacity(0.38);
|
||||
}
|
||||
} else {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
});
|
||||
@ -846,25 +846,25 @@ class _DatePickerDefaultsM3 extends DatePickerThemeData {
|
||||
MaterialStateProperty<Color?>? get dayOverlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onPrimary.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
} else {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
});
|
||||
@ -913,25 +913,25 @@ class _DatePickerDefaultsM3 extends DatePickerThemeData {
|
||||
MaterialStateProperty<Color?>? get yearOverlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onPrimary.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
} else {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
});
|
||||
@ -948,14 +948,14 @@ class _DatePickerDefaultsM3 extends DatePickerThemeData {
|
||||
@override
|
||||
MaterialStateProperty<Color?>? get rangeSelectionOverlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimaryContainer.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return null;
|
||||
return _colors.onPrimaryContainer.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return null;
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return null;
|
||||
return _colors.onPrimaryContainer.withOpacity(0.12);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
@ -426,10 +426,13 @@ class _ElevatedButtonDefaultOverlay extends MaterialStateProperty<Color?> with D
|
||||
|
||||
@override
|
||||
Color? resolve(Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return overlay.withOpacity(0.24);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return overlay.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused) || states.contains(MaterialState.pressed)) {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return overlay.withOpacity(0.24);
|
||||
}
|
||||
return null;
|
||||
@ -447,15 +450,15 @@ class _ElevatedButtonDefaultElevation extends MaterialStateProperty<double> with
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return 0;
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return elevation + 6;
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return elevation + 2;
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return elevation + 2;
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return elevation + 6;
|
||||
}
|
||||
return elevation;
|
||||
}
|
||||
}
|
||||
@ -578,15 +581,15 @@ class _ElevatedButtonDefaultsM3 extends ButtonStyle {
|
||||
@override
|
||||
MaterialStateProperty<Color?>? get overlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.primary.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
@ -604,15 +607,15 @@ class _ElevatedButtonDefaultsM3 extends ButtonStyle {
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return 0.0;
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return 1.0;
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return 3.0;
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return 1.0;
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return 1.0;
|
||||
}
|
||||
return 1.0;
|
||||
});
|
||||
|
||||
|
@ -439,10 +439,13 @@ class _FilledButtonDefaultOverlay extends MaterialStateProperty<Color?> with Dia
|
||||
|
||||
@override
|
||||
Color? resolve(Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return overlay.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return overlay.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused) || states.contains(MaterialState.pressed)) {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return overlay.withOpacity(0.12);
|
||||
}
|
||||
return null;
|
||||
@ -588,15 +591,15 @@ class _FilledButtonDefaultsM3 extends ButtonStyle {
|
||||
@override
|
||||
MaterialStateProperty<Color?>? get overlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onPrimary.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
@ -614,15 +617,15 @@ class _FilledButtonDefaultsM3 extends ButtonStyle {
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return 0.0;
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return 0.0;
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return 1.0;
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return 0.0;
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return 0.0;
|
||||
}
|
||||
return 0.0;
|
||||
});
|
||||
|
||||
@ -712,15 +715,15 @@ class _FilledTonalButtonDefaultsM3 extends ButtonStyle {
|
||||
@override
|
||||
MaterialStateProperty<Color?>? get overlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.12);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
@ -738,15 +741,15 @@ class _FilledTonalButtonDefaultsM3 extends ButtonStyle {
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return 0.0;
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return 0.0;
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return 1.0;
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return 0.0;
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return 0.0;
|
||||
}
|
||||
return 0.0;
|
||||
});
|
||||
|
||||
|
@ -1117,15 +1117,18 @@ class _IconButtonDefaultsM3 extends ButtonStyle {
|
||||
MaterialStateProperty<Color?>? get overlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.primary.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.08);
|
||||
@ -1133,9 +1136,6 @@ class _IconButtonDefaultsM3 extends ButtonStyle {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
return Colors.transparent;
|
||||
});
|
||||
|
||||
@ -1254,26 +1254,29 @@ class _FilledIconButtonDefaultsM3 extends ButtonStyle {
|
||||
MaterialStateProperty<Color?>? get overlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onPrimary.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
}
|
||||
if (toggleable) { // toggleable but unselected case
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.primary.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onPrimary.withOpacity(0.08);
|
||||
@ -1281,9 +1284,6 @@ class _FilledIconButtonDefaultsM3 extends ButtonStyle {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimary.withOpacity(0.12);
|
||||
}
|
||||
return Colors.transparent;
|
||||
});
|
||||
|
||||
@ -1402,26 +1402,29 @@ class _FilledTonalIconButtonDefaultsM3 extends ButtonStyle {
|
||||
MaterialStateProperty<Color?>? get overlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.12);
|
||||
}
|
||||
}
|
||||
if (toggleable) { // toggleable but unselected case
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.08);
|
||||
@ -1429,9 +1432,6 @@ class _FilledTonalIconButtonDefaultsM3 extends ButtonStyle {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.12);
|
||||
}
|
||||
return Colors.transparent;
|
||||
});
|
||||
|
||||
@ -1546,15 +1546,18 @@ class _OutlinedIconButtonDefaultsM3 extends ButtonStyle {
|
||||
@override
|
||||
MaterialStateProperty<Color?>? get overlayColor => MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onInverseSurface.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onInverseSurface.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onInverseSurface.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onInverseSurface.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onInverseSurface.withOpacity(0.08);
|
||||
}
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurface.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.08);
|
||||
@ -1562,9 +1565,6 @@ class _OutlinedIconButtonDefaultsM3 extends ButtonStyle {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSurfaceVariant.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurface.withOpacity(0.12);
|
||||
}
|
||||
return Colors.transparent;
|
||||
});
|
||||
|
||||
|
@ -4560,46 +4560,46 @@ class _InputDecoratorDefaultsM3 extends InputDecorationTheme {
|
||||
|
||||
@override
|
||||
BorderSide? get activeIndicatorBorder => MaterialStateBorderSide.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return BorderSide(color: _colors.error, width: 2.0);
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return BorderSide(color: _colors.onSurface.withOpacity(0.38));
|
||||
}
|
||||
if (states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return BorderSide(color: _colors.onErrorContainer);
|
||||
}
|
||||
return BorderSide(color: _colors.error);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return BorderSide(color: _colors.primary, width: 2.0);
|
||||
return BorderSide(color: _colors.error, width: 2.0);
|
||||
}
|
||||
return BorderSide(color: _colors.error);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return BorderSide(color: _colors.onSurface);
|
||||
}
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return BorderSide(color: _colors.onSurface.withOpacity(0.38));
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return BorderSide(color: _colors.primary, width: 2.0);
|
||||
}
|
||||
return BorderSide(color: _colors.onSurfaceVariant);
|
||||
});
|
||||
|
||||
@override
|
||||
BorderSide? get outlineBorder => MaterialStateBorderSide.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return BorderSide(color: _colors.error, width: 2.0);
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return BorderSide(color: _colors.onSurface.withOpacity(0.12));
|
||||
}
|
||||
if (states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return BorderSide(color: _colors.onErrorContainer);
|
||||
}
|
||||
return BorderSide(color: _colors.error);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return BorderSide(color: _colors.primary, width: 2.0);
|
||||
return BorderSide(color: _colors.error, width: 2.0);
|
||||
}
|
||||
return BorderSide(color: _colors.error);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return BorderSide(color: _colors.onSurface);
|
||||
}
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return BorderSide(color: _colors.onSurface.withOpacity(0.12));
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return BorderSide(color: _colors.primary, width: 2.0);
|
||||
}
|
||||
return BorderSide(color: _colors.outline);
|
||||
});
|
||||
@ -4609,46 +4609,40 @@ class _InputDecoratorDefaultsM3 extends InputDecorationTheme {
|
||||
|
||||
@override
|
||||
Color? get prefixIconColor => MaterialStateColor.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return _colors.onSurface.withOpacity(0.38);
|
||||
}
|
||||
return _colors.onSurfaceVariant;
|
||||
});
|
||||
|
||||
@override
|
||||
Color? get suffixIconColor => MaterialStateColor.resolveWith((Set<MaterialState> states) {
|
||||
if(states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onErrorContainer;
|
||||
}
|
||||
return _colors.error;
|
||||
}
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return _colors.onSurface.withOpacity(0.38);
|
||||
}
|
||||
if(states.contains(MaterialState.error)) {
|
||||
return _colors.error;
|
||||
}
|
||||
return _colors.onSurfaceVariant;
|
||||
});
|
||||
|
||||
@override
|
||||
TextStyle? get labelStyle => MaterialStateTextStyle.resolveWith((Set<MaterialState> states) {
|
||||
final TextStyle textStyle = _textTheme.bodyLarge ?? const TextStyle();
|
||||
if(states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: _colors.error);
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return textStyle.copyWith(color: _colors.onSurface.withOpacity(0.38));
|
||||
}
|
||||
if(states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return textStyle.copyWith(color: _colors.onErrorContainer);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: _colors.error);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: _colors.primary);
|
||||
return textStyle.copyWith(color: _colors.error);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return textStyle.copyWith(color: _colors.onSurfaceVariant);
|
||||
}
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return textStyle.copyWith(color: _colors.onSurface.withOpacity(0.38));
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: _colors.primary);
|
||||
}
|
||||
return textStyle.copyWith(color: _colors.onSurfaceVariant);
|
||||
});
|
||||
@ -4656,23 +4650,23 @@ class _InputDecoratorDefaultsM3 extends InputDecorationTheme {
|
||||
@override
|
||||
TextStyle? get floatingLabelStyle => MaterialStateTextStyle.resolveWith((Set<MaterialState> states) {
|
||||
final TextStyle textStyle = _textTheme.bodyLarge ?? const TextStyle();
|
||||
if(states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: _colors.error);
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return textStyle.copyWith(color: _colors.onSurface.withOpacity(0.38));
|
||||
}
|
||||
if(states.contains(MaterialState.error)) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return textStyle.copyWith(color: _colors.onErrorContainer);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: _colors.error);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: _colors.primary);
|
||||
return textStyle.copyWith(color: _colors.error);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return textStyle.copyWith(color: _colors.onSurfaceVariant);
|
||||
}
|
||||
if (states.contains(MaterialState.disabled)) {
|
||||
return textStyle.copyWith(color: _colors.onSurface.withOpacity(0.38));
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return textStyle.copyWith(color: _colors.primary);
|
||||
}
|
||||
return textStyle.copyWith(color: _colors.onSurfaceVariant);
|
||||
});
|
||||
|
@ -382,10 +382,13 @@ class _OutlinedButtonDefaultOverlay extends MaterialStateProperty<Color?> with D
|
||||
|
||||
@override
|
||||
Color? resolve(Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return foreground.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return foreground.withOpacity(0.04);
|
||||
}
|
||||
if (states.contains(MaterialState.focused) || states.contains(MaterialState.pressed)) {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return foreground.withOpacity(0.12);
|
||||
}
|
||||
return null;
|
||||
@ -504,15 +507,15 @@ class _OutlinedButtonDefaultsM3 extends ButtonStyle {
|
||||
@override
|
||||
MaterialStateProperty<Color?>? get overlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.primary.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
|
@ -591,12 +591,12 @@ class _RadioDefaultsM2 extends RadioThemeData {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return fillColor.resolve(states).withAlpha(kRadialReactionAlpha);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _theme.focusColor;
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _theme.hoverColor;
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _theme.focusColor;
|
||||
}
|
||||
return Colors.transparent;
|
||||
});
|
||||
}
|
||||
|
@ -763,25 +763,25 @@ class _SegmentedButtonDefaultsM3 extends SegmentedButtonThemeData {
|
||||
}),
|
||||
overlayColor: MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSecondaryContainer.withOpacity(0.12);
|
||||
}
|
||||
} else {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurface.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSurface.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSurface.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurface.withOpacity(0.12);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}),
|
||||
|
@ -2005,15 +2005,15 @@ class _SliderDefaultsM3 extends SliderThemeData {
|
||||
|
||||
@override
|
||||
Color? get overlayColor => MaterialStateColor.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.dragged)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.primary.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.dragged)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
|
||||
return Colors.transparent;
|
||||
});
|
||||
|
@ -1736,12 +1736,12 @@ class _SwitchDefaultsM2 extends SwitchThemeData {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return thumbColor.resolve(states).withAlpha(kRadialReactionAlpha);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _theme.focusColor;
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _theme.hoverColor;
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _theme.focusColor;
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
@ -2194,26 +2194,26 @@ class _TabsPrimaryDefaultsM3 extends TabBarTheme {
|
||||
MaterialStateProperty<Color?> get overlayColor {
|
||||
return MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.primary.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSurface.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSurface.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}
|
||||
@ -2258,26 +2258,26 @@ class _TabsSecondaryDefaultsM3 extends TabBarTheme {
|
||||
MaterialStateProperty<Color?> get overlayColor {
|
||||
return MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.selected)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurface.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSurface.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSurface.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurface.withOpacity(0.12);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurface.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSurface.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSurface.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurface.withOpacity(0.12);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
@ -417,10 +417,13 @@ class _TextButtonDefaultOverlay extends MaterialStateProperty<Color?> {
|
||||
|
||||
@override
|
||||
Color? resolve(Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return primary.withOpacity(0.04);
|
||||
}
|
||||
if (states.contains(MaterialState.focused) || states.contains(MaterialState.pressed)) {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return primary.withOpacity(0.12);
|
||||
}
|
||||
return null;
|
||||
@ -564,15 +567,15 @@ class _TextButtonDefaultsM3 extends ButtonStyle {
|
||||
@override
|
||||
MaterialStateProperty<Color?>? get overlayColor =>
|
||||
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.primary.withOpacity(0.08);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.primary.withOpacity(0.12);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
|
@ -3402,11 +3402,11 @@ class _TimePickerDefaultsM3 extends _TimePickerDefaults {
|
||||
textColor = _colors.onTertiaryContainer;
|
||||
} else {
|
||||
// not pressed
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
textColor = _colors.onTertiaryContainer;
|
||||
} else {
|
||||
// not focused
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
// not hovered
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
textColor = _colors.onTertiaryContainer;
|
||||
}
|
||||
}
|
||||
@ -3417,11 +3417,11 @@ class _TimePickerDefaultsM3 extends _TimePickerDefaults {
|
||||
textColor = _colors.onSurfaceVariant;
|
||||
} else {
|
||||
// not pressed
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
textColor = _colors.onSurfaceVariant;
|
||||
} else {
|
||||
// not focused
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
// not hovered
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
textColor = _colors.onSurfaceVariant;
|
||||
}
|
||||
}
|
||||
@ -3511,24 +3511,24 @@ class _TimePickerDefaultsM3 extends _TimePickerDefaults {
|
||||
Color overlayColor = _colors.primaryContainer;
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
overlayColor = _colors.onPrimaryContainer;
|
||||
} else if (states.contains(MaterialState.focused)) {
|
||||
const double focusOpacity = 0.12;
|
||||
overlayColor = _colors.onPrimaryContainer.withOpacity(focusOpacity);
|
||||
} else if (states.contains(MaterialState.hovered)) {
|
||||
const double hoverOpacity = 0.08;
|
||||
overlayColor = _colors.onPrimaryContainer.withOpacity(hoverOpacity);
|
||||
} else if (states.contains(MaterialState.focused)) {
|
||||
const double focusOpacity = 0.12;
|
||||
overlayColor = _colors.onPrimaryContainer.withOpacity(focusOpacity);
|
||||
}
|
||||
return Color.alphaBlend(overlayColor, _colors.primaryContainer);
|
||||
} else {
|
||||
Color overlayColor = _colors.surfaceVariant;
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
overlayColor = _colors.onSurface;
|
||||
} else if (states.contains(MaterialState.focused)) {
|
||||
const double focusOpacity = 0.12;
|
||||
overlayColor = _colors.onSurface.withOpacity(focusOpacity);
|
||||
} else if (states.contains(MaterialState.hovered)) {
|
||||
const double hoverOpacity = 0.08;
|
||||
overlayColor = _colors.onSurface.withOpacity(hoverOpacity);
|
||||
} else if (states.contains(MaterialState.focused)) {
|
||||
const double focusOpacity = 0.12;
|
||||
overlayColor = _colors.onSurface.withOpacity(focusOpacity);
|
||||
}
|
||||
return Color.alphaBlend(overlayColor, _colors.surfaceVariant);
|
||||
}
|
||||
@ -3577,10 +3577,10 @@ class _TimePickerDefaultsM3 extends _TimePickerDefaults {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onPrimaryContainer;
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onPrimaryContainer;
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onPrimaryContainer;
|
||||
}
|
||||
return _colors.onPrimaryContainer;
|
||||
@ -3589,10 +3589,10 @@ class _TimePickerDefaultsM3 extends _TimePickerDefaults {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return _colors.onSurface;
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return _colors.onSurface;
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return _colors.onSurface;
|
||||
}
|
||||
return _colors.onSurface;
|
||||
|
@ -892,20 +892,24 @@ class _ToggleButtonDefaultOverlay extends MaterialStateProperty<Color?> {
|
||||
@override
|
||||
Color? resolve(Set<MaterialState> states) {
|
||||
if (selected) {
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return hoverColor ?? colorScheme?.primary.withOpacity(0.04);
|
||||
} else if (states.contains(MaterialState.focused)) {
|
||||
return focusColor ?? colorScheme?.primary.withOpacity(0.12);
|
||||
} else if (states.contains(MaterialState.pressed)) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return splashColor ?? colorScheme?.primary.withOpacity(0.16);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return hoverColor ?? colorScheme?.primary.withOpacity(0.04);
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return focusColor ?? colorScheme?.primary.withOpacity(0.12);
|
||||
}
|
||||
} else if (unselected) {
|
||||
if (states.contains(MaterialState.pressed)) {
|
||||
return splashColor ?? highlightColor ?? colorScheme?.onSurface.withOpacity(0.16);
|
||||
}
|
||||
if (states.contains(MaterialState.hovered)) {
|
||||
return hoverColor ?? colorScheme?.onSurface.withOpacity(0.04);
|
||||
} else if (states.contains(MaterialState.focused)) {
|
||||
}
|
||||
if (states.contains(MaterialState.focused)) {
|
||||
return focusColor ?? colorScheme?.onSurface.withOpacity(0.12);
|
||||
} else if (states.contains(MaterialState.pressed)) {
|
||||
return splashColor ?? highlightColor ?? colorScheme?.onSurface.withOpacity(0.16);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
@ -65,10 +65,11 @@ void main() {
|
||||
Future<void> Function(Future<DateTime?> date) callback, {
|
||||
TextDirection textDirection = TextDirection.ltr,
|
||||
bool useMaterial3 = false,
|
||||
ThemeData? theme,
|
||||
}) async {
|
||||
late BuildContext buttonContext;
|
||||
await tester.pumpWidget(MaterialApp(
|
||||
theme: ThemeData(useMaterial3: useMaterial3),
|
||||
theme: theme ?? ThemeData(useMaterial3: useMaterial3),
|
||||
home: Material(
|
||||
child: Builder(
|
||||
builder: (BuildContext context) {
|
||||
@ -786,6 +787,38 @@ void main() {
|
||||
});
|
||||
});
|
||||
|
||||
testWidgets('Date picker dayOverlayColor resolves pressed state', (WidgetTester tester) async {
|
||||
today = DateTime(2023, 5, 4);
|
||||
final ThemeData theme = ThemeData();
|
||||
final bool material3 = theme.useMaterial3;
|
||||
await prepareDatePicker(tester, (Future<DateTime?> date) async {
|
||||
await tester.pump();
|
||||
|
||||
// Hovered.
|
||||
final Offset center = tester.getCenter(find.text('30'));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(
|
||||
Material.of(tester.element(find.text('30'))),
|
||||
paints..circle(color: material3 ? theme.colorScheme.onSurfaceVariant.withOpacity(0.08) : theme.colorScheme.onSurfaceVariant.withOpacity(0.08)),
|
||||
);
|
||||
|
||||
// Highlighted (pressed).
|
||||
await gesture.down(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(
|
||||
Material.of(tester.element(find.text('30'))),
|
||||
paints..circle()..circle(color: material3 ? theme.colorScheme.onSurfaceVariant.withOpacity(0.12) : theme.colorScheme.onSurfaceVariant.withOpacity(0.12))
|
||||
);
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
}, theme: theme);
|
||||
});
|
||||
|
||||
testWidgets('Selecting date does not switch picker to year selection', (WidgetTester tester) async {
|
||||
initialDate = DateTime(2020, DateTime.may, 10);
|
||||
initialCalendarMode = DatePickerMode.year;
|
||||
|
@ -159,6 +159,10 @@ void main() {
|
||||
expect(m3.dayOverlayColor?.resolve(<MaterialState>{MaterialState.hovered}), colorScheme.onSurfaceVariant.withOpacity(0.08));
|
||||
expect(m3.dayOverlayColor?.resolve(<MaterialState>{MaterialState.focused}), colorScheme.onSurfaceVariant.withOpacity(0.12));
|
||||
expect(m3.dayOverlayColor?.resolve(<MaterialState>{MaterialState.pressed}), colorScheme.onSurfaceVariant.withOpacity(0.12));
|
||||
expect(m3.dayOverlayColor?.resolve(<MaterialState>{MaterialState.selected, MaterialState.hovered, MaterialState.focused}), colorScheme.onPrimary.withOpacity(0.08));
|
||||
expect(m3.dayOverlayColor?.resolve(<MaterialState>{MaterialState.selected, MaterialState.hovered, MaterialState.pressed}), colorScheme.onPrimary.withOpacity(0.12));
|
||||
expect(m3.dayOverlayColor?.resolve(<MaterialState>{MaterialState.hovered, MaterialState.focused}), colorScheme.onSurfaceVariant.withOpacity(0.08));
|
||||
expect(m3.dayOverlayColor?.resolve(<MaterialState>{MaterialState.hovered, MaterialState.pressed}), colorScheme.onSurfaceVariant.withOpacity(0.12));
|
||||
expect(m3.todayForegroundColor?.resolve(<MaterialState>{}), colorScheme.primary);
|
||||
expect(m3.todayForegroundColor?.resolve(<MaterialState>{MaterialState.disabled}), colorScheme.primary.withOpacity(0.38));
|
||||
expect(m3.todayBorder, BorderSide(color: colorScheme.primary));
|
||||
@ -224,6 +228,8 @@ void main() {
|
||||
expect(m2.dayOverlayColor?.resolve(<MaterialState>{MaterialState.selected, MaterialState.hovered}), colorScheme.onPrimary.withOpacity(0.08));
|
||||
expect(m2.dayOverlayColor?.resolve(<MaterialState>{MaterialState.selected, MaterialState.focused}), colorScheme.onPrimary.withOpacity(0.12));
|
||||
expect(m2.dayOverlayColor?.resolve(<MaterialState>{MaterialState.selected, MaterialState.pressed}), colorScheme.onPrimary.withOpacity(0.38));
|
||||
expect(m2.dayOverlayColor?.resolve(<MaterialState>{MaterialState.selected, MaterialState.hovered, MaterialState.focused}), colorScheme.onPrimary.withOpacity(0.08));
|
||||
expect(m2.dayOverlayColor?.resolve(<MaterialState>{MaterialState.selected, MaterialState.hovered, MaterialState.pressed}), colorScheme.onPrimary.withOpacity(0.38));
|
||||
expect(m2.dayOverlayColor?.resolve(<MaterialState>{MaterialState.hovered}), colorScheme.onSurfaceVariant.withOpacity(0.08));
|
||||
expect(m2.dayOverlayColor?.resolve(<MaterialState>{MaterialState.focused}), colorScheme.onSurfaceVariant.withOpacity(0.12));
|
||||
expect(m2.dayOverlayColor?.resolve(<MaterialState>{MaterialState.pressed}), colorScheme.onSurfaceVariant.withOpacity(0.12));
|
||||
|
@ -200,6 +200,66 @@ void main() {
|
||||
skip: isBrowser, // https://github.com/flutter/flutter/issues/44115
|
||||
);
|
||||
|
||||
testWidgets('ElevatedButton default overlayColor and elevation resolve pressed state', (WidgetTester tester) async {
|
||||
final FocusNode focusNode = FocusNode();
|
||||
final ThemeData theme = ThemeData(useMaterial3: true);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
theme: theme,
|
||||
home: Scaffold(
|
||||
body: Center(
|
||||
child: ElevatedButton(
|
||||
onPressed: () {},
|
||||
focusNode: focusNode,
|
||||
child: const Text('ElevatedButton'),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
RenderObject overlayColor() {
|
||||
return tester.allRenderObjects.firstWhere((RenderObject object) => object.runtimeType.toString() == '_RenderInkFeatures');
|
||||
}
|
||||
|
||||
double elevation() {
|
||||
return tester.widget<PhysicalShape>(
|
||||
find.descendant(
|
||||
of: find.byType(ElevatedButton),
|
||||
matching: find.byType(PhysicalShape),
|
||||
),
|
||||
).elevation;
|
||||
}
|
||||
|
||||
// Hovered.
|
||||
final Offset center = tester.getCenter(find.byType(ElevatedButton));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(elevation(), 3.0);
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.primary.withOpacity(0.08)));
|
||||
|
||||
// Highlighted (pressed).
|
||||
await gesture.down(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(elevation(), 1.0);
|
||||
expect(overlayColor(), paints..rect()..rect(color: theme.colorScheme.primary.withOpacity(0.12)));
|
||||
// Remove pressed and hovered states
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
await gesture.moveTo(const Offset(0, 50));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
expect(elevation(), 1.0);
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.primary.withOpacity(0.12)));
|
||||
});
|
||||
|
||||
testWidgets('ElevatedButton uses stateful color for text color in different states', (WidgetTester tester) async {
|
||||
final FocusNode focusNode = FocusNode();
|
||||
|
@ -277,6 +277,135 @@ void main() {
|
||||
skip: isBrowser, // https://github.com/flutter/flutter/issues/44115
|
||||
);
|
||||
|
||||
testWidgets('FilledButton default overlayColor and elevation resolve pressed state', (WidgetTester tester) async {
|
||||
final FocusNode focusNode = FocusNode();
|
||||
final ThemeData theme = ThemeData(useMaterial3: true);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
theme: theme,
|
||||
home: Scaffold(
|
||||
body: Center(
|
||||
child: Builder(
|
||||
builder: (BuildContext context) {
|
||||
return FilledButton(
|
||||
onPressed: () {},
|
||||
focusNode: focusNode,
|
||||
child: const Text('FilledButton'),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
RenderObject overlayColor() {
|
||||
return tester.allRenderObjects.firstWhere((RenderObject object) => object.runtimeType.toString() == '_RenderInkFeatures');
|
||||
}
|
||||
|
||||
double elevation() {
|
||||
return tester.widget<PhysicalShape>(
|
||||
find.descendant(
|
||||
of: find.byType(FilledButton),
|
||||
matching: find.byType(PhysicalShape),
|
||||
),
|
||||
).elevation;
|
||||
}
|
||||
|
||||
// Hovered.
|
||||
final Offset center = tester.getCenter(find.byType(FilledButton));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(elevation(), 1.0);
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onPrimary.withOpacity(0.08)));
|
||||
|
||||
// Highlighted (pressed).
|
||||
await gesture.down(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(elevation(), 0.0);
|
||||
expect(overlayColor(), paints..rect()..rect(color: theme.colorScheme.onPrimary.withOpacity(0.12)));
|
||||
// Remove pressed and hovered states
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
await gesture.moveTo(const Offset(0, 50));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
expect(elevation(), 0.0);
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onPrimary.withOpacity(0.12)));
|
||||
});
|
||||
|
||||
testWidgets('FilledButton.tonal default overlayColor and elevation resolve pressed state', (WidgetTester tester) async {
|
||||
final FocusNode focusNode = FocusNode();
|
||||
final ThemeData theme = ThemeData(useMaterial3: true);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
theme: theme,
|
||||
home: Scaffold(
|
||||
body: Center(
|
||||
child: Builder(
|
||||
builder: (BuildContext context) {
|
||||
return FilledButton.tonal(
|
||||
onPressed: () {},
|
||||
focusNode: focusNode,
|
||||
child: const Text('FilledButton'),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
RenderObject overlayColor() {
|
||||
return tester.allRenderObjects.firstWhere((RenderObject object) => object.runtimeType.toString() == '_RenderInkFeatures');
|
||||
}
|
||||
|
||||
double elevation() {
|
||||
return tester.widget<PhysicalShape>(
|
||||
find.descendant(
|
||||
of: find.byType(FilledButton),
|
||||
matching: find.byType(PhysicalShape),
|
||||
),
|
||||
).elevation;
|
||||
}
|
||||
|
||||
// Hovered.
|
||||
final Offset center = tester.getCenter(find.byType(FilledButton));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(elevation(), 1.0);
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onSecondaryContainer.withOpacity(0.08)));
|
||||
|
||||
// Highlighted (pressed).
|
||||
await gesture.down(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(elevation(), 0.0);
|
||||
expect(overlayColor(), paints..rect()..rect(color: theme.colorScheme.onSecondaryContainer.withOpacity(0.12)));
|
||||
// Remove pressed and hovered states
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
await gesture.moveTo(const Offset(0, 50));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
expect(elevation(), 0.0);
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onSecondaryContainer.withOpacity(0.12)));
|
||||
});
|
||||
|
||||
testWidgets('FilledButton uses stateful color for text color in different states', (WidgetTester tester) async {
|
||||
final FocusNode focusNode = FocusNode();
|
||||
|
@ -1133,6 +1133,59 @@ void main() {
|
||||
expect(material.type, MaterialType.button);
|
||||
});
|
||||
|
||||
testWidgets('IconButton default overlayColor resolves pressed state', (WidgetTester tester) async {
|
||||
final FocusNode focusNode = FocusNode();
|
||||
final ThemeData theme = ThemeData(useMaterial3: true);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
theme: theme,
|
||||
home: Scaffold(
|
||||
body: Center(
|
||||
child: Builder(
|
||||
builder: (BuildContext context) {
|
||||
return IconButton(
|
||||
onPressed: () {},
|
||||
focusNode: focusNode,
|
||||
icon: const Icon(Icons.add),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
RenderObject overlayColor() {
|
||||
return tester.allRenderObjects.firstWhere((RenderObject object) => object.runtimeType.toString() == '_RenderInkFeatures');
|
||||
}
|
||||
|
||||
// Hovered.
|
||||
final Offset center = tester.getCenter(find.byType(IconButton));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onSurfaceVariant.withOpacity(0.08)));
|
||||
|
||||
// Highlighted (pressed).
|
||||
await gesture.down(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect()..rect(color: theme.colorScheme.onSurfaceVariant.withOpacity(0.12)));
|
||||
// Remove pressed and hovered states
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
await gesture.moveTo(const Offset(0, 50));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onSurfaceVariant.withOpacity(0.12)));
|
||||
});
|
||||
|
||||
testWidgets('IconButton.fill defaults - M3', (WidgetTester tester) async {
|
||||
final ThemeData themeM3 = ThemeData.from(colorScheme: colorScheme, useMaterial3: true);
|
||||
|
||||
@ -1219,6 +1272,59 @@ void main() {
|
||||
expect(iconColor(), colorScheme.onSurface.withOpacity(0.38));
|
||||
});
|
||||
|
||||
testWidgets('IconButton.fill default overlayColor resolves pressed state', (WidgetTester tester) async {
|
||||
final FocusNode focusNode = FocusNode();
|
||||
final ThemeData theme = ThemeData(useMaterial3: true);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
theme: theme,
|
||||
home: Scaffold(
|
||||
body: Center(
|
||||
child: Builder(
|
||||
builder: (BuildContext context) {
|
||||
return IconButton.filled(
|
||||
onPressed: () {},
|
||||
focusNode: focusNode,
|
||||
icon: const Icon(Icons.add),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
RenderObject overlayColor() {
|
||||
return tester.allRenderObjects.firstWhere((RenderObject object) => object.runtimeType.toString() == '_RenderInkFeatures');
|
||||
}
|
||||
|
||||
// Hovered.
|
||||
final Offset center = tester.getCenter(find.byType(IconButton));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onPrimary.withOpacity(0.08)));
|
||||
|
||||
// Highlighted (pressed).
|
||||
await gesture.down(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect()..rect(color: theme.colorScheme.onPrimary.withOpacity(0.12)));
|
||||
// Remove pressed and hovered states
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
await gesture.moveTo(const Offset(0, 50));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onPrimary.withOpacity(0.12)));
|
||||
});
|
||||
|
||||
testWidgets('Toggleable IconButton.fill defaults - M3', (WidgetTester tester) async {
|
||||
final ThemeData themeM3 = ThemeData.from(colorScheme: colorScheme, useMaterial3: true);
|
||||
|
||||
@ -1420,6 +1526,59 @@ void main() {
|
||||
expect(iconColor(), colorScheme.onSurface.withOpacity(0.38));
|
||||
});
|
||||
|
||||
testWidgets('IconButton.filledTonal default overlayColor resolves pressed state', (WidgetTester tester) async {
|
||||
final FocusNode focusNode = FocusNode();
|
||||
final ThemeData theme = ThemeData(useMaterial3: true);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
theme: theme,
|
||||
home: Scaffold(
|
||||
body: Center(
|
||||
child: Builder(
|
||||
builder: (BuildContext context) {
|
||||
return IconButton.filledTonal(
|
||||
onPressed: () {},
|
||||
focusNode: focusNode,
|
||||
icon: const Icon(Icons.add),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
RenderObject overlayColor() {
|
||||
return tester.allRenderObjects.firstWhere((RenderObject object) => object.runtimeType.toString() == '_RenderInkFeatures');
|
||||
}
|
||||
|
||||
// Hovered.
|
||||
final Offset center = tester.getCenter(find.byType(IconButton));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onSecondaryContainer.withOpacity(0.08)));
|
||||
|
||||
// Highlighted (pressed).
|
||||
await gesture.down(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect()..rect(color: theme.colorScheme.onSecondaryContainer.withOpacity(0.12)));
|
||||
// Remove pressed and hovered states
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
await gesture.moveTo(const Offset(0, 50));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onSecondaryContainer.withOpacity(0.12)));
|
||||
});
|
||||
|
||||
testWidgets('Toggleable IconButton.filledTonal defaults - M3', (WidgetTester tester) async {
|
||||
final ThemeData themeM3 = ThemeData.from(colorScheme: colorScheme, useMaterial3: true);
|
||||
|
||||
@ -1621,6 +1780,59 @@ void main() {
|
||||
expect(iconColor(), colorScheme.onSurface.withOpacity(0.38));
|
||||
});
|
||||
|
||||
testWidgets('IconButton.outlined default overlayColor resolves pressed state', (WidgetTester tester) async {
|
||||
final FocusNode focusNode = FocusNode();
|
||||
final ThemeData theme = ThemeData(useMaterial3: true);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
theme: theme,
|
||||
home: Scaffold(
|
||||
body: Center(
|
||||
child: Builder(
|
||||
builder: (BuildContext context) {
|
||||
return IconButton.outlined(
|
||||
onPressed: () {},
|
||||
focusNode: focusNode,
|
||||
icon: const Icon(Icons.add),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
RenderObject overlayColor() {
|
||||
return tester.allRenderObjects.firstWhere((RenderObject object) => object.runtimeType.toString() == '_RenderInkFeatures');
|
||||
}
|
||||
|
||||
// Hovered.
|
||||
final Offset center = tester.getCenter(find.byType(IconButton));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onSurfaceVariant.withOpacity(0.08)));
|
||||
|
||||
// Highlighted (pressed).
|
||||
await gesture.down(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect()..rect(color: theme.colorScheme.onSurface.withOpacity(0.12)));
|
||||
// Remove pressed and hovered states
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
await gesture.moveTo(const Offset(0, 50));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onSurfaceVariant.withOpacity(0.08)));
|
||||
});
|
||||
|
||||
testWidgets('Toggleable IconButton.outlined defaults - M3', (WidgetTester tester) async {
|
||||
final ThemeData themeM3 = ThemeData.from(colorScheme: colorScheme, useMaterial3: true);
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
library;
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@ -1766,6 +1767,40 @@ void main() {
|
||||
expect(getIconStyle(tester, Icons.close)?.color, theme.colorScheme.error);
|
||||
});
|
||||
|
||||
testWidgets('InputDecoration default floatingLabelStyle resolves hovered/focused states', (WidgetTester tester) async {
|
||||
final FocusNode focusNode = FocusNode();
|
||||
final ThemeData theme = ThemeData(useMaterial3: true);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
theme: theme,
|
||||
home: Material(
|
||||
child: TextField(
|
||||
focusNode: focusNode,
|
||||
decoration: const InputDecoration(
|
||||
labelText: 'label',
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
expect(getLabelStyle(tester).color, theme.colorScheme.primary);
|
||||
|
||||
// Hovered.
|
||||
final Offset center = tester.getCenter(find.byType(TextField));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(getLabelStyle(tester).color, theme.colorScheme.onSurfaceVariant);
|
||||
});
|
||||
|
||||
testWidgets('InputDecorator prefix/suffix widgets', (WidgetTester tester) async {
|
||||
const Key pKey = Key('p');
|
||||
const Key sKey = Key('s');
|
||||
|
@ -176,6 +176,59 @@ void main() {
|
||||
expect(material.type, MaterialType.button);
|
||||
});
|
||||
|
||||
testWidgets('OutlinedButton default overlayColor resolves pressed state', (WidgetTester tester) async {
|
||||
final FocusNode focusNode = FocusNode();
|
||||
final ThemeData theme = ThemeData(useMaterial3: true);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
theme: theme,
|
||||
home: Scaffold(
|
||||
body: Center(
|
||||
child: Builder(
|
||||
builder: (BuildContext context) {
|
||||
return OutlinedButton(
|
||||
onPressed: () {},
|
||||
focusNode: focusNode,
|
||||
child: const Text('OutlinedButton'),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
RenderObject overlayColor() {
|
||||
return tester.allRenderObjects.firstWhere((RenderObject object) => object.runtimeType.toString() == '_RenderInkFeatures');
|
||||
}
|
||||
|
||||
// Hovered.
|
||||
final Offset center = tester.getCenter(find.byType(OutlinedButton));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.primary.withOpacity(0.08)));
|
||||
|
||||
// Highlighted (pressed).
|
||||
await gesture.down(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect()..rect(color: theme.colorScheme.primary.withOpacity(0.12)));
|
||||
// Remove pressed and hovered states
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
await gesture.moveTo(const Offset(0, 50));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.primary.withOpacity(0.12)));
|
||||
});
|
||||
|
||||
testWidgets('Does OutlinedButton work with hover', (WidgetTester tester) async {
|
||||
const Color hoverColor = Color(0xff001122);
|
||||
|
||||
@ -285,11 +338,6 @@ void main() {
|
||||
// Default, not disabled.
|
||||
await expectLater(tester, meetsGuideline(textContrastGuideline));
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
await expectLater(tester, meetsGuideline(textContrastGuideline));
|
||||
|
||||
// Hovered.
|
||||
final Offset center = tester.getCenter(find.byType(OutlinedButton));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
@ -305,7 +353,13 @@ void main() {
|
||||
await tester.pump(); // Start the splash and highlight animations.
|
||||
await tester.pump(const Duration(milliseconds: 800)); // Wait for splash and highlight to be well under way.
|
||||
await expectLater(tester, meetsGuideline(textContrastGuideline));
|
||||
await gesture.removePointer();
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
await expectLater(tester, meetsGuideline(textContrastGuideline));
|
||||
},
|
||||
skip: isBrowser, // https://github.com/flutter/flutter/issues/44115
|
||||
);
|
||||
|
@ -1029,7 +1029,7 @@ void main() {
|
||||
color: const Color(0xffffffff),
|
||||
rect: const Rect.fromLTRB(350.0, 250.0, 450.0, 350.0),
|
||||
)
|
||||
..circle(color: theme.useMaterial3 ? theme.colorScheme.primary.withOpacity(0.08) : Colors.black12)
|
||||
..circle(color: theme.useMaterial3 ? theme.colorScheme.primary.withOpacity(0.08) : theme.hoverColor)
|
||||
..circle(color: hoveredFillColor),
|
||||
);
|
||||
});
|
||||
@ -1438,4 +1438,69 @@ void main() {
|
||||
expect(find.byType(CupertinoRadio<int>), findsNothing);
|
||||
}
|
||||
});
|
||||
|
||||
testWidgets('Radio default overlayColor and fillColor resolves pressed state', (WidgetTester tester) async {
|
||||
final FocusNode focusNode = FocusNode(debugLabel: 'Radio');
|
||||
tester.binding.focusManager.highlightStrategy = FocusHighlightStrategy.alwaysTraditional;
|
||||
final bool material3 = theme.useMaterial3;
|
||||
|
||||
Finder findRadio() {
|
||||
return find.byWidgetPredicate((Widget widget) => widget is Radio<bool>);
|
||||
}
|
||||
|
||||
MaterialInkController? getRadioMaterial(WidgetTester tester) {
|
||||
return Material.of(tester.element(findRadio()));
|
||||
}
|
||||
await tester.pumpWidget(MaterialApp(
|
||||
theme: theme,
|
||||
home: Scaffold(
|
||||
body: Radio<bool>(
|
||||
focusNode: focusNode,
|
||||
value: true,
|
||||
groupValue: true,
|
||||
onChanged: (_) { },
|
||||
),
|
||||
),
|
||||
));
|
||||
|
||||
// Hover
|
||||
final Offset center = tester.getCenter(find.byType(Radio<bool>));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(getRadioMaterial(tester),
|
||||
paints
|
||||
..circle(color: material3 ? theme.colorScheme.primary.withOpacity(0.08) : theme.hoverColor)
|
||||
..circle(color: material3 ? theme.colorScheme.primary : theme.colorScheme.secondary)
|
||||
);
|
||||
|
||||
// Highlighted (pressed).
|
||||
await gesture.down(center);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(getRadioMaterial(tester),
|
||||
paints
|
||||
..circle(color: material3 ? theme.colorScheme.onSurface.withOpacity(0.12) : theme.colorScheme.secondary.withAlpha(kRadialReactionAlpha))
|
||||
..circle(color: material3 ? theme.colorScheme.primary : theme.colorScheme.secondary)
|
||||
);
|
||||
// Remove pressed and hovered states
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
await gesture.moveTo(const Offset(0, 50));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(getRadioMaterial(tester),
|
||||
paints
|
||||
..circle(color: material3 ? theme.colorScheme.primary.withOpacity(0.12) : theme.focusColor)
|
||||
..circle(color: material3 ? theme.colorScheme.primary : theme.colorScheme.secondary)
|
||||
);
|
||||
});
|
||||
}
|
||||
|
@ -4,10 +4,13 @@
|
||||
|
||||
// This file is run as part of a reduced test set in CI on Mac and Windows
|
||||
// machines.
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
import '../rendering/mock_canvas.dart';
|
||||
import '../widgets/semantics_tester.dart';
|
||||
|
||||
Widget boilerplate({required Widget child}) {
|
||||
@ -482,4 +485,52 @@ testWidgets('SegmentedButton shows checkboxes for selected segments', (WidgetTes
|
||||
|
||||
semantics.dispose();
|
||||
});
|
||||
|
||||
testWidgets('SegmentedButton default overlayColor and foregroundColor resolve pressed state', (WidgetTester tester) async {
|
||||
final ThemeData theme = ThemeData(useMaterial3: true);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
theme: theme,
|
||||
home: Scaffold(
|
||||
body: Center(
|
||||
child: SegmentedButton<int>(
|
||||
segments: const <ButtonSegment<int>>[
|
||||
ButtonSegment<int>(value: 1, label: Text('1')),
|
||||
ButtonSegment<int>(value: 2, label: Text('2')),
|
||||
],
|
||||
selected: const <int>{1},
|
||||
onSelectionChanged: (Set<int> selected) {},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
RenderObject overlayColor() {
|
||||
return tester.allRenderObjects.firstWhere((RenderObject object) => object.runtimeType.toString() == '_RenderInkFeatures');
|
||||
}
|
||||
|
||||
final Material material = tester.widget<Material>(find.descendant(
|
||||
of: find.byType(TextButton),
|
||||
matching: find.byType(Material),
|
||||
));
|
||||
|
||||
// Hovered.
|
||||
final Offset center = tester.getCenter(find.text('2'));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onSurface.withOpacity(0.08)));
|
||||
expect(material.textStyle?.color, theme.colorScheme.onSurface);
|
||||
|
||||
// Highlighted (pressed).
|
||||
await gesture.down(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect()..rect(color: theme.colorScheme.onSurface.withOpacity(0.12)));
|
||||
expect(material.textStyle?.color, theme.colorScheme.onSurface);
|
||||
});
|
||||
}
|
||||
|
@ -1855,6 +1855,20 @@ void main() {
|
||||
paints..circle(color: theme.colorScheme.primary.withOpacity(0.08)),
|
||||
);
|
||||
|
||||
// Slider still shows correct hovered color after pressing/dragging
|
||||
await gesture.down(tester.getCenter(find.byType(Slider)));
|
||||
await tester.pump();
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
await gesture.moveTo(const Offset(0.0, 100.0));
|
||||
await tester.pumpAndSettle();
|
||||
await gesture.moveTo(tester.getCenter(find.byType(Slider)));
|
||||
await tester.pumpAndSettle();
|
||||
expect(
|
||||
Material.of(tester.element(find.byType(Slider))),
|
||||
paints..circle(color: theme.colorScheme.primary.withOpacity(0.08)),
|
||||
);
|
||||
|
||||
// Slider does not have an overlay when disabled and hovered.
|
||||
await tester.pumpWidget(buildApp(enabled: false));
|
||||
await tester.pumpAndSettle();
|
||||
|
@ -461,6 +461,52 @@ void main() {
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets('Switch default overlayColor resolves hovered/focused state', (WidgetTester tester) async {
|
||||
final FocusNode focusNode = FocusNode(debugLabel: 'Switch');
|
||||
tester.binding.focusManager.highlightStrategy = FocusHighlightStrategy.alwaysTraditional;
|
||||
final bool material3 = theme.useMaterial3;
|
||||
|
||||
Finder findSwitch() {
|
||||
return find.byWidgetPredicate((Widget widget) => widget is Switch);
|
||||
}
|
||||
|
||||
MaterialInkController? getSwitchMaterial(WidgetTester tester) {
|
||||
return Material.of(tester.element(findSwitch()));
|
||||
}
|
||||
await tester.pumpWidget(MaterialApp(
|
||||
theme: theme,
|
||||
home: Scaffold(
|
||||
body: Switch(
|
||||
focusNode: focusNode,
|
||||
value: true,
|
||||
onChanged: (_) { },
|
||||
),
|
||||
),
|
||||
));
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(getSwitchMaterial(tester),
|
||||
paints
|
||||
..circle(color: material3 ? theme.colorScheme.primary.withOpacity(0.12) : theme.focusColor)
|
||||
);
|
||||
|
||||
// On both hovered and focused, the overlay color should show hovered overlay color.
|
||||
final Offset center = tester.getCenter(find.byType(Switch));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(getSwitchMaterial(tester),
|
||||
paints..circle(color: material3 ? theme.colorScheme.primary.withOpacity(0.08) : theme.hoverColor)
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets('Switch can be set color', (WidgetTester tester) async {
|
||||
bool value = false;
|
||||
await tester.pumpWidget(
|
||||
@ -1320,7 +1366,7 @@ void main() {
|
||||
color: const Color(0x802196f3),
|
||||
rrect: RRect.fromLTRBR(13.0, 17.0, 46.0, 31.0, const Radius.circular(7.0)),
|
||||
)
|
||||
..circle(color: const Color(0x1f000000))
|
||||
..circle() // Radial reaction
|
||||
..rrect(color: const Color(0x33000000))
|
||||
..rrect(color: const Color(0x24000000))
|
||||
..rrect(color: const Color(0x1f000000))
|
||||
@ -1341,7 +1387,7 @@ void main() {
|
||||
color: const Color(0x802196f3),
|
||||
rrect: RRect.fromLTRBR(13.0, 17.0, 46.0, 31.0, const Radius.circular(7.0)),
|
||||
)
|
||||
..circle(color: const Color(0x1f000000))
|
||||
..circle()
|
||||
..rrect(color: const Color(0x33000000))
|
||||
..rrect(color: const Color(0x24000000))
|
||||
..rrect(color: const Color(0x1f000000))
|
||||
|
@ -553,16 +553,31 @@ void main() {
|
||||
),
|
||||
);
|
||||
|
||||
RenderObject overlayColor() {
|
||||
return tester.allRenderObjects.firstWhere((RenderObject object) => object.runtimeType.toString() == '_RenderInkFeatures');
|
||||
}
|
||||
|
||||
final TestGesture gesture = await tester.createGesture(kind: PointerDeviceKind.mouse);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(tester.getCenter(find.text(selectedValue)));
|
||||
await tester.pumpAndSettle();
|
||||
final RenderObject inkFeatures = tester.allRenderObjects.firstWhere((RenderObject object) => object.runtimeType.toString() == '_RenderInkFeatures');
|
||||
expect(inkFeatures, paints..rect(color: theme.colorScheme.primary.withOpacity(0.08)));
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.primary.withOpacity(0.08)));
|
||||
|
||||
await gesture.down(tester.getCenter(find.text(selectedValue)));
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect()..rect(color: theme.colorScheme.primary.withOpacity(0.12)));
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
await gesture.moveTo(tester.getCenter(find.text(unselectedValue)));
|
||||
await tester.pumpAndSettle();
|
||||
expect(inkFeatures, paints..rect(color: theme.colorScheme.onSurface.withOpacity(0.08)));
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onSurface.withOpacity(0.08)));
|
||||
|
||||
await gesture.down(tester.getCenter(find.text(selectedValue)));
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect()..rect(color: theme.colorScheme.primary.withOpacity(0.12)));
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
});
|
||||
|
||||
testWidgets('TabBar default overlay (secondary)', (WidgetTester tester) async {
|
||||
@ -578,16 +593,29 @@ void main() {
|
||||
),
|
||||
);
|
||||
|
||||
RenderObject overlayColor() {
|
||||
return tester.allRenderObjects.firstWhere((RenderObject object) => object.runtimeType.toString() == '_RenderInkFeatures');
|
||||
}
|
||||
|
||||
final TestGesture gesture = await tester.createGesture(kind: PointerDeviceKind.mouse);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(tester.getCenter(find.text(selectedValue)));
|
||||
await tester.pumpAndSettle();
|
||||
final RenderObject inkFeatures = tester.allRenderObjects.firstWhere((RenderObject object) => object.runtimeType.toString() == '_RenderInkFeatures');
|
||||
expect(inkFeatures, paints..rect(color: theme.colorScheme.onSurface.withOpacity(0.08)));
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onSurface.withOpacity(0.08)));
|
||||
|
||||
await gesture.down(tester.getCenter(find.text(selectedValue)));
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect()..rect(color: theme.colorScheme.onSurface.withOpacity(0.12)));
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
await gesture.moveTo(tester.getCenter(find.text(unselectedValue)));
|
||||
await tester.pumpAndSettle();
|
||||
expect(inkFeatures, paints..rect(color: theme.colorScheme.onSurface.withOpacity(0.08)));
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.onSurface.withOpacity(0.08)));
|
||||
|
||||
await gesture.down(tester.getCenter(find.text(selectedValue)));
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect()..rect(color: theme.colorScheme.onSurface.withOpacity(0.12)));
|
||||
});
|
||||
|
||||
testWidgets('TabBar tap selects tab', (WidgetTester tester) async {
|
||||
|
@ -177,11 +177,6 @@ void main() {
|
||||
// Default, not disabled.
|
||||
await expectLater(tester, meetsGuideline(textContrastGuideline));
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
await expectLater(tester, meetsGuideline(textContrastGuideline));
|
||||
|
||||
// Hovered.
|
||||
final Offset center = tester.getCenter(find.byType(TextButton));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
@ -197,8 +192,12 @@ void main() {
|
||||
await tester.pump(); // Start the splash and highlight animations.
|
||||
await tester.pump(const Duration(milliseconds: 800)); // Wait for splash and highlight to be well under way.
|
||||
await expectLater(tester, meetsGuideline(textContrastGuideline));
|
||||
|
||||
await gesture.removePointer();
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
await expectLater(tester, meetsGuideline(textContrastGuideline));
|
||||
},
|
||||
skip: isBrowser, // https://github.com/flutter/flutter/issues/44115
|
||||
);
|
||||
@ -270,6 +269,59 @@ void main() {
|
||||
skip: isBrowser, // https://github.com/flutter/flutter/issues/44115
|
||||
);
|
||||
|
||||
testWidgets('TextButton default overlayColor resolves pressed state', (WidgetTester tester) async {
|
||||
final FocusNode focusNode = FocusNode();
|
||||
final ThemeData theme = ThemeData(useMaterial3: true);
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
theme: theme,
|
||||
home: Scaffold(
|
||||
body: Center(
|
||||
child: Builder(
|
||||
builder: (BuildContext context) {
|
||||
return TextButton(
|
||||
onPressed: () {},
|
||||
focusNode: focusNode,
|
||||
child: const Text('TextButton'),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
RenderObject overlayColor() {
|
||||
return tester.allRenderObjects.firstWhere((RenderObject object) => object.runtimeType.toString() == '_RenderInkFeatures');
|
||||
}
|
||||
|
||||
// Hovered.
|
||||
final Offset center = tester.getCenter(find.byType(TextButton));
|
||||
final TestGesture gesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await gesture.addPointer();
|
||||
await gesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.primary.withOpacity(0.08)));
|
||||
|
||||
// Highlighted (pressed).
|
||||
await gesture.down(center);
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect()..rect(color: theme.colorScheme.primary.withOpacity(0.12)));
|
||||
// Remove pressed and hovered states
|
||||
await gesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
await gesture.moveTo(const Offset(0, 50));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// Focused.
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
expect(overlayColor(), paints..rect(color: theme.colorScheme.primary.withOpacity(0.12)));
|
||||
});
|
||||
|
||||
testWidgets('TextButton uses stateful color for text color in different states', (WidgetTester tester) async {
|
||||
final FocusNode focusNode = FocusNode();
|
||||
|
||||
|
@ -808,12 +808,28 @@ void main() {
|
||||
|
||||
final Offset center = tester.getCenter(find.text('First child'));
|
||||
|
||||
// hoverColor
|
||||
final TestGesture hoverGesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await hoverGesture.addPointer();
|
||||
await hoverGesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
await hoverGesture.moveTo(Offset.zero);
|
||||
|
||||
RenderObject inkFeatures = tester.allRenderObjects.firstWhere((RenderObject object) {
|
||||
return object.runtimeType.toString() == '_RenderInkFeatures';
|
||||
});
|
||||
expect(
|
||||
inkFeatures,
|
||||
paints..rect(color: theme.colorScheme.onSurface.withOpacity(0.04)),
|
||||
);
|
||||
|
||||
// splashColor
|
||||
final TestGesture touchGesture = await tester.createGesture();
|
||||
await touchGesture.down(center);
|
||||
await touchGesture.down(center); // The button is on hovered and pressed
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
RenderObject inkFeatures;
|
||||
inkFeatures = tester.allRenderObjects.firstWhere((RenderObject object) {
|
||||
return object.runtimeType.toString() == '_RenderInkFeatures';
|
||||
});
|
||||
@ -825,23 +841,8 @@ void main() {
|
||||
|
||||
await touchGesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// hoverColor
|
||||
final TestGesture hoverGesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await hoverGesture.addPointer();
|
||||
await hoverGesture.moveTo(center);
|
||||
await hoverGesture.moveTo(const Offset(0, 50));
|
||||
await tester.pumpAndSettle();
|
||||
await hoverGesture.moveTo(Offset.zero);
|
||||
|
||||
inkFeatures = tester.allRenderObjects.firstWhere((RenderObject object) {
|
||||
return object.runtimeType.toString() == '_RenderInkFeatures';
|
||||
});
|
||||
expect(
|
||||
inkFeatures,
|
||||
paints..rect(color: theme.colorScheme.onSurface.withOpacity(0.04)),
|
||||
);
|
||||
|
||||
// focusColor
|
||||
focusNode.requestFocus();
|
||||
@ -874,12 +875,28 @@ void main() {
|
||||
|
||||
final Offset center = tester.getCenter(find.text('First child'));
|
||||
|
||||
// splashColor
|
||||
final TestGesture touchGesture = await tester.createGesture();
|
||||
await touchGesture.down(center);
|
||||
// hoverColor
|
||||
final TestGesture hoverGesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await hoverGesture.addPointer();
|
||||
await hoverGesture.moveTo(center);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
RenderObject inkFeatures = tester.allRenderObjects.firstWhere((RenderObject object) {
|
||||
return object.runtimeType.toString() == '_RenderInkFeatures';
|
||||
});
|
||||
expect(
|
||||
inkFeatures,
|
||||
paints..rect(color: theme.colorScheme.primary.withOpacity(0.04)),
|
||||
);
|
||||
await hoverGesture.moveTo(Offset.zero);
|
||||
|
||||
// splashColor
|
||||
final TestGesture touchGesture = await tester.createGesture();
|
||||
await touchGesture.down(center); // The button is on hovered and pressed
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
RenderObject inkFeatures;
|
||||
inkFeatures = tester.allRenderObjects.firstWhere((RenderObject object) {
|
||||
return object.runtimeType.toString() == '_RenderInkFeatures';
|
||||
});
|
||||
@ -891,24 +908,9 @@ void main() {
|
||||
|
||||
await touchGesture.up();
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// hoverColor
|
||||
final TestGesture hoverGesture = await tester.createGesture(
|
||||
kind: PointerDeviceKind.mouse,
|
||||
);
|
||||
await hoverGesture.addPointer();
|
||||
await hoverGesture.moveTo(center);
|
||||
await hoverGesture.moveTo(const Offset(0, 50));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
inkFeatures = tester.allRenderObjects.firstWhere((RenderObject object) {
|
||||
return object.runtimeType.toString() == '_RenderInkFeatures';
|
||||
});
|
||||
expect(
|
||||
inkFeatures,
|
||||
paints..rect(color: theme.colorScheme.primary.withOpacity(0.04)),
|
||||
);
|
||||
await hoverGesture.moveTo(Offset.zero);
|
||||
|
||||
// focusColor
|
||||
focusNode.requestFocus();
|
||||
await tester.pumpAndSettle();
|
||||
|
Loading…
x
Reference in New Issue
Block a user