我已经看到了几个使用’extends’和’with’关键字扩展ChangeNotifier的模型的示例。我不确定有什么区别。
class myModel extends ChangeNotifier {...} class myModel with ChangeNotifier {...}
两者之间有什么区别?我应该使用哪一个?
您可以使用extends(继承)或with(作为混合)。两种方式都可以使您访问中的notifyListeners()方法ChangeNotifier。
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的好读物: