作为 ChangeNotifier 属性的 ChangeNotifier 类的 Flutter 监听

时间:2021-03-27 18:52:25

标签: flutter dart flutter-provider state-management

我有一个 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 时,它不会立即得到反映。如何收听财产通知并触发它们?

1 个答案:

答案 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 的一部分。改用 ItemCustomer