add dark theme toggle

This commit is contained in:
2026-03-02 13:00:30 +01:00
parent 9d5ea49d85
commit de0be12aab
10 changed files with 125 additions and 24 deletions

View File

@@ -20,6 +20,7 @@ class _MainAppState extends State<MainApp> {
List<TimelineGroup> _groups = const [];
List<TimelineEntry> _entries = const [];
TimelineViewportNotifier? _viewport;
bool _darkMode = true;
@override
void initState() {
@@ -53,6 +54,7 @@ class _MainAppState extends State<MainApp> {
_state = state;
_groups = groups;
_entries = entries;
_darkMode = state.darkMode;
_viewport ??= TimelineViewportNotifier(
start: domain.start,
@@ -207,7 +209,9 @@ class _MainAppState extends State<MainApp> {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData.dark(useMaterial3: true),
theme: _darkMode
? ThemeData.dark(useMaterial3: true)
: ThemeData.light(useMaterial3: true),
home: Scaffold(
backgroundColor: Colors.transparent,
body: _state == null || viewport == null

View File

@@ -11,6 +11,7 @@ class TimelineState {
final Map<String, TimelineItemData> items;
final List<String> groupOrder;
final String? selectedItemId;
final bool darkMode;
TimelineState({
required this.timeline,
@@ -18,6 +19,7 @@ class TimelineState {
required this.items,
required this.groupOrder,
this.selectedItemId,
this.darkMode = true,
});
factory TimelineState.fromJson(Map<String, dynamic> json) {
@@ -36,6 +38,7 @@ class TimelineState {
),
groupOrder: (json['groupOrder'] as List<dynamic>).cast<String>(),
selectedItemId: json['selectedItemId'] as String?,
darkMode: json['darkMode'] as bool? ?? true,
);
}
}