flutter - 如何在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;
}
解决方案
您的二传手当前没有设置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
推荐阅读
- java - 内存清除时Android 10杀死前台服务
- ruby - 使用 RubyXL 查找第一个可见工作表
- linux - 自定义日志轮换
- python - 在 PySP 中更改 csvsolutionwriter 的文件名
- java - 从 Java 代码并行运行多个独立于 Jmeter 的 jmx 测试
- primefaces - Primefaces输入文本区域行不起作用
- bing-maps - Bing Maps V8 dispatchevent javascript不起作用
- javascript - 在节点 js 中使用 for 循环遍历 createreadstream 迭代使用 webdav 下载空文件
- laravel - 本地主机中的 PWA 开发
- linux - JMeter SSHMon 侦听器问题错误 - 未捕获 I/O 和交换