Flutter 电子邮件启动器中的空值
我从firestore读取数据,并将其用于电子邮件的url启动器。但是当提示打开电子邮件时,我得到的值为空。但它不会提示任何错误 将数据设置为var的代码已列出Flutter 电子邮件启动器中的空值,flutter,google-cloud-firestore,Flutter,Google Cloud Firestore,我从firestore读取数据,并将其用于电子邮件的url启动器。但是当提示打开电子邮件时,我得到的值为空。但它不会提示任何错误 将数据设置为var的代码已列出 var userName, userAdd, userAge, userResult, uniEmail; void emailDetail() async{ Widget build(BuildContext context) { return new StreamBuilder( stream:
var userName, userAdd, userAge, userResult, uniEmail;
void emailDetail() async{
Widget build(BuildContext context) {
return new StreamBuilder(
stream: UniQuery().getUserDetail(),
builder: (BuildContext context, snapshot) {
if (!snapshot.hasData)
return new Text('Loading..... Please wait');
var userDocument = snapshot.data;
userName = userDocument['name'];
userAge = userDocument['age'];
userAdd = userDocument['address'];
userResult= userDocument['result'];
return new Text('Success read user data');
}
);
}
}
void emailAddress() async{
Widget build(BuildContext context) {
return new StreamBuilder(
stream: UniQuery().getUniBasedSelectedUni(),
builder: (BuildContext context, snapshot) {
if (!snapshot.hasData)
return new Text('Loading..... Please wait');
var userDocument = snapshot.data;
uniEmail = userDocument['email'];
return new Text('Success read university email');
}
);
}
}
void sendEmail() async {
emailDetail();
emailAddress();
var url = 'mailto:$uniEmail?subject= University Application'
+'&body= Name: $userName \nAge: $userAge \nAddress: $userAdd'
+'\nResult: $userResult';
if (await canLaunch(url)) {
await launch(url);
}
else {
throw 'Could not launch $url';
}
}
用于从firestore获取用户详细信息和发件人电子邮件地址数据的代码
Future<String> getCurrentUser() async{
final FirebaseUser user = await FirebaseAuth.instance.currentUser();
final String uID = user.uid.toString();
return uID;
}
setUserDetail() async{
userID = await getCurrentUser();
}
getUserDetail(){
setUserDetail();
return dbReference.collection('User')
.document(userID)
.snapshots();
}
getUniBasedSelectedUni(){
return dbReference.collection('University')
.where('name', isEqualTo: selectedUni)
.snapshots();
}
Future getCurrentUser()异步{
final FirebaseUser user=等待FirebaseAuth.instance.currentUser();
最后一个字符串uID=user.uID.toString();
返回uID;
}
setUserDetail()异步{
userID=等待getCurrentUser();
}
getUserDetail(){
setUserDetail();
返回dbReference.collection('User')
.document(userID)
.快照();
}
getUniBasedSelectedUni(){
返回dbReference.collection('University')
.where('name',isEqualTo:selectedUni)
.快照();
}
我把它叫做sendEmail
bottomNavigationBar: BottomAppBar(
color: Colors.blue,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
IconButton(
icon: Icon(Icons.home),
onPressed:(){
Navigator.push(context,MaterialPageRoute(builder: (context)
=> mainmenu()));
},
),
IconButton(
icon: Icon(Icons.send),
onPressed: (){
sendEmail();
}
)
],
),
),
bottomNavigationBar:BottomAppBar(
颜色:颜色,蓝色,
孩子:排(
mainAxisAlignment:mainAxisAlignment.spaceAround,
儿童:[
图标按钮(
图标:图标(Icons.home),
已按下:(){
Navigator.push(上下文,MaterialPage路由(生成器:(上下文)
=>主菜单());
},
),
图标按钮(
图标:图标(Icons.send),
已按下:(){
sendmail();
}
)
],
),
),
您是否尝试等待:
等待setUserDetail()
?我没有,但我在其他方法上调用了该函数。。这很有效,你知道怎么解决吗?对不起,我不知道