一尘不染

您是否应该对ChangeNotifier使用“扩展”或“带有”关键字?-flutter

flutter

我已经看到了几个使用’extends’和’with’关键字扩展ChangeNotifier的模型的示例。我不确定有什么区别。

class myModel extends ChangeNotifier {...}

class myModel with ChangeNotifier {...}

两者之间有什么区别?我应该使用哪一个?


阅读 716

收藏
2020-08-13

共1个答案

一尘不染

您可以使用extends(继承)或with(作为混合)。两种方式都可以使您访问中的notifyListeners()方法ChangeNotifier

遗产

扩展ChangeNotifier意味着这ChangeNotifier是超类。

class MyModel extends ChangeNotifier {

  String someValue = 'Hello';

  void doSomething(String value) {
    someValue = value;
    notifyListeners();
  }
}

如果您的模型类已经在扩展另一个类,则无法扩展,ChangeNotifier因为Dart不允许多重继承。在这种情况下,您必须使用mixin。

混合蛋白

mixin允许您使用mixin类的具体方法(即notifyListeners())。

class MyModel with ChangeNotifier {

  String someValue = 'Hello';

  void doSomething(String value) {
    someValue = value;
    notifyListeners();
  }
}

因此,即使您的模型已经从另一个类扩展了,您仍然可以“混入” ChangeNotifier

class MyModel extends SomeOtherClass with ChangeNotifier {

  String someValue = 'Hello';

  void doSomething(String value) {
    someValue = value;
    notifyListeners();
  }
}

这是一些关于mixin的好读物:

2020-08-13