从主题更改 RaisedButton 的颜色不起作用

问题描述 投票:0回答:7

我尝试从

themeData
更改我所有RaisedButtons的颜色但它拒绝工作。所有其他属性,例如
fontSize
fontWeight
已成功更改。当
themeData
的亮度属性更改为
Brightness.dark
时,文本的颜色只会从黑色变为白色。

有什么办法可以解决这个问题吗?我做错了什么?

这是我的示例代码:

 return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primaryColor: Color(0XFF212845),
        scaffoldBackgroundColor: Color(0XFF212845),
        primarySwatch: Colors.yellow,
        buttonColor: Color(0XFFF8D320),
        textTheme:  TextTheme(
          button: TextStyle(
            color: Colors.green, // This is not working.
            fontSize: 30.0,
            fontWeight: FontWeight.bold
          )
        )
      ),
      home:MenuPage(),
    );
flutter material-design
7个回答
54
投票

对于其他人来说这个问题,按钮可能不会改变颜色的一个原因是它被禁用,当您没有设置

onPressed
方法时会发生这种情况。

RaisedButton(
  color: Theme.of(context).accentColor,
  onPressed: () {}, //                        <-- need to add this
  child: Text(...),
),


12
投票

如果你给 color 属性赋予了一种颜色,但它没有显示,那么可能你还没有实现 onPressed 属性,因为在这种状态下,按钮将显示它的禁用颜色,也就是根本没有颜色。

这样设置:

onPressed: () {},

给它一个像这样的匿名函数而不实现任何东西(或者如果你愿意的话)会给它颜色


7
投票

buttonTheme
accentColor
添加到您的
ThemeData
中,如下所示:

  ThemeData(
            primaryColor: Color(0XFF212845),
            scaffoldBackgroundColor: Color(0XFF212845),
            primarySwatch: Colors.yellow,
            buttonColor: Color(0XFFF8D320),
            buttonTheme: ButtonThemeData(textTheme: ButtonTextTheme.accent),
            accentColor: Colors.green,

3
投票

即使可能已经添加了 primarySwatch,您仍然需要添加 buttonColor 来为按钮添加颜色,如下所示:

child: MaterialApp(
        home: Wrapper(),
        theme: ThemeData(
          primarySwatch: Colors.blue,
          buttonColor: Colors.blue // this is needed
        ),
      ),

primarySwatch - 用于配置多个字段的默认值, 包括:primaryColor、primaryColorBrightness、primaryColorLight、 primaryColorDark, toggleableActiveColor, accentColor, colorScheme, secondaryHeaderColor、textSelectionColor、backgroundColor 和 按钮颜色。

此外,确保设置了 RaisedButton 中的 onPressed:

onPressed: () {},

1
投票

确保您没有自定义 RaisedButton() 本身,否则它将覆盖 ThemeData。如果您在 RaisedButton 中自定义了颜色属性,它将覆盖在 ThemeData 中设置的属性。


0
投票

我相信正确的方法是在您的

buttonColor
小部件中声明一个
ThemeData
属性。

MaterialApp(
        theme: ThemeData(
          fontFamily: 'Pirata',
          primaryColor: Color.fromRGBO(71, 86, 87, 1),
          accentColor: Color.fromRGBO(71, 86, 87, 1),
          buttonColor: Color.fromRGBO(238, 238, 238, 1),

        ),
        home: App()))

0
投票

上面的大部分答案在我发布这个的时候都被弃用了。

      theme: ThemeData(
    primaryColor: Color(0XFF212845),
    scaffoldBackgroundColor: Color(0XFF212845),
    primarySwatch: Colors.yellow,
    colorScheme: ColorScheme.fromSwatch().copyWith(secondary: Colors.green),
    elevatedButtonTheme: ElevatedButtonThemeData(
      style: ButtonStyle(
        textStyle: MaterialStateProperty.all<TextStyle>(
          TextStyle(
            fontSize: 30.0,
            fontWeight: FontWeight.bold,
          ),
        ),
      ),
    ),
  ),
© www.soinside.com 2019 - 2024. All rights reserved.