【发布时间】:2021-02-03 10:37:38
【问题描述】:
我正在像这样从 sql lite 获取数据
void _query() async {
//print('cart');
final dbHelper = DatabaseHelper.instance;
allRows = await dbHelper.queryAllRows();
allRows.forEach((row) {
amount += double.parse(row['price']);
items['Items'].add(row);
//print(amount);
//print(row);
});
print(allRows.length);
if (allRows.length == 0) {
showCart = false;
} else {
showCart = true;
}
setState(() {});
}
我有一个列表视图构建器,我正在显示这样的值
ListView buildListCartCard() {
return ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: items['Items'].length,
itemBuilder: (context, index) {
return Column(
children: <Widget>[
Card(
elevation: 5.0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12.0),
),
margin: EdgeInsets.symmetric(vertical: 8.0),
child: Container(
width: double.infinity,
height: 120.0,
padding: EdgeInsets.all(12.0),
child: Row(
children: [
ClipRRect(
borderRadius:
BorderRadius.circular(12.0),
child: Image.network(
items['Items'][index]['image'],
width: 100,
height: 100)),
SizedBox(width: 12.0),
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 10.0),
child: Column(
mainAxisAlignment:
MainAxisAlignment
.spaceBetween,
children: [
Row(
mainAxisAlignment:
MainAxisAlignment
.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Expanded(
child: Text(
items['Items'][index]
['title'],
textAlign:
TextAlign.start,
maxLines: 3,
overflow: TextOverflow
.ellipsis,
),
),
SizedBox(width: 5.0),
Row(
children: [
GestureDetector(
onTap: () async {
//print('delete');
final dbHelper = DatabaseHelper.instance;
final id = await dbHelper.queryRowCount();
//print(id);
final rowsDeleted = await dbHelper.delete(
id, items['Items'][index]['id']);
print('deleted $rowsDeleted row(s): row $id');
},
child: Icon(
FlutterIcons
.delete_outline_mco,
),
)
],
)
],
),
Row(
mainAxisAlignment:
MainAxisAlignment
.spaceBetween,
children: [
Expanded(
child: Text(
items['Items'][index]
['price'],
),
),
// Counter(),
],
),
],
),
),
)
],
),
),
)
],
);
},
);
}
问题是当我单击时,我正在删除您可以在 GestureDetector 中看到的项目,但它没有从 ListBuilder 中删除,我需要刷新页面来删除它。我需要知道解决方案如何刷新或更改状态,以便显示更新后的列表。
我尝试的是在手势检测器中使用 setState 并再次调用 查询函数。但问题是在这种情况下它会重复列表 --
【问题讨论】:
-
使用 moor_flutter,文档说:“反应式:将任何 sql 查询转换为自动更新流!这包括跨多个表的复杂查询”