我正在尝试从Firestore获取数据,并且数据类型是数字。我想将其分配给代码中的double变量。这是Firestore方法。
Future getPercentage(FirebaseUser user, String packageCode) async{
await users.document(user.uid).collection('myPackages').document(packageCode).get().then((doc) {
return doc.data['percentCompleted'];
});
} }
所以get()'percentCompleted'返回的值是一个数字,我正在尝试分配给双精度变量'percent',
percent: _db.getPercentage(user, packageCode),
然后我得到了上面的错误。
答案 0 :(得分:0)
_db.getPercentage
返回Future,因此您必须await
来获取值
await _db.getPercentage(user, packageCode)
或者您可以使用.then
_db.getPercentage(user, packageCode).then((value){
...
})
我建议您了解异步编程的基础。
答案 1 :(得分:0)
由于函数getPercentage(user, packageCode)
返回一个Future
,因此percent: _db.getPercentage(user, packageCode)
应该使用async-await处理异步值。
您可以按以下方式修改getPercentage
函数(只需清理一下)-
Future<double> getPercentage(FirebaseUser user, String packageCode) async {
var doc = await users
.document(user.uid)
.collection('myPackages')
.document(packageCode)
.get();
// check if snapshot has data here and validate
return double.parse(doc.data['percentCompleted']);
}
然后在调用getPercentage(user, packageCode)
时,将包含行percent: _db.getPercentage(user, packageCode)
的函数声明为async
,然后按如下所示更新此代码-
percent: await _db.getPercentage(user, packageCode),
希望这会有所帮助!