Flutter:以毫米为单位创建标尺

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)

但问题是当我用手机上的物理标尺测量时,数值不匹配。检查给定的屏幕截图。

在此处输入图片说明

我正在使用此参考从毫米计算逻辑像素

请建议我是否遵循正确的方法。

Meh*_*Yaz 7

您必须找出设备的像素频率。然后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 次

最近记录:

5 年 前