当前位置: 首页 > 知识库问答 >
问题:

如何返回布尔值基于火力恢复值

刘畅
2023-03-14

我有一个布尔值,我需要设置一个基于这个布尔值的条件。我试图得到这个布尔值,然后用它在我的FutureBuilder,但我总是得到空,即使我可以看到值是在火还原。请帮助。

 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());

共有2个答案

庄阿苏
2023-03-14

你可以使用下面的代码,这将解决你的问题,但请检查两件事:你是否拥有从firebase获取数据所需的所有权限,以及检查文档id是否正确?可以使用if(snapshot.data!.exists)检查文档是否存在于当前集合中

   import 'package:cloud_firestore/cloud_firestore.dart';
   import 'package:firebase_auth/firebase_auth.dart';
    import 'package:flutter/material.dart';

  class TestClass extends StatefulWidget {
   const TestClass({Key? key}) : super(key: key);

   @override
     _TestClassState createState() => _TestClassState();
     }

      class _TestClassState extends State<TestClass> {
     final _auth = FirebaseAuth.instance;
     final FirebaseFirestore _fireStore = FirebaseFirestore.instance;
      @override
      Widget build(BuildContext context) {
     return Scaffold(
     body: FutureBuilder<DocumentSnapshot>(
      future: _fireStore
          .collection('users').doc(uida).collection('pre').doc(),
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          return Center(child: Text(snapshot.data!['enrolled'].toString()));
        } else {
          return Center(
            child: CircularProgressIndicator(),
          );
        }
      }),
       );
     }
    }
酆耀
2023-03-14

在使用异步代码时,最好使用async和Wait,或者使用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为了更好的解释。

 类似资料:
  • 问题内容: 我有一些EditText,用户可以输入ftp地址,用户名,密码,端口和testConnection按钮。如果成功建立连接,它将返回布尔值true。 我正在重新编写代码以使用AsyncTasks执行各种ftp操作,但是,如果连接成功,如何传递布尔值? 还有我的AsyncTask 问题答案: 如果myMethod从onPostExecute内部代码调用,它将在UI线程上运行。否则,你需要通

  • 在VueJS中,我尝试使用axios返回布尔值 console.log刚刚返回 Promise{[[PromiseState]]:"待定",[[PromiseValue]]:未定义} 但我想要的回报不是真就是假。

  • 问题内容: 关于以下原因为何的任何想法。 当我将request_url粘贴到浏览器中时,我会获取json数据,但是如果我在php中尝试,则var_dump就是bool(false); 有任何想法吗?? 更新并修复 OK伙计们,感谢您的所有帮助。是的,我帮助我追踪了这一情况。事实证明,php.ini配置为禁止打开url,因此file_get_contents无法正常工作。我在各个站点上发现了以下方便

  • 好的,我的问题是关于布尔返回。对于我的Comp-Sci作业,我必须使用多种方法制作一个课程注册程序,其中之一就是添加课程方法。基本上,在目录中搜索类,如果匹配,则将其添加到学生计划中,并返回布尔值true。我这么做了,但出于某种原因,这给了我一个错误。以下是代码: 为什么它不能识别布尔返回值?是因为我把它们放在了一个圈里吗?

  • 是否可以编写如下JPQL查询: <代码>选择计数(*) 这将根据实体填充条件是否存在返回真/假布尔值? 我想这样使用查询: 我示例中的查询在语法上不正确(解析错误),但是是否有任何正确的方法可以像在JPQL中那样进行检查,从而返回布尔值,或者只有在Java代码中才有可能?

  • 我尝试使用Mockito使用JUnit测试测试以下方法: } 然而,我在以下部分遇到了问题: 尽管我已经嘲笑了这个.petRepository.findById(id),但由于某种原因,isPresent()返回了false。这是我对测试的初始化: 因此,以下测试失败,即使它应该通过: 为了解决这个问题,我尝试模仿isPresent()方法: 但是我得到了下面的异常: org.mockito.ex