Firebase Async ifunction未等待结果
我正在构建一个颤振应用程序。有注册窗口,当用户输入手机号码时,它会检查是否已经注册。但问题是函数没有等待firebase的结果。如果用户不存在,则函数返回true为false。 但是这里没有返回值Firebase Async ifunction未等待结果,firebase,function,flutter,dart,async-await,Firebase,Function,Flutter,Dart,Async Await,我正在构建一个颤振应用程序。有注册窗口,当用户输入手机号码时,它会检查是否已经注册。但问题是函数没有等待firebase的结果。如果用户不存在,则函数返回true为false。 但是这里没有返回值 import 'dart:async'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:zshoperretail/otp_verification.dart';
class mobilewindow extends StatelessWidget {
TextEditingController mobileController=new TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.red,
body: Center(
child:Column(
mainAxisAlignment: MainAxisAlignment.center,
children:[
ClipRRect(
borderRadius: BorderRadius.circular(5),
child:Container(
height: 50,
width: 300,
color: Colors.white,
child:TextField(
maxLength: 10,
maxLengthEnforced: true,
controller: mobileController,
keyboardType: TextInputType.number,
decoration: InputDecoration(
border: InputBorder.none,
hintText:"Mobile Number",
hintStyle: TextStyle(color: Colors.red),
),
),),),
SizedBox(height: 5,),
ElevatedButton(
child: Text("Next",style: TextStyle(color: Colors.white),),
onPressed:() =>saveMobile(context),
)
])
),
);
}
saveMobile(BuildContext context) async{
var mobile= mobileController.text;
mobile="+91"+mobile;
var result1='';
result1=await checkMobile(mobile);
print('check1'+result1);
if(result1=='false') {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString('mobile', mobile);
Navigator.push(
context, MaterialPageRoute(builder: (context) => otp_verification()));
}
else{
print(result1);
showDialog(
context: context,
builder: (BuildContext context){
return AlertDialog(
title: Text("Error"),
content: Text("Account already registered.please login."),
actions: [
FlatButton(
child: Text("Close"),
onPressed: (){
Navigator.of(context).pop();
},
)
],
);
}
);
}
}
Future<String>checkMobile(String mobile) async{
FirebaseFirestore firestore= FirebaseFirestore.instance;
var result="";
firestore.collection('retail_users').doc(mobile).get().then((DocumentSnapshot snapshot)async{
if(snapshot.exists){
print("hello");
result='true';
}
else{
print("hellno");
result='false';
}
});
return(result);
}
}
导入'dart:async';
导入“包:cloud_firestore/cloud_firestore.dart”;
进口“包装:颤振/cupertino.dart”;
进口“包装:颤振/材料.省道”;
导入“package:shared_preferences/shared_preferences.dart”;
导入“包装:zshoperretail/otp_verification.dart”;
类MobileWidow扩展了无状态小部件{
TextEditingController mobileController=新的TextEditingController();
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:Colors.red,
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
ClipRRect(
边界半径:边界半径。圆形(5),
子:容器(
身高:50,
宽度:300,
颜色:颜色,白色,
孩子:TextField(
最大长度:10,
马克斯:是的,
控制器:mobileController,
键盘类型:TextInputType.number,
装饰:输入装饰(
边框:InputBorder.none,
hintText:“手机号码”,
hintStyle:TextStyle(颜色:Colors.red),
),
),),),
尺寸箱(高度:5,),
升降按钮(
子项:文本(“下一步”,样式:文本样式(颜色:Colors.white),),
按下:()=>saveMobile(上下文),
)
])
),
);
}
saveMobile(构建上下文)异步{
var mobile=mobileController.text;
mobile=“+91”+mobile;
var result1='';
结果1=等待检查移动设备(移动设备);
打印(“检查1”+结果1);
如果(结果1=='false'){
SharedReferences prefs=等待SharedReferences.getInstance();
等待首选设置字符串(“移动”,移动);
导航器。推(
上下文,MaterialPage路由(生成器:(上下文)=>otp_验证());
}
否则{
打印(结果1);
显示对话框(
上下文:上下文,
生成器:(BuildContext上下文){
返回警报对话框(
标题:文本(“错误”),
内容:文本(“帐户已注册,请登录”),
行动:[
扁平按钮(
子项:文本(“关闭”),
已按下:(){
Navigator.of(context.pop();
},
)
],
);
}
);
}
}
FuturecheckMobile(字符串移动)异步{
FirebaseFirestore=FirebaseFirestore.instance;
var结果=”;
firestore.collection('retail_users').doc(mobile.get()。然后((DocumentSnapshot snapshot)异步{
if(snapshot.exists){
打印(“你好”);
结果='true';
}
否则{
印刷品(“地狱”);
结果为假;
}
});
返回(结果);
}
}
当您调用.then()
函数时,它将在数据到达时注册要执行的给定函数,因此将结果
放在回调函数中不是一个好主意。相反,请删除中的回调函数。然后()
并使用wait
DocumentSnapshot snapshot = await firestore.collection('retail_users').doc(mobile).get();
if(snapshot.exists){
print("hello");
result='true';
} else{
print("hellno");
result='false';
}
return(result);
使用
FutureBuilder
并为future
参数提供检查手机号码是否已注册的future函数,这将完成作业FutureBuilder是否用于小部件,对吗?是,将Scaffold
的body
中定义的小部件包装到未来的构建器中。我不想将其包装到小部件中。我只想在函数中执行。。。。。等待firestore。收藏(……这很有用。谢谢。