print(2);
print(_emailTaken);
print(2);
await isRegister(emailController.value.text);
print(3);
print(_emailTaken);
print(3);
和我的isRegister方法
Future<void> isRegister(String email) async {
fireStore.collection('Users').doc(email).get().then((DocumentSnapshot ds) {
print(1);
print(ds.exists);
print(1);
_emailTaken = ds.exists;
});
}
但是输出是
I/flutter(20531(:2
I/flutter(20531(:错误
I/flutter(20531(:2
I/flutter(20531(:3
I/flutter(20531(:错误
I/flutter(20531(:3
I/flutter(20531(:1
I/flutter(20531(:真正的
I/flutter(20531(:1
为什么不在等待语法中等待?
您不是在等待进入您的注册函数。因此,要修复它,请将其更改为以下内容:
Future<void> isRegister(String email) async {
await fireStore.collection('Users').doc(email).get().then((DocumentSnapshot ds) {
print(1);
print(ds.exists);
print(1);
_emailTaken = ds.exists;
});
}
或者:
Future<void> isRegister(String email) {
return fireStore.collection('Users').doc(email).get().then((DocumentSnapshot ds) {
print(1);
print(ds.exists);
print(1);
_emailTaken = ds.exists;
});
}
您也可以返回Future
:,而不是Kishan建议的isRegister
中的awaiting
Future<bool> isRegister(String email) {
return fireStore
.collection('Users')
.doc(email)
.get()
.then((DocumentSnapshot ds) => _emailTaken = ds.exists);
}
注意:一个额外的好处是isRegister
的返回现在是Future<bool>
。结果仍然缓存在_emailTaken
中以供将来参考,但也由您的方法直接返回
return
的最小工作示例:
bool x = false;
Future<bool> _fetchData() {
return Future.delayed(Duration(seconds: 1)).then((_) => x = true);
}
Future<void> main() async {
print('1. $x');
print('2. ${await(_fetchData())}');
print('3. $x');
await Future.delayed(Duration(seconds: 1));
print('4. $x');
}
结果:
1. false
2. true
3. true
4. true
不带return
的最小工作示例:
bool x = false;
Future<void> _fetchData() async {
Future.delayed(Duration(seconds: 1)).then((_) => x = true);
}
Future<void> main() async {
print('1. $x');
await(_fetchData());
print('3. $x');
await Future.delayed(Duration(seconds: 1));
print('4. $x');
}
结果:
1. false
3. false
4. true