十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
下图看起来和使用Container做的线显示效果一样
创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、成都网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的北戴河网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
Flutter 官方对解释的不是很清楚
通过测试对比发现Flutter在渲染小于1逻辑像素的线的时候,其高度是按1逻辑像素去展示的,只不过看到的颜色会不一样,当设置线的高度不是整数逻辑像素时,线的高度是线上取整后的逻辑像素,只不过看到的线上下边缘的颜色会随着小数部分的值越大颜色越接近设置的颜色。也就是说flutter是以1逻辑像素的整数倍去显示的,如果是非整数倍逻辑像素线上下边缘的颜色会跟设置的不一样(以灰度的方式显示出来)。
ios 原生目前也可以展示小于1物理像素的点,但是以UIView的控件做的线,其高度有个临界值,低于临界值的线会显示不出来,而且其显示的线边缘比较锐利,其高度在到某一临界值后会直接变高,而不是在线上下边缘做灰度展示。而用原生绘制出来的线展示小于以逻辑像素的时候其高度均展示为1逻辑像素,不过颜色值会以灰度的方式展示出来,在达到逻辑像素的整数倍时展示设置的颜色,这是和flutter一样的。
比如拿iPhone 6s 举例,其屏幕宽度是2.3英寸,横向上有750颗像素点,ppi = 750/2.3 = 326,既每寸上有326个物理像素,换算成厘米也就是 326/2.54 = 128.35,也就是说每厘米上有128.35个物理像素点,每毫米有13个物理像素点,也就是每个物理像素点的宽度是0.077毫米。6s 的逻辑宽度是375,横向上每厘米有375/(2.3*2.54) = 64逻辑像素/cm,也就是6s上每个逻辑像素的宽度是0.156毫米。当我们设置一逻辑像素宽度时其在6s上对应的宽度是0.156毫米。
算数运算符:加(+) 减(-) 乘(*) 除(/) 取余(%) 取整(~/)
关系运算符:(==)(!=)()()(=)(=)
逻辑运算符:(!)()(||)
赋值运算符:(=)(??=)(+=)(-=)(*=)(/=)(%=)(~/=)
1.圆角对性能的影响
尽量避免用Clipxxx组件,建议用BoxDecoration的image属性实现,如果用Clipxxx组件,圆角取整后性能会提升。
2.减少重绘
根据场景合理使用RePaintBoundary,使绘制独立于父布局,避免重绘,提升性能,但过度使用增加的图层会带来Raster合成的耗时。例如scrollview是滑动过程会导致所有的节点都重绘,可以在scrollview下一层使用RePaintBoundary。
3.滚动步长插值器优化(了解)
官方的滚动差值器在出现小卡顿时,滚动步长会出现大的跳跃,导致体感上出现很明显的抖动,优化步长偏移量算法与原生效果对齐。
4.开启SurfaceView
官方推荐Flutter用SurfaceView ,因为SurfaceView与应用窗口内容分隔开,在专有硬件中合成,产生的中间副本少于TextureView,所以性能高,占用内存少,但是在混合栈遇到的问题需要突破
5.使用RepaintBoundary 提升频繁重绘控件的性能。使用RelayoutBoundary提升频繁修改大小,增删的布局中也可以提升性能。
6.build中不要去写大量的耗时逻辑,因为数据更新会触发build的多次调用,在里面做耗时逻辑会降低性能。
7.尽量使用statelessWidget代替statefulWidget,因为statefulWidget的销毁重建会引起子widget的销毁与重建。
8.解析json可以放到子线程线程中,开Isolate去解析,这样,当返回数据特别大的时候也不会阻塞界面。
9.使用不变的组件的时候可以添加const,const组件不会进行build更新
10.由于flutter通过widget.runtimeType和key来判断是否需要跟新组建,所以我们写组件的时候尽量保持key不变,或者不写key。对于一些需要频繁改变,例如新增、删除、排序的最好加上key。如果type一直,如果不写key容易导致,element无法区分新旧widget,导致无法更新。
1、数值型-Number
2、布尔型-Boolean
3、字符串-String
4、列表-List
5、键值对-Map
1、int: 整数,数值
2、double: 浮点型数值,带有小数点
运算符:+,-,*,/,~/(取整),%;
字符串操作
运算符:+,*,==,[]
插值表达式:${expression}
常用属性:length,isEmpty(是否为空)
Map 对象
Flutter 的Dart语言,数字向上或者向下取整数。
例如:
6除以5想要获取到不同的值
控制小数点精度