封裝的彈窗必須要靈活,滿足實(shí)際開(kāi)發(fā)中的大部分彈窗,比如有無(wú)標(biāo)題、有無(wú)內(nèi)容、有無(wú)關(guān)閉按鈕、有無(wú)操作按鈕以及按鈕的排列樣式等需要滿足多元化~
公司主營(yíng)業(yè)務(wù):網(wǎng)站建設(shè)、成都做網(wǎng)站、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出博愛(ài)免費(fèi)做網(wǎng)站回饋大家。
共有四個(gè)文件: ww_dialog.dart 、 ww_middle_bottom_dialog_widget.dart 、 ww_top_dialog_widget.dart 、 ww_top_dialog_item_data.dart
彈窗主要調(diào)用類,主要包含: WWDialog.showTopDialog 、 WWDialog.showMiddleDialog 、 WWDialog.showBottomDialog
支持自定義配置背景顏色、字體大小、顏色、統(tǒng)一回調(diào)、自定義按鈕、單獨(dú)回調(diào)、是否帶三角標(biāo)志、任意位置、最大高度、超過(guò)可以滑動(dòng)等~
部分展示效果:
支持配置背景顏色、字體大小、顏色、字重、按鈕排列方式、標(biāo)題、內(nèi)容、按鈕支持完全自定義、點(diǎn)擊的回調(diào)等~
部分展示效果:
支持配置背景顏色、字體大小、顏色、字重、按鈕排列方式、標(biāo)題、內(nèi)容、按鈕支持完全自定義、點(diǎn)擊的回調(diào)等~
部分展示效果:
中間、底部彈窗的彈窗widget
頂部彈窗的彈窗widget
頂部彈窗的數(shù)據(jù)源數(shù)據(jù)模型item
github傳送門(mén):
在耗時(shí)操作的時(shí)候,一般都要彈出一個(gè)加載框,然后在完成的時(shí)候再把加載框關(guān)掉,在Flutter中可以直接用showDialog()來(lái)彈出一個(gè)對(duì)話框。
這是一個(gè)簡(jiǎn)單的提示對(duì)話框,包含了關(guān)閉按鈕,點(diǎn)擊就能關(guān)閉。但一般的耗時(shí)操作完成,就需要我們自己把dialog關(guān)閉掉。
首先,開(kāi)啟dialog的時(shí)機(jī)。由于我們需要獲取到BuildContext,所以就得等build()方法走完,這里可以用Future.delayed()來(lái)等創(chuàng)建好BuildContext再進(jìn)行創(chuàng)建,或者用Timer來(lái)延遲操作,我選擇了前者。
其中delayed()在initState()結(jié)尾來(lái)做就行,這里參考網(wǎng)友封裝了一個(gè)LoadingDialog。
那么接下來(lái)要在什么時(shí)機(jī)關(guān)閉呢?
一開(kāi)始,我理所當(dāng)然的以為,是在異步方法結(jié)束后,去更新界面的時(shí)候關(guān)閉,也就是setState(() {})的時(shí)候,可是不管怎么嘗試,用Navigator.pop()不行,用Navigator.of(context, rootNavigator: true).pop(result)也不行,用FlutterBoost.singleton.close(id)也不行,用FlutterBoost.singleton.closeCurrent()也不行,都會(huì)直接把非Dialog的頁(yè)面也關(guān)閉掉,這讓我百思不得其解,因?yàn)閟howDialog()的本質(zhì)也是新建了一個(gè)Route出來(lái),也就是最頂層的頁(yè)面是彈出的Dialog,可是為什么關(guān)不掉呢。
一番思前想后,把showDialog的邏輯移到和異步邏輯同級(jí),也就是setState(() {})外面,然后把showDialog()自身創(chuàng)建的BuildContext傳進(jìn)去就能正常關(guān)閉了。也就是,在setState(() {})的時(shí)候,其實(shí)用的context還是非Dialog頁(yè)面的,所以關(guān)閉的當(dāng)然就不是Dialog了。
持有Dialog自己的BuildContext,然后在異步以后調(diào)用就行了。
彈性布局允許子組件按照一定比例來(lái)分配父容器空間
Flex組件和Row、Column屬性主要的區(qū)別就是多一個(gè)direction。
當(dāng)direction的值為Axis.horizontal的時(shí)候,則是Row。
當(dāng)direction的值為Axis.vertical的時(shí)候,則是Column。
它們之中都有主軸(MainAxis)和交叉軸(CrossAxis)的概念:
Row可以沿水平方向排列其子widget。定義如下:
示例1 - 基本使用
示例2 - 基線對(duì)齊
基線是英文字母X的下端兩點(diǎn)連成的一條線
示例3 - 水平方向包裹
Column可以沿垂直方向排列其子widget。定義如下:
Column 基本使用 示例
再看一個(gè)示例
運(yùn)行效果如下:
我們發(fā)現(xiàn)文本并沒(méi)有居中?
解釋:
實(shí)際上,Row和Column都只會(huì)在主軸方向占用盡可能大的空間,而交叉軸的長(zhǎng)度則取決于他們最大子元素的長(zhǎng)度。如果我們想讓本例中的兩個(gè)文本控件在整個(gè)手機(jī)屏幕中間對(duì)齊,我們有兩種方法:
運(yùn)行效果如下:
如果Row里面嵌套R(shí)ow,或者Column里面再嵌套Column,那么只有最外面的Row或Column會(huì)占用盡可能大的空間,里面Row或Column所占用的空間為實(shí)際大小,下面以Column為例說(shuō)明
如果要讓里面的Column占滿外部Column,可以使用Expanded 組件:
當(dāng)前名稱:flutter彈層,flutter彈窗組件
URL網(wǎng)址:http://aaarwkj.com/article20/dsiicco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、移動(dòng)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、用戶體驗(yàn)、小程序開(kāi)發(fā)、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)