从mixin机制理解Flutter App启动

本文详细探讨了Flutter应用启动过程中mixin机制的角色,揭示了mixin如何实现代码复用、调用顺序控制等功能。从mixin的基础特性出发,通过实例解释其在多方法复用和调用顺序控制上的作用。接着,文章深入分析了Flutter的runApp启动流程,特别是WidgetsFlutterBinding的7个mixin如何协同完成初始化工作,包括手势事件绑定、服务通信、绘制调度等。最后总结了mixin机制在Flutter启动中的优势:高内聚低耦合、代码复用和保证调用顺序。
摘要由CSDN通过智能技术生成

1-mixin机制

1.1-前言

  转载注明出处:https://juejin.im/post/5efbf499e51d4534b979050c
  mixin机制并非dart独创,在其他前端语言中也有很广泛应用。但对于一个刚开始看Flutter源码的客户端开发来说,各种mixin直接劝退,不得不先恶补下mixin。
  mixin首要特性就是实现函数复用,所以在开始mixin机制解析前,先从第一个问题出发:

  • 怎么实现函数的复用?

  对应面向对象语言来说,通常的做法就是继承,即在基类中实现某个函数,子类继承该基类就可使用函数了。举个例子:狗和鹰都可以移动,通过在基类Animal中实现moveTo方法,Dog和Eagle继承后都能使用moveTo方法了

class Animal {
   
    void moveTo(){
   ...//Do some thing}
}
class Dog extends Animal{
   }
class Eagle extends Animal{
   }

  但通过继承的方式实现函数复用会有另外一个问题。即函数是与基类耦合的,子类继承了基类后就继承了基类的所有方法和属性。如果汽车要复用moveTo方法的话显然继承Animal是不合适的,由此引申出问题2:

  • 怎么才能只复用Animal的moveTo方法而不继承其他方法和属性?

  首先肯定要把moveTo方法从Animal中解耦出来,定义一个接口CommonBehavior来实现。在java8及Kotlin的接口支持函数的默认实现,java8需要default关键字。kotlin接口定义的方法同样支持默认实现,不过为了兼容java之前的版本,采用的是编译时生成一个静态类,通过调用静态类的静态方法moveTo方法来实现。

interface CommonBehavior {
   
    defalut void moveTo(){
   ...//Do some Thing}
}
class Dog implements CommonBehavior{
   }

  此外Koltin还可以通过类委托来实现方法复用。除了接口外,还需声明一个moveTo具体实现的委托类BehaviorDelegate。

interface CommonBehavior {
   
    fun moveTo()
}
class BehaviorDelegate : CommonBehavior {
   
    override fun moveTo(){
   ...//Do some thing}
}
class Dog : CommonBehavior by BehaviorDelegate()

  Kotlin类委托机制就不再详述了,原理是通过代理实现。Java当然也是可以通过代理实现的,不过没有by这种语法糖用起来爽。转到正题:

  • 在Dart中怎么去实现代码复用呢?

  Dart中没有interface关键字,而是用mixin进行混合,将moveTo抽离到一个mixin修饰的CommonBehavior。这样就能通过混入CommonBehavior直接使用moveTo方法了。

class Animal{}
mixin CommonBehavior{
  moveTo(){...//Do some thing};
}
class Dog extends Animal with CommonBehavior {}

1.2-mixin特性

  实现代码复用只是mixin的基本功能,mixin还有其

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值