最近在做一個Flutter的底部彈窗,但是發(fā)現(xiàn)bottomsheet在彈出的時候最高高度始終限制在了屏幕的二分之一的位置鹅髓,再往高就會報bottom overflow了计福,但是我們的彈窗設(shè)計稿是占據(jù)屏幕三分之二的位置的,顯然Flutter的這個限制是無法滿足需求的。
有問題的截圖如下:
怎么去解決這個問題?冈绊??
當(dāng)時百度Google了兩個小時死宣,發(fā)現(xiàn)了flutter 的issue,說了很多辦法毅该,但是都是沒有實際性解決問題的博秫,既然找不到現(xiàn)成的辦法,看源碼吧眶掌,然后我就直接打開了showModalBottomSheet這個方法進(jìn)行查看,因為時間緊朴爬,全局搜了height的關(guān)鍵字,發(fā)現(xiàn)了一個重要的一點
flutter在這里強(qiáng)制將最大高度設(shè)置為constraints.maxHeight的9/16召噩,看來問題癥結(jié)找到了母赵,本著快速驗證的原則,直接修改flutter源碼去掉后面的這些具滴,run了一下凹嘲,果然好了构韵,修改之后的截圖如下
bottomsheet高度一下子高了好多溯革,看來這是關(guān)鍵所在啊谷醉,但是如果修改flutter源碼冈闭,我們的對外打包是在服務(wù)器上進(jìn)行的,不可能去直接修改服務(wù)器的flutter源碼萎攒,而且以后flutter升級的時候這個也是個問題,所以我將bottom_sheet的源碼直接拷貝了出來刃永,
第二個方案是重寫bottomsheet羊精,替換這里的maxheight斯够,但是問題來了喧锦,這個dart里面的很多類都是私有的,你根本無法重寫束亏,怎么辦呢阵具?
拷貝!Q粢骸!然后更換了名字為adjustable_bottomsheet.dart帘皿,將這個文件復(fù)制到自己的業(yè)務(wù)中,將import的地方加上flutter的路徑前綴越庇,整個dart文件被我們復(fù)制了一份出來奉狈,沒有報錯了,完美仁期,然后為了防止方法名沖突竭恬,將這個復(fù)制類的方法改成如下:
然后在自己的業(yè)務(wù)中
import 'adjustable_bottomsheet.dart';
將showModalBottomsheet 更換成 showAdjustableBottomSheet 熬的,
大功告成!2沓瘛!盒揉!