最近在做一个Flutter的底部弹窗,但是发现bottomsheet在弹出的时候最高高度始终限制在了屏幕的二分之一的位置,再往高就会报bottom overflow了,但是我们的弹窗设计稿是占据屏幕三分之二的位置的,显然Flutter的这个限制是无法满足需求的。
有问题的截图如下:
Screenshot_20190626-101954.jpg
怎么去解决这个问题???
当时百度Google了两个小时,发现了flutter 的issue,说了很多办法,但是都是没有实际性解决问题的,既然找不到现成的办法,看源码吧,然后我就直接打开了showModalBottomSheet这个方法进行查看,因为时间紧,全局搜了height的关键字,发现了一个重要的一点
flutter在这里强制将最大高度设置为constraints.maxHeight的9/16,看来问题症结找到了,本着快速验证的原则,直接修改flutter源码去掉后面的这些,run了一下,果然好了,修改之后的截图如下
Screenshot_20190626-102017.jpg
bottomsheet高度一下子高了好多,看来这是关键所在啊,但是如果修改flutter源码,我们的对外打包是在服务器上进行的,不可能去直接修改服务器的flutter源码,而且以后flutter升级的时候这个也是个问题,所以我将bottom_sheet的源码直接拷贝了出来,
第二个方案是重写bottomsheet,替换这里的maxheight,但是问题来了,这个dart里面的很多类都是私有的,你根本无法重写,怎么办呢?
拷贝!!!然后更换了名字为adjustable_bottomsheet.dart,将这个文件复制到自己的业务中,将import的地方加上flutter的路径前缀,整个dart文件被我们复制了一份出来,没有报错了,完美,然后为了防止方法名冲突,将这个复制类的方法改成如下:
image.png然后在自己的业务中
import 'adjustable_bottomsheet.dart';
将showModalBottomsheet 更换成 showAdjustableBottomSheet ,
大功告成!!!!
网友评论