| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'template.dart'; |
| |
| class RadioTemplate extends TokenTemplate { |
| const RadioTemplate(super.blockName, super.fileName, super.tokens, { |
| super.colorSchemePrefix = '_colors.', |
| }); |
| |
| @override |
| String generate() => ''' |
| class _RadioDefaultsM3 extends RadioThemeData { |
| _RadioDefaultsM3(this.context); |
| |
| final BuildContext context; |
| late final ThemeData _theme = Theme.of(context); |
| late final ColorScheme _colors = _theme.colorScheme; |
| |
| @override |
| MaterialStateProperty<Color> get fillColor { |
| return MaterialStateProperty.resolveWith((Set<MaterialState> states) { |
| if (states.contains(MaterialState.selected)) { |
| if (states.contains(MaterialState.disabled)) { |
| return ${componentColor('md.comp.radio-button.disabled.selected.icon')}; |
| } |
| if (states.contains(MaterialState.pressed)) { |
| return ${componentColor('md.comp.radio-button.selected.pressed.icon')}; |
| } |
| if (states.contains(MaterialState.hovered)) { |
| return ${componentColor('md.comp.radio-button.selected.hover.icon')}; |
| } |
| if (states.contains(MaterialState.focused)) { |
| return ${componentColor('md.comp.radio-button.selected.focus.icon')}; |
| } |
| return ${componentColor('md.comp.radio-button.selected.icon')}; |
| } |
| if (states.contains(MaterialState.disabled)) { |
| return ${componentColor('md.comp.radio-button.disabled.unselected.icon')}; |
| } |
| if (states.contains(MaterialState.pressed)) { |
| return ${componentColor('md.comp.radio-button.unselected.pressed.icon')}; |
| } |
| if (states.contains(MaterialState.hovered)) { |
| return ${componentColor('md.comp.radio-button.unselected.hover.icon')}; |
| } |
| if (states.contains(MaterialState.focused)) { |
| return ${componentColor('md.comp.radio-button.unselected.focus.icon')}; |
| } |
| return ${componentColor('md.comp.radio-button.unselected.icon')}; |
| }); |
| } |
| |
| @override |
| MaterialStateProperty<Color> get overlayColor { |
| return MaterialStateProperty.resolveWith((Set<MaterialState> states) { |
| if (states.contains(MaterialState.selected)) { |
| if (states.contains(MaterialState.pressed)) { |
| return ${componentColor('md.comp.radio-button.selected.pressed.state-layer')}; |
| } |
| if (states.contains(MaterialState.hovered)) { |
| return ${componentColor('md.comp.radio-button.selected.hover.state-layer')}; |
| } |
| if (states.contains(MaterialState.focused)) { |
| return ${componentColor('md.comp.radio-button.selected.focus.state-layer')}; |
| } |
| return Colors.transparent; |
| } |
| if (states.contains(MaterialState.pressed)) { |
| return ${componentColor('md.comp.radio-button.unselected.pressed.state-layer')}; |
| } |
| if (states.contains(MaterialState.hovered)) { |
| return ${componentColor('md.comp.radio-button.unselected.hover.state-layer')}; |
| } |
| if (states.contains(MaterialState.focused)) { |
| return ${componentColor('md.comp.radio-button.unselected.focus.state-layer')}; |
| } |
| return Colors.transparent; |
| }); |
| } |
| |
| @override |
| MaterialTapTargetSize get materialTapTargetSize => _theme.materialTapTargetSize; |
| |
| @override |
| VisualDensity get visualDensity => _theme.visualDensity; |
| } |
| '''; |
| } |