Moh*_*hid 5 flutter flutter-layout
我正在创建一个标尺应用程序,我可以在其中以毫米为单位测量任何东西。
类似于这个应用程序https://play.google.com/store/apps/details?id=org.nixgame.ruler&hl=en_IN但非常基本的东西。
我将Divider小部件重复到一个Column小部件中,并保持给定的6.299间隙。
class Ruler extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: rulerPin(350),
),
);
}
List<Divider> rulerPin(int count) {
return List.generate(count, (i) {
return Divider(
height: 6.299,
thickness: 1,
);
}).toList();
}
}
Run Code Online (Sandbox Code Playgroud)
但问题是当我用手机上的物理标尺测量时,数值不匹配。检查给定的屏幕截图。
我正在使用此参考从毫米计算逻辑像素
请建议我是否遵循正确的方法。
您必须找出设备的像素频率。然后MediaQuery你必须以相等的间隔添加引脚计算。固定数字的计算总是可能会发生变化。
如果不再出现这种情况,则肯定意味着提供信息的部分存在错误(例如像素频率信息)。
我将为您研究并编辑这个答案。
结果:可以分3阶段计算;
1) 获取 DPI(每英寸点数)
double dpi = _getDpi();
Run Code Online (Sandbox Code Playgroud)
android:在android中以编程方式获取屏幕密度?带方法通道
iOS:您可以创建苹果设备型号的 dpi 列表。(设备列表)它们并不算太多。然后你可以通过device_info获取设备型号
2)计算像素大小
Flutter 使用逻辑像素。所以我们需要知道有多少逻辑像素和多少物理像素 dart Size LogicalSize = MediaQuery.of(context).size;
///How many physical pixel for 1 logical pixel
double pixelRatio = MediaQuery.of(context).devicePixelRatio;
///How many logical pixel for 1 mm.
double pixelCountInMm = dpi / pixelRatio / 25.4;
//e.g output = 7.874015748031496
Run Code Online (Sandbox Code Playgroud)
3)计算
double dpi = _getDpi();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |