我目前正在开发我的第一个简单的flutter应用程序,并试图找出我们处理屏幕之间导航的最佳方法。
已经可能:
BottomNavigationBar
+ BottomNavigationBarItem
在屏幕上导航Navigator.push(context,MaterialPageRoute(builder: (context) => Screen4()),);
导航问题:
BottomNavigationBar
的屏幕中有子屏幕代码示例:
我希望有三个主要屏幕Screen1()
,Screen2()
和Screen3()
可从BottomNavigationBar
访问。在Screen1()
中,有一个导航到另一个屏幕的按钮,称为Screen4()
,用户可以在其中从项目列表中进行选择。然后,您可以将所有选择的项目添加到列表中,并导航回到Screen1()
。
为此,我创建了以下代码。 Widget
的主要body
将根据所选BottomNavigationItem
的当前索引进行更改。
main.dart
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
static const String _title = 'Code Sample';
@override
Widget build(BuildContext context) {
return MaterialApp(
title: _title,
home: MyApp(),
);
}
}
class MyApp extends StatefulWidget {
MyApp({Key key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
int _selectedIndex = 0;
static const List<Widget> _widgetOptions = <Widget>[
Screen1(),
Screen2(),
Screen3(),
];
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Stackoverflow Example'),
),
body: Center(
child: _widgetOptions.elementAt(_selectedIndex),
),
bottomNavigationBar: BottomNavigationBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.home),
title: Text('Screen1'),
),
BottomNavigationBarItem(
icon: Icon(Icons.business),
title: Text('Screen2'),
),
BottomNavigationBarItem(
icon: Icon(Icons.school),
title: Text('Screen3'),
),
],
currentIndex: _selectedIndex,
selectedItemColor: Colors.amber[800],
onTap: _onItemTapped,
),
);
}
}
问题是,当我在Screen1()
-窗口小部件中使用{p>
Screen4()
导航将在Navigator.push(context,MaterialPageRoute(builder: (context) => Screen4()),);
之外进行,因此没有MyApp()
。
如果有人举了一个例子,那么我会很高兴的。 谢谢您的阅读。
答案 0 :(得分:1)
我知道现在有点晚了,但希望可以为您提供帮助。
要实现此目的,您可以将Offstage小部件与导航器作为其子级一起使用,这样,您将在所有页面上拥有一个持久的导航栏。
您可以阅读本文以获取更多详细信息以及如何实现
您可能需要对其进行一些微调以适合您的情况。
有关“后台”窗口小部件的信息:
答案 1 :(得分:0)
我建议您运行CupertinoApp
而不是MaterialApp
。使用CupertinoTabScaffold
代替Scaffold
。添加一个CupertinoTabBar
作为tabBar并返回一个CupertinoTabView
作为tabBuilder
tabBuilder的示例
tabBuilder: (context, index) {
if (index == 0) {
return CupertinoTabView(
navigatorKey: firstTabNavKey,
builder: (BuildContext context) => Screen1(),
以下是一篇不错的文章,内容为:link