刷新 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'));
我有一个包含 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'));