在 flutter MaterialApp 小部件中使用 ThemeData copyWith 的正确方法是什么?

zer*_*r09 10 dart material-design flutter flutter-layout

我试图accentColor在复制后更改ThemeData.light(),然后我有这个示例屏幕FloatingActionButton

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

然后在主小部件中main.dart调用runApp,如果我像这样设置小部件,则ThemeData颜色将为橙色。MaterialAppFloatingActionButton

theme: ThemeData(
  accentColor: Colors.orange
)
Run Code Online (Sandbox Code Playgroud)

但如果我尝试继承 的颜色Themedata.light().copyWith,则FloatingActionButton仍将具有浅色主题中的蓝色。

theme: ThemeData.light().copyWith(
  accentColor: Colors.orange
)
Run Code Online (Sandbox Code Playgroud)

我期望FloatingActionButton应该具有橙色,因为它继承light主题并覆盖accentColor.

San*_*ngh 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....
    )
)
Run Code Online (Sandbox Code Playgroud)

您在默认文本标题中想要的配置将位于上述标题属性的 TextStyle 内,按钮也相同

现在你可以通过使用这个在你的 FAB 中实现这一点,

color: Theme.of(context).textTheme.button.color,
Run Code Online (Sandbox Code Playgroud)

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

如果你强制获得默认的强调色那么你必须使用

theme:ThemeData(
    primaryColor: -----
    accentColor : -----
)
Run Code Online (Sandbox Code Playgroud)

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