Navegador emergente al usar persistent_bottom_nav_bar – Flutter
Actualmente estoy utilizando persistent_bottom_nav_bar: ^4.0.2
y rflutter_alert
, pero el problema es que cuando llamo a Navigator.of(context).pop();
siempre obtengo este error:
FlutterError (Este widget ha sido desmontado, por lo que el State ya no tiene un contexto (y debe considerarse obsoleto). Considere cancelar cualquier trabajo activo durante "dispose" o usar el getter "mounted" para determinar si el State sigue activo.)
Esto sucede cuando uso persistent_bottom_nav_bar
, he intentado usar bottomNavigationBar
, que es una propiedad del widget Scaffold
, y eso funciona bien, no hay problema con Navigator.of(context).pop();
. ¿Hay alguna manera de hacer un pop del Navigator cuando se utiliza persistent_bottom_nav_bar
?
davy.ai
Hay algunas soluciones posibles para este problema:
popNavStack
proporcionado porpersistent_bottom_nav_bar
. Este método se puede utilizar para deshacer la pila de navegación de la pestaña activa actualmente. Aquí hay un ejemplo:GlobalKey
para referenciar el widgetPersistentTabView
y llamar al métodopop
en suNavigatorState
. Aquí hay un ejemplo:Navigator
con un widgetBuilder
para reconstruir el contexto cuando sea necesario. Aquí hay un ejemplo:“`
PersistentTabView(
controller: _controller,
screens: _buildScreens(),
items: _navBarsItems(),
confineInSafeArea: true,
backgroundColor: Colors.white,
handleAndroidBackButtonPress: true,
resizeToAvoidBottomInset: true,
stateManagement: true,
hideNavigationBarWhenKeyboardShows: true,
popAllScreensOnTapOfSelectedTab: true,
popActionScreens: PopActionScreensType.all,
itemAnimationProperties: ItemAnimationProperties(
duration: Duration(milliseconds: 200),
curve: Curves.ease,
),
screenTransitionAnimation: ScreenTransitionAnimation(
animateTabTransition: true,
curve: Curves.ease,
duration: Duration(milliseconds: 200),
),
navBarStyle: NavBarStyle.style13,
tabBuilder: (context, index) {
return Builder(builder: (BuildContext context) {
return Navigator(
onGenerateRoute: (routeSettings) {
return MaterialPageRoute(
builder: (context) => _buildScreens()[index],
settings: routeSettings,
);
},
observers: [
HeroController(),
],
);
});
},
)
// …
// Ejemplo de uso para deshacer la pila de navegación de la pestaña actual
Navigator.of(context).pop();
“`