持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情
Flutter 如何与Android ios 通信
Flutter与原⽣系统主要有三种通信形式:MethodChannel和EventChannel及BasicMessageChannel。
- BasicMessageChannel:⽤于传递字符串和半结构化的信息,持续通信,收到消息后可以回复此次消息,如:Native将遍历到的⽂件信息陆续传递到Dart,在⽐如:Flutter将从服务端陆续获取到信息交给Native加⼯,Native处理完返回等;
- MethodChannel:⽤于传递⽅法调⽤。(method invocation)⼀次性通信:如Flutter调⽤Native拍照;
- EventChannel: ⽤于数据流(event streams)的通信,持续通信,收到消息后⽆法回复此次消息,通常⽤于Native向Dart的通信,如:⼿机电量变化,⽹络连接变化,陀螺仪,传感器等;
这三种类型的类型的Channel都是全双⼯通信,即A <=> B,Dart可以主动发送消息给platform端,并且platform接收到消息后可以做出回应, 同样,platform端可以主动发送消息给Dart端,dart端接收数后返回给platform端。
Flutter中的Widget,State,Context的核心概念?是为了解决什么问题?
- Widget: 在Flutter中,⼏乎所有东西都是Widget。将⼀个Widget想象为⼀个可视化的组件(或与应⽤可视化⽅⾯交互的组件),当你需要构建与布局直接或间接相关的任何内容时,你正在使⽤Widget。
- Widget树: Widget以树结构进⾏组织。包含其他Widget的widget被称为⽗Widget(或widget容器)。包含在⽗widget中的widget被称为⼦Widget。
- Context: 仅仅是已创建的所有Widget树结构中的某个Widget的位置引⽤。简⽽⾔之,将context作为widget树的⼀部分,其中context所对应的widget被添加到此树中。⼀个context只从属于⼀个widget,它和widget⼀样是链接在⼀起的,并且会形成⼀个context树。
- State: 定义了StatefulWidget实例的⾏为,它包含了⽤于”交互/⼲预“Widget信息的⾏为和布局。应⽤于State的任何更改都会强制重建Widget。
- 这些状态的引⼊,主要是为了解决多个部件之间的交互和部件⾃⾝状态的维护。
Widget 所持有的数据集在其生命周期内可能会发生变化,这样的数据被称为 State。
State 定义了 StatefulWidget 实例的 “行为”。它包含了用于交互/干预 widget信息(行为和布局),state的任何更改都会强制widget进行重建。
对于 Stateful Widget,State 与 Context 相关联。并且此关联是永久性的,State对象将永远不会改变其 context。
即使可以在树结构周围移动 Widget Context,State 仍将与该context相关联。
当State与Context关联时,State被视为已挂载
InheritedWidget
InheritedWidget 允许在 widget 树中有效地向下传播(和共享)信息。
InheritedWidget 是一个特殊的 Widget,它将作为另一个子树的父节点放置在 Widget 树中。该子树的所有 widget 都必须能够与该 InheritedWidget暴露的数据进行交互。