【问题标题】:How can I check whether a particular document ID contains a certain value inside it?如何检查特定文档 ID 中是否包含某个值?
【发布时间】:2020-08-15 03:22:24
【问题描述】:

首先我想使用.exist 方法检查特定文档ID 是否存在。如果存在,那么我想检查该文档 id containsValue == true 是否做其他事情。

目前,我正在使用 FutureBuilder 从 Firebase 获取详细信息,但它无法完美运行。

我附上了一张数据库的图片,其中包含一个带有 +91919982779295 的文档 ID 和一个设置为 true 的字段名称“已验证”。只想检查文档ID是否存在,如果存在则它包含值true,如代码的注释部分所示。

我猜这将通过.exist.containsValue 方法完成,但我不知道如何将它们放在FutureBuilder

这是我的代码:

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

class Navigatorpage extends StatefulWidget {

  var phoneNumber;

  Navigatorpage({this.phoneNumber});

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

class _NavigatorpageState extends State<Navigatorpage> {

  var phoneNumber;
  final Firestore firestore = Firestore.instance;

  _NavigatorpageState({this.phoneNumber});


  Future<DocumentSnapshot> getDetails() =>firestore.collection('users').document(+919982779295).get();



  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: FutureBuilder(
        future: Future.wait([
          getDetails()
        ]),
        builder: (context, snapshot){
          Here first need to check



              if( the documentId named +919982779295 exists){
                 if( if exits then check whether it contains the value true as show in the image using  
          containsValue method)
                   { return something;}
               else { return something;}
                 }
           else {return something;}
          }
          
        },
      ),
    );
  }
}

截图:

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    我想通了……这就是我要找的东西

    import 'package:flutter/material.dart';
    import 'package:firebase_auth/firebase_auth.dart';
    import 'package:cloud_firestore/cloud_firestore.dart';
    import 'package:kartofill/Phoneverification.dart';
    import 'dart:async';
    
    import 'package:kartofill/Splashscreen.dart';
    
    class Navigatorpage extends StatefulWidget {
    
      var phoneNumber;
    
      /* Navigatorpage({this.phoneNumber}); */
    
      @override
      _NavigatorpageState createState() => _NavigatorpageState();
    }
    
    class _NavigatorpageState extends State<Navigatorpage> {
    
      var phoneNumber;
      String font;
      /*final Firestore firestore = Firestore.instance;*/
    
      /*_NavigatorpageState({this.phoneNumber}); */
    
    
      Future <String> getDetails() async{
     final snapShot = await Firestore.instance.collection('users').document('+919954603381').get();
     if(snapShot.exists){
       if(snapShot.data.containsValue("true")){
            font='a';
    
       }
      else{
         font='b';
       }
     }
     else{
       font='c';
     }
    
     return font.toString();
      }
    
    
    
      @override
      Widget build(BuildContext context) {
        return FutureBuilder(
    
          future: Future.wait([getDetails()]),
          builder: (context,snapshot){
            print(snapshot.data.toString());
            switch(snapshot.data.toString()) {
    
              case'[a]': {
    
               return Phoneverification();
              }
              break;
    
              case '[b]': {
                return Text('B');
              }
              break;
    
              case '[c]': {
                return Text('C');
              }
              break;
    
              default: {
                return Text('Default');
              }
              break;
            }
    
          },
    
    
    
    
    
        );
      }
    }
    
    

    【讨论】:

      【解决方案2】:

      据我了解你的问题,我想回答一下。
      我认为这可以为你做点什么。

          var collection = Firestore.instance.collection('collectionName');
          var docID = '+919982779295'
          collection.document(docID).get().then((document) => {
           if(document.exists){
              if(document.data['verified'] == 'true'){
                     return 'Verified!';
              }else{
                     return 'Not Verified!';
              }
           }else{
              return 'Does Not Exist!'
          }
          });
          
      

      除此之外,您还可以在 .then() 之后使用 .catch() 捕获任何异常。

      【讨论】:

      • 我想在一个页面中获取这个我的意思是我没有一个按钮,我可以在其中使用很简单的 onpress 功能,我只想在这个页面加载时检查问题已经完成......可以我在 Future builder 中使用您的代码
      • 改为使用包含此代码的函数(返回小部件)。而不是在这里返回一些字符串,而是返回一个你想要的小部件。最后调用函数并在void initState()中设置状态;参考:bookstack.cn/read/flutterbyexample/aebe8dda4df3319f.md
      猜你喜欢
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 2014-05-26
      • 2021-09-22
      • 1970-01-01
      • 2016-02-04
      相关资源
      最近更新 更多