showModalBottomSheet 所彈出的內(nèi)容高度是固定的。要想自適應(yīng)自己布局的高度只需如下兩點:

我們提供的服務(wù)有:網(wǎng)站設(shè)計、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、平羅ssl等。為超過千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的平羅網(wǎng)站制作公司
加入 isScrollControlled: true 后,彈窗高度會變成全屏的。接下來就是自己布局中的處理。
BottomPhotoDialog是我自己寫的想要彈出的布局。在根節(jié)點中用SingleChildScrollView來包裹Column即可讓彈窗高度適應(yīng)布局高度
本文將簡單梳理一下 iOS 工程接入的 Flutter Boost 的流程,以作為前文的補充。
flutter_application_path = '../flutter_module'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')
target 'FlutterHybridiOS' do
install_all_flutter_pods(flutter_application_path)
end
接著在工程根目錄下運行 pod install ,即可集成上 Flutter Module。看到我們的 Pods 中多了以下幾個模塊,即說明集成成功。
接著在工程根目錄下運行 pod install ,即可集成上 Flutter Module。看到我們的 Pods 中多了以下幾個模塊,即說明集成成功。
這一塊直接參照 Flutter Boost 官方提供的 example 就好了:
PlatformRouterImp.h:
PlatformRouterImp.m:
可以看到,F(xiàn)lutter Boost 支持常規(guī) push,也支持打開模態(tài)彈窗,也支持手動 pop。
AppDelegate.h:
AppDelegate.m:
同樣的,這里可在 Native 端用兩種不同的方式去打開我們在 Flutter Module 中注冊好的路由名。
至此,我們成功在 iOS 工程中接入了 Flutter Boost,那就開啟我們的混編之旅吧~
封裝的彈窗必須要靈活,滿足實際開發(fā)中的大部分彈窗,比如有無標題、有無內(nèi)容、有無關(guān)閉按鈕、有無操作按鈕以及按鈕的排列樣式等需要滿足多元化~
共有四個文件: 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)、自定義按鈕、單獨回調(diào)、是否帶三角標志、任意位置、最大高度、超過可以滑動等~
部分展示效果:
支持配置背景顏色、字體大小、顏色、字重、按鈕排列方式、標題、內(nèi)容、按鈕支持完全自定義、點擊的回調(diào)等~
部分展示效果:
支持配置背景顏色、字體大小、顏色、字重、按鈕排列方式、標題、內(nèi)容、按鈕支持完全自定義、點擊的回調(diào)等~
部分展示效果:
中間、底部彈窗的彈窗widget
頂部彈窗的彈窗widget
頂部彈窗的數(shù)據(jù)源數(shù)據(jù)模型item
github傳送門:
系統(tǒng)自帶的Dialog實際上就是Push了一個新頁面,這樣存在很多好處,但是也存在一些很難解決的問題
上面這些痛點,簡直個個致命 ,當(dāng)然,還存在一些其它的解決方案,例如:
很明顯,使用Overlay可移植性最好,目前很多toast和dialog三方庫便是使用該方案,使用了一些loading庫,看了其中源碼,穿透背景解決方案,和預(yù)期想要的效果大相徑庭、一些dialog庫自帶toast顯示,但是toast顯示卻又不能和dialog共存(toast屬于特殊的信息展示,理應(yīng)能獨立存在),導(dǎo)致我需要多依賴一個Toast庫
基于上面那些難以解決的問題,只能自己去實現(xiàn),花了一些時間,實現(xiàn)了一個Pub包,基本該解決的痛點都已解決了,用于實際業(yè)務(wù)沒什么問題
使用 FlutterSmartDialog 包裹下child即可,下面就可以愉快的使用SmartDialog了
使用Overlay的依賴庫,基本都存在一個問題,難以對返回事件的監(jiān)聽,導(dǎo)致觸犯返回事件難以關(guān)閉彈窗布局之類,想了很多辦法,沒辦法在依賴庫中解決該問題,此處提供一個 BaseScaffold ,在每個頁面使用 BaseScaffold ,便能解決返回事件關(guān)閉Dialog問題
當(dāng)時想解決穿透暗色背景,和背景后面的控件互動的時候,我?guī)缀趿ⅠR想到這倆個控件,先了解下這倆個控件吧
分析
這種方案,成功實現(xiàn)想要的穿透效果,這里了解下 behavior 的幾種屬性
有戲了!很明顯translucent是有希望的,嘗試了幾次,然后成功實現(xiàn)了想要的效果
注意,這邊有幾個坑點,提一下
下面是寫的一個驗證小示例
這個庫花了一些時間去構(gòu)思和實現(xiàn),算是解決幾個很大的痛點
FlutterSmartDialog一些信息
狀態(tài)管理
在android/app/build.gradle的android下加入
64-bit
32-bit
通過FlutterBugly.getUpgradeInfo()獲取更新策略信息填入自定義flutter widget,手動彈窗
UpgradeInfo參數(shù):
異常上報說明
1、flutter異常上報不屬于崩潰,所以如需查看flutter的異常上報,請在【錯誤分析】tab頁查看
2、iOS的異常上報沒有過多測試,如出現(xiàn)問題請issue
目前已知問題
1、第一次接受到更新策略之后,不會彈窗,即使手動檢查更新也不會,需要退出app之后再進入,才會有彈窗(已解決)
2、官方?jīng)]有適配8.0的notification,所以如果需要用到notification的時候請關(guān)閉后(默認關(guān)閉),自己寫相關(guān)業(yè)務(wù)邏輯,或者直接把gradle里的targetSdkVersion設(shè)成26以下(方法見示例)
網(wǎng)頁標題:flutter雙層彈窗,flutter border
文章URL:http://chinadenli.net/article22/dsepgcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、網(wǎng)站建設(shè)、全網(wǎng)營銷推廣、、App設(shè)計、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)