【问题标题】:Flutter how to update list when its updated from sqlliteFlutter从sqlite更新列表时如何更新列表
【发布时间】: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 查询转换为自动更新流!这包括跨多个表的复杂查询”

标签: flutter dart


【解决方案1】:

删除后,删除列表。你可以回忆一下。

                 GestureDetector(
                                  onTap: () async {
                                    //print('delete');
                                    final dbHelper = DatabaseHelper.instance;

                                    final id = await dbHelper.queryRowCount();
                                    //print(id);
                                    final rowsDeleted = await dbHelper.delete(
                                     if(rowsDeleted){
                                       setstate(({
                                          items.clear();
                                          _query();
                                       }));
                                     }

                                  },
                                  ....

【讨论】:

    猜你喜欢
    • 2018-05-04
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多