【发布时间】:2018-10-08 09:35:50
【问题描述】:
我正在构建一个底部导航栏中包含 3 个项目的应用。当我更改选项卡时,正在呈现不同的小部件。到目前为止,一切都很好......
import 'package:flutter/material.dart';
class BottomTest extends StatefulWidget {
State createState() => new _BottomTestState();
}
class _BottomTestState extends State<BottomTest> {
List<Widget> _pages;
Widget _selectedContent;
int _bottomIndex;
@override
void initState() {
_bottomIndex = 0;
super.initState();
}
@override
Widget build(BuildContext context) {
_definePages();
return Scaffold(
appBar: AppBar(
title: Text('Bottom Navigation Test'),
),
body: _selectedContent ?? _pages[_bottomIndex],
bottomNavigationBar: BottomNavigationBar(
items: [
BottomNavigationBarItem(
icon: Icon(Icons.add),
title: Text("Red")
),
BottomNavigationBarItem(
icon: Icon(Icons.location_on),
title: Text("Blue")
),
BottomNavigationBarItem(
icon: Icon(Icons.people),
title: Text("Green")
)
],
currentIndex: _bottomIndex,
onTap: _onTabTapped,
)
);
}
_definePages() {
_pages = [
Container(
color: Colors.red,
child: Stack(children: <Widget>[
_defineFloatingActionButton(),
])
),
Container(color: Colors.blue),
Container(color: Colors.green),
];
}
_defineFloatingActionButton() {
return Align(
alignment: Alignment.bottomRight,
child: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
//TODO: How to navigate to another page with still displaying the bottom navigation bar?
}
),
);
}
void _onTabTapped(int index) {
setState(() {
_bottomIndex = index;
_selectedContent = _pages[index];
});
}
}
//POST
class Post extends StatefulWidget {
State createState() => new _PostState();
}
class _PostState extends State<Post> {
@override
Widget build(BuildContext context) {
return Column(children: <Widget>[
PostHeader(),
Text('This is a post.')
]);
}
}
//POSTHEADER
class PostHeader extends StatefulWidget {
State createState() => new _PostHeaderState();
}
class _PostHeaderState extends State<PostHeader> {
@override
Widget build(BuildContext context) {
return ListTile(
leading: Text('Author'),
onTap: () {
//TODO: This should navigate to another page but still displaying the bottom navigation bar, too.
},
);
}
}
但我想不出更高级导航的最佳做法。我目前面临两个问题。
当在第一页上切换 FloatingActionButton 时,我想显示第四页,但 BottomNavigationBar 仍然需要可见且可操作。
构建一个更复杂的应用程序,我正在处理一些嵌套类。所以在我的根页面上,有一个“Post”类,并且该帖子包含一个“PostHeader”类。在 PostHeader 中,有一个带有 onTap 回调的 ListTile,它应该会影响我的 _selectedContent。我如何定义这个回调?通过所有不同的类传递它似乎并不正确。
我考虑在我的 BottomTest.dart 中定义它并通过 Post 和 PostTile 传递它,但这对我来说似乎不是最佳实践,尤其是在谈到大量必需的回调时。
提前非常非常感谢您!
【问题讨论】:
-
这是一个您可以阅读的博客,它讨论了您的问题 1,不确定问题 2。它讨论了使用 TabNavigator medium.com/coding-with-flutter/… 构建动态路由的一些技巧