fix: Navigating to settings, redirects to home page #812

This commit is contained in:
Kingkor Roy Tirtho 2023-11-08 17:48:59 +06:00
parent 6b8ae88db4
commit da04f068f9
3 changed files with 18 additions and 12 deletions

View File

@ -22,7 +22,7 @@ import 'package:spotube/utils/platform.dart';
import 'package:spotube/utils/type_conversion_utils.dart'; import 'package:spotube/utils/type_conversion_utils.dart';
class Sidebar extends HookConsumerWidget { class Sidebar extends HookConsumerWidget {
final int selectedIndex; final int? selectedIndex;
final void Function(int) onSelectedIndexChanged; final void Function(int) onSelectedIndexChanged;
final Widget child; final Widget child;
@ -57,7 +57,7 @@ class Sidebar extends HookConsumerWidget {
ref.watch(userPreferencesProvider.select((s) => s.layoutMode)); ref.watch(userPreferencesProvider.select((s) => s.layoutMode));
final controller = useSidebarXController( final controller = useSidebarXController(
selectedIndex: selectedIndex, selectedIndex: selectedIndex ?? 0,
extended: mediaQuery.lgAndUp, extended: mediaQuery.lgAndUp,
); );
@ -75,17 +75,21 @@ class Sidebar extends HookConsumerWidget {
); );
useEffect(() { useEffect(() {
if (controller.selectedIndex != selectedIndex) { if (controller.selectedIndex != selectedIndex && selectedIndex != null) {
controller.selectIndex(selectedIndex); controller.selectIndex(selectedIndex!);
} }
return null; return null;
}, [selectedIndex]); }, [selectedIndex]);
useEffect(() { useEffect(() {
controller.addListener(() { void listener() {
onSelectedIndexChanged(controller.selectedIndex); onSelectedIndexChanged(controller.selectedIndex);
}); }
return null;
controller.addListener(listener);
return () {
controller.removeListener(listener);
};
}, [controller]); }, [controller]);
useEffect(() { useEffect(() {

View File

@ -16,7 +16,7 @@ import 'package:spotube/provider/user_preferences_provider.dart';
final navigationPanelHeight = StateProvider<double>((ref) => 50); final navigationPanelHeight = StateProvider<double>((ref) => 50);
class SpotubeNavigationBar extends HookConsumerWidget { class SpotubeNavigationBar extends HookConsumerWidget {
final int selectedIndex; final int? selectedIndex;
final void Function(int) onSelectedIndexChanged; final void Function(int) onSelectedIndexChanged;
const SpotubeNavigationBar({ const SpotubeNavigationBar({
@ -33,7 +33,7 @@ class SpotubeNavigationBar extends HookConsumerWidget {
final layoutMode = final layoutMode =
ref.watch(userPreferencesProvider.select((s) => s.layoutMode)); ref.watch(userPreferencesProvider.select((s) => s.layoutMode));
final insideSelectedIndex = useState<int>(selectedIndex); final insideSelectedIndex = useState<int>(selectedIndex ?? 0);
final buttonColor = useBrightnessValue( final buttonColor = useBrightnessValue(
theme.colorScheme.inversePrimary, theme.colorScheme.inversePrimary,
@ -46,7 +46,9 @@ class SpotubeNavigationBar extends HookConsumerWidget {
final panelHeight = ref.watch(navigationPanelHeight); final panelHeight = ref.watch(navigationPanelHeight);
useEffect(() { useEffect(() {
insideSelectedIndex.value = selectedIndex; if (selectedIndex != null) {
insideSelectedIndex.value = selectedIndex!;
}
return null; return null;
}, [selectedIndex]); }, [selectedIndex]);

View File

@ -159,7 +159,7 @@ class RootApp extends HookConsumerWidget {
return Scaffold( return Scaffold(
body: Sidebar( body: Sidebar(
selectedIndex: rootPaths[location] ?? 0, selectedIndex: rootPaths[location],
onSelectedIndexChanged: onSelectIndexChanged, onSelectedIndexChanged: onSelectIndexChanged,
child: child, child: child,
), ),
@ -169,7 +169,7 @@ class RootApp extends HookConsumerWidget {
children: [ children: [
BottomPlayer(), BottomPlayer(),
SpotubeNavigationBar( SpotubeNavigationBar(
selectedIndex: rootPaths[location] ?? 0, selectedIndex: rootPaths[location],
onSelectedIndexChanged: onSelectIndexChanged, onSelectedIndexChanged: onSelectIndexChanged,
), ),
], ],