美文网首页
【flutter】mixin

【flutter】mixin

作者: 朱慢慢 | 来源:发表于2024-07-29 18:22 被阅读0次

在 Dart 和 Flutter 中,mixin 是一种特殊的类,用于在多个类之间共享代码。它类似于继承,但比继承更灵活,因为它允许你在不需要继承的情况下共享方法和属性。mixin 通常用于避免多重继承的问题,同时提供了一种在多个类之间共享功能的方式。

mixin 的特性

1.代码重用:mixin 可以让多个类共享相同的代码,而不必通过继承。
2.没有状态:通常 mixin 不包含状态(成员变量),只包含方法或静态变量。
3.不能被实例化:mixin 不能直接创建实例。
4.可以限制混入的类:使用 on 关键字可以限制 mixin 只能被特定的类或其子类混入。

mixin 的语法

mixin MixinName {
  // 方法和属性
}


示例
mixin Flyable {
  void fly() {
    print('Flying');
  }
}

mixin Swimmable {
  void swim() {
    print('Swimming');
  }
}

class Animal {
  void breathe() {
    print('Breathing');
  }
}

class Bird extends Animal with Flyable {
  // Bird类可以飞
}

class Fish extends Animal with Swimmable {
  // Fish类可以游泳
}

class Duck extends Animal with Flyable, Swimmable {
  // Duck类既可以飞也可以游泳
}

void main() {
  Bird bird = Bird();
  bird.breathe(); // 来自Animal
  bird.fly();     // 来自Flyable

  Fish fish = Fish();
  fish.breathe(); // 来自Animal
  fish.swim();    // 来自Swimmable

  Duck duck = Duck();
  duck.breathe(); // 来自Animal
  duck.fly();     // 来自Flyable
  duck.swim();    // 来自Swimmable
}

解释

Flyable 和 Swimmable:这两个 mixin 分别定义了飞行和游泳的功能,它们只包含方法,没有状态。
Bird 和 Fish:这些类通过 with 关键字混入了 Flyable 和 Swimmable,从而获得了这些 mixin 的方法。
Duck:这个类混入了两个 mixin,因此它具有飞行和游泳的能力。

使用 on 关键字限制混入

有时你希望一个 mixin 只能被某些特定的类混入,可以使用 on 关键字来限制混入的范围。

class Performer {
  void perform() {
    print('Performing');
  }
}

mixin Dancer on Performer {
  void dance() {
    print('Dancing');
  }
}

class Actor extends Performer with Dancer {
  // Actor可以混入Dancer,因为它继承了Performer
}

class Singer with Dancer {
  // 错误:Singer不能混入Dancer,因为它没有继承Performer
}

总结

1.mixin 是一种在多个类之间共享代码的机制,避免了多重继承的复杂性。
2.它可以包含方法和静态属性,通常不包含状态。
3.通过 with 关键字将 mixin 混入到类中,mixin 的方法会添加到混入的类中。
4.可以使用 on 关键字限制 mixin 的使用范围,以确保只有特定类型的类才能混入。

相关文章

  • Dart 基础(四)

    级别: ★☆☆☆☆标签:「Flutter 」「Dart」「Dart class」「Dart mixin」「Dar...

  • flutter mixin

    在 Dart 语言中,我们经常可以看到对 mixin 关键字的使用,根据字面理解,就是混合的意思。 1.exten...

  • Flutter页面状态的保持

    AutomaticKeepAliveClientMixin这个Mixin就是Flutter为了保持页面设置的。哪个...

  • flutter mixin探秘

    flutter mixin探秘 本文是根据flutter v1.9.1版本分析编写。依赖的dart版本是V2.5....

  • Flutter-Mixin

    一篇关于Flutter Mixin的讲解文章,很详细 https://blog.csdn.net/ckckck12...

  • Flutter 103: 初识 Flutter Mixin

    小菜在简单学习源码过程中经常遇到 mixin 类型的 Class 类,而小菜之前是做 Android 开发的,Ja...

  • flutter extends implements mixin

    abstract abstract修饰的类可以被用于extended、with和implemented,abstr...

  • flutter中接口、mixins以及抽象类的异同

    以下所有内容均为个人观点,转载请注明出处<简书--小蜗牛吱呀之悠悠 >,谢谢! flutter中的接口、mixin...

  • Flutter中extends、implements、mixin

    extends是继承可以继承父类的特性。 Dart中继承是单继承. 构造函数或者析构函数不能继承. 子类重写父类方...

  • dart小知识--迷信?

    相信看过flutter代码的小伙伴肯定都见过这个词, mixin , 迷信, 没想到堂堂google也有会汉语拼音...

网友评论

      本文标题:【flutter】mixin

      本文链接:https://www.haomeiwen.com/subject/nlywhjtx.html