无法将参数类型'Future <dynamic>'分配给参数类型'double'

时间:2020-07-05 02:01:01

标签: flutter dart

我正在尝试从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),

然后我得到了上面的错误。

2 个答案:

答案 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),

希望这会有所帮助!