Firebase 如何检查特定文档ID中是否包含特定值?
首先,我想使用Firebase 如何检查特定文档ID中是否包含特定值?,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,首先,我想使用.exist方法检查特定文档ID是否存在。如果存在,那么我想检查该文档id是否包含value==true或者执行其他操作 目前,我正在使用一个FutureBuilder从Firebase获取详细信息,但它的工作并不完美 我附加了一个数据库的图像,其中包含一个文档ID+91919982779295和一个设置为true的字段名“verified”。只需要检查文档ID是否存在,如果存在,则它包含值true,如代码的注释部分所示 我想这将由.exist和和\u NavigatorpageS
.exist
方法检查特定文档ID是否存在。如果存在,那么我想检查该文档id是否包含value==true
或者执行其他操作
目前,我正在使用一个FutureBuilder
从Firebase获取详细信息,但它的工作并不完美
我附加了一个数据库的图像,其中包含一个文档ID+91919982779295和一个设置为true的字段名“verified”。只需要检查文档ID是否存在,如果存在,则它包含值true,如代码的注释部分所示
我想这将由.exist
和和
方法完成,但我不知道如何在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_auth/firebase_auth.dart”;
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“dart:async”;
类Navigatorpage扩展StatefulWidget{
var电话号码;
导航页面({this.phoneNumber});
@凌驾
_NavigatorpageState createState()=>\u NavigatorpageState();
}
类_NavigatorpageState扩展状态{
var电话号码;
最终Firestore Firestore=Firestore.instance;
_NavigatorpageState({this.phoneNumber});
Future getDetails()=>firestore.collection('users').document(+919982779295.get();
@凌驾
小部件构建(构建上下文){
返回材料PP(
debugShowCheckedModeBanner:false,
家:未来建设者(
未来:未来,等等([
getDetails()
]),
生成器:(上下文,快照){
这里首先需要检查一下
如果(名为+919982779295的文档ID存在){
如果(如果)退出,则使用
包含值法)
{返回某物;}
else{返回某物;}
}
else{返回某物;}
}
},
),
);
}
}
屏幕截图:
据我所知,我想回答你的问题
我想这对你有帮助
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()捕获任何异常。我发现了。。。这就是我要找的
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;
}
},
);
}
}
导入“包装:颤振/材料.省道”;
导入“包:firebase_auth/firebase_auth.dart”;
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“package:kartofill/Phoneverification.dart”;
导入“dart:async”;
导入“package:kartofill/Splashscreen.dart”;
类Navigatorpage扩展StatefulWidget{
var电话号码;
/*导航页面({this.phoneNumber})*/
@凌驾
_NavigatorpageState createState()=>\u NavigatorpageState();
}
类_NavigatorpageState扩展状态{
var电话号码;
字符串字体;
/*最终Firestore Firestore=Firestore.instance*/
/*_NavigatorpageState({this.phoneNumber})*/
Future getDetails()异步{
final snapShot=wait Firestore.instance.collection('users').document('+919954603381').get();
if(snapShot.exists){
if(snapShot.data.containsValue(“true”)){
font='a';
}
否则{
font='b';
}
}
否则{
font='c';
}
返回font.toString();
}
@凌驾
小部件构建(构建上下文){
回归未来建设者(
future:future.wait([getDetails()]),
生成器:(上下文,快照){
打印(snapshot.data.toString());
开关(snapshot.data.toString()){
案例“[a]”:{
返回Phoneverification();
}
打破
案例“[b]”:{
返回文本('B');
}
打破
案例“[c]”:{
返回文本('C');
}
打破
默认值:{
返回文本('Default');
}
打破
}
},
);
}
}
我想在页面中获取此信息,我的意思是,我没有一个按钮可以使用onpress功能,这很容易,我只想在该页面加载问题中的检查时。。。我是否可以在未来的builder中使用您的代码,而不是使用包含此代码的函数(返回小部件)。不要在这里返回一些字符串,而是返回您想要的小部件。最后,调用函数并在void initState()中设置状态;参考: