Flutter,基于屏幕分辨率/ dpi优化材料尺寸的最佳方法?

时间:2019-01-09 20:50:18

标签: android dart flutter

我目前正在使用flutter,dart编码android应用程序。我有一个设置页面,使用户可以更改主题。我创建了7个相同的圆形原材料按钮。我一直在阅读根据用户分辨率/ dpi确定圆圈大小的最佳方法。

themeButton.dart:

final _themeColour;
final VoidCallback _onPressed;

ThemeButton(this._themeColour, this._onPressed);

@override
Widget build(BuildContext context) {
  double width = MediaQuery.of(context).size.width;
  double height = MediaQuery.of(context).size.height;
  double ratio = width/height;

  return RawMaterialButton (
    shape: CircleBorder(),
    fillColor: _themeColour,
    elevation: 0.0,
    highlightElevation: 0.0,
    onPressed: () => _onPressed(),
    splashColor: Colors.transparent,  
    highlightColor: Colors.transparent,
    constraints: BoxConstraints(minHeight: width * ratio * 0.2),
  );
}

目前,我目前采用的是用户设备的宽度,然后从中调整按钮的大小。当我尝试查找此图像时,到处都在谈论像素密度,但是我们尝试将dpi值用作乘数,因此在高dpi的设备上圆圈非常大。

使用设备宽度在一定程度上可行,但是我想知道是否有首选标准来完成此任务。

1 个答案:

答案 0 :(得分:2)

Flutter会自动为您处理高dpi;参见devicePixelRatio documentation

乘以DPI会执行两次(这就是为什么在高dpi的设备上看到它们更大的原因),而如果您只是设置自动发生的宽度。不会自动发生的是将尺寸调整为不同的宽高比,但似乎您已经提出了解决方案。我不确定您是否还有其他尝试无法完成的事情-让我知道,也许我可以帮忙。

对于其他处理此类问题的人,波动的维基has an entry可能会有所帮助。