flutter mixin探秘
转载请标明来源
本文是根据flutter v1.9.1版本分析编写。依赖的dart版本是V2.5.0
本文分为两个部分,第一部分介绍mixin的使用,第二部分是with的实现原理。
一、mixin的用法
在最近看flutter SDK中的源码时对其中复杂的mixin和on搞的糊里糊涂的,所以就去详细了解了mixin的用法。
在了解如何使用mixin之前,先简单介绍下mixin,下面是官方的解释:
Mixins are a way of reusing a class’s code in multiple class hierarchies.
mixin提供了一种在复杂类层次结构中复用代码的方法。
我们知道,Flutter使用的Dart语言是一种面向对象语言,在面向对象中可以复用代码的方式有继承和组合两种常用的方式,那么mixin本质是继承或者组合,还是它们的变体或者其它新颖的实现方式呢?这里卖个关子,我们继续看下去。
下面首先介绍和mixin使用相关的一些dart保留字。
1.1 保留字介绍
- mixin:
mixin用来声明一个“类”,其中除了不能声明构造函数,其它和一个普通类没有区别。
mixin mixinM {
//error
mixinM();
int i;
void test() {}
}
- with:
使用with关键字,后跟一个或多个mixin或者普通类。
ps:本文分析时,with后面可以跟mixin或者类(类中不能有构造方法),但在官方更新计划文档中,会在后续版本中把mixin和class进一步隔离开来,with后面不能在后面声明类,为了减少后续代码的适配成本,大家开发时多加注意(不过适配成本并不大)
class ClassDemo with mixinM {
String name;
ClassDemo();