flutter - 如何根据firestore值返回布尔值
问题描述
我在 Firestore 中有一个布尔值,我需要根据这个布尔值设置一个条件。我试图从firestore中获取这个布尔值,然后在我的futurebuilder中使用它,但即使我可以看到firestore中有值,我总是会得到null。请帮忙。
Future<bool> getUser() async {
dynamic data;
bool isUser=false;
final DocumentReference document =
FirebaseFirestore.instance.collection('users').doc(uida).collection('pre').doc();
isUser = await document.get().then<dynamic>(( DocumentSnapshot snapshot) async{
data =snapshot.data;
final data1 = data.map((doc) => doc['enrolled']);
print(data1.toString());
if (data1==true){
setState(() {
isUser = true;
});}
});
return isUser;
}
小部件
return FutureBuilder(
future: getUser(),
builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
if (snapshot.data == true)
return Text(snapshot.data.toString());
解决方案
使用异步代码时,最好使用 async 和 await 或使用 then。在您的情况下, async 和 await 将提供更具可读性的代码。
对于您的 getUser 函数,这将类似于:
Future<bool> getUser() async {
dynamic data;
bool isUser=false;
final DocumentReference document =
FirebaseFirestore.instance.collection('users').doc(uida).collection('pre').doc();
isUser = await document.get()
data = snapshot.data;
final data1 = data['enrolled'];
print(data1.toString());
if (data1==true){
setState(() {
isUser = true;
});}
});
return data1;
}
对于 Futurebuilder,最好检查快照是否包含数据,使用如下所示的 snapshot.hasData:
return FutureBuilder(
future: getUser(),
builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
if (snapshot.hasData)
if (snapshot.data ==true){
return Text(snapshot.data.toString());
} else {
return Text('still waiting for data...')
有关更好的解释,请参阅https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html 。
推荐阅读
- node.js - 使用存根测试 Promise
- php - 防止上传文件 OnFileManagerUpload
- c++ - 包含头文件时未定义的引用
- c# - 如何在 Button.OnPaint 中绘制悬停和鼠标按下颜色
- mysql - Debezium MySQL 参数 table.exclude.list 不起作用
- rest - 如何通过 CURL 连接到 MSTR 库以获取会话状态?
- css - How can I change the size of a WebRTC video stream?
- python - 应用程序在通过 ui 自动化自动化时崩溃
- c - pthread_join 的分段错误(核心转储)
- php - Xdebug 问题:连接到客户端超时(等待:200 毫秒)。:-(