【发布时间】:2019-08-12 13:57:04
【问题描述】:
我想要几个Lists,我可以使用provider 包中的Provider 提供。我可以添加或删除每个元素。这些列表的元素也是可以更改的对象。我希望我的应用程序能够对所有这些更改做出反应。
现在我需要为每个列表创建单独的类。他们每个人都有一个带有List 的字段以及访问、删除或添加其元素的方法。这需要大量样板文件,并且很难处理元素字段的更改。
// I would like to use ChangeNotifier here, but then I need to make all fields
// private, write getters and setters for them and assign them manually in
// constructor.
class Model {
int amount;
Model(this.amount);
}
class ModelService extends ChangeNotifier {
final models = <Model>[];
UnmodifiableListView<Model> get all => UnmodifiableListView(models);
int get length => models.length;
remove(Model model) {
models.remove(model);
notifyListeners();
}
add(Model model) {
models.add(model);
notifyListeners();
}
Model elementAt(int index) => models.elementAt(index);
elementChanged() => notifyListeners();
}
class ExampleWidget extends StatelessWidget {
@override
Widget build(BuildContext context) => Column(
children: [
RaisedButton(
child: Text('Add model'),
onPressed: () => Provider.of<ModelService>(context).add(Model(0)),
),
Expanded(
child: Consumer<ModelService>(
builder: (context, service, child) {
return ListView.builder(
itemBuilder: (context, index) {
if (index >= service.length) {
return null;
}
final model = service.elementAt(index);
return ListTile(
leading: IconButton(
icon: Icon(Icons.add),
onPressed: () {
model.amount++;
service.elementChanged();
},
),
title: Text(model.amount.toString()),
trailing: IconButton(
icon: Icon(Icons.delete),
onPressed: () => service.remove(model),
),
);
},
);
},
),
),
],
);
}
有没有更简单或更惯用的方法来处理这种情况?
【问题讨论】:
标签: list flutter state-management