我到处都找不到解决方案。我想从查询中返回结果计数,但是遇到了麻烦。不断获取“'Future实例”而不是字符串
我正在使用Singleton模式。
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;
}
getResultCount () async {
final value = await DBProvider.db.getUnCompletedTaskCount();
return value;
}
getResultCount().toString()
答案 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){
});