【问题标题】:Flutter Provider : cannot remove item from list in providerFlutter Provider:无法从提供者的列表中删除项目
【发布时间】:2021-11-29 03:06:33
【问题描述】:

我在 listview builder 中有复选框 listtile,当我选中任何一个时,我想要将其数据添加到列表中,然后当我取消选中时,将其从列表中删除:

 Directionality(
            textDirection: TextDirection.rtl,
            child: ListView.builder(
                itemCount: student.length,
                itemBuilder: (context, index) {
                  return Card(
                      child: CheckBoxedListTile(
                          student[index], widget.date, widget.time,widget.teacher,widget.subject));
                }),
          ),
        );
      }
    }

检查 listtile 小部件是:

class _CheckBoxedListTileState extends State<CheckBoxedListTile> {
  var checked;
  @override
  void initState() {
    checked = false;
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Consumer<AbsenceProvider>(builder: (context, absProv, child) {
      return CheckboxListTile(
        value: checked,
        onChanged: (val) {
          setState(() {
            checked = !checked;
          });
          var data = {
            "name": widget.student.name,
            "stage": widget.student.stage,
            "group": widget.student.group,
            "teacher": widget.teacher,
            "subject": widget.subject,
            "date": widget.date,
            "time": widget.time,
            "vacs": "No"
          };
          if (checked == true) {
            absProv.addAbs(data);
          } else {
            absProv.remAbs(data);
          }
          print(absProv.absences);
        },
        title: Text('${widget.student.name}'),
      );
    });
  }
}

供应商是:

class AbsenceProvider with ChangeNotifier {
     var absences = [];
    addAbs(item) {
    absences.add(item);
    notifyListeners();
  }

  remAbs(item) {
    absences.remove(item);
    notifyListeners();
  }
}

当我点击复选框时,它添加成功 但是当我再次点击它时它也不会删除它

【问题讨论】:

    标签: flutter provider


    【解决方案1】:

    我使用 removeWhere 解决了它:

    之前:

    absences.remove(item);
    

    之后:

    absences.removeWhere((e) => e['name'] == item['name']);
    

    【讨论】:

      猜你喜欢
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多