flutter - Flutter:在 CupertinoTabScaffold 中处理多个导航屏幕
问题描述
您好,我是 Flutter 的新手,我正在尝试为每个选项卡实现一个带有多个导航屏幕的底部选项卡栏。
这是我的初始设置
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return CupertinoApp(home: HomeScreen(),
routes: {
Screen1.id: (context) => Screen1(),
Screen2.id: (context) => Screen1(),
DetailScreen3.id: (context) => DetailScreen3(),
DetailScreen4.id: (context) => DetailScreen4(),
});
}
}
这是我的主屏幕
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CupertinoTabScaffold(
tabBar: CupertinoTabBar(
items: [
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.book_solid),
title: Text('Articles'),
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.eye_solid),
title: Text('Views'),
),
],
),
tabBuilder: (context, index) {
if (index == 0) {
return Screen1();
} else {
return Screen2();
}
},
);
}
}
这是我的屏幕1
class Screen1 extends StatelessWidget {
static const String id = 'screen1';
@override
Widget build(BuildContext context) {
return CupertinoPageScaffold(
navigationBar: CupertinoNavigationBar(),
child: GestureDetector(
onTap: () {
Navigator.pushNamed(context, DetailScreen3.id);
},
child: Center(
child: Text('Screen 1',),
),
),
);
}
}
这是我的屏幕3
class DetailScreen3 extends StatelessWidget {
static const String id = 'screen3';
@override
Widget build(BuildContext context) {
return CupertinoPageScaffold(
navigationBar: CupertinoNavigationBar(),
child: Center(
child: Text('terzo schermo',),
),
);
}
}
tabBar 工作正常,我可以在 2 个选项卡之间切换,但我无法从屏幕 1 导航到屏幕 3。当我点击 screen1 中心小部件时,屏幕开始导航,但中途停止,然后屏幕变成全黑...
这是错误
有多个英雄在子树中共享相同的标签。在要为其动画英雄的每个子树(即 PageRoute 子树)中,每个英雄必须有一个唯一的非空标记。在这种情况下,多个英雄具有以下标签: 带有导航器 NavigatorState#05492 的库比蒂诺导航栏的默认英雄标签(代码:跟踪 2 个代码)
我了解问题与导航栏的英雄标签有关,该标签必须具有唯一标识符。我应该如何解决这个问题?我应该为所有导航栏分配一个 heroTag 吗???
非常感谢您的帮助
解决方案
我通过为每个 CupertinoNavigationBar 设置以下属性来解决
heroTag: 'screen1', // a different string for each navigationBar
transitionBetweenRoutes: false,
推荐阅读
- neo4j - 在 SDN (Spring Data Neo4J) 中定义自引用节点时关系未返回
- ios - 并行执行 Xcode 10 UI 测试时禁用模拟器的连接硬件键盘设置
- android - 在 Android Smartwatch 上安装自己的应用程序时出现问题
- jupyter-notebook - Jupyter Notebook 下载到其他格式不起作用
- macos - 终端错误:zsh:权限被拒绝:./startup.sh
- python - Python PyGame 跳转代码在不应该运行时运行
- java - SSH进入流浪服务器后执行流程
- java - 在 SpringBoot 中哪里可以定义所有环境中通用的属性?
- python - Python - 根据条件调用函数
- c# - 用于封装的 AutoMapper 和嵌套对象映射