Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter BottomNavigationBar页面更改导致StreamBuilder数据重新加载_Flutter_Bloc - Fatal编程技术网

Flutter BottomNavigationBar页面更改导致StreamBuilder数据重新加载

Flutter BottomNavigationBar页面更改导致StreamBuilder数据重新加载,flutter,bloc,Flutter,Bloc,内部底部导航我有两页。第一页从网络加载数据并显示在SliverList中,另一页显示静态列表数据 从第1页移动到第2页后,第1页所有网络数据都消失了。我用过PageStorageKey,但它仍然不起作用。但第二页从未重新加载 为什么第一页没有保存其包含StreamBuilder的状态? 我的代码: 底部导航页面: class MainActivity extends StatefulWidget { @override _MainActivityState createState() =

内部底部导航我有两页。第一页从网络加载数据并显示在SliverList中,另一页显示静态列表数据

从第1页移动到第2页后,第1页所有网络数据都消失了。我用过PageStorageKey,但它仍然不起作用。但第二页从未重新加载

为什么第一页没有保存其包含StreamBuilder的状态?

我的代码:

底部导航页面:

class MainActivity extends StatefulWidget {
  @override
  _MainActivityState createState() => _MainActivityState();
}

class _MainActivityState extends State<MainActivity> {

  final Key keyHome = PageStorageKey('pageHome');
  final Key keyChat = PageStorageKey('pageChat');

  int currentTab = 0;

  HomePage home;
  Chat chat;
  List<Widget> pages;
  Widget currentPage;

  final PageStorageBucket bucket = PageStorageBucket();
  @override
  void initState(){
    home = HomePage(

      key: keyHome,
    );
    chat = Chat(
      key: keyChat,
    );
    pages = [home, chat];
    currentPage = home;

    super.initState();
  }



  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: PageStorage(
        child: currentPage,
        bucket: bucket,),
      //Bottom Navigation Bar added
      bottomNavigationBar: BottomNavigationBar(
        currentIndex: currentTab,
        onTap: (int index){
          setState(() {
            currentTab = index;
            currentPage = pages[index];
          });
        },
        type: BottomNavigationBarType.fixed,
        items: <BottomNavigationBarItem>[
          BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('Home')),
          BottomNavigationBarItem(icon: Icon(Icons.chat), title: Text('Chat')),
          BottomNavigationBarItem(
              icon: Icon(Icons.payment), title: Text('Pay')),
          BottomNavigationBarItem(
              icon: Icon(Icons.account_circle), title: Text('Me')),
        ],
        //currentIndex: _selectedIndex,
        fixedColor: Colors.deepPurple,
      ),
    );
  }
}

更好的方法是使用IndexedStack而不是PageStorage或AutomaticEpaLiveClientMixin

 class _MainActivityState extends State<MainActivity> {

  int _selectedPage = 0;
  List<Widget> pageList = List<Widget>();

  @override
  void initState() {
    pageList.add(HomePage());
    pageList.add(ChatPage());
    super.initState();
  }

 @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: IndexedStack(
        index: _selectedPage,
        children: pageList,
      ),
      //Bottom Navigation Bar added
      bottomNavigationBar: BottomNavigationBar(
    .....
class\u MainActivityState扩展状态{
int _selectedPage=0;
List pageList=List();
@凌驾
void initState(){
pageList.add(HomePage());
pageList.add(ChatPage());
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:IndexedStack(
索引:\ u所选页面,
儿童:页面列表,
),
//添加了底部导航栏
底部导航栏:底部导航栏(
.....
**IndexedStack小部件是堆栈小部件的子类

它显示提供的孩子列表中的单个孩子。 它的大小和最大的孩子一样大。
它会保持所有孩子的状态。
***

检查-
AutomaticEpaLiveClientMixin
-相同的结果。我的滚动位置已保存,但列表数据会再次重新加载。您需要保持构建方法的纯净-检查remi的伟大答案-我在streambuilder中有分页系统。如何优化底部导航栏?请详细说明您的答案是否包含导航页面更改操作?
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemExtent: 250.0,
      itemCount: 20,
      itemBuilder: (context, index) => Container(
        padding: EdgeInsets.all(10.0),
        child: Material(
          elevation: 4.0,
          borderRadius: BorderRadius.circular(5.0),
          color: index % 2 == 0 ? Colors.cyan : Colors.deepOrange,
          child: Center(
            child: Text('Mir{$index}'),
          ),
        ),
      ),
    );
  }


}
 class _MainActivityState extends State<MainActivity> {

  int _selectedPage = 0;
  List<Widget> pageList = List<Widget>();

  @override
  void initState() {
    pageList.add(HomePage());
    pageList.add(ChatPage());
    super.initState();
  }

 @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: IndexedStack(
        index: _selectedPage,
        children: pageList,
      ),
      //Bottom Navigation Bar added
      bottomNavigationBar: BottomNavigationBar(
    .....