toggle_switch_widget.dart 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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 SizedBox(
  27. height: 32,
  28. child: FittedBox(
  29. fit: BoxFit.contain,
  30. child: Switch.adaptive(
  31. activeColor: enteColorScheme.primary400,
  32. inactiveTrackColor: enteColorScheme.fillMuted,
  33. materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
  34. value: toggleValue,
  35. onChanged: (value) async {
  36. setState(() {
  37. toggleValue = value;
  38. });
  39. await widget.onChanged.call();
  40. setState(() {
  41. toggleValue = widget.value.call();
  42. });
  43. },
  44. ),
  45. ),
  46. );
  47. }
  48. }