Flutter Widget之Overlay

Overlay + OverlayEntry

Overlay

Overlay是一个类似Stack的Widget,可以将OverlayEntry插入到Overlay中,将OverlayEntry中构建的小部件叠加悬浮在其他顶部小部件之上。可以实现类似悬浮小弹窗的效果,如Toast,安卓的PopupWindow.
另外Overlay本身使用的是Stack布局,因此OverlayEntry可以使用Position或者AnimatedPosition定位自己的位置。
最常见的用例是:有WidgetsApp或MaterialApp中的Navigator创建的Overlay.

  const Overlay({
   
    Key? key,
    this.initialEntries = const <OverlayEntry>[],//包含在叠加层中的Widget
    this.clipBehavior = Clip.hardEdge,
  })

通常我们可以直接使用Overlay.of(context)方法获取该context最近的OverlayState,然后通过OverlayState中的insert()或者insertAll()方法插入一个或多个悬浮的Widget。如果想移除悬浮Widget,可以通过OverlayEntry的remove()方法实现。

OverlayEntry

[Overlay] 中可以包含小部件的位置。

  OverlayEntry({
   
    required this.builder,//构建在Overlay中显示的Widget
    bool opaque = false,//builger中构建的widget是否遮挡整个Overlay,如果opaque=true,Overlay将不在构建该widget下面的widget,除非maintainState=true
    bool maintainState = false,//该widget是否必须显示在树种。即使opaque=true
  })

Overlay的使用

该示例实现如下效果:
点击“show icon”按钮,在右上角图标下显示一个悬浮提示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/579872c28cdd4975b6e6df2a02615f56.png#pic_center
在这里插入图片描述

![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2879feb827998d8d0bb598a8adefcc81.jpeg

class _SimpleOverlayPageState extends State<SimpleOverlayPage> {
   
  final GlobalKey _noticeKey = GlobalKey();
  OverlayEntry? _overlayEntry;
  
  @override
  Widget build(BuildContext context) {
   
    return Scaffold(
      appBar: AppBar(
        title: const Text("Overlay+OverlayEntry"),
        actions: [
          Padding(
            key: _noticeKey,
            padding: const EdgeInsets.all(16),
            child: const Icon(Icons.notifications),
          )
        ],
      ),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            const Text("该示例在AppBar右上角的图标出显示一个提示信息"),
            TextButton(
              onPressed: () {
   
                showOverla
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值