flutter mixin 与 on的理解

328 阅读1分钟

前置知识点: 1 在 dart 3.0之前,class是可以直接被with,3.0之后,只有mixin修饰的类可以被with。

第一种情况 被with的类没有共同的基类

mixin class B {
   void parentMethod(){
       print('B_Method');
   } 
}

mixin class C {
    void parentMethod(){
       print('C_Method');
   } 
}

class A with B , C{
     void parentMethod(){
       print('A_Method');
       super.parentMethod();
   } 
}

void main() {
  A().parentMethod();
}

上面的输出结果结果为:A_Method ,C_Method。 结论是:如果混入多个类,且多个类含有相同的方法,在子类中调用,会调用离的最远的类的方法。

第二种情况 被with的类有共同的基类

class Base {
  void parentMethod(){
       print('Base_Method');
   } 
}
mixin  B on Base {
    
   void parentMethod(){
       print('B_Method');
      super.parentMethod();
   } 
}

mixin  C on Base {
    void parentMethod(){
       print('C_Method');
      super.parentMethod();
   } 
}

class A extends Base with B , C{
     void parentMethod(){
       print('A_Method');
       super.parentMethod();
   } 
}

void main() {
  A().parentMethod();
}

输出结果

A_Method

C_Method

B_Method

Base_Method

结论:1 也是优先调用力的最远的类的方法 2 最后调用base的方法。 3 是通过调用super的方法一级一级传递的,如果哪一级不调用super,传递中断。