import 'package:async_tools/async_tools.dart'; import 'package:awesome_extensions/awesome_extensions_flutter.dart'; import 'package:flutter/material.dart'; import '../../models/models.dart'; import '../views.dart'; const _kStyledSliderChanged = 'kStyledSliderChanged'; class StyledSlider extends StatelessWidget { const StyledSlider( {required double value, String? label, String? decoratorLabel, Future Function(double)? onChanged, Widget? leftWidget, Widget? rightWidget, double min = 0, double max = 1, int? divisions, super.key}) : _value = value, _onChanged = onChanged, _leftWidget = leftWidget, _rightWidget = rightWidget, _min = min, _max = max, _divisions = divisions, _label = label, _decoratorLabel = decoratorLabel; @override Widget build(BuildContext context) { final theme = Theme.of(context); final scale = theme.extension()!; Widget ctrl = Row(children: [ if (_leftWidget != null) _leftWidget, Slider( activeColor: scale.scheme.primaryScale.border, inactiveColor: scale.scheme.primaryScale.subtleBorder, secondaryActiveColor: scale.scheme.secondaryScale.border, value: _value, min: _min, max: _max, divisions: _divisions, label: _label, thumbColor: scale.scheme.primaryScale.appText, overlayColor: WidgetStateColor.resolveWith((ws) => theme.focusColor), onChanged: _onChanged == null ? null : (value) { singleFuture((this, _kStyledSliderChanged), () async { await _onChanged(value); }); }) .expanded(), if (_rightWidget != null) _rightWidget, ]); if (_decoratorLabel != null) { ctrl = ctrl .paddingLTRB(4.scaled(context), 4.scaled(context), 4.scaled(context), 4.scaled(context)) .decoratorLabel(context, _decoratorLabel); } return ctrl; } final String? _label; final String? _decoratorLabel; final Future Function(double)? _onChanged; final double _value; final Widget? _leftWidget; final Widget? _rightWidget; final double _min; final double _max; final int? _divisions; }