【发布时间】:2021-11-23 07:27:40
【问题描述】:
在用户注册后,我希望调用我在 Firebase 的数据库以检查电子邮件是否唯一。如果不是,我希望向用户显示某种形式的错误消息。
但是,由于某种原因,我的 FutureBuilder 的构建方法根本没有被调用,并且我在 submit() 函数中的任何小部件都没有显示:
final usersRef = Firestore.instance.collection("users");
class _CreateAccountWithEmailState extends State<CreateAccountWithEmail> {
Future<QuerySnapshot> existingUserWithEmail;
emailExists(String email) {
Future<QuerySnapshot> existingUserWithEmailFromDb =
usersRef.where("email", isEqualTo: email).getDocuments();
setState(() {
existingUserWithEmail = existingUserWithEmailFromDb;
});
}
Widget build(BuildContext context) {
return Scaffold(
appBar: header(context, titleText: "Complete your profile"),
body: ListView(children: [
....
Padding(
padding: EdgeInsets.only(top: topPadding),
child: Center(
child: GestureDetector(
onTap: () =>
{submit(context, context.read<UserSignupForm>().email)},
child: Container(
height: 50.0,
width: 350.0,
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(7.0)),
child: Center(
child: Text(
"Save",
style: TextStyle(
color: Colors.white,
fontSize: 15.0,
fontWeight: FontWeight.bold),
))),
),
),
)
]));
}
Widget submit(BuildContext context, String email) {
return FutureBuilder(
future: emailExists(email),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: Text('Please wait its loading...'));
} else {
if (snapshot.hasError)
return Center(child: Text('Error: ${snapshot.error}'));
else
return Center(
child: new Text(
'Test: ${snapshot.data}'));
}
});
}
}
通过调试,我发现FutureBuilder中调用了future,但没有调用builder。请问有什么想法吗?
【问题讨论】:
-
你在哪里分配这个
submit小部件 -
在 GestureDetector 的 onTap 函数中
-
我的意思是in widget树,这个
FutureBuilder会放在哪里?