【发布时间】:2020-06-12 07:43:00
【问题描述】:
我的 Widget 构建中有一个 StreamBuilder:
StreamBuilder(
stream: stream.asStream(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
...
流在 void initState 中定义。 fetchPost() 从 Api 调用信息:
@override
void initState() {
super.initState();
setState(() {
stream = fetchPost();
});
}
fetchPost():
Future<List<User>> fetchPost() async {
final response = await http.get('url');
final jsonResponse = json.decode(response.body);
List<User> users = [];
for(var u in jsonResponse){
User user = User(
id: u["id"].toString(),
uname: u["username"],
firstname: u["firstname"],
lastname: u["lastname"],
email: u["email"],
);
users.add(user);
}
return users;
}
在我通过新页面更改列表中的某些内容(API 也更改)后,它会导航回 StreamBuilder:
Navigator.pushReplacement(
context,
new MaterialPageRoute(builder: (context) => new UserDart())
);
但 StreamBuilder 有时不会刷新。我需要做什么才能刷新数据。所以每次页面加载时它都需要调用 fetchPost() 但是如何呢?
【问题讨论】:
-
fetchPost()的返回类型是什么?
-
它返回一个用户列表。
-
@lordvidex 我将其添加到问题中。
-
在 initState 方法中做 setState() 不是聪明的主意
-
@Eugene 我也可以使用
stream: fetchPost().asStream(),在 StreamBuilder 中编写它,但它仍然会刷新 10 次中的 8 次。我不明白为什么它有时会刷新,有时不会..