您是否应该对ChangeNotifier使用“扩展”或“带有”关键字?-flutter
问题内容:
我已经看到了几个使用’extends’和’with’关键字扩展ChangeNotifier的模型的示例。我不确定有什么区别。
class myModel extends ChangeNotifier {...}
class myModel with 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的好读物: