首页 > 解决方案 > 如何在setter中添加item并在Flutter中与provider一一通知?

问题描述

我想在 setter 方法中向 taskModelList 添加一个 TaskModel,然后通知我遇到以下错误。我知道将 setter 参数的类型更改为 List 可以解决问题,但是是否可以在 set 方法中将单个项目添加到列表中?

错误:

getter 'taskModelList' 的返回类型是 'List',它不是其 setter 'taskModelList' 的类型 'TaskModel' 的子类型。

代码:

class TaskViewModel extends ChangeNotifier {
  List<TaskModel> _taskModelList = [];

  set taskModelList(TaskModel taskModel) {
    _taskModelList.add(taskModel);
    notifyListeners();
  }

  List<TaskModel> get taskModelList => _taskModelList;
}

标签: flutterdart

解决方案


您的二传手当前没有设置List, 而不是在其中添加新项目。一个 setter 设置List一个List值,

set taskModelList(List<TaskModel> taskModelList) {
    _taskModelList = taskModelList;
    notifyListeners();
  }

更新

删除你的setter. 如果您只想添加单个项目,请使用自定义方法

  void addItem(TaskModel task) {
    _taskModelList.add(task)
    notifyListeners();
  }

如果您正在使用Provider,我建议您TaskViewModel通过添加静态of方法来丰富您的内容:

 static TaskViewModel of(BuildContext context, {bool listen = false}) {
    return Provider.of<TaskViewModel>(context, listen: listen);
  }

然后你可以轻松地监听变化

TaskViewModel.of(context, listen: true).taskModelList

推荐阅读