Flutter Overlay 用法简介
Flutter Overlay 用法简介。
Overlay 基本用法
Overlay
实际上是一个 Stack
,所以 OverlayEntry
的内容可以是 Positioned
。
1 | var overlayEntry = OverlayEntry(builder: (context) => Positioned(...);); |
- 显示 Overlay - 使用
Overlay.of(context).insert()
方法 - 隐藏 Overlay - 使用
overlayEntry.remove()
方法
Overlay 高级用法
指定位置
有时我们想指定 Overlay 的显示位置,实现方式如下:
- 先使用
BuildContext.findRenderObject()
来找到当前 Widget 对应的 RenderObject - 再使用
RenderBox.localToGlobal()
找到 Widget 在屏幕上的位置
具体见 _calcPos()
方法。
1 | class _MyButton extends StatefulWidget { |
跟随滚动
使用 LayerLink 来让 Overlay 跟随指定的 Widget 来滚动。
- LayerLink 用于联系 LeaderLayer 和 FollowerLayer
- 使用 CompositedTransformTarget 来创建 LeaderLayer
- 使用 CompositedTransformFollower 来创建 FollowLayer
代码篇幅较长,这里就不贴上来了。完整代码见 gist。