【问题标题】:Refresh data in ListView flutter刷新 ListView 中的数据颤动
【发布时间】:2021-04-13 09:28:20
【问题描述】:

我有一个包含 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。从 EditPage 返回时,我将刷新 tabA 中的数据。所有列表项都将更新。

tabA.page

initState(){
    _bloc.getItemList();
}

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

我的问题:

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

从 EditPage 返回时,我希望刷新 TabA 页面中的列表,但它不能,因为我在 menu page 中使用 pushReplacementNamed 导航。如何实现?

SearchScreen.dart

Navigator.pushReplacementNamed(context);

【问题讨论】:

  • 您是否在应用中使用提供程序来管理状态?我猜 _bloc 是那个提供者的对象。如果我的猜测是正确的,那么您可以使用 StreamProvider 或 ChangeNotifierProvider 在您的列表值更改后立即自动更新您的列表。
  • @CodeRunner 但是现在的问题是 _bloc.getItemList(); 从 EditPage 回来后没有被调用。
  • Navigator.pushNamed(EditPage.ROUTE,context).then((onValue){ _bloc.getItemList(); });当您从该页面返回时,不会调用此部分,因为您正在调用该部分,而您要编辑页面而不是从编辑页面返回。您可以在点击编辑页面上的保存或更新按钮时调用 getItems(),或者您可以在该页面的 dispose 方法中调用 getItems(),这样每次您从 editPage 返回时它都会调用该方法。
  • 我应该把dispose方法放在哪里?在选项卡 A 中?
  • 在您的编辑页面中没有

标签: flutter dart navigation


【解决方案1】:

已修改问题的更新答案:

由于您使用的是 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'));

【讨论】:

  • 抱歉,我认为我的问题不清楚且具有误导性。我已更新。
  • 请帮助T.T
  • @Tony 很高兴知道它有帮助。快乐编码!!!
猜你喜欢
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 2021-11-09
  • 2016-02-19
  • 1970-01-01
相关资源
最近更新 更多