如何在 Flutter 中进行复合 mixin?

问题描述 投票:0回答:0

例如,我有这些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;
}
flutter mixins composite
© www.soinside.com 2019 - 2024. All rights reserved.