在 Dart/Flutter 中流式传输时出现 StateError错误状态:元素过多

问题描述

我正在使用 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 (将#修改为@)