问题描述
我正在使用build方法中的StreamBuilder从Firestore中检索用户信息,并在将其与Listview.builder一起显示之后。
一旦我检索了用户信息,我将使用用户ID调用另一个API来检索我想显示在列表中的一些其他信息。这给我每个用户一个Future,一旦Future被“实现”(在Future.then()内部),然后我保存数据并调用SetState();。用新数据重建列表。
问题是一旦调用setState()重新运行Build方法,这再次为我提供了用户,这导致了从第二个API检索用户和数据的无休止循环。
这似乎是一个典型的场景,但是我不知道如何使用StreamBuilder解决此问题。我以前的解决方案在initState中检索了用户,因此不会无休止地对其进行调用。 有提示吗?
“ getOtherAPIData”循环检索到的用户,并将数据“距离”添加到列表中,并且列表基于距离最大/最小的用户进行排序。 代码:
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder<List<IsFriend>>(
stream: viewModel.isFriendStream(),builder: (_,snapshot) {
if (snapshot.connectionState == ConnectionState.active) {
List<IsFriend> friends = snapshot.data;
if (friends == null || friends.isEmpty) {
return Scaffold(
body: Center(
child: Text("Friend list is empty :("),)
);
} else {
userList = friends;
getOtherAPIData();
return getListview(userList);
}
}
return Scaffold(
body: Center(
child: CircularProgressIndicator(),)
);
}
),..
..
void getOtherAPIData() async {
for (IsFriend friend in userList) {
await fitbitServ.getData(friend.user.uid).then((fitData) {
setState(() {
setDistanceOnUser(fitData.distanceKm,friend.user.uid);
totalDistance += fitData.distanceKm;
sortUsers(userDataList);
userData[friend.user.uid] = fitData;
});
});
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)