flutter - Flutter BottomNavigationBar 在 dispose 后更改页面索引或再次调用函数(带参数?)
问题描述
我BottomNavigationBar
的main.dart
.
final List<Map<String, Object>> _pages = [
{
'page': Screen1(),
},
{
'page': Screen2(),
},
{
'page': Screen3(),
},
{
'page': Screen4(),
},
];
int _selectedPageIndex = 0;
void _selectPage(int index) {
setState(() {
_selectedPageIndex = index;
});
当用户选择_selectedPageIndex
2 时,我将隐藏BottomNavigationBar
并全屏显示页面:
@override
Widget build(BuildContext context) {
return Scaffold(
extendBodyBehindAppBar: true,
body: _pages[_selectedPageIndex]['page'],
bottomNavigationBar: _selectedPageIndex != 2
? Column(mainAxisSize: MainAxisSize.min, children: <Widget>[
GlobalPlayerSmall(),
BottomNavigationBar(
onTap: _selectPage,
backgroundColor: Theme.of(context).primaryColor,
unselectedItemColor: Color.fromRGBO(130, 130, 130, 1),
selectedItemColor: Color.fromRGBO(236, 37, 105, 1),
selectedFontSize: 10,
iconSize: 22,
currentIndex: _selectedPageIndex,
type: BottomNavigationBarType.fixed,
selectedLabelStyle: TextStyle(fontSize: 12),
items: [
BottomNavigationBarItem(
backgroundColor: Theme.of(context).primaryColor,
icon: Icon(Icons.home),
title: Text(
...
现在,当我们打开Screen3()
时,我们隐藏了BottomNavigationBar
并且我们必须导航回来,我Navigator.pushReplacementNamed(context, '/');
用来返回默认屏幕。(我无法更改,_selectedPageIndex
因为它BottomNavigationBar
是隐藏的,我们无权访问该值)
现在我的问题:在我main.dart
的函数中,我使用 initState。如果我们Navigator.pushReplacementNamed(context, '/');
处理函数。
@override
void initState() {
super.initState();
setupValues();
}
@override
void dispose() {
super.dispose();
exampleFunction.stop();
}
在OR 是否有其他想法可以完成这项工作之后,我该如何setupValues();
再次打电话?Navigator.pushReplacementNamed(context, '/');
欣赏你的每一个想法!提前致谢!
编辑:
文件 where BottomNavigationBar
,_pages
map 和_selectedPageIndex
are:
class TabsScreen extends StatefulWidget {
static const routeName = '/';
@override
_TabsScreenState createState() => _TabsScreenState();
}
class _TabsScreenState extends State<TabsScreen> {
...
我必须访问的文件_selectedPageIndex
- Screen3()
:
class Screen3 extends StatefulWidget {
static const routeName = '/find';
@override
_Screen3State createState() => _Screen3State();
}
class _Screen3State extends State<Screen3> {
...
解决方案
使其成为静态并使用该类来访问它,即:MyWidget._selectedPageIndex()
推荐阅读
- javascript - 停止冒泡时会先调用哪个事件?
- python - 如果值计数低于阈值,则将列值映射到“杂项” - 分类列 - Pandas Dataframe
- asp.net-core-2.0 - Abp Castle 依赖注入抽象类
- angular - 使用 Angular 6 项目安装 Webpack 时出错
- javascript - 使用 lodash 在 JavaScript 中对多行数据进行排序
- node.js - 我们如何让代码等待在 node.js 中执行下一条语句
- c# - 避免掉边
- javascript - 在 JS 中连接单击的按钮值和功能
- python - 从现有列构造新列而不在熊猫中重新指定数据框
- flutter - 处理父小部件中的点击事件