2
 class BMICalculator extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primaryColor: Colors.red,
      ),
      home: InputPage(),
    );

我正在学习这门课程:https ://www.udemy.com/course/flutter-bootcamp-with-dart/

在主题部分,她使用这个确切的代码将她的 appBar 变成红色。我的代码没有显示任何错误,但是我的 appBar 仍然是默认主题。

这里对原色的描述:https ://api.flutter.dev/flutter/material/ThemeData-class.html

它没有说它已经折旧,也没有表明最近的任何变化。

我的问题不是“如何让我的应用栏变红”,而是“为什么这段代码没有按预期执行?”

4

2 回答 2

0

AppBar背景颜色来自appBarTheme(color:..).

我更喜欢扩展父主题,

return MaterialApp(
  primaryColor: Colors.green,// no effect on AppBar
  theme: Theme.of(context).copyWith(
    appBarTheme: Theme.of(context).appBarTheme.copyWith(
          color: Colors.red,
        ),
  ),

更多关于主题

于 2022-02-16T05:11:51.417 回答
0

PrimaryColor不能themeData直接使用,您必须在其中声明colorScheme

theme: ThemeData(colorScheme: ColorScheme.light(primary: Colors.red)),

您可以使用primarySwatch

theme: ThemeData(primarySwatch: Colors.red),

或者你可以使用appBarTheme

appBarTheme: AppBarTheme(
    backgroundColor: Colors.red
),

primarySwatch不是颜色。是MaterialColor。这意味着它是材质应用程序将使用的不同色调的颜色。

primaryColor是其中一种色调。准确地说,primaryColor通常等于primarySwatch[500]

ThemeData一个包含所有主题设置,一个控制应用程序的外观,但ColorScheme它只是您创建的一组颜色,以轻松维护应用程序的颜色。请注意,ThemeData类有一个参数colorScheme,因此您可以创建自己的参数colorScheme并将其添加到ThemeData object.

所有小部件样式都继承自ThemeData(在 MaterialApp 中定义的)not的颜色或主题ColorSchemecolorScheme只是您定义在ThemeData应用程序中或任何地方使用的额外颜色。

于 2022-02-16T03:56:25.010 回答