Flutter中的计量单位是什么?与dp、pt的换算及计算方式
Flutter 中的计量单位:和 dp/pt 的关系及换算方法
嘿,从Android或iOS转Flutter的开发者几乎都会碰到这个问题!咱们直接说重点:
Flutter里代码中写的16.0、23.0这类数值,对应的是逻辑像素(Logical Pixel)——这是Flutter专为跨平台适配设计的设备无关单位,和你熟悉的dp、pt本质上是对齐的:
对于Android开发者:1 Flutter逻辑像素 = 1 dp
你完全可以把Flutter里的数值直接当成dp来用,比如SizedBox(height: 16.0)就是16dp的高度,视觉效果和Android原生开发完全一致。毕竟dp的设计目标就是让UI在不同密度的Android设备上保持一致,这和Flutter逻辑像素的初衷一模一样。对于iOS开发者:1 Flutter逻辑像素 = 1 pt
iOS的pt本身就是设备无关的单位,Flutter的逻辑像素和它完全等价。比如TextStyle(fontSize: 23.0)就是23pt的字体大小,和iOS原生的效果对齐。
关于尺寸计算的补充
你提到的1 pt = 1/72英寸、1 dp = 1/160英寸,其实是对应平台的物理尺寸定义:
- 在Android设备上,1 Flutter逻辑像素(即1dp)的物理尺寸就是1/160英寸;
- 在iOS设备上,1 Flutter逻辑像素(即1pt)的物理尺寸就是1/72英寸;
Flutter会自动根据设备的**像素密度(DPR)**把逻辑像素转换成屏幕上的物理像素,不用咱们手动计算。如果确实需要和物理像素转换,可以通过以下方式获取DPR:
double dpr = MediaQuery.of(context).devicePixelRatio; // 物理像素 = 逻辑像素 × DPR double physicalPixel = 1.0 * dpr;
另外提一句:Flutter里没有Android的sp单位,但逻辑像素已经自动适配了系统的字体缩放设置,所以设置字体大小时直接用逻辑像素就好,效果和Android的sp一样。
内容的提问来源于stack exchange,提问作者Khánh Vũ Đỗ
相关产品推荐
相关产品推荐

