initial commit
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import '../../../core/theme/theme_mode_provider.dart';
|
||||
|
||||
/// The full three-way Light/Dark/System control. The top bar's quick
|
||||
/// sun/moon icon (`NavRailShell`) only ever toggles between explicit
|
||||
/// light/dark — this is the one place "follow system" can be chosen.
|
||||
class ThemeToggle extends ConsumerWidget {
|
||||
const ThemeToggle({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final mode = ref.watch(themeModeControllerProvider);
|
||||
|
||||
return SegmentedButton<ThemeMode>(
|
||||
showSelectedIcon: false,
|
||||
segments: const [
|
||||
ButtonSegment(value: ThemeMode.light, label: Text('Light'), icon: Icon(Icons.light_mode_outlined, size: 16)),
|
||||
ButtonSegment(value: ThemeMode.dark, label: Text('Dark'), icon: Icon(Icons.dark_mode_outlined, size: 16)),
|
||||
ButtonSegment(
|
||||
value: ThemeMode.system,
|
||||
label: Text('System'),
|
||||
icon: Icon(Icons.brightness_auto_outlined, size: 16),
|
||||
),
|
||||
],
|
||||
selected: {mode},
|
||||
onSelectionChanged: (selected) =>
|
||||
ref.read(themeModeControllerProvider.notifier).setThemeMode(selected.first),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user