我试图使用Ffltter将我的应用程序调整到特定的平板电脑尺寸,这让我感到恶心.

这款平板电脑是三星Galaxy Tab S5e,屏幕为2560x1600.

当我使Flutter 时,使用以下命令返回屏幕尺寸:

print("Size W is ${MediaQuery.of(context).size.width}");
print("Size H is ${MediaQuery.of(context).size.height}");

我得到的是:

Size W is 1137.7777777777778
Size H is 711.1111111111111

然后,从this answer岁起,我学会了使用:

var pixRatio = MediaQuery.of(context).devicePixelRatio;

因此,现在我实际上可以使用以下命令获得正确的值:

print("Corrected size W is ${MediaQuery.of(context).size.width * pixRatio}");
print("Corrected size H is ${MediaQuery.of(context).size.height * pixRatio}");

然后得到:

Corrected size W is 2560.0
Corrected size H is 1600.0

问题是,每次我想要在屏幕上放置一个尺寸为ContainerImage、指定为text size等的小部件时,我必须使用如下技巧

Container(
    width: 100 / pixRatio,
    height: 200 / pixRatio,
),

如果我不包括/pixRatio校正,它只是不正确地绘制,并且我得到很多像素溢出.

这是将小工具以正确的大小放到屏幕上的唯一方法吗?我的意思是,我真的需要在每次宽度和高度修正/pixRatio时添加NEED吗?

对我来说听起来不太实际.

推荐答案

Flutter 中的默认测量单位是倾角(与密度无关的像素).不同的设备有不同的屏幕尺寸和分辨率,这就导致了不同的像素比例.DIP的目的是让您设计视觉上大小大致相同的小部件,而不考虑设备.

通过将所有大小除以像素比率,您可以将倾斜转换为常规像素.如果您的小部件大小是以常规像素定义的,您会发现根据屏幕分辨率的不同,您的布局会有很大差异,这可能不是您想要的.

在分辨率为2560x1600的平板电脑上,Container现在配置为宽100像素、高200像素.您可以在一排上完全容纳25个这样的容器.如果您现在切换到屏幕分辨率为1280x800但屏幕大小相同的平板电脑,您的Container在视觉上将是原来的两倍宽和两倍高,因此占据的区域在视觉上要大4倍!而且只有12个能完全放在一排.这就是你想要达到的行为吗?

我强烈建议您重新考虑您想要实现的布局,然后找出如何使用默认度量单位而不是像素来实现它.

另一方面,如果你认为你有充分的理由使用像素,请在问题中提及,以便解决.

Dart相关问答推荐

使用arm64v8/DART Docker映像进行编译时不支持DART镜像

列表、捕获和...REST";元素的模式匹配

读取有状态(Stateful)小部件的状态

Flutter:Firebase身份验证无需登录即可创建用户

在 Dart 的 Cloud Firestore 中添加文档后如何获取文档 ID

Flutter|Dart 创建匿名类

执行 `dart2js` 时会生成哪些文件?为什么?

如何根据 Select 的选项卡更改样式?

有没有可能用Flatter摄像头插件播放视频?

替换 Flutter 中的片段等小部件

表单的 TextFormField 中的多个光标(cursor)

如何在Flutter中返回异步函数的值?

使用 Dart 计算字符串中字母的数量

Dart:默认 gitignore?

如何在 Flutter 中匹配密码和确认密码?

从 HttpClientResponse 检索响应正文

Dart 是否有断点语句?

DART:future的语法 then

在dart中获取列表的最后一个元素

将方法或值添加到 dart 中的枚举