在阅读flutter代码时,常常会看到一些名为Binding的类。事实上这是dart的一种比较有意思的代码风格。
在flutter中定义了BindingBase,以及很多个遵守BindingBase的mixin,这是flutter利用dart语言能力,实现灵活代码复用的一种模式。
flutter是一个渲染框架,因此flutter的核心就是UI Window,在BindingBase中定义了window实例,而各种具体的Binding则通过mixin的方式来继承BindingBase,通过BindingBase中的window提供各种各样的基础能力,这些Binding是在App启动时初始化的,在App初始化代码中,有一段代码定义了一个特殊的Binding类:WidgetsFlutterBinding,这个Binding也是继承自BindingBase的,并且引入了flutter所需要的所有BindingBase mixin,继承了这些mixin的所有接口。这的确是一种dart独有的多继承写法,先通过BindingBase定义出基础的属性和生命周期方法,然后每个mixin都继承自BindingBase,并重写声明周期方法做自己的初始化,最后再由业务定义一个同样继承自BindingBase的类,并引入需要的mixin,将需要的接口及接口实现统统继承过来。业务上使用时,只要获取binding对象并把它当成特定的mixin类型即可。