首页 > 解决方案 > Flutter BottomNavigationBar 在 dispose 后更改页面索引或再次调用函数(带参数?)

问题描述

BottomNavigationBarmain.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;
    });

当用户选择_selectedPageIndex2 时,我将隐藏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_pagesmap 和_selectedPageIndexare:

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> {
...

标签: flutterdart

解决方案


使其成为静态并使用该类来访问它,即:MyWidget._selectedPageIndex()


推荐阅读