当我在下面的代码中调用有状态小部件中的setstate函数时,我得到了无限循环。
当我删除它时,它会停止循环,但我不会更新我的小部件,所以我需要使用setstate来更新我的小部件,但我找不到一种方法来摆脱它所导致的无限循环。
//On changes in players reference in the RT DB
playersRef.onValue.listen(
(DatabaseEvent event) {
print("Changes in DB");
List<Player> tempPlayers = [];
for (final playerSnapshot in event.snapshot.children) {
//Adding all players info from RT DB into tempPlayers
tempPlayers.add(Player(
playerSnapshot.child("name").value.toString(),
playerSnapshot.child("id").value.toString(),
(judge == playerSnapshot.child("name").value.toString())
? true
: false,
playerSnapshot.child("isJudge").value as bool,
playerSnapshot.child("isLoaded").value as bool,
));
}
//Updating players list with tempPlayers list
setState(
() {
print("In set state");
players = tempPlayers;
},
);
},
);
我尝试在playersRef.onValue.listen()中的不同位置删除setstate,但没有一个成功。
我试图用这部分代码来更新我的球员列表,每当真实的数据库中有任何变化时,然后通过使用setstate来更新我的小部件,以反映更新后的球员列表。
1条答案
按热度按时间7tofc5zh1#
就像S. M. JAHANGIR说的,可能想使用StreamBuilder,通过snapshots()函数监听firebase集合ref上的更改会更安全。您还应该需要setState,因为您可以从StreamBuilder构建UI。