5

我有一个带有多个 IconButtons 的行,我需要更改它们的颜色和大小。我设法改变了颜色,但我无法改变图标的​​大小。

IconTheme(
                  data: IconThemeData(size: 48.0, color: Colors.yellow),
                  child: Row(
                    mainAxisSize: MainAxisSize.max,
                    mainAxisAlignment: MainAxisAlignment.spaceAround,
                    children: <Widget>[
                      IconButton(
                        icon: Icon(Icons.delete),
                        onPressed: () => null,
                      ),
                      IconButton(
                        icon: Icon(Icons.file_upload),
                        onPressed: () => _addPhoto(false),
                      ),
                      IconButton(
                        icon: Icon(Icons.camera_alt),
                        onPressed: () => _addPhoto(true),
                      ),
                    ],
                  ),
                ),

如果我使用 iconSize 在 IconButtons 中设置大小,它可以工作,但使用 IconTheme 则不能。

我该如何解决?

4

4 回答 4

6

如官方文档中所定义,链接在这里

此属性不能为空。它默认为 24​​.0。此处给出的大小通过 IconTheme 传递给图标属性中的小部件。例如,在此处而不是在 Icon.size 属性中设置大小允许 IconButton 调整启动区域的大小以适合图标。如果您要使用 Icon.size 设置图标的大小,则 IconButton 将默认为 24​​.0,然后图标本身可能会被剪裁。

因此,需要为 IconButton 赋予 iconSize 属性,因为这会覆盖 IconTheme 大小属性。如果您希望您的按钮具有从 IconTheme 派生的大小,那么您应该制作自定义 IconButton 来为您设置 iconSize。例如:

class CustomIconButton extends StatelessWidget {
  CustomIconButton({Key key, this.onPressed, this.icon});

  final Function onPressed;
  final Icon icon;

  @override
  Widget build(BuildContext context) {
    IconThemeData iconThemeData = IconTheme.of(context);
    return IconButton(
        onPressed: onPressed, iconSize: iconThemeData.size, icon: icon);
  }
}
于 2019-07-31T10:34:35.263 回答
1

像这样使用iconThemeThemeData您的所有图标都将是 35 号,代码如下:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
          iconTheme: IconThemeData(
            size: 35.0,
        ),
      ),
      home: HomePage(),
    );
  }
}
于 2021-03-02T15:53:58.783 回答
0

首先,检查您是否在使用主主题或默认主题的布局区域中。那是什么?放置在使用原色的布局上。

ThemeData(

  primaryColorLight: Colors.blueAccent[100],
  primaryColor: Colors.blueAccent[200],
  primaryColorDark: Colors.blueAccent[700],
  accentColor: Colors.yellow[700],

  iconTheme: IconThemeData(
    color: Colors.yellow[700],
      size: 28
  ),
  accentIconTheme: IconThemeData(
    color: Colors.yellow[700],
    size: 32
  ),
  primaryIconTheme: IconThemeData(
    color: Colors.yellow[700],
      size: 24
  ),
 
);
  • 如果您在主要区域(使用主要颜色的布局上的位置),则将使用 AccentIconTheme
  • 否则primaryIconTheme

我现在不知道的 IconTheme,所以任何人都可以随意编辑或发表评论

于 2021-04-14T10:47:27.400 回答
0

图标按钮没有选择主题中定义的图标大小。相反,我必须将图标包装在 iconThemeData 中的图标按钮内。

        icon: IconTheme(
          data: Theme.of(context).copyWith().iconTheme,
          child: Icon(
            Icons.search,
          ),
        ),
        onPressed: () {},
      ),

这解决了问题,但每次都为主题包装图标并不是一个好习惯。必须有一个适当的解决方案。

于 2021-01-22T11:10:11.170 回答