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

时间:2019-12-06 00:02:00

标签: flutter dart

我到处都找不到解决方案。我想从查询中返回结果计数,但是遇到了麻烦。不断获取“'Future实例”而不是字符串

我正在使用Singleton模式。

  • 数据库方法(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()

2 个答案:

答案 0 :(得分:2)

我不知道您将如何使用此功能,如果您需要它来获取一些已完成的任务,然后在屏幕上画一些东西(例如显示它们的列表或显示它们的数量),我自己使用FutureBuilder,就像下面这样:

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

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

但是如果您需要用方程式之类的话,您可以执行以下操作:

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

但是同样,这完全取决于您的代码和需求。

在代码中需要将来函数的结果时,请在其前面使用await

getResultCount()一样需要使用await的结果。

答案 1 :(得分:1)

  • 错误表明您正在尝试将Future<dynamic>的值用作String,但由于尚未返回值,因此不允许您使用。

  • 因此,基本上,我们要做的就是等待使用then关键字返回值。

就像这里。

 getResultCount().then((value){

    });