如何将数据从一个提供程序模型传递到另一个?

Flu*_*ase 10 dart firebase flutter google-cloud-firestore flutter-packages

我想使用provider( ChangeNotifierProvider) 和ChangeNotifier管理应用程序状态。但是我如何从另一个模型中的一个模型访问状态?

用例:在聊天应用程序中,一种用于存储用户信息的模型。其他模型使用用户信息(例如用户 ID)调用数据库(Firestore)并获取聊天数据流。

例如:

class Model1 extends ChangeNotifier {
  final List<Item> items = [];

class Model2 extends ChangeNotifier {
//Access items from Model1 here
items;
Run Code Online (Sandbox Code Playgroud)

这可能吗?我不喜欢非常大的模型,因为很难维护。

??谢谢!

Rém*_*let 10

使用provider,一个模型不会访问另一个模型。

相反,您应该使用ProxyProvider, 来组合其他人的模型。

您的模型将如下所示:

class Foo with ChangeNotifier {
  int count = 0;

  void increment() {
    count++;
    notifyListeners();
  }
}

class Bar with ChangeNotifier {
  int _count;
  int get count => _count;
  set count(int value) {
    if (value != count) {
      _count = value;
      notifyListeners();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以使用ChangeNotifierProxyProvider这种方式(假设你的小部件树中有一个更高的 `ChangeNotifierProvider ):

ChangeNotifierProxyProvider<Foo, Bar>(
  initialBuilder: (_) => Bar(),
  builder: (_, foo, bar) => bar
    ..count = foo.count, // Don't pass `Foo` directly but `foo.count` instead
)
Run Code Online (Sandbox Code Playgroud)


Iai*_*ith 5

v4开始,提供ChangeNotifierProxyProvider者可以像这样构建:

ChangeNotifierProxyProvider<Foo, Bar>(
  create: (_) => Bar(),
  update: (_, foo, bar) => bar
    ..count = foo.count,
)
Run Code Online (Sandbox Code Playgroud)

请注意,initialBuilder:已更改为create:builder:update: