我本以为这个问题有一个简单的解决方案,但我还没有找到任何。。。
我的应用程序中有几个选项卡,在其中一个选项卡中,我使用打开另一个屏幕
Navigator.push(context, MaterialPageRoute(...
一旦用户点击该屏幕中的按钮,我想将其弹出并导航到另一个选项卡。
我试图将TabController传递到相关选项卡及其子屏幕,但这似乎不是最简单的解决方案,也不容易实现,因为控制器尚未定义:
tabController = DefaultTabController(
body: TabBarView(
children: [
FirstTab(
tabController: tabController // <- tabController is not defined yet at this point:(
有没有";全局";用于重置应用程序的";整个";路由,以便同时弹出MaterialPageRoute和导航到特定选项卡?
您可以使用Navigator.of(context(.pushReplacement
我找到的解决方案是同步调用Navigator的push并检查其返回值。然后,当我想导航到另一个选项卡时,我只需在Navigator的弹出窗口中发送真实的指示。
这就是我的导航方法,请注意,在导航到另一个选项卡之前,我不得不添加一个短暂的延迟,不确定为什么,但没有它就无法工作:
_navigateToDetailsScreen() async {
bool shouldNavigateToHomeTab = await Navigator.push(
context,
MaterialPageRoute(builder: (context) => DetailsScreen()),
));
if (shouldNavigateToHomeTab) {
Future.delayed(const Duration(milliseconds: 500), () {
DefaultTabController.of(context)!.animateTo(0);
});
}
}
这就是我所说的流行:
Navigator.of(context).pop(true);
这对我来说似乎是最简单的解决方案,到目前为止我没有发现任何问题