例如,我有这些mixins:
mixin ImageField on ObjectBase {
ImageSetModel get image => ImageSetModel().wrap(this["image"]);
}
mixin SizeField on ObjectBase {
SizeModel get size => SizeModel().wrap(this["size"]);
}
mixin OrientationModeField on ObjectBase {
String get mode => this["mode"];
bool get isModeHorizontal => mode == "horizontal";
bool get isModeVertical => mode == "vertical";
}
我通常这样使用这些mixin:
class MyClass extends ImageField, SizeField, OrientationModeField with ImageSizeOrientationField { ... }
但我想创造类似这样的东西:
mixin ImageSizeOrientationField on ObjectBase with ImageField, SizeField, OrientationModeField {
widget get imageWidget => AspectRatio(
aspectRatio: size.width/size.height,
child: CacheNetworkImage(
imageUrl: image.url,
placeholder: _ => isModeHorizontal
? Image.asset('assets/plcHorizontal.png')
: Image.asset('assets/plcVertical');
}
我也需要它才能这样做:
class MyClass extends ObjectBase with ImageSizeOrientationField { ... }
{
var object = MyClass();
ImageSizeOrientationField myClass = object;
ImageField image = object;
SizeField size = object;
OrientationModeField orientationMode = object;
}