继续返回“'Future<dynamic>”的实例而不是字符串(颤振)

Jon*_*hon 1 dart flutter

我到处找,没有找到解决办法。我想从查询中返回结果计数,但遇到了麻烦。继续获得“未来的实例”而不是字符串

我正在使用单例模式。

  • 数据库方法(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;
  }
Run Code Online (Sandbox Code Playgroud)
  • 我在 main.dart 中的方法:
    getResultCount () async {
    final value = await DBProvider.db.getUnCompletedTaskCount();
    return value;
  }
Run Code Online (Sandbox Code Playgroud)
  • 通过以下方式调用该方法:
    getResultCount().toString()
Run Code Online (Sandbox Code Playgroud)

Noo*_*3rd 6

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

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

所以当它完全获取它时,它会显示一个文本小部件,否则它什么都不显示(空容器)

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

  await getResultCount().then((val){
      // do some operation
    });
Run Code Online (Sandbox Code Playgroud)

但它再次完全取决于您的代码和需要。

当您需要在代码中使用 future 函数的结果时,请先使用await它。

当你需要使用它的结果时就像getResultCount()使用一样await