Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 在内部侦听提供程序_Flutter_Flutter Provider - Fatal编程技术网

Flutter 在内部侦听提供程序

Flutter 在内部侦听提供程序,flutter,flutter-provider,Flutter,Flutter Provider,假设这是我的提供商模型: class Model extends ChangeNotifier { Product _product = Product(-1); Product get product => _product; void updateProduct(Product newProduct) { _product = newProduct; notifyListeners(); } } class Product{ final int

假设这是我的提供商模型:

class Model extends ChangeNotifier {
  Product _product = Product(-1);

  Product get product => _product;

  void updateProduct(Product newProduct) {
    _product = newProduct;
    notifyListeners();
  }
}

class Product{
  final int id;

  Product(this.id);

  static Product of(BuildContext context) {
    final model = Provider.of<Model>(context, listen: false);
    return model.product;
  }

  static void update(BuildContext context, Product newProduct) {
    final model = Provider.of<Model>(context, listen: false); // desc_1
    model.updateProduct(newProduct);
  }
}
我正在lib/home.dart文件中收听:

谁能告诉我怎么才能做到

我知道我可以直接使用提供商。当然。。。直接在我的构建方法中,让这个模型工作,但是那样的话,我总是需要使用两行代码

final provider = Provider.of<Model>(context);
final product = provider.product;
要想做你想做的事:

在您的ChangeNotifierProvider之后。。。在你的主飞镖和你的材料之前。。。添加此代码:

... 孩子:建筑工人 生成器:上下文{ 返回ChangeNotifierProvider.value 值:Provider.ofcontext.product 孩子:MaterialApp。。。; } 这样,您将添加一个将侦听模型产品更改的提供者

现在确保类Product扩展ChangeNotifier{…},而不是使用Product.ofcontext.id;这是不需要的,因为现在有一个提供商为您处理此问题,您可以执行以下操作:

Provider.ofcontext.id


函数更新和更新产品应按预期工作。

谢谢,过几天我会试一试,并会让您知道。
final id = Product.of(context).id; // doesn't listen to changes
final provider = Provider.of<Model>(context);
final product = provider.product;