// 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 IconButtonTemplate extends TokenTemplate { const IconButtonTemplate(super.fileName, super.tokens) : super(colorSchemePrefix: '_colors.', ); @override String generate() => ''' // Generated version ${tokens["version"]} class _TokenDefaultsM3 extends ButtonStyle { _TokenDefaultsM3(this.context) : super( animationDuration: kThemeChangeDuration, enableFeedback: true, alignment: Alignment.center, ); final BuildContext context; late final ColorScheme _colors = Theme.of(context).colorScheme; // No default text style @override MaterialStateProperty? get backgroundColor => ButtonStyleButton.allOrNull(Colors.transparent); @override MaterialStateProperty? get foregroundColor => MaterialStateProperty.resolveWith((Set states) { if (states.contains(MaterialState.disabled)) return ${componentColor('md.comp.icon-button.disabled.icon')}; return ${componentColor('md.comp.icon-button.unselected.icon')}; }); @override MaterialStateProperty? get overlayColor => MaterialStateProperty.resolveWith((Set states) { if (states.contains(MaterialState.hovered)) return ${componentColor('md.comp.icon-button.unselected.hover.state-layer')}; if (states.contains(MaterialState.focused)) return ${componentColor('md.comp.icon-button.unselected.focus.state-layer')}; if (states.contains(MaterialState.pressed)) return ${componentColor('md.comp.icon-button.unselected.pressed.state-layer')}; return null; }); // No default shadow color // No default surface tint color @override MaterialStateProperty? get elevation => ButtonStyleButton.allOrNull(0.0); @override MaterialStateProperty? get padding => ButtonStyleButton.allOrNull(const EdgeInsets.all(8.0)); @override MaterialStateProperty? get minimumSize => ButtonStyleButton.allOrNull(const Size(${tokens["md.comp.icon-button.state-layer.size"]}, ${tokens["md.comp.icon-button.state-layer.size"]})); // No default fixedSize @override MaterialStateProperty? get maximumSize => ButtonStyleButton.allOrNull(Size.infinite); // No default side @override MaterialStateProperty? get shape => ButtonStyleButton.allOrNull(${shape("md.comp.icon-button.state-layer")}); @override MaterialStateProperty? get mouseCursor => MaterialStateProperty.resolveWith((Set states) { if (states.contains(MaterialState.disabled)) return SystemMouseCursors.basic; return SystemMouseCursors.click; }); @override VisualDensity? get visualDensity => Theme.of(context).visualDensity; @override MaterialTapTargetSize? get tapTargetSize => Theme.of(context).materialTapTargetSize; @override InteractiveInkFeatureFactory? get splashFactory => Theme.of(context).splashFactory; } '''; }