flutter--luoji

2022-06-11  本文已影响0人  你飞跃俊杰

widgit与element是一对多关系
https://www.freesion.com/article/4959804840/
在mount方法中根据child Widget循环创建element

image.png image.png

在这里着重说一下RenderObjectWidget,看下表:

Widget 说明 举例
MultiChildRenderObjectWidget 该类型的Widget可以添加多个widget Row,Column,Stack
SingleChildRenderObjectWIdget 该类型的widget只能添加一个widget Center,Padding,Container
LeafRenderObjectWidget 该类型是树的叶子节点,故不能添加widget Text,Image,Semantics


image.png
  void mount(Element parent, dynamic newSlot) {
    super.mount(parent, newSlot);
    _children = List<Element>(widget.children.length);
    Element previousChild;
    for (int i = 0; i < _children.length; i += 1) {
      final Element newChild = inflateWidget(widget.children[i], previousChild);
      _children[i] = newChild;
      previousChild = newChild;
    }
  }

原生交互

FlutterMethodCahnnel
 调用方法,一次通讯

以下两种是持续通讯
FlutterBaseMessageChannel 
传递字符,半结构化的信息
需要解码器

FlutterChannelEvent 
用于数据流(Stream)的通讯

:super(key key)的作用,避免UI增量更新混乱(把参数写在state时出现,或者key值一样),

  static bool canUpdate(Widget oldWidget, Widget newWidget) {
    return oldWidget.runtimeType == newWidget.runtimeType
        && oldWidget.key == newWidget.key;
  }

局部更新

          _globalKey.currentState.data =
              'old:' + _globalKey.currentState.count.toString();
          _globalKey.currentState.count++;
          _globalKey.currentState.setState(() {});
上一篇下一篇

猜你喜欢

热点阅读