gpt4 book ai didi

sqlite - Flutter:类型 'Future' 不是类型 'Widget' 的子类型

转载 作者:IT王子 更新时间:2023-10-29 07:07:52 25 4
gpt4 key购买 nike

我正在使用 sqlite 将数据存储在我的 Flutter 应用程序中。我有一个模式 bottomsheet,它用 filterchips 打开,当你选择一个时,它会将项目添加到数据库中。如果项目已经存在,则检查 filterchip。当我调用数据库函数来检查该项目是否已经存在时,出现以下错误。

我尝试过同时使用 async 和 await。

数据库查询代码:

// FIND TAG
findTag(int tagId) async {
var dbConnection = await db;
var res = await dbConnection.query("$TABLE_NAME", where: "tagId = ?", whereArgs: [tagId]);
return res.isNotEmpty ? true : false ;
}

模态 bottomsheet 小部件容器代码:

Widget build(BuildContext context) {
setState(() {
_index = widget.index;
_list =widget.list;
});

return new Container(
padding: new EdgeInsets.all(27.0),
child: new Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget> [
new Text(_list[_index]["title"], style: new TextStyle( fontWeight: FontWeight.bold, fontSize: 22),),
new Text(_list[_index]["description"]),
getFilterChipsWidgets(),
],
),
);

}


getFilterChipsWidgets()
async {

List<Widget> tagsList = new List<Widget>();
for(var i=0; i<_list[_index]["tags"].length; i++) {
var dbHelper = DBHelper();
int id = int.parse(_list[_index]["tags"][i]["id"]);

var exist = await dbHelper.findTag(id);
FilterChip item = new FilterChip(
label: Text(_list[_index]["tags"][i]["name"].toString(),),
selected: exist,
onSelected: (bool newValue) {
if(newValue) {
dbHelper.addNewTag(id);
} else {
dbHelper.deleteNewTag(id);
}
},
);
tagsList.add(item);
}

return Wrap(
spacing: 8.0, // gap between adjacent chips
runSpacing: 4.0, // gap between lines
children: tagsList,
);
}


最佳答案

您的 getFilterChipsWidgets() 是异步函数,因此它将返回 Future。您可以等待 future 并将小部件保存到列表中,并在完成后调用 setState。或者像这样用 FutureBuilder 包装它:

    children: <Widget> [
new Text(_list[_index]["title"], style: new TextStyle(fontWeight: FontWeight.bold, fontSize: 22),),
new Text(_list[_index]["description"]),
FutureBuilder<Widget>(
future: getFilterChipsWidgets,
builder: (BuildContext context, AsyncSnapshot<Widget> snapshot){
if(snapshot.hasData)
return snapshot.data;

return Container(child: CircularProgressIndicator());
}
),
],

关于sqlite - Flutter:类型 'Future<dynamic>' 不是类型 'Widget' 的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55378763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com