width为0

来源:13-14 视频列表优化

demonCry

2022-09-11

图片描述

老师感觉是第一次,很荣幸拿到老师的第一次 [doge]
后半份课程 "123"走倒是没了,但经常莫名就跳了一段
比如这里前脚说宽度为1,这里就后脚悄悄咪咪改为了0

想问下为什么这里设置为0了 但实际效果却是有一条这么细的线? 是什么hack的写法。。。

写回答

1回答

马超老师

2022-11-19

这里是因为flutter引擎对border width为0作了一个特殊处理。具体可以看到Flutter源码的borders.dart文件,路径如下:

flutter/packages/flutter/lib/src/painting/borders.dart


我们设置的width也是在borders.dart的第143行声明的,这里源码也给了一个很详细的注释,如下:

/// The width of this side of the border, in logical pixels.
///
/// Setting width to 0.0 will result in a hairline border. This means that
/// the border will have the width of one physical pixel. Also, hairline
/// rendering takes shortcuts when the path overlaps a pixel more than once.
/// This means that it will render faster than otherwise, but it might
/// double-hit pixels, giving it a slightly darker/lighter result.
///
/// To omit the border entirely, set the [style] to [BorderStyle.none].
final double width;

可以看到第二段的第一句给了一个结论

把width设置成0.0会出现一个细线,也就是会有一个物理像素的宽度。

当然如果想完全去掉这个分割线,真正实现width=0,可以将border的style设置成none,代码示例如下:

BoxDecoration(border: Border.all(color: const Color(0xfffef5ff), width: 0, style: BorderStyle.none))


demondCry同学观察的很仔细,不过这一段主要讲解视频列表的开发,这个小细节可以作为一个扩展知识了解一下。

0
0

基于Flutter 3.x 实战跨平台仿抖音App混合开发

以短视频APP为例,快速上手原生/Flutter 混合开发

492 学习 · 122 问题

查看课程