Estou usando um StatefulShellRoute
with StatefulShellBranch
es como no código abaixo.
Gostaria de conseguir o seguinte: quando estou dentro de uma rota, StatefulShellBranch
quero navegar para a primeira rota/rota padrão para ela StatefulShellBranch
. Por exemplo, quando navego para path5
, de dentro, Widget5
quero navegar para path4
.
Meu caso de uso é que tenho um botão Voltar dentro de Widget5
, e quando navego diretamente para path5
(por exemplo, por meio de um link profundo), quero "ir" para a primeira rota padrão dentro de StatefulShellBranch
quando o botão Voltar é pressionado.
Roteador
router = GoRouter(
routes: StatefulShellRoute.indexedStack(
parentNavigatorKey: parentNavigatorKey,
branches: [
StatefulShellBranch(
navigatorKey: key1,
routes: [
GoRoute(
path: path1,
pageBuilder: (context, state) {
return Widget1();
},
routes: <RouteBase>[
GoRoute(
path: path2,
pageBuilder: (context, state) {
return Widget2();
},
),
GoRoute(
path: path3,
pageBuilder: (context, state) {
return Widget3();
},
),
],
),
],
),
StatefulShellBranch(
navigatorKey: key2,
routes: [
GoRoute(
path: path4,
pageBuilder: (context, state) {
return Widget4();
},
),
GoRoute(
path: path5,
pageBuilder: (context, state) {
return Widget5();
},
),
],
),
],
),
GoRoute(
parentNavigatorKey: parentNavigatorKey,
path: path6,
pageBuilder: (context, state) {
return Widget6();
},
));
Widget
// Inside Widget5
class BackButton extends StatelessWidget {
...
onPressed() {
if (router.canPop()) {
router.pop();
} else {
// TODO: Navigate to default route of StatefulShellBranch
final defaultRoute = router
.routerDelegate
.currentConfiguration.???();
}
}
...
}
No meu caso, configurei da
StatefulShellBranch
seguinte maneira:Observe que a
Dashboard
classe monitora asbottomAppBarIndex
alterações, pois reside dentro dessa classe.Usei-o na minha
PopScope
lógica, onde ele poderia imitar a maneira comoonPressed: () =>
funciona (ou seja, no seu ponto de vista, é claro).No meu caso de uso, estou usando
bottomAppBarIndex
, que é criado com o Provider do Riverpod para lidar com o gerenciamento de estado e sincronizar com asbottomNavigationBar
alterações de índice do .Espero que isso forneça uma referência que você possa replicar no seu caso, então você precisa alterar o índice de
parentNavigatorKey
para 0. Isso faz sentido para você?Como implementá-lo em múltiplas instâncias de
StatefulShellBranch
?O desafio que você pode superar é como passar isso na
Widget5
aula.ref.watch
na suaWidget5
turma.Widget5
e acessá-lo viawidget.yourParentNavigatorExtraObject
.