使用 StreamBuilder 和 bool -ERROR 实时更新 UI 应使用类型为"Map<dynamic,dynamic>"的值,但获得类型为"_JsonDocumentSnap



在标题中,我解释了我想做什么"turnInvitingPlayer"存储在Firestore的文档字段中。我从GameTable的Variables实例中确切地知道文档的位置。

这就是我尝试的:

class GameTable extends StatefulWidget {
GameTable({Key? key,
required this.player,
required this.invitationID,
required this.invitationIdPlayerInvited,
required this.invitationIdPlayerInviting})
: super(key: key);
final Player? player;
final String invitationIdPlayerInvited;
final String invitationIdPlayerInviting;
/// the invitation ID is the doc name of the gambling Table
final String invitationID;
@override
State<GameTable> createState() => _GameTableState();
}
class _GameTableState extends State<GameTable> {
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: FirebaseFirestore.instance
.collection('GameTables')
.doc(widget.invitationID)
.snapshots(),
builder: (context, snapshot) {
if (snapshot.hasData) {
var dataGameTable = snapshot.data! as Map;
var turnInvitingPlayer =
dataGameTable['turnInvitingPlayer'] as bool;
if (turnInvitingPlayer == true) {
return Container(color: Colors.blue);
} else {
return Container(color: Colors.red);
}
} else if (!snapshot.hasData) {
return Container(
child: Text('There is no data'),
);
}
return CircularProgressIndicator();
});
}
}

运行应用程序时出现以下错误Expected a value of type 'Map<dynamic, dynamic>', but got one of type '_JsonDocumentSnapshot'有人能告诉我如何简单地访问流的bool值并在if子句中使用它吗?

感谢所有愿意提供帮助的人。

如下修改流生成器:

return StreamBuilder<Map<dynamic,dynamic>>(
stream: FirebaseFirestore.instance
.collection('GameTables')
.doc(widget.invitationID)
.snapshots(),
builder: (context, snapshot) {
if (snapshot.hasData) {
var dataGameTable = snapshot.data! as Map;
var turnInvitingPlayer =
dataGameTable['turnInvitingPlayer'] as bool;
if (turnInvitingPlayer == true) {
return Container(color: Colors.blue);
} else {
return Container(color: Colors.red);
}
} else if (!snapshot.hasData) {
return Container(
child: Text('There is no data'),
);
}
return CircularProgressIndicator();
});

我找到了解决方案,我做了以下更改:

var dataGameTable = snapshot.data!; // remove as Map
var turnInvitingPlayer = dataGameTable['turnInvitingPlayer'] as bool; // remove this line

现在,我可以使用简单的dataGameTable['turnInvitingPlayer']访问布尔值。

相关内容

最新更新