Flutter切换tab后保留tab状态

发布时间:2019-06-03 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Flutter切换tab后保留tab状态脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

BottomNavigationBar+PageView+AutomaticKeepAliveClientMixin

要点

子页面的class


class _HomePagestate with AutomaticKeepAliveClientMixin{//要点1
 
 
  @override
  bool get wantKeepAlive => true;//要点2
 
  Widget build(BuildContext context){
    super.build(context);//要点3
  }

光上面其实还不够,还需要搭配其他Widget使用,例如BottomNavigationBar+PageView活着TabBar+TabbarView,这样页面才不会销毁。

//PageView是重点的重点

Scaffold(
        body:PageView.builder(
          physics: NeverScrollableScrollPhysics(),//禁止页面左右滑动切换
          controller: _pageController,
          onPageChanged: _pageChanged,
          itemCount: _pages.length,
          itemBuilder: (context,index)=>_pages[index]
        )
        bottomNavigationBar:...
)
class MyApp extends StatefulWidget{
  @override
  _MyAppState createstate() => _MyAppState();
}
 
class _MyAppState extends State<MyApp>{
  var _pages = [HomePage(),ListViewDemo(),DemoPage(),UserListPage()]; 
  int _tabIndex = 0;
 
  var _pageController =PageController();
 
  @override
  void dispose() {
    super.dispose();
    _pageController.dispose();
  }
 
  Widget build(BuildContext context){
    return MaterialApp(
      theme: ThemeData(
        primaryColor: Colors.pinkAccent
      ),
      
      home:Scaffold(
        body:PageView.builder(//要点1
          physics: NeverScrollableScrollPhysics(),//禁止页面左右滑动切换
          controller: _pageController,
          onPageChanged: _pageChanged,//回调函数
          itemCount: _pages.length,
          itemBuilder: (context,index)=>_pages[index]
        ),
        bottomNavigationBar:BottomNavigationBar(
          items: <BottomNavigationBarItem>[
            BottomNavigationBarItem(title:Text('主页'),icon: Icon(Icons.home)),
            BottomNavigationBarItem(title:Text('商城'),icon: Icon(Icons.shopping_basket)),
            BottomNavigationBarItem(title:Text('测试'),icon: Icon(Icons.pageview)),
            BottomNavigationBarItem(title:Text('我的'),icon: Icon(Icons.account_box)),
          ],
          onTap: (index){
            print('onTap');
            _pageController.jumpToPage(index);
  
          },      
          type:BottomNavigationBarType.fixed,
          currentIndex: _tabIndex,  
        ),
       
        
      )    
      );
  }
 
  void _pageChanged(int index){
    print('_pageChanged');
    setState(() {
      if(_tabIndex != index)
        _tabIndex = index;
    });
  }
  
}
 
class DemoPage extends StatefulWidget {
  _DemoPageState createState() => _DemoPageState();
}
 
class _DemoPageState extends State<DemoPage> with AutomaticKeepAliveClientMixin{//要点1
  int _count = 0;
 
  @override
  bool get wantKeepAlive => true;//要点2
 
  @override
  Widget build(BuildContext context) {
    super.build(context);//要点3
    return Scaffold(
      appBar: AppBar(title:Text('Demo Page')),
      body: Center(child:Text('当前计数:$_count')),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: (){
          setState(() {
            _count++;
          });
        },
      ),
    );
  }
}

:CSDN
原文:https://blog.csdn.net/weixin_...
版权声明:本文为博主原创文章转载请附上博文链接!

脚本宝典总结

以上是脚本宝典为你收集整理的Flutter切换tab后保留tab状态全部内容,希望文章能够帮你解决Flutter切换tab后保留tab状态所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。