From e086aeebe470f00b93ff68e59970d7f624351ea8 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sun, 14 Apr 2024 00:10:22 +0800 Subject: [PATCH] :bug: Fix navigation state loss --- lib/main.dart | 2 ++ lib/providers/navigation.dart | 3 +++ lib/widgets/navigation_drawer.dart | 14 ++++++++++++++ 3 files changed, 19 insertions(+) create mode 100644 lib/providers/navigation.dart diff --git a/lib/main.dart b/lib/main.dart index 39ec226..4d69293 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:solian/providers/auth.dart'; +import 'package:solian/providers/navigation.dart'; import 'package:solian/router.dart'; import 'package:solian/utils/timeago.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -32,6 +33,7 @@ class SolianApp extends StatelessWidget { OverlayEntry(builder: (context) { return MultiProvider( providers: [ + Provider(create: (_) => NavigationProvider()), Provider(create: (_) => AuthProvider()), ], child: child, diff --git a/lib/providers/navigation.dart b/lib/providers/navigation.dart new file mode 100644 index 0000000..869413f --- /dev/null +++ b/lib/providers/navigation.dart @@ -0,0 +1,3 @@ +class NavigationProvider { + int selectedIndex = 0; +} \ No newline at end of file diff --git a/lib/widgets/navigation_drawer.dart b/lib/widgets/navigation_drawer.dart index d06dee7..ff150da 100644 --- a/lib/widgets/navigation_drawer.dart +++ b/lib/widgets/navigation_drawer.dart @@ -1,4 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:solian/providers/navigation.dart'; import 'package:solian/router.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -14,9 +16,21 @@ class _SolianNavigationDrawerState extends State { void _onSelect(String name, int idx) { setState(() => _selectedIndex = idx); + context.read().selectedIndex = idx; router.goNamed(name); } + @override + void initState() { + Future.delayed(Duration.zero, () { + setState(() { + _selectedIndex = context.read().selectedIndex; + }); + }); + + super.initState(); + } + @override Widget build(BuildContext context) { final navigationItems = [