正文
flutter高度适配的简单介绍
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
Flutter实战巧之-showModalBottomSheet 高度自适应
showModalBottomSheet 所弹出的内容高度是固定的。要想自适应自己布局的高度只需如下两点:
加入 isScrollControlled: true 后,弹窗高度会变成全屏的。接下来就是自己布局中的处理。
BottomPhotoDialog是我自己写的想要弹出的布局。在根节点中用SingleChildScrollView来包裹Column即可让弹窗高度适应布局高度
【Flutter】ListView、GridView高度自适应并随页面滚动
Cannot hit test a render box that has never been laid out.
当ListView、GridView作为Wrap、Column等组件的子组件时,若外部没有设置高度,则会产生此报错。
解决放案:为ListView、GridView设置属性 shrinkWrap: true,
刷新后,报错消失,但是发现其只可内部滚动。
至此,需求达成。
参考
Flutter实践--屏幕适配
做移动端开发的小伙伴都知道,针对不同型号和尺寸的手机要进行页面适配,且Android和iOS适配方案各不相同,那flutter端如何进行适配呢?以下为近期flutter开发过程中关于适配的一些学习和记录~~~~
说到flutter屏幕适配,就不得不提到插件 flutter_screenutil ,提到flutter_screenutil就不得不说以下几点?
默认宽1080px
默认高1920px
allowFontScaling为false,即不跟随系统字体大小设置变化
初始化单位为px
需要把context传进去,因为内部是通过 MediaQuery 来获取屏幕尺寸等相关信息的
无需再传context,因为内部是通过单例 window 来获取屏幕尺寸等相关信息的
作为iOS开发,之前都是以pt为参照进行比例适配的,且架构组已经定义了一套适配相关常量,传px进去不太方便,所以需要对flutter_screenutil进行扩展
公司设计图是以iPhone X的尺寸提供的即物理设备尺寸为375x812,像素比例为750x1624,像素密度比为2
初始化仍用px来初始化
dart sdk 2.7正式支持 extension-method ,即为已有类扩展方法,从 flutter_screenutil 这种 540.w 写法点进去,我们可以看到
flutter_screenutil为num类扩展了一系列简写方法,那我们当然可以按照它这种方式进行扩展
网上提供的解决方案:
第一步:修改 pubspec.yaml
第二步:执行 flutter pub get
第三步:重启 AndroidStudio
解决方案:去掉const即可
UI设计中px、pt、ppi、dpi、dp、sp之间的关系
Dart/Flutter - 扩展方法(ExtensionMethod)
Flutter中屏幕适配,尺寸设置
1、 新版本Flutter SDK 引入了 extension的机制。可以对某个class 进行扩展。(swift中有类似机制)
2、屏幕适配一直是一个老生常谈的问题,随着机型越来越多,适配的场景也越来越复杂。
3、之前有了解过 微信小程序的适配方案,个人一直感觉是一个比较好的方式( iPhone6为标准尺寸)下面?将引用小程序的方案来进行对 Flutter的尺寸设置。
size_fit.dart 文件
double_extension.dart 文件
int_extension.dart 文件
通过上面的设置,在不同设备上,展示的widget的尺寸就会不一样了。
Flutter MediaQuery获取屏幕信息以及屏幕适配
Flutter中控件的高宽和字体大小时,使用的是逻辑像素,并非是实际的物理像素。
flutter中的屏幕适配
假设设计图的大小为1080 1920,上面一个图片的高度为 80 90,则它在设备上的高宽为
对于android手机,一般以宽度为基准计算UI的高宽,因为android手机的宽度一般就是750,1080等几个尺寸,但是高的尺寸就有很多。
推荐一个别人封装好的一个用于屏幕适配的库
Flutter屏幕适配方案插件-完美解决屏幕适配
Flutter 设置Container高度自适应GridView 或Listview
在做移动端的时候, 很多时候会需要下图所示的需求,如图 自己所示:
先进行需求分析, 这个模块可以设计成Container包含GridView, GridView中子内容个数由后台数据控制, 但是在直接写Container包含GridView控件时会出现 "Failed assertion: line 1920 pos 12: 'hasSize'" 有关的错误, 如果直接给Container一个高度的话, 又不满足我们的需求.
我们想要的结果是由数据控制GridView的个数, 而Container大小跟随GridView个数的变化而变化, 而不去直接设置Container的大小,
因此,我们点开GridView的api发现, 有一个shrinkWrap属性, 设置shrinkWrap:true即可, 运行一下即可达到效果, 但是又会发现另一个问题, 虽然Container大小可以自适应了, 但是里面的内容又会在局部进行滚动, 而我们的想法是想让内容在整个屏幕中滚动, 并没有局部滚动的效果, 因此, 我们设置另一个属性physics: NeverScrollableScrollPhysics()
在GridView.builder中添加
Container跟随GridView内容变化高度: shrinkWrap:true,
取消滚动效果: physics:NeverScrollableScrollPhysics(),