刷新 ListView 中的数据 flutter

Refresh data in ListView flutter

我有一个包含 tabA 和 tabB 的菜单页。 appBar 有一个搜索按钮。

menu.dart

   @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Item List'),
        actions: [
          _currentIndex == 0
              ? Row(
                  children: [
                    IconButton(
                        onPressed: () {
                            Navigator.pushNamed(context, SearchScreen.ROUTE,
                                arguments: list);                        
                        },
                        icon: Icon(
                          Icons.search,
                          color: Colors.white,
                        )),
                    IconButton(
                      icon: Icon(
                        Icons.tune,
                        color: Colors.white,
                      ),
                      onPressed: () {
                            ...
                            }
                          }
                        });
                      },
                    )
                  ],
                )
              : Container()
        ],
        bottom: TabBar(
          unselectedLabelColor: Colors.white,
          labelColor: Colors.white,
          isScrollable: false,
          tabs: <Widget>[
            Tab(
              text: "Tab A",
            ),
            Tab(
              text: "Tab B",
            ),
          ],
          controller: _tabController,
          indicatorColor: Colors.white,
          indicatorSize: TabBarIndicatorSize.tab,
        ),
        bottomOpacity: 1,
      ),
      body: TabBarView(
        controller: _tabController,
        children: <Widget>[
          ShowTabA(),
          ShowTabB()
        ],
      ),
    );
  }
}

在tabA中,它有一个listView。当我点击其中一个列表视图项目时,它将导航到 EditPage。当EditPagereturn的时候,我会刷新tabA里面的数据。将更新所有列表项。

tabA.page

initState(){
    _bloc.getItemList();
}

Navigator.pushNamed(EditPage.ROUTE,context).then((onValue){
 _bloc.getItemList();
});

我的问题是:

当我单击菜单页面中的搜索图标时,它将导航到 SearchScreen page.Once 用户单击 SearchScreen 中的列表项,它将导航到 EditPage。

从 EditPage 返回时,我想刷新 TabA 页面中的列表,但它不能,因为我在菜单页面中使用 pushReplacementNamed 进行导航。如何实现?

SearchScreen.dart

Navigator.pushReplacementNamed(context);

已修改问题的更新答案:

由于您使用的是 pushReplacement,因此您的 await 将不起作用。您可以使用以下方法使其工作:

首先你必须定义你的路线:

routes: <String, WidgetBuilder> {
   '/': (BuildContext context) => // Your MainPage,
   '/menu': (BuildContext context) => MenuPage(),
   '/search': (BuildContext context) => SearchPage(),
   '/edit': (BuildContext context) => EditPage(),
}

从菜单导航到搜索:

void goToSearch() async {

   await Navigator.pushNamed(context, "/search", arguments: list);
   _bloc.getItemList().then((onValue){
      setState(() {
         list = onValue;
      });
   });

}

从搜索导航到编辑时使用 pushNamed 而不是 pushReplacementNamed:

Navigator.of(context).pushNamed("/edit");

重要步骤 当您必须从编辑返回菜单时,您必须使用popUntil方法:

Navigator.popUntil(context, ModalRoute.withName('/menu'));