toggle_switch_widget.dart 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import 'package:flutter/material.dart';
  2. import 'package:photos/ente_theme_data.dart';
  3. typedef OnChangedCallBack = Future<void> Function();
  4. typedef ValueCallBack = bool Function();
  5. class ToggleSwitchWidget extends StatefulWidget {
  6. final ValueCallBack value;
  7. final OnChangedCallBack onChanged;
  8. const ToggleSwitchWidget({
  9. required this.value,
  10. required this.onChanged,
  11. Key? key,
  12. }) : super(key: key);
  13. @override
  14. State<ToggleSwitchWidget> createState() => _ToggleSwitchWidgetState();
  15. }
  16. class _ToggleSwitchWidgetState extends State<ToggleSwitchWidget> {
  17. late bool toggleValue;
  18. @override
  19. void initState() {
  20. toggleValue = widget.value.call();
  21. super.initState();
  22. }
  23. @override
  24. Widget build(BuildContext context) {
  25. final enteColorScheme = Theme.of(context).colorScheme.enteTheme.colorScheme;
  26. return Padding(
  27. padding: const EdgeInsets.symmetric(vertical: 4),
  28. child: SizedBox(
  29. height: 30,
  30. child: FittedBox(
  31. fit: BoxFit.contain,
  32. child: Switch.adaptive(
  33. activeColor: enteColorScheme.primary400,
  34. inactiveTrackColor: enteColorScheme.fillMuted,
  35. materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
  36. value: toggleValue,
  37. onChanged: (value) async {
  38. setState(() {
  39. toggleValue = value;
  40. });
  41. await widget.onChanged.call();
  42. setState(() {
  43. toggleValue = widget.value.call();
  44. });
  45. },
  46. ),
  47. ),
  48. ),
  49. );
  50. }
  51. }