feat: implement reactive switching in dashbot home and default page

This commit is contained in:
Udhay-Adithya
2025-09-26 00:08:04 +05:30
parent 9a58a1fa4d
commit e3fc474c07
2 changed files with 52 additions and 23 deletions

View File

@@ -35,17 +35,30 @@ class DashbotWindow extends ConsumerWidget {
},
);
// Listen to changes in response status and navigate accordingly
ref.listen(
selectedRequestModelProvider,
(prev, next) {
if (prev?.id == next?.id) return;
final initial = _dashbotNavigatorKey.currentState?.widget.initialRoute;
final atRoot = _dashbotNavigatorKey.currentState?.canPop() == false;
// Only push when navigator started on Default and is still at root
if (initial == DashbotRoutes.dashbotDefault && atRoot) {
selectedRequestModelProvider
.select((request) => request?.httpResponseModel?.statusCode != null),
(prev, hasResponse) {
if (prev == hasResponse) return;
final currentRoute =
_dashbotNavigatorKey.currentState?.widget.initialRoute;
final canPop = _dashbotNavigatorKey.currentState?.canPop() ?? false;
if (hasResponse) {
// Response available - navigate to home if not already there
if (currentRoute == DashbotRoutes.dashbotDefault && !canPop) {
_dashbotNavigatorKey.currentState
?.pushNamed(DashbotRoutes.dashbotHome);
}
} else {
// No response - navigate back to default if we're in home
if (canPop) {
_dashbotNavigatorKey.currentState
?.popUntil((route) => route.isFirst);
}
}
},
);
@@ -161,9 +174,11 @@ class DashbotWindow extends ConsumerWidget {
Expanded(
child: Navigator(
key: _dashbotNavigatorKey,
initialRoute: currentRequest?.responseStatus == null
? DashbotRoutes.dashbotDefault
: DashbotRoutes.dashbotHome,
initialRoute: (currentRequest
?.httpResponseModel?.statusCode !=
null)
? DashbotRoutes.dashbotHome
: DashbotRoutes.dashbotDefault,
onGenerateRoute: generateRoute,
),
),

View File

@@ -27,16 +27,28 @@ class _DashbotTabState extends ConsumerState<DashbotTab>
super.build(context);
final currentRequest = ref.watch(selectedRequestModelProvider);
// If a response arrives while user is on default, navigate to home.
// Listen to changes in response status and navigate accordingly
ref.listen(
selectedRequestModelProvider,
(prev, next) {
if (prev?.id == next?.id) return;
final initial = _navKey.currentState?.widget.initialRoute;
final atRoot = _navKey.currentState?.canPop() == false;
if (initial == DashbotRoutes.dashbotDefault && atRoot) {
selectedRequestModelProvider.select((request) =>
request?.httpResponseModel?.statusCode != null ||
request?.responseStatus != null),
(prev, hasResponse) {
if (prev == hasResponse) return;
final currentRoute = _navKey.currentState?.widget.initialRoute;
final canPop = _navKey.currentState?.canPop() ?? false;
if (hasResponse) {
// Response available - navigate to home if not already there
if (currentRoute == DashbotRoutes.dashbotDefault && !canPop) {
_navKey.currentState?.pushNamed(DashbotRoutes.dashbotHome);
}
} else {
// No response - navigate back to default if we're in home
if (canPop) {
_navKey.currentState?.popUntil((route) => route.isFirst);
}
}
},
);
@@ -107,9 +119,11 @@ class _DashbotTabState extends ConsumerState<DashbotTab>
Expanded(
child: Navigator(
key: _navKey,
initialRoute: currentRequest?.responseStatus == null
? DashbotRoutes.dashbotDefault
: DashbotRoutes.dashbotHome,
initialRoute:
(currentRequest?.httpResponseModel?.statusCode != null ||
currentRequest?.responseStatus != null)
? DashbotRoutes.dashbotHome
: DashbotRoutes.dashbotDefault,
onGenerateRoute: generateRoute,
),
),