问题描述
我正在尝试侦听数据库更改并更新我的数据。但是问题是该函数没有立即进入我的for
循环内,并且我的函数总是返回null。您有什么想法吗? / p>
Future<InfoCompagnie> getPlace(
{String compagnie,String dep,String arr,String jour,int nbrPlace}) async {
var infoCompagnie = InfoCompagnie().obs;
db
.collection('PLACE')
.document(compagnie)
.collection('$dep-$arr')
.document(jour)
.collection('Bus')
.where('Placedisponible',isGreaterThanorEqualTo: 2)
.snapshots(includeMetadataChanges: true)
.listen((document) {
for (var data in document.documents) {
if (data.exists) {
codeBus = data.data['CodeBus'];
infoCompagnie.update((value) {
value.accessiblePlace = accessiblePlace;
});
return infoCompagnie.value;
} else
return null;
}
});
}
解决方法
触发器的激活取决于不同的情况,例如,取决于您的连接速度和状态,可能需要几百毫秒到几秒钟才能获得该数据。 Firestore会异步加载数据,因为这可能需要一些时间。
如果您想更好地了解其工作原理,请检查此document。
如本documentation中所述,您可以使用带有'async'和'await'关键字的Future编写异步代码。
如果您需要管理同步操作,可以在此document上找到有用的示例,例如:
import 'package:synchronized/synchronized.dart';
main() async {
// Use this object to prevent concurrent access to data
var lock = new Lock();
...
await lock.synchronized(() async {
// Only this block can run (once) until done
...
});
}