【发布时间】: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