【问题标题】:Keep returning "Instance of 'Future<dynamic>" instead of String (Flutter)继续返回 "Instance of 'Future<dynamic>" 而不是 String (Flutter)
【发布时间】:2019-12-06 00:02:00
【问题描述】:

我到处寻找,但没有找到解决办法。我想从查询中返回结果计数,但我遇到了麻烦。继续获取 "Instance of 'Future" 而不是 String

我正在使用单例模式。

  • 数据库方法(database.dart):
    Future<int> getUnCompletedTaskCount () async {
    final db = await database;
    var result = await db.rawQuery("SELECT * FROM Tasks WHERE isComplete = 0");
    int count = Sqflite.firstIntValue(result);
    return count;
  }
  • 我在 main.dart 中的方法:
    getResultCount () async {
    final value = await DBProvider.db.getUnCompletedTaskCount();
    return value;
  }
  • 通过以下方式调用方法:
    getResultCount().toString()

【问题讨论】:

  • 你在你的函数上使用'async',所以你可以使用FutureBuilder从数据库中获取数据,api,...
  • 感谢您的回复。你有例子吗?
  • 对于 FutureBuilder ?在medium.com 你可以找到很多。也许This one 会有所帮助。如果您在重构代码时需要帮助,我很乐意提供帮助。
  • 我试过了,我认为我做得对。现在,它正在打印结果,但只是不将其显示到 Text 小部件中。 getResultCount () async { var x; var value = await DBProvider.db.getUnCompletedTaskCount().then((val) { x = val; });打印(x.toString()+“测试”);返回 x; }

标签: flutter dart


【解决方案1】:

我不知道你将如何使用这个功能,如果你需要它来获取已完成任务的数量,然后在屏幕上绘制一些东西(比如显示它们的列表或显示它们的数量),我自己使用 FutureBuilder,如下所示:

FutureBuilder<int>(
  future: getResultCount(),
  builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
    if(snapshot.hasData){
      return Text('Number Of completed : ${snapshot.data}');
    }
    return Container();
  },
)

所以当它完全获取它时,它会显示一个 Text Widget,否则它什么都不显示(空容器)

但是如果你需要它让我们说一个方程式或其他东西,你可以这样做:

  await getResultCount().then((val){
      // do some operation
    });

但这完全取决于您的代码和需求。

当您需要代码中未来函数的结果时,请在它之前使用 await

喜欢getResultCount(),当你需要使用它的结果时使用await

【讨论】:

  • 感谢您的回复。现在,它说“构建函数返回 null”。啊,我在用这个敲我的头......
  • 你应该使用 FutureBuilder 作为 Widget 在某个地方,比如 child,... 因为它就像普通的小部件,如果没有完全获取数据,它返回 Container(),否则返回 Text 小部件。因此,如果您在 Build 函数中使用它,请在 FutureBuilder 之前使用 return
  • 这解决了我的问题。我把它放了几天,现在解决方案似乎已经奏效了。谢谢!
  • 谢谢。我有一个类似的例子,只是我没有使用 await 关键字
【解决方案2】:
  • 错误表明您正在尝试将Future&lt;dynamic&gt; 的值用作String,它不会让您这样做,因为尚未返回值。

  • 所以基本上我们这里要做的就是等待使用then关键字返回值。

喜欢这里。

 getResultCount().then((value){

    });

【讨论】:

    【解决方案3】:

    Net Ninja flutter 教程:User.signInAnon() 返回“Future dynamic”...您应该在 sign_in.dart 中添加 await

      onPressed: () async {
                dynamic result = **await** _auth.signInAnon();
    
                if (result == null) {
                  print('Not signed In');
                } else {
                  print('Signed In ');
                  print(result);
                }
              },
    

    【讨论】:

      猜你喜欢
      • 2020-08-15
      • 2021-06-08
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 2018-09-28
      • 2022-11-13
      相关资源
      最近更新 更多