Flutter 等待不与 Firestore QuerySnapShot 一起使用
Flutter await not working with Firestore QuerySnapShot
我正在尝试获取用户联系人并在我的数据库 (firestore) 中搜索每个联系人的 phone 号码。
我成功地获得了每个号码的联系人和查询 firestore,但是当我想等待 get() 时,查询的结果似乎并没有等待它。
我有一个未来的 FutureBuilder 属性 是下面的函数:
Future<List<User>> doItAll() async {
if (await FlutterContacts.requestPermission()){
print('0');
_phoneContacts = await FlutterContacts.getContacts(withProperties: true);
print('0.5');
}
print('1');
print('contacts ${_phoneContacts.length}');
var fireStore = FirebaseFirestore.instance.collection('users');
print('2');
_phoneContacts.forEach((contact) {
print('3');
contact.phones.forEach((phone) async {
print('4');
var query = fireStore.where('phoneNumber' , isEqualTo: phone.normalizedNumber);
print('4.5');
query.get().then((value) => print('this is getting out of hand'));
var res = await query.get();
print('5');
res.docs.forEach((querySnapShot) {
print('6');
_currentUserContacts.add(User(phoneNumber: querySnapShot.data()['phoneNumber'], userId: querySnapShot.id,displayName: contact.displayName));
});
});
});
print('this is returning');
return List.from(_currentUserContacts);
}
这是调试控制台的输出
I/flutter (10089): 0
I/flutter (10089): 0.5
I/flutter (10089): 1
I/flutter (10089): contacts 1
I/flutter (10089): 2
I/flutter (10089): 3
I/flutter (10089): 4
I/flutter (10089): 4.5
I/flutter (10089): this is returning
W/DynamiteModule(10089): Local module descriptor class for providerinstaller not found.
I/DynamiteModule(10089): Considering local module providerinstaller:0 and remote module providerinstaller:0
W/ProviderInstaller(10089): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
I/flutter (10089): this is getting out of hand
I/flutter (10089): 5
I/flutter (10089): 6
并且出于某种原因断点调试在
之后没有继续
await FlutterContacts.getContacts(withProperties: true);
非常感谢任何帮助,
ps:我认为这种为每个厕所提供所有这些的方法ps 效率不高。如果您有更好的想法,请与我分享。
为了等待,你不应该使用每个,把它改成
for(final u in _phoneContacts){
// your logic
}
每个函数都会执行,但您的主要函数永远不会等待它完成。
我正在尝试获取用户联系人并在我的数据库 (firestore) 中搜索每个联系人的 phone 号码。 我成功地获得了每个号码的联系人和查询 firestore,但是当我想等待 get() 时,查询的结果似乎并没有等待它。
我有一个未来的 FutureBuilder 属性 是下面的函数:
Future<List<User>> doItAll() async {
if (await FlutterContacts.requestPermission()){
print('0');
_phoneContacts = await FlutterContacts.getContacts(withProperties: true);
print('0.5');
}
print('1');
print('contacts ${_phoneContacts.length}');
var fireStore = FirebaseFirestore.instance.collection('users');
print('2');
_phoneContacts.forEach((contact) {
print('3');
contact.phones.forEach((phone) async {
print('4');
var query = fireStore.where('phoneNumber' , isEqualTo: phone.normalizedNumber);
print('4.5');
query.get().then((value) => print('this is getting out of hand'));
var res = await query.get();
print('5');
res.docs.forEach((querySnapShot) {
print('6');
_currentUserContacts.add(User(phoneNumber: querySnapShot.data()['phoneNumber'], userId: querySnapShot.id,displayName: contact.displayName));
});
});
});
print('this is returning');
return List.from(_currentUserContacts);
}
这是调试控制台的输出
I/flutter (10089): 0
I/flutter (10089): 0.5
I/flutter (10089): 1
I/flutter (10089): contacts 1
I/flutter (10089): 2
I/flutter (10089): 3
I/flutter (10089): 4
I/flutter (10089): 4.5
I/flutter (10089): this is returning
W/DynamiteModule(10089): Local module descriptor class for providerinstaller not found.
I/DynamiteModule(10089): Considering local module providerinstaller:0 and remote module providerinstaller:0
W/ProviderInstaller(10089): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
I/flutter (10089): this is getting out of hand
I/flutter (10089): 5
I/flutter (10089): 6
并且出于某种原因断点调试在
之后没有继续await FlutterContacts.getContacts(withProperties: true);
非常感谢任何帮助, ps:我认为这种为每个厕所提供所有这些的方法ps 效率不高。如果您有更好的想法,请与我分享。
为了等待,你不应该使用每个,把它改成
for(final u in _phoneContacts){
// your logic
}
每个函数都会执行,但您的主要函数永远不会等待它完成。