我有一个 Cart 类,它是 ChangeNotifier。它具有项目作为属性,同时也是一个 ChangeNotifier。
当我更新项目的属性时,它不会立即反映出来。
class Cart with ChangeNotifier {
final List<Item> _items = [];
Customer customer;
setCustomer(Customer customer) {
customer = customer;
notifyListeners();
}
get items => _items;
...
removeItem(int index) {
_items.removeAt(index);
notifyListeners();
}
...
}
class InvoiceDetail with ChangeNotifier {
int id;
String name;
double price;
double qty;
InvoiceDetail(
{Key key,
this.id,
this.name,
this.price,
this.qty = 1,
})
: super();
double get lineTotal => unitPrice * qty - discount;
increaseQty() {
qty++
notifyListeners();
}
...
}
当我在子组件中使用 incrementQty 时,它不会立即得到反映。如何收听财产通知并触发它们?
答案 0 :(得分:0)
就像@Selvin 提到的:在父母分配方法中添加孩子的监听器并调用notifyListeners()
:
class Cart extends ChangeNotifier {
final List<Item> _items = [];
Customer customer;
addItem(Item item) {
item.addListener(() {
notifyListeners();
});
this._items.add(item);
notifyListeners();
}
setCustomer(Customer customer) {
customer.addListener(() {
notifyListeners();
});
this.customer = customer;
notifyListeners();
}
}
P.S.:尽量让你的例子更简单并使用更常见的类。 InvoiceDetail 类甚至不是 Cart
的一部分。改用 Item
或 Customer
。