03-事件总线EventBus

在APP中,我们经常会需要一个广播机制,用以跨页面事件通知,比如一个需要登录的APP中,页面会关注用户登录或注销事件,来进行一些状态更新。这时候,一个事件总线便会非常有用,事件总线通常实现了订阅者模式,订阅者模式包含发布者和订阅者两种角色,可以通过事件总线来触发事件和监听事件。

一,源码分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class EventBus {
StreamController _streamController;
StreamController get streamController => _streamController;

EventBus({bool sync = false})
: _streamController = StreamController.broadcast(sync: sync);

EventBus.customController(StreamController controller)
: _streamController = controller;

Stream<T> on<T>() {
if (T == dynamic) {
return streamController.stream;
} else {
return streamController.stream.where((event) => event is T).cast<T>();
}
}

void fire(event) {
streamController.add(event);
}

void destroy() {
_streamController.close();
}
}

简单分析源码可得,EventBus 核心主要是通过 Stream 来进行事件分发的,

Read More

02-通知Notification

一,简介

通知(Notification)是Flutter中一个重要的机制,在widget树中,每一个节点都可以分发通知,通知会沿着当前节点向上传递,所有父节点都可以通过NotificationListener来监听通知。Flutter中将这种由子向父的传递通知的机制称为通知冒泡(Notification Bubbling)。通知冒泡和用户触摸事件冒泡是相似的,但有一点不同:通知冒泡可以中止,但用户触摸事件不行。

  • 通知冒泡和Web开发中浏览器事件冒泡原理是相似的,都是事件从出发源逐层向上传递,我们可以在上层节点任意位置来监听通知/事件,也可以终止冒泡过程,终止冒泡后,通知将不会再向上传递。

Flutter中很多地方使用了通知,如可滚动组件(Scrollable Widget)滑动时就会分发滚动通知(ScrollNotification),而Scrollbar正是通过监听ScrollNotification来确定滚动条位置的。

Read More

18-主框架披露API

解决问题:观察我们的真正项目,在引用主框架的时候,会发现,引入的头文件过多,在使用的时候,各个类也是过多,那么,我们如何把这些真正需要的功能封装起来,只用一些类来使用,不管里边怎写,外边在调用的时候后比较方便呢?

提取出来共同使用的类,然后添加到主框架类中

1,添加主框架的公共使用类。

Read More

15-图片操作

提出问题:主项目中,资源文件夹Assets.xcassets中的图片文件如何提取出来?

一: 手动拷贝

第一种解决办法,右击show in finder, 获取位置,一个一个手工拷贝出来。

二:批量的导出来

主项目中,资源文件夹Assets.xcassets中的图片资源在打成安装包之后,存放在哪儿了?

Read More