Flutter web 按钮大小问题

Posted

技术标签:

【中文标题】Flutter web 按钮大小问题【英文标题】:Flutter web button size issue 【发布时间】:2021-02-24 14:22:43 【问题描述】:

我正在为网络和移动设备创建一个跨平台应用程序。但是,这些按钮具有不同的默认高度,具体取决于平台。如何在不检查平台的情况下使按钮的高度在移动设备和 Web 上的大小相同?

【问题讨论】:

【参考方案1】:

如果您使用的是 RaisedButton 等材质小部件,您可以按如下方式控制高度:

ButtonTheme(
  height: 100.0,
  child: RaisedButton(
    onPressed: () ,
    child: Text("Click here!"),
  ),
);

【讨论】:

我猜 100.0 在移动和网络上是不一样的。将高度设置为 100 时,网络上的按钮明显变细。 嗯,这取决于我猜的像素和分辨率。【参考方案2】:

就我而言,Web 上的按钮明显小于移动设备上的按钮。我明确传递了padding,但它在 Flutter 框架内进行了调整。

移动(按预期):

网页:

按钮代码如下:

  @override
  Widget build(BuildContext context) => RaisedButton(
        onPressed: onPressed,
        color: color,
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(4),
        ),
        padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 8),
        child: child,
      );

我通过在MaterialApp 初始化中将ThemeData 中的visualDensity 设置为VisualDensity.standard 解决了这个问题。出于某种原因,默认值为VisualDensity.compact

class MyApp extends StatelessWidget 
  // ...

  @override
  Widget build(BuildContext context) => MaterialApp(
        // ...
        theme: ThemeData(
          // ...
          visualDensity: VisualDensity.standard,
        ),
        // ...
      );

现在大小也符合 Web 上的预期。

【讨论】:

以上是关于Flutter web 按钮大小问题的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Web ShowMenu 不随屏幕调整大小而移动

Flutter,如何获取小部件的大小?

Flutter:如何使按钮扩展到其父级的大小?

如何根据 Flutter 中的按钮单击向上和向下移动一个小部件?

在 Flutter 中只让一个小部件漂浮在键盘上方

使用 BackdropFilter 会影响 Row Widget 中的其他 Widget - Flutter Web