This repository has been archived on 2025-03-26. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
brook/lib/widgets/select_button.dart
2025-01-04 12:14:46 -05:00

33 lines
897 B
Dart

import 'package:brook/helpers/extension_helper.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
class SelectButton<T extends Enum> extends HookWidget {
final T value;
final List<T> values;
final Function(T newValue) onChanged;
const SelectButton({
required this.value,
required this.values,
required this.onChanged,
super.key,
});
@override
Widget build(BuildContext context) {
final oldValue = useState(<T>{});
return SegmentedButton(
segments: values
.map((value) => ButtonSegment(
value: value,
label: Text(value.name.toCapitalized()),
))
.toList(),
onSelectionChanged: (newValue) {
onChanged(newValue.difference(oldValue.value).first);
oldValue.value = newValue;
},
selected: {value},
);
}
}