flutter 改变主题的RaisedButton的颜色不起作用

k3bvogb1  于 2023-05-08  发布在  Flutter
关注(0)|答案(7)|浏览(246)

我试着改变我所有的RaisedButtons从themeData的颜色,但它拒绝工作。所有其他属性(如fontSizefontWeight)已成功更改。当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(),
    );
brjng4g3

brjng4g31#

对于其他人来这个问题,一个按钮可能不会改变颜色的一个原因是它被禁用了,当你没有设置onPressed方法时就会发生这种情况。

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

yrefmtwq

yrefmtwq2#

如果你给color属性一个颜色而它没有显示,那么可能你还没有实现onPressed属性,因为在这种状态下按钮将显示它的禁用颜色,这是没有颜色的。
设置如下:

onPressed: () {},

给它一个匿名函数,而不实现任何东西(或其他东西,如果你愿意)会给予它颜色

to94eoyn

to94eoyn3#

buttonThemeaccentColor添加到ThemeData,如下所示:

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

已更新

这是使用新API更新的代码

ThemeData(
  colorScheme: ColorScheme(
    primary: Color(0XFF212845),
    background: Color(0XFF212845),
    secondary: Colors.yellow,
    surface: Color(0XFFF8D320),
    onSurface: Colors.green,
    brightness: Brightness.light,
    onError: Colors.red,
    primaryVariant: Colors.blue,
    secondaryVariant: Colors.blueAccent,
    onBackground: Colors.white,
    onPrimary: Colors.white,
    onSecondary: Colors.black,
    error: Colors.red,
  ),
);
nfzehxib

nfzehxib4#

即使已经添加了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和buttonColor。
另外,请确保在RaisedButton中设置了onPressed:

onPressed: () {},
but5z9lq

but5z9lq5#

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

hiz5n14c

hiz5n14c6#

我认为正确的方法是在ThemeData Widget中声明一个buttonColor属性。

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()))
xv8emn3q

xv8emn3q7#

上面的大多数答案都是不赞成的时间,我已经张贴这一点。

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,
          ),
        ),
      ),
    ),
  ),

相关问题