在Flutter的MaterialApp小部件中,如何正确地使用ThemeData copyWith?

10

我试图在复制ThemeData.light()之后更改accentColor,然后我有了一个带有FloatingActionButton的示例屏幕。

class Sample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: FloatingActionButton(
        onPressed: () {},
        child: Icon(Icons.add),
      ),
     )}}

接下来在main.dart中的主widget中调用runApp,如果我为MaterialApp widget设置ThemeData,如此设置,FloatingActionButton将具有橙色。

theme: ThemeData(
  accentColor: Colors.orange
)

但是如果我尝试从Themedata.light().copyWith继承颜色,那么FloatingActionButton仍然会从浅色主题中继承蓝色。

theme: ThemeData.light().copyWith(
  accentColor: Colors.orange
)

我原本期望浮动操作按钮(FloatingActionButton)的颜色是橙色的,因为它继承了“亮色”主题并覆盖了“强调颜色”(accentColor)。
2个回答

4

这是Flutter中的一个常见问题,但您现在可以通过以下方式解决:

theme: ThemeData.light().copyWith(
    floatingActionButtonTheme:
        ThemeData.light().floatingActionButtonTheme.copyWith(
              backgroundColor: Colors.orange,
            ),
  ),

如果您使用了其他按钮,您应该执行相同的操作并覆盖其主题。

您可以在此处阅读有关该问题的更多信息:更新材料按钮及其主题

以及在使用ThemeData.light().copyWith()时未能遵守buttonColor


0

看,我认为不能使用ThemeData.copyWith()继承强调颜色,但如果你确定要使用ThemeData.copyWith()更改浮动动作按钮的颜色,那么可以按照以下方式操作,

theme:ThemeData.dark().copyWith(
    textTheme:ThemeData.dark().textTheme.copyWith(
        title :TextStyle( --your color and text configuratons here like color,font etc)
        button: TextStyle(--do--),
        ...and so on....
    )
)

您想在默认文本标题中设置的配置将放置在上述标题属性的TextStyle中,按钮也是如此。

现在,您可以通过使用以下内容在FAB中实现此目标:

color: Theme.of(context).textTheme.button.color,

通过这样做,您可以获得在ThemeData中设置的按钮颜色。

如果您强制获取默认的强调颜色,则必须使用以下方法:

theme:ThemeData(
    primaryColor: -----
    accentColor : -----
)

这将允许您使用 FAB 的默认强调色。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接