【问题标题】:List not updating on deleting item删除项目时列表不更新
【发布时间】:2019-12-16 07:08:28
【问题描述】:

我正在从列表视图中删除一个项目。它已成功删除,但未在 UI 上更新。当我返回上一个屏幕并再次回到我删除项目的屏幕时,它会更新。我正在使用 Dismissible 来删除项目。

下面是我设置列表视图的代码

 Expanded(
        child: ListView.builder(
          itemCount: data.length,
          itemBuilder: (ctx, i) => DataItem(
            data: data[i],
            shopList: widget.shopList,
            ),
        ),
      )

这是我在 DataItem 中的代码:

return Dismissible(
  key: UniqueKey(),
  background: Container(
    color: Theme.of(context).errorColor,
    child: Icon(
      Icons.delete,
      color: Colors.white,
      size: 40,
    ),
    alignment: Alignment.centerRight,
    padding: EdgeInsets.only(right: 20),
    margin: EdgeInsets.symmetric(
      horizontal: 15,
      vertical: 4,
    ),
  ),
  direction: DismissDirection.endToStart,
  confirmDismiss: (direction) {
    return showDialog(
      context: context,
      builder: (ctx) => AlertDialog(
        title: Text('Are you sure?'),
        content: Text('Do you want to remove from the cart?'),
        actions: <Widget>[
          FlatButton(
            child: Text('No'),
            onPressed: () {
              Navigator.of(ctx).pop(false);
            },
          ),
          FlatButton(
            child: Text('Yes'),
            onPressed: () {
              Navigator.of(ctx).pop(true);
            },
          )
        ],
      ),
    );
  },
  onDismissed: (direction) {

    setState(() {
      deleteCartItem(widget.data.id);
      String gen =  widget.data.toString();

    });
  },
  child: Card(
    margin: EdgeInsets.symmetric(
      horizontal: 15,
      vertical: 4,
    ),
    child: Padding(
      padding: EdgeInsets.all(8),
      child: ListTile(
        leading: CircleAvatar(
          backgroundColor: AppColors.purple,
          child: Padding(
            padding: EdgeInsets.all(5),
            child: FittedBox(
              child: Text(
                widget.generation.price,
                style: TextStyle(color: Colors.white),
              ),
            ),
          ),
        ),
        title: Text(widget.generation.title),
        subtitle: Text(
          'Total: \$${(widget.data.price * 1)}',
        ),

      ),
    ),
  ),
);

【问题讨论】:

  • 你能发布完整的课程代码吗?你发布的代码看起来不错。
  • deleteCartItem(widget.data.id); 是什么?
  • @AdityaNigam 是删除项目的方法
  • @USER9561 该功能似乎无法正常工作。可能是延迟手术?也上传代码
  • @AdityaNigam 功能正常

标签: listview flutter


【解决方案1】:

我已经使用 Provider 解决了这个问题。我以前使用 sqflite 来获取全局数据。现在,在将所有内容更改为 Provider 后,我解决了这个问题

【讨论】:

    猜你喜欢
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 2023-01-25
    • 2021-08-01
    相关资源
    最近更新 更多