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_...
版权声明:本文为博主原创文章,转载请附上博文链接!