mirror of
https://gitlab.com/veilid/veilidchat.git
synced 2025-07-03 02:26:57 -04:00
79 lines
2.4 KiB
Dart
79 lines
2.4 KiB
Dart
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<void> 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<ScaleTheme>()!;
|
|
|
|
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<void> Function(double)? _onChanged;
|
|
final double _value;
|
|
final Widget? _leftWidget;
|
|
final Widget? _rightWidget;
|
|
final double _min;
|
|
final double _max;
|
|
final int? _divisions;
|
|
}
|