【问题标题】:The argument type 'Future<dynamic>' can't be assigned to the parameter type 'double'参数类型“Future<dynamic>”不能分配给参数类型“double”
【发布时间】:2020-10-25 09:36:29
【问题描述】:

我正在尝试从 Firestore 获取数据,并且数据类型是数字。我想将它分配给我的代码中的双变量。这是 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),

然后我得到上述错误。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    由于函数getPercentage(user, packageCode) 返回一个Futurepercent: _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),
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      _db.getPercentage 返回 Future,因此您必须使用 await 获取值

      await _db.getPercentage(user, packageCode)
      

      或者你可以使用 .then

      _db.getPercentage(user, packageCode).then((value){
         ...
      })
      

      我建议您阅读异步编程的基础知识。

      【讨论】:

        猜你喜欢
        • 2021-04-07
        • 2021-11-23
        • 1970-01-01
        • 2021-12-30
        • 2021-06-13
        • 1970-01-01
        • 2021-01-05
        • 2022-11-17
        • 2021-05-25
        相关资源
        最近更新 更多