Flutter質(zhì)感設(shè)計(jì)之持久底部面板
持久性底部面板可以用于補(bǔ)充應(yīng)用主要內(nèi)容的信息,即使用戶與應(yīng)用程序的其他控件進(jìn)行互動(dòng),也仍然可以看到持久的底部面板??梢允褂肧caffold.showBottomSheet函數(shù)創(chuàng)建和顯示持久性底部面板。
import 'package:flutter/material.dart'; class MyApp extends StatefulWidget { @override _MyApp createState() => new _MyApp(); } class _MyApp extends State<MyApp> { /** *GlobalKey:整個(gè)應(yīng)用程序中唯一的鍵 ScaffoldState:Scaffold框架的狀態(tài) 解釋?zhuān)篲scaffoldKey的值是Scaffold框架狀態(tài)的唯一鍵 */ final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>(); // VoidCallback:沒(méi)有參數(shù)并且不返回?cái)?shù)據(jù)的回調(diào) VoidCallback _showBottomSheetCallback; @override void initState() { super.initState(); _showBottomSheetCallback = _showBottomSheet; } void _showBottomSheet() { setState(() { // 禁用按鈕 _showBottomSheetCallback = null; }); /** *currentState:獲取具有此全局鍵的樹(shù)中的控件狀態(tài) showBottomSheet:顯示持久性的質(zhì)感設(shè)計(jì)底部面板 解釋?zhuān)郝?lián)系上文,_scaffoldKey是Scaffold框架狀態(tài)的唯一鍵,因此代碼大意為, 在Scaffold框架中顯示持久性的質(zhì)感設(shè)計(jì)底部面板 */ _scaffoldKey.currentState.showBottomSheet<Null>((BuildContext context){ final ThemeData themeData = Theme.of(context); return new Container( decoration: new BoxDecoration( border: new Border(top: new BorderSide(color: themeData.disabledColor)) ), child: new Padding( padding: const EdgeInsets.all(32.0), child: new Text( '這是一個(gè)持久性的底部面板,向下拖動(dòng)即可將其關(guān)閉', textAlign: TextAlign.center, style: new TextStyle( color: themeData.accentColor, fontSize: 24.0 ) ) ) ); }) /** *closed:當(dāng)此對(duì)象控制的元素不再可見(jiàn)時(shí)完成 whenComplete:注冊(cè)將在此未來(lái)完成時(shí)調(diào)用的函數(shù) 解釋?zhuān)郝?lián)系上文,closed控制的元素是新構(gòu)建的質(zhì)感設(shè)計(jì)底部面板,因此代碼大意為, 注冊(cè)底部面板不再可見(jiàn)時(shí)調(diào)用的函數(shù) */ .closed.whenComplete((){ // mounted:bool值,這個(gè)State對(duì)象當(dāng)前是否在樹(shù)中 if (mounted) { setState(() { // 重新啟用按鈕 _showBottomSheetCallback = _showBottomSheet; }); } }); } void _showMessage() { // showDialog<T>:顯示應(yīng)用程序當(dāng)前內(nèi)容上方的對(duì)話框 showDialog<Null>( context: context, // AlertDialog:質(zhì)感設(shè)計(jì)中的告警對(duì)話框 child: new AlertDialog( // content:對(duì)話框的可選內(nèi)容,以淺色字體顯示在對(duì)話框的中心 content: new Text('你點(diǎn)擊了浮動(dòng)按鈕'), // actions:顯示在對(duì)話框底部的可選操作 actions: <Widget>[ // FlatButton:質(zhì)感設(shè)計(jì)中的平面按鈕 new FlatButton( onPressed: () { Navigator.pop(context); }, child: new Text('確定') ) ] ), ); } @override Widget build(BuildContext context) { return new Scaffold( key: _scaffoldKey, appBar: new AppBar( title: new Text('底部面板') ), floatingActionButton: new FloatingActionButton( onPressed: _showMessage, backgroundColor: Colors.redAccent[200], child: new Icon(Icons.add) ), body: new Center( child: new RaisedButton( onPressed: _showBottomSheetCallback, child: new Text('顯示底部面板') ) ) ); } } void main() { runApp(new MaterialApp( title: 'Flutter Demo', home: new MyApp() )); }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫(huà)效果(一)
- Flutter Android端啟動(dòng)白屏問(wèn)題的解決
- flutter實(shí)現(xiàn)仿boss直聘功能
- Flutter中ListView 的使用示例
- Flutter質(zhì)感設(shè)計(jì)之彈出菜單
- Flutter實(shí)現(xiàn)底部導(dǎo)航欄效果
- Flutter路由的跳轉(zhuǎn)、動(dòng)畫(huà)和傳參詳解(最簡(jiǎn)單)
- Flutter質(zhì)感設(shè)計(jì)之底部導(dǎo)航
- Flutter質(zhì)感設(shè)計(jì)之進(jìn)度條
- Flutter UI如何使用Provide實(shí)現(xiàn)主題切換詳解
相關(guān)文章
Android自定義水波紋底部導(dǎo)航的實(shí)現(xiàn)
TabLayout作為導(dǎo)航組件來(lái)說(shuō),使用場(chǎng)景非常的多,也意味著要滿足各種各樣的需求,這篇文章主要介紹了Android自定義水波紋底部導(dǎo)航的實(shí)現(xiàn)2022-08-08Android Compose實(shí)現(xiàn)伸縮ToolBar的思路詳解
這篇文章主要介紹了Android Compose之伸縮ToolBar的實(shí)現(xiàn),本文給大家分享主要實(shí)現(xiàn)思路及實(shí)現(xiàn)過(guò)程,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-10-10android監(jiān)聽(tīng)器實(shí)例代碼
在本篇中小編給大家整理了一篇關(guān)于android監(jiān)聽(tīng)器的相關(guān)知識(shí)點(diǎn)文章,需要的朋友們可以學(xué)習(xí)下。2019-10-10unity5.6 導(dǎo)出gradle工程 Android Studio 導(dǎo)入問(wèn)題及處理方法
這篇文章主要介紹了unity5.6 導(dǎo)出gradle工程 Android Studio 導(dǎo)入問(wèn)題及處理方法,需要的朋友可以參考下2017-12-12Android?App設(shè)計(jì)規(guī)范深入講解
隨著安卓智能手機(jī)不停的更新?lián)Q代,安卓手機(jī)系統(tǒng)越來(lái)越完美,屏幕尺寸也越來(lái)越大啦,下面這篇文章主要給大家介紹了關(guān)于Android?App設(shè)計(jì)規(guī)范的相關(guān)資料,需要的朋友可以參考下2022-10-10