我是新手,所以我需要一些帮助。我使用电话身份验证方法登录用户。现在,当用户成功登录后,我会收到以下错误:
这是我的完整代码:
import 'package:flutter/material.dart';
import 'package:neuroequlibrium/reusable.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class EditDetails extends StatefulWidget {
@override
_EditDetailsState createState() => _EditDetailsState();
}
class _EditDetailsState extends State<EditDetails> {
final _firestore = Firestore.instance;
final _auth = FirebaseAuth.instance;
FirebaseUser loggedInUser;
void getCurrentUser() async {
final user = await _auth.currentUser();
try {
if (user != null) {
loggedInUser = user;
print(loggedInUser.phoneNumber);
}
} catch (e) {
print(e);
}
}
void initState() {
// TODO: implement initState
super.initState();
getCurrentUser();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Verify your details'),
),
body: Center(
child: Container(
padding: EdgeInsets.symmetric(horizontal: 50.0),
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: 0,
vertical: 50.0,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
TextLabel('Name'),
TextField(
onChanged: (value) {},
decoration: kInputStyle.copyWith(
hintText: 'Samyak',
),
),
SizedBox(height: 25.0),
TextLabel('Date of birth'),
TextField(
onChanged: (value) {},
decoration: kInputStyle.copyWith(hintText: '5/10/2003'),
),
SizedBox(height: 25.0),
TextLabel('Sex'),
TextField(
onChanged: (value) {},
decoration: kInputStyle.copyWith(hintText: 'Male'),
),
SizedBox(height: 25.0),
TextLabel('Phone No.'),
TextField(
onChanged: (value) {},
decoration:
kInputStyle.copyWith(hintText: loggedInUser.phoneNumber),
),
SizedBox(height: 30.0),
RoundedButton(
color: Colors.blueAccent,
text: 'Verify',
onPressed: () {
// Update Details & Redirect user
Navigator.pushNamed(context, 'additional_details1');
},
),
],
),
),
),
),
);
}
}
当我在initState()函数中运行getCurrentUser()时,我没有收到任何错误,并且用户编号已打印在控制台中。当我想在文本字段之一中将其显示为占位符时,如何引发上述异常。
此外,当我热加载我的应用程序时,它开始正常运行,并且数字显示在文本字段中,而无需更改代码。
注意:我正在使用Flutter和Android Studio进行开发
任何帮助将不胜感激!
答案 0 :(得分:0)
发生这种情况的原因是,当Flutter构建窗口小部件时,首先它会构建窗口小部件的状态,在这种状态下,您试图获取用户的号码,但是您仅在构建后才获取数字小部件-因此出现错误。当您热重装颤振时,会记住变量的数据,这就是为什么它能够更新UI。 为了解决此问题,可以进行2个修复:
(1)-首先调用getCurrentUser()
,然后再构建小部件super.initState
。
(2)-构建对象时,检查变量的数据,如果为空,则显示另一个小部件。 getCurrentUser()
完成后,使用setState((){})
检查变量的一种简单方法是使用?
格式,如下所示:
int a = 5;
a == 5 ? print('yes') : print('no');
输出显然是yes