不同设备上宽高比的颤动网格视图问题
flutter gridview problem with aspect ratio on different devices
我想在 gridview 中有一个固定高度的容器。我正在使用以下代码。它在不同的设备上显示不同的高度。有什么方法可以控制高度,使其在所有设备上看起来都一样。
GridView.count(
shrinkWrap: true,
crossAxisCount: 2,
mainAxisSpacing: 0,
childAspectRatio:
MediaQuery.of(context).size.width /
(MediaQuery.of(context).size.height / 1),
crossAxisSpacing: 8,
children: _productData.map((opt) {
return _productCard(context, opt, cart);
}).toList(),
),
错误是因为,如果您使用“MediaQuery”,它会获取您所在设备的尺寸(宽度、高度)运行,而且您知道所有设备的尺寸都不同。
所以使用 MediaQuery.of(context).size.width / (MediaQuery.of(context).size.height / 1),不会在所有设备上给出准确的结果。
我建议你这样做
GridView.count(
shrinkWrap: true,
crossAxisCount: 2,
mainAxisSpacing: 0,
childAspectRatio: 2:1
children: _productData.map((opt) {
return _productCard(context, opt, cart);
}).toList(),
),
您可以不断替换纵横比的值,直到获得您想要的尺寸。
我能够使用此处的 class 解决问题:https://github.com/flutter/flutter/issues/55290
然后像这样使用它
GridView.builder(
itemCount: _productData.length,
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCountAndFixedHeight(
crossAxisCount: 2,
crossAxisSpacing: 5,
mainAxisSpacing: 5,
height: 300.0,
),
itemBuilder: (BuildContext ctx, int index) {
var opt = _productData[index];
return _productCard(context, opt, cart);
},
),
我想在 gridview 中有一个固定高度的容器。我正在使用以下代码。它在不同的设备上显示不同的高度。有什么方法可以控制高度,使其在所有设备上看起来都一样。
GridView.count(
shrinkWrap: true,
crossAxisCount: 2,
mainAxisSpacing: 0,
childAspectRatio:
MediaQuery.of(context).size.width /
(MediaQuery.of(context).size.height / 1),
crossAxisSpacing: 8,
children: _productData.map((opt) {
return _productCard(context, opt, cart);
}).toList(),
),
错误是因为,如果您使用“MediaQuery”,它会获取您所在设备的尺寸(宽度、高度)运行,而且您知道所有设备的尺寸都不同。 所以使用 MediaQuery.of(context).size.width / (MediaQuery.of(context).size.height / 1),不会在所有设备上给出准确的结果。 我建议你这样做
GridView.count(
shrinkWrap: true,
crossAxisCount: 2,
mainAxisSpacing: 0,
childAspectRatio: 2:1
children: _productData.map((opt) {
return _productCard(context, opt, cart);
}).toList(),
),
您可以不断替换纵横比的值,直到获得您想要的尺寸。
我能够使用此处的 class 解决问题:https://github.com/flutter/flutter/issues/55290 然后像这样使用它
GridView.builder(
itemCount: _productData.length,
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCountAndFixedHeight(
crossAxisCount: 2,
crossAxisSpacing: 5,
mainAxisSpacing: 5,
height: 300.0,
),
itemBuilder: (BuildContext ctx, int index) {
var opt = _productData[index];
return _productCard(context, opt, cart);
},
),