| // 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 RangeSliderTemplate extends TokenTemplate { |
| const RangeSliderTemplate( |
| this.tokenGroup, |
| super.blockName, |
| super.fileName, |
| super.tokens, { |
| super.colorSchemePrefix = '_colors.', |
| }); |
| |
| final String tokenGroup; |
| |
| @override |
| String generate() => |
| ''' |
| class _${blockName}DefaultsM3 extends SliderThemeData { |
| _${blockName}DefaultsM3(this.context) |
| : super(trackHeight: ${getToken('$tokenGroup.active.track.height')}); |
| |
| final BuildContext context; |
| late final ColorScheme _colors = Theme.of(context).colorScheme; |
| |
| @override |
| Color? get activeTrackColor => ${componentColor('$tokenGroup.active.track')}; |
| |
| @override |
| Color? get inactiveTrackColor => ${componentColor('$tokenGroup.inactive.track')}; |
| |
| @override |
| Color? get disabledActiveTrackColor => ${componentColor('$tokenGroup.disabled.active.track')}; |
| |
| @override |
| Color? get disabledInactiveTrackColor => ${componentColor('$tokenGroup.disabled.inactive.track')}; |
| |
| @override |
| Color? get activeTickMarkColor => ${componentColor('$tokenGroup.active.stop-indicator.container')}; |
| |
| @override |
| Color? get inactiveTickMarkColor => ${componentColor('$tokenGroup.inactive.stop-indicator.container')}; |
| |
| @override |
| Color? get disabledActiveTickMarkColor => ${componentColor('$tokenGroup.disabled.active.stop-indicator.container')}; |
| |
| @override |
| Color? get disabledInactiveTickMarkColor => ${componentColor('$tokenGroup.disabled.inactive.stop-indicator.container')}; |
| |
| @override |
| Color? get thumbColor => ${componentColor('$tokenGroup.handle')}; |
| |
| @override |
| Color? get overlappingShapeStrokeColor => _colors.surface; |
| |
| @override |
| Color? get disabledThumbColor => ${componentColor('$tokenGroup.disabled.handle')}; |
| |
| @override |
| Color? get overlayColor => _colors.primary.withOpacity(0.12); |
| |
| @override |
| TextStyle? get valueIndicatorTextStyle => ${textStyle('$tokenGroup.value-indicator.label.label-text')}!.copyWith( |
| color: ${componentColor('$tokenGroup.value-indicator.label.label-text')}, |
| ); |
| |
| @override |
| Color? get valueIndicatorColor => ${componentColor('$tokenGroup.value-indicator.container')}; |
| |
| @override |
| RangeSliderTrackShape? get rangeTrackShape => const GappedRangeSliderTrackShape(); |
| |
| @override |
| RangeSliderTickMarkShape? get rangeTickMarkShape => const RoundRangeSliderTickMarkShape(tickMarkRadius: ${getToken("$tokenGroup.stop-indicator.size")} / 2); |
| |
| @override |
| RangeSliderThumbShape? get rangeThumbShape => const HandleRangeSliderThumbShape(); |
| |
| @override |
| SliderComponentShape? get overlayShape => const RoundSliderOverlayShape(); |
| |
| @override |
| RangeSliderValueIndicatorShape? get rangeValueIndicatorShape => const RoundedRectRangeSliderValueIndicatorShape(); |
| |
| @override |
| ShowValueIndicator? get showValueIndicator => ShowValueIndicator.onlyForDiscrete; |
| |
| @override |
| double? get minThumbSeparation => 0; |
| |
| @override |
| WidgetStateProperty<Size?>? get thumbSize { |
| return WidgetStateProperty.resolveWith((Set<WidgetState> states) { |
| if (states.contains(WidgetState.disabled)) { |
| return const Size(${getToken("$tokenGroup.disabled.handle.width")}, ${getToken("$tokenGroup.handle.height")}); |
| } |
| if (states.contains(WidgetState.hovered)) { |
| return const Size(${getToken("$tokenGroup.hover.handle.width")}, ${getToken("$tokenGroup.handle.height")}); |
| } |
| if (states.contains(WidgetState.focused)) { |
| return const Size(${getToken("$tokenGroup.focus.handle.width")}, ${getToken("$tokenGroup.handle.height")}); |
| } |
| if (states.contains(WidgetState.pressed)) { |
| return const Size(${getToken("$tokenGroup.pressed.handle.width")}, ${getToken("$tokenGroup.handle.height")}); |
| } |
| return const Size(${getToken("$tokenGroup.handle.width")}, ${getToken("$tokenGroup.handle.height")}); |
| }); |
| } |
| |
| @override |
| double? get trackGap => ${getToken("$tokenGroup.active.handle.padding")}; |
| } |
| '''; |
| } |