我有一个listView,它是使用Future Builder
创建的,所有数据都是从服务器获取的,添加新记录后,记录已成功添加到数据库中,Navigate.pop
已成功添加到listView页面中,但是我的列表未刷新,如何刷新我的列表?
FutureBuilder<List<NewAddressModel>>(
future: myAddressList,
builder: (context, snapshot) {
print(snapshot);
if (snapshot.hasData)
return addressList(snapshot.data);
else if (snapshot.hasError)
return _buildErrorPage(snapshot.error);
else
return _buildLoadingPage();
},
),
Widget _buildErrorPage(error) => Material(
child: Center(
child: Text("ERROR: $error"),
),
);
Widget _buildLoadingPage() => Material(
child: Center(
child: CircularProgressIndicator(),
),
);
IconButton (
icon: Icon(Icons.add_location),
onPressed: navigateToAddAddress
)
void navigateToAddAddress() async {
await Navigator.push(context, MaterialPageRoute(builder: (context) {
return AddAddress();
}));
}
答案 0 :(得分:2)
这是因为当您从一个页面导航到另一页面时,应在推送中添加@Abjox所说的whencomplete方法,以便当您导航回到Listview页面时,将调用build方法,并且futurebuilder将获取数据。并在您插入数据库的列表中的数据中显示。
答案 1 :(得分:2)
只需将Future
函数调用重新分配给myAddressList
,然后再调用setState
。
Future<void> navigateToAddAddress() async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AddAddress(),
),
);
setState((){
myAddressList = _fetchAddressListFromServer();
});
}
答案 2 :(得分:1)
像@Abjox建议的那样使用Navigator.push()。whenComplete((){setState(){}})这样的
void navigateToAddAddress() async {
Navigator.of(context).push
(new MaterialPageRoute(builder: (context) => AddAddress()))
.whenComplete((){setState(() {
// use here that method by which you load data into listView
});});
}