Dart Mixin

164 阅读1分钟

Mixin官方介绍

官方介绍: Mixins are a way of defining code that can be reused in multiple class hierarchies. They are intended to provide member implementations en masse.

Google翻译: Mixin 是一种定义可在多个类层次结构中重用的代码的方法。它们旨在集体提供成员实现

维基百科

zh.wikipedia.org/wiki/Mixin#…

mixin 与 接口的区别

接口更多的是定义一种规范,抽象了某些能力,强调 is的关系,而mixin 更多的是通过组合提供给一个不相关的组件相应的能力,强调的是able

怎么使用mixin

  1. 创建混入类
  2. 子类使用with 关键词进行混入

示例:

// 创建混入类A
mixin A{

}

// 使用关键字with 将A混入 B
class B with A{}

mixin 使用on 关键字限制混入范围

mixin A on C {
  @override
  void init() {
    print("A init");
  }
}

mixin B on C {
  @override
  void init() {
    print("B init");
  }
}


class C {
  void init() {
    print("C init");
  }
}

class D extends C with A, B {}

mixin class

mixin class A  

同时使用 mixin class 关键字修饰类,那么这个类既不能使用类的特性,例如extends 也不能使用mixin的特性,例如 with

mixin 多混入 优先级

mixin A {

void init(){
    print("A init");
}
}

mixin B {

void init(){
    print("B init");
}
}

mixin C {

void init(){
    print("C init");
}
}

class D with A,B,C{}

void main(){
D d = D();
d.init();
}

打印结果: C init

    

也就是说,使用多混入,后面的mixin同名方法会覆盖前面的方法

mixin 在Flutter页面中的使用,抽取公共推荐页面

场景: 商城App中可能多个页面再底部都会有同一部分推荐的网格列表,可以通过mixin 将推荐内容页面进行抽取,然后在 需要推荐内容的页面使用with 进行混入,使用RecommendMixin中的内容

具体详细看代码实现