Flutter Overlay、OverlayState、OverlayEntry 叠加 Toast Demo

本文介绍了如何在Flutter中使用Overlay组件创建悬浮叠加层,常见于开发Toast和PopupWindow。通过示例代码展示了如何创建、显示和移除OverlayEntry,并提供了一个透明渐变的Toast Demo,帮助理解其工作原理和实现方法。此外,还分享了完整代码供参考。
摘要由CSDN通过智能技术生成

叠加组件,可以悬浮在其他组件上边,我们通常使用他开发Toast、PopupWindow弹窗等

虽然可以直接创建Overlay ,但最常见的是在WidgetsApp或MaterialApp中使用导航器创建的叠加层。

使用方法

 
  1. //获取实例

  2. OverlayState overlayState = Overlay.of(_context);

  3. //创建OverlayEntry

  4. OverlayEntry overlayEntry = OverlayEntry(builder);

  5. //显示到屏幕上

  6. overlayState.insert(_overlayEntry);

  7. //移除屏幕

  8. overlayEntry.remove();

代码示例

一个透明渐变的 Toast Demo 代码片段,点击查看完整代码

 
  1. //显示 文本 Toast 透明渐变 代码片段

  2. static void _makeTextShowOpacity() async {

  3.  
  4. _showing = true;

  5.  
  6. //创建OverlayEntry

  7. _overlayEntry = OverlayEntry(

  8. builder: (BuildContext context) => Positioned(

  9. //top值,可以改变这个值来改变toast在屏幕中的位置

  10. top: _top,

  11. child: Container(

  12. alignment: Alignment.center,//居中

  13. width: MediaQuery.of(context).size.width,//Container 宽

  14. child: AnimatedOpacity(

  15. //目标透明度

  16. opacity: _showing ? 1.0 : 0.0,

  17. //执行时间

  18. duration: _showing ? Duration(milliseconds: _millisecondsShow) : Duration(milliseconds: _millisecondsHide),

  19. child: _toastWidget,

  20. ),

  21. ),

  22. )

  23. );

  24. //显示到屏幕上

  25. Overlay.of(_context).insert(_overlayEntry);

  26. //等待两秒

  27. await Future.delayed(Duration(milliseconds: _milliseconds));

  28.  
  29. //2秒后 到底消失不消失

  30. if (DateTime.now().difference(_startedTime).inMilliseconds >= _milliseconds) {

  31. _showing = false;

  32. //重新绘制UI,类似setState

  33. _overlayEntry.markNeedsBuild();

  34. //等待动画执行

  35. await Future.delayed(Duration(milliseconds: _millisecondsHide));

  36. if(!_showing){

  37. _overlayEntry.remove();

  38. _overlayEntry = null;

  39. }

  40. }

  41. }

效果图

添加曲线和不添加曲线效果对比

     


完整代码

查看完整代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值