Flutter框架分析(二)-- 初始化

class WidgetsFlutterBinding extends BindingBase with GestureBinding, ServicesBinding, SchedulerBinding, PaintingBinding, SemanticsBinding, RendererBinding, WidgetsBinding {
static WidgetsBinding ensureInitialized() {
if (WidgetsBinding.instance == null)
WidgetsFlutterBinding();
return WidgetsBinding.instance;
}
}

这个类继承自BindingBase并且混入(Mixin)了很多其他类,看名称都是不同功能的绑定。而静态函数ensureInitialized()所做的就是返回一个WidgetsBinding.instance单例。

混入的那些各种绑定类也都是继承自抽象类BindingBase的。

abstract class BindingBase {
BindingBase() {

initInstances();

}

ui.Window get window => ui.window;
}

关于抽象类BindingBase,你需要了解两个地方,一个是在其构造的时候会调用函数initInstances()。这个函数会由其子类,也就是上面说那些各种混入(Mixin)的绑定类各自实现,具体的初始化都是在其内部实现的。另一个就是BindingBase有一个getter,返回的是window。还记得在《Flutter框架分析(一)-- 总览和Window》中提到过的窗口吗?没错,这里的window就是它。那我们是不是可以推论,这些个绑定其实就是对window的封装?来,让我们挨个看一下这几个绑定类在调用initInstances()的时候做了什么的吧。

第一个是GestureBinding。手势绑定。

mixin GestureBinding on BindingBase implements HitTestable, HitTestDispatcher, HitTestTarget {
@override
void initInstances() {
super.initInstances();
_instance = this;
window.onPointerDataPacket = _handlePointerDataPacket;
}

在调用initInstances()的时候,主要做的事情就是给window设置了一个手势处理的回调函数。所以这个绑定主要是负责管理手势事件的。

第二个是ServicesBinding。服务绑定

mixin ServicesBinding on BindingBase {
@override
void initInstances() {
super.initInstances();
_instance = this;
window
…onPlatformMessage = BinaryMessages.handlePlatformMessage;
initLicenses();
}

这个绑定主要是给window设置了处理Platform Message的回调。

第三个是SchedulerBinding。调度绑定。

mixin SchedulerBinding on BindingBase, ServicesBinding {
@overri

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值