无法使底部导航栏和路由一起工作
Cannot make bottom navigation bar and routing work together in flutter
我是 Flutter 新手,我无法从底部导航栏导航到新页面
我有主应用程序
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
));
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(primarySwatch: Colors.blue),
builder: (BuildContext buildContext, Widget widtget) => Scaffold(
body: RootNavigator(),
bottomNavigationBar: BottomNavigation(),
),
);
}
}
和 Rootnavigator
class RootNavigator extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Navigator(
initialRoute: '/',
onGenerateRoute: (RouteSettings settings) {
// final args = settings.arguments;
return MaterialPageRoute(
settings: settings,
builder: (BuildContext context) {
switch (settings.name) {
case '/':
return Page1();
case '/page2':
return Page2();
case '/page3':
return Page3();
default:
return RouteErrorPage();
}
});
},
);
}
}
和底部导航器
class BottomNavigation extends StatefulWidget {
@override
BottomNavigationState createState() {
return new BottomNavigationState();
}
}
class BottomNavigationState extends State<BottomNavigation> {
int currIndex = 0;
onTap(int index) {
setState(() => currIndex = index);
switch (index) {
case 0:
Navigator.pushNamed(context, '/');
break;
case 1:
Navigator.pushNamed(context, '/page2');
break;
case 2:
Navigator.pushNamed(context, 'page3');
break;
default:
Navigator.push(
context, MaterialPageRoute(builder: (_) => RouteErrorPage()));
}
}
....
// added app bar items
}
选项卡正在切换,但路由没有。它留在主页上。
我觉得有些东西有上下文,但不知道如何解决。
有人可以帮忙吗?
谢谢
p.s。如果我将底部导航栏分别移动到每个页面,除了选定的选项卡(由于状态)之外,其他所有内容都可以工作,而且我还想保留一个共享应用程序栏
答案是 - @LoVe 评论是正确的。
这就是 flutter 的工作原理。
如果您有底部导航,则必须轻扫页面。
重定向意味着移动到全新的页面,您必须从头开始定义脚手架。
如果您想共享 AppBar - 使其可重用小部件
我是 Flutter 新手,我无法从底部导航栏导航到新页面
我有主应用程序
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
));
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(primarySwatch: Colors.blue),
builder: (BuildContext buildContext, Widget widtget) => Scaffold(
body: RootNavigator(),
bottomNavigationBar: BottomNavigation(),
),
);
}
}
和 Rootnavigator
class RootNavigator extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Navigator(
initialRoute: '/',
onGenerateRoute: (RouteSettings settings) {
// final args = settings.arguments;
return MaterialPageRoute(
settings: settings,
builder: (BuildContext context) {
switch (settings.name) {
case '/':
return Page1();
case '/page2':
return Page2();
case '/page3':
return Page3();
default:
return RouteErrorPage();
}
});
},
);
}
}
和底部导航器
class BottomNavigation extends StatefulWidget {
@override
BottomNavigationState createState() {
return new BottomNavigationState();
}
}
class BottomNavigationState extends State<BottomNavigation> {
int currIndex = 0;
onTap(int index) {
setState(() => currIndex = index);
switch (index) {
case 0:
Navigator.pushNamed(context, '/');
break;
case 1:
Navigator.pushNamed(context, '/page2');
break;
case 2:
Navigator.pushNamed(context, 'page3');
break;
default:
Navigator.push(
context, MaterialPageRoute(builder: (_) => RouteErrorPage()));
}
}
....
// added app bar items
}
选项卡正在切换,但路由没有。它留在主页上。 我觉得有些东西有上下文,但不知道如何解决。 有人可以帮忙吗? 谢谢
p.s。如果我将底部导航栏分别移动到每个页面,除了选定的选项卡(由于状态)之外,其他所有内容都可以工作,而且我还想保留一个共享应用程序栏
答案是 - @LoVe 评论是正确的。 这就是 flutter 的工作原理。 如果您有底部导航,则必须轻扫页面。 重定向意味着移动到全新的页面,您必须从头开始定义脚手架。 如果您想共享 AppBar - 使其可重用小部件