问题描述
我正在使用 Multiprovider 来提供我的自定义 GameLobby 类:
var game_lobby = GameLobby(user: user);
return MultiProvider(
providers: [
StreamProvider<GameState>(create: (_) => game_lobby.gameStateStream,),Provider<GameLobby>(create: (_) => game_lobby,],child: GameRoomScreen()
);
后来,在 GameLobby 类中,我调用了 firebase.firestore 以创建一个新集合
await gameRef.doc(user.uid).set({
'lobbyName': 'Lobimiz','code' : generateNewRoomCode(),'date': Timestamp.now(),'players' : [user.uid]
})
.then((value) => {
gameRef.doc(user.uid).snapshots().listen((event) {
Map<String,dynamic> firestoreInfo = event.data();
players = [...firestoreInfo['players']];
print(event.data().toString());
gameState = GameState.InLobby; /* GAMESTATE SETTER IS CALLED */
})
})
// ignore: missing_return
.onError((error,stackTrace) {print(error.toString());});
此代码通常是第一次使用。当我在 firebase 上手动插入一个条目以进行测试时, gameRef.doc(user.uid).snapshots().listen() 再次触发,因为条目已更改,我正在听。
这次 gameState 属性发生变化并且 gameState 在 setter 方法中流式传输,例如:
set gameState(GameState state){
this._gameState = state;
this._streamController.sink.add(this._gameState);
}
我想添加新的 gameState 以根据新的状态和玩家列表流式传输和重建某些内容。但现在我得到了
StateError(错误状态:元素过多)
定义和抛出如下: https://api.flutter.dev/flutter/dart-async/Stream/single.html
// 这是我们得到的第二个元素。
尝试{抛出
IterableElementError.tooMany();
这里有什么问题?流不是一次允许多个接收器元素吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)