我已经看到了几个使用 'extends' 和 'with' 关键字扩展 ChangeNotifier 的模型示例。我不确定有什么区别。
class myModel extends ChangeNotifier {...}
class myModel with ChangeNotifier {...}
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别?我应该使用哪一种?
Sur*_*gch 22
您可以使用extends(继承)或with(作为混合)。这两种方法可以让您接触到notifyListeners()的方法ChangeNotifier。
扩展ChangeNotifier意味着它ChangeNotifier是超类。
class MyModel extends ChangeNotifier {
String someValue = 'Hello';
void doSomething(String value) {
someValue = value;
notifyListeners();
}
}
Run Code Online (Sandbox Code Playgroud)
如果你的模型类已经扩展了另一个类,那么你不能扩展,ChangeNotifier因为 Dart 不允许多重继承。在这种情况下,您必须使用 mixin。
mixin 允许您使用 mixin 类(即,notifyListeners())的具体方法。
class MyModel with ChangeNotifier {
String someValue = 'Hello';
void doSomething(String value) {
someValue = value;
notifyListeners();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,即使您的模型已经从另一个类扩展,您仍然可以“混入” ChangeNotifier。
class MyModel extends SomeOtherClass with ChangeNotifier {
String someValue = 'Hello';
void doSomething(String value) {
someValue = value;
notifyListeners();
}
}
Run Code Online (Sandbox Code Playgroud)
这里有一些关于 mixin 的好读物:
extends用于继承类
with用于将类用作mixin
请参阅此处以了解mixin和继承之间的区别:/sf/answers/60221871/
参考ChangeNotifier,文档说
一个可以扩展或混合的类,它使用 VoidCallback 提供更改通知 API 进行通知。
因此你可以继承它并将它用作 mixin
| 归档时间: |
|
| 查看次数: |
4647 次 |
| 最近记录: |