美文网首页工作生活
flutter 初学 入坑 之 切换BottomNavigati

flutter 初学 入坑 之 切换BottomNavigati

作者: biubiubiuCOWARD | 来源:发表于2019-07-04 11:43 被阅读0次

    在我们开发过程中底部导航栏是必不可少的,在flutter中使用BottomNavigationBar时遇到一个问题。在切换BottomNavigationBar的index后,所对应的页面发生了重绘。

    问题代码:

    class MyAppPageState extends State<MyAppPage> {
      int _currentIndex;
      List<Widget> _controllerList;
    
      @override
      void initState() {
        super.initState();
        _currentIndex = 0;
        _controllerList = [
          HomePageWidget(),
          ...
        ];
      }
      /*底部导航栏的点击事件*/
      void _bottomNaviOnTap(int index) {
        setState(() {
          _currentIndex = index;
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: this._controllerList[this._currentIndex],
          bottomNavigationBar: BottomNavWidget(
            currentIndex: this._currentIndex,
            onTap: this._bottomNaviOnTap,
          ),
        );
      }
    }
    

    解决办法:通过IndexedStack组件让BottomNavigationBar对用的所有页面堆积在一起,通过index判断谁显示在最上面。

    解决代码:

    class MyAppPageState extends State<MyAppPage> {
      int _currentIndex;
      List<Widget> _controllerList;
    
      @override
      void initState() {
        super.initState();
        _currentIndex = 0;
        _controllerList = [
          HomePageWidget(),
          ...
        ];
      }
      /*底部导航栏的点击事件*/
      void _bottomNaviOnTap(int index) {
        setState(() {
          _currentIndex = index;
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: IndexedStack(
            index: this._currentIndex,
            children: this._controllerList,
          ),
          bottomNavigationBar: BottomNavWidget(
            currentIndex: this._currentIndex,
            onTap: this._bottomNaviOnTap,
          ),
        );
      }
    }
    

    总结:

    使用IndexedStack来实现会有性能上的问题,在初始化的时候,会一次性的将所有的页面全部被加载。 目前还没有找到更好的办法来解决这个问题。

    相关文章

      网友评论

        本文标题:flutter 初学 入坑 之 切换BottomNavigati

        本文链接:https://www.haomeiwen.com/subject/xgelhctx.html