【发布时间】:2021-03-26 07:22:02
【问题描述】:
我正在尝试为我的应用程序进行版本控制。换句话说,尝试连接到 firebase 文档,从那里选择版本号并将其与共享首选项中的值进行比较,以确定是否需要更新信息。
我已按照 Futures 的官方教程进行操作。
这是我的代码:
@override
void initState(){
loadit();
}
Future _getIntVersionFromSharedPref() async {
await Firestore.instance.collection('DataIndex')
.document('dbversion').snapshots().listen((event) {
setState(() {
fbVersion = event['currentversion'];
});
print('_getIntVersionFromSharedPref() future -> $fbVersion');
return fbVersion;
});
}
Future<String> loadit() async {
var myFBversion = await _getIntVersionFromSharedPref();
print('loadit future -> $myFBversion');
}
但是我最终得到以下控制台输出:
I/flutter: loadit future -> null
I/flutter: _getIntVersionFromSharedPref() future -> 1
为什么它会在不等待值的情况下立即触发 null?按照官方教程应该是依次执行的。
【问题讨论】:
-
我不确定firebase,因为我从未使用过它,但我认为你正在等待然后。您应该只使用两者之一。如果你使用 await 你应该创建一个值,或者如果你使用 then 你不需要做 await (我认为 listen 和 then 一样)。
-
@AyadRocketfy OP 的代码中没有
then的实例。 -
老实说,我不确定 OP 的代码是如何编译的。有一种方法返回
Future<String>但没有返回语句,他们正在等待一些不是未来的东西。
标签: firebase flutter dart google-cloud-firestore future