Flutter Overlay、OverlayState、OverlayEntry 疊加 Toast Demo
疊加元件,可以懸浮在其他元件上邊,我們通常使用他開發Toast、PopupWindow彈窗等
雖然可以直接建立Overlay ,但最常見的是在WidgetsApp或MaterialApp中使用導航器建立的疊加層。
使用方法
-
//獲取例項
-
OverlayState overlayState = Overlay.of(_context);
-
//建立OverlayEntry
-
OverlayEntry overlayEntry = OverlayEntry(builder);
-
//顯示到螢幕上
-
overlayState.insert(_overlayEntry);
-
//移除螢幕
-
overlayEntry.remove();
程式碼示例
一個透明漸變的 Toast Demo 程式碼片段,點選檢視完整程式碼
-
//顯示 文字 Toast 透明漸變 程式碼片段
-
static void _makeTextShowOpacity() async {
-
_showing = true;
-
//建立OverlayEntry
-
_overlayEntry = OverlayEntry(
-
builder: (BuildContext context) => Positioned(
-
//top值,可以改變這個值來改變toast在螢幕中的位置
-
top: _top,
-
child: Container(
-
alignment: Alignment.center,//居中
-
width: MediaQuery.of(context).size.width,//Container 寬
-
child: AnimatedOpacity(
-
//目標透明度
-
opacity: _showing ? 1.0 : 0.0,
-
//執行時間
-
duration: _showing ? Duration(milliseconds: _millisecondsShow) : Duration(milliseconds: _millisecondsHide),
-
child: _toastWidget,
-
),
-
),
-
)
-
);
-
//顯示到螢幕上
-
Overlay.of(_context).insert(_overlayEntry);
-
//等待兩秒
-
await Future.delayed(Duration(milliseconds: _milliseconds));
-
//2秒後 到底消失不消失
-
if (DateTime.now().difference(_startedTime).inMilliseconds >= _milliseconds) {
-
_showing = false;
-
//重新繪製UI,類似setState
-
_overlayEntry.markNeedsBuild();
-
//等待動畫執行
-
await Future.delayed(Duration(milliseconds: _millisecondsHide));
-
if(!_showing){
-
_overlayEntry.remove();
-
_overlayEntry = null;
-
}
-
}
-
}
效果圖
新增曲線和不新增曲線效果對比
完整程式碼
相關文章
- Flutter之使用Overlay建立全域性Toast並靜態呼叫FlutterAST
- 【Flutter 元件集錄】Tooltip 與 OverlayFlutter元件
- [Flutter翻譯]Flutter: 使用Overlay顯示浮動widgetFlutter
- 優惠疊加單元的所有子疊加單元
- Flutter Toast、彈出提示、輕提示FlutterAST
- 理解Flutter Demo AppFlutterAPP
- 從 flutter demo走進flutter 世界Flutter
- 03-OpenCvSharp4 影像疊加OpenCV
- Flutter入門進階之旅(十)Dialog&ToastFlutterAST
- Flutter bot_toast是怎樣煉成的FlutterAST
- Flutter EasyLoading - 讓全域性Toast/Loading更簡單FlutterAST
- flutter demo (二):禁用按鈕Flutter
- flutter demo (三):json處理FlutterJSON
- Flutter 寫全域性彈框的心路歷程(dialog和overlay)Flutter
- 【Flutter 專題】89 圖解基本 Overlay 懸浮新手引導Flutter圖解
- openlayers筆記-拖拽疊加層overLayer筆記
- Flutter 可拖拽的層疊卡片Flutter
- flutter demo (四):對話方塊Flutter
- flutter demo (一):居中的按鈕Flutter
- Flutter 從一個demo開始Flutter
- js 監聽事件的疊加和移除JS事件
- 線段樹(3)——區間操作疊加
- QT之控制元件疊加顯示QT控制元件
- ToastAST
- 編寫了一個輔助Flutter彈出Toast的PackageFlutterASTPackage
- echart疊加柱狀圖上顯示文字
- flutter好用的輪子推薦六-超好用的全域性toastFlutterAST
- Flutter 讓你的Dialog脫胎換骨吧!(Attach,Dialog,Loading,Toast)FlutterAST
- Flutter 圖片加濾鏡效果Flutter
- 自定義Toast樣式+改變Toast寬高AST
- Flutter開發實戰分析-pesto_demo解析Flutter
- 我的第一個Flutter 應用Demo AireportFlutterAI
- van-toastAST
- [Tricks-00003]CF1989F 套路疊加,高階分治
- Strategy Analytics:摺疊屏手機市場競爭加劇
- 一篇帶你看懂Flutter疊加元件StackFlutter元件
- Flutter渲染之通過demo瞭解Key的作用Flutter
- 【Python_Demo_5】Python中條形重疊直方圖的繪製Python直方圖