Flutter 即使使用MediaQuery.of(上下文),设备上的小部件大小也不一致

Flutter 即使使用MediaQuery.of(上下文),设备上的小部件大小也不一致,flutter,flutter-layout,Flutter,Flutter Layout,我的应用程序分辨率有问题。我在Pageview和GridList上使用的卡的大小取决于我使用的设备。我希望无论设备的类型和大小,它们都是相同的 我正在使用 Mediaquery.of<context).size Mediaquery.of<context).devicePixelRatio 我在S9上的屏幕分辨率实际上是FHD+2220x1080,与像素3a的分辨率相同。我不知道为什么它显示出如此低的分辨率,为什么它们也不同!这毫无意义 这是我的代码:(都在CustomScrol

我的应用程序分辨率有问题。我在Pageview和GridList上使用的卡的大小取决于我使用的设备。我希望无论设备的类型和大小,它们都是相同的

我正在使用

Mediaquery.of<context).size 
Mediaquery.of<context).devicePixelRatio
我在S9上的屏幕分辨率实际上是FHD+2220x1080,与像素3a的分辨率相同。我不知道为什么它显示出如此低的分辨率,为什么它们也不同!这毫无意义

这是我的代码:(都在CustomScrollView中)

SliveToboxAdapter(
孩子:填充(
填充:常数边集全部(20.0),
子:文本(
I18n.of(上下文)。畅销书,
风格:kHeaderTextStyle,
),
),
),
滑动双轴适配器(
子:容器(
高度:屏幕大小。高度/3.5,
子项:PageView.builder(
控制器:页面控制器(
首字母页码:1,
视口分数:0.14*屏幕比率,
),
滚动方向:轴水平,
itemCount:bestProducts.length,
itemBuilder:(上下文,索引){
退货产品卡片(最佳产品[索引]);
},
),
),
),
滑动双轴适配器(
孩子:填充(
填充:常数边集全部(20.0),
子:文本(
I18n.of(上下文)。销售,
风格:kHeaderTextStyle,
),
),
),
填缝料(
填充:仅限常量边设置(
左:24,
右:24,
底部:8.0,
),
银条:银条网格(
代表:SliverChildBuilderDelegate(
(),索引){
退货产品卡(销售产品[索引]);
},
childCount:saleProducts.length,
),
gridDelegate:SliverGridDelegateWithFixedCrossAxisCount(
交叉轴计数:2,
主轴间距:6.0,
交叉轴间距:6.0,
childAspectRatio:0.215*屏幕比率,
),
),
),
我还尝试将屏幕比例更改为screenSize.height,但我得到的是不同的大小

这些是与代码相关联的图片,第一张来自my S9,第二张来自像素3a:


请注意这些卡的高度有多么不同。

Media query不会提供物理像素数。这就是为什么你的屏幕有2220x1080像素,但它会说它的像素更少

如果您想要精确的像素计数,可以使用
dart:ui
中的
窗口
singleton

var screenSize = window.physicalSize;
并使用
SizedBox
小部件强制小部件达到精确的大小

此外,您可能不应该将viewportFraction与任何内容相乘。它已经占据了你屏幕的一个百分比

viewportFraction:0.14*屏幕比率,->viewportFraction:0.14,
还有一个名为
partiallysizedbox
的小部件,它总是占据屏幕的相同部分:

partiallysizedbox(
高度系数:0.2,
宽度系数:0.28,
孩子:。。。,
),

感谢您的澄清和解决方案!
var screenSize = window.physicalSize;