dart 如何获得白色的颜色时,黑暗的主题和黑暗的颜色时,轻主题?

rlcwz9us  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(121)

在我的应用程序中,我指定了一个亮和暗的主题。我想创建一个按钮,在暗主题上是白色,在亮主题上是黑色。有没有一种方法可以像Theme.of(context).somethingHere一样有条件地获得这些颜色?

class _MainState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (context) => Cart(),
      builder: (context, child) => MaterialApp(
        debugShowCheckedModeBanner: false,
        home: const IntroPage(),
        theme: ThemeData.light(),
        darkTheme: ThemeData.dark(),
      ),
    );
  }
}

字符串
我尝试了Theme.of(context).cardColorTheme.of(context).highlightColor和许多其他,但他们中的一些工作与轻主题,一些与黑暗的主题,但没有一个看起来很好的两个主题.有没有更好的方法来做呢?

m528fe3b

m528fe3b1#

IIUC,检查Theme.of(context).brightness并有条件地调整按钮颜色:

final brightness = Theme.of(context).brightness;
...
final isDarkMode = brightness == Brightness.dark;

字符串
示例用法:

ElevatedButton(
      style: ElevatedButton.styleFrom(
        foregroundColor: isDarkMode ? Colors.black : Colors.white,
        backgroundColor: isDarkMode ? Colors.white : Colors.black,
      )

vh0rcniy

vh0rcniy2#

在ThemeData()中,您可以指定许多参数,如按钮样式。
例如,在暗模式下,如果您想为应用的所有OutlinedList赋予给予绿色颜色和特定形状,只需执行以下操作:

...
darkTheme: ThemeData(
          brightness: Brightness.dark,
          outlinedButtonTheme: OutlinedButtonThemeData(
            style: OutlinedButton.styleFrom(
              primary: Colors.white,
              backgroundColor: Colors.green[800],
              shape: const RoundedRectangleBorder(
                borderRadius: BorderRadius.all(Radius.circular(10)),
              ),
            ),
          ),
        ),
...

字符串
你也可以给予特定的参数给你的light模式。这样,你的widget的样式就可以应用到你的应用中的任何地方,除非你给予一个特定的样式给你的代码元素。
参考:https://api.flutter.dev/flutter/material/ThemeData-class.html

相关问题