如何在Flutter中更改整个主题的文本颜色?

7cjasjjr  于 2023-03-31  发布在  Flutter
关注(0)|答案(7)|浏览(217)

我可能忽略了一些明显的东西。是否有 * 一个 * 属性可以更改Flutter应用程序中所有文本的颜色?
我现在的做法是,在我的MaterialApp中:

theme: ThemeData(
    textTheme: Theme.of(context).textTheme.copyWith(
          body1:
              Theme.of(context).textTheme.body1.apply(color: Colors.pink),
          body2:
              Theme.of(context).textTheme.body2.apply(color: Colors.pink),
          display1:
              Theme.of(context).textTheme.display1.apply(color: Colors.pink),
          display2:
              Theme.of(context).textTheme.display2.apply(color: Colors.pink),
          ... // and so on
        ),
    ),
),

我也试过

textTheme: Theme.of(context).textTheme.apply(bodyColor: Colors.pink),

但这适用于下拉列表文本,而不是常规文本。同样,displayColor适用于appBar文本和InputDecoration文本,但不是常规文本。我的代码中似乎没有任何decorationText,所以我不确定它是什么。
我注意到有一个textSelectionColor属性,但它只适用于TextField小部件。

6yt4nkrj

6yt4nkrj1#

我认为TextTheme.apply是你想要的。bodyColor将应用于headlinetitlesubheadbuttonbody1body2displayColor将应用于display1display4,和caption。如果同时指定bodyColordisplayColor并使用相同的颜色值,则将有效地更改所有文本样式上的文本颜色。
示例:

final newTextTheme = Theme.of(context).textTheme.apply(
  bodyColor: Colors.pink,
  displayColor: Colors.pink,
);
bjg7j2ky

bjg7j2ky2#

对于整个应用程序,您可以在Material应用程序小部件中设置textTheme属性。

MaterialApp(
  theme: ThemeData(
    textTheme: TextTheme(
      bodyText1: TextStyle(),
      bodyText2: TextStyle(),
    ).apply(
      bodyColor: Colors.orange, 
      displayColor: Colors.blue, 
    ),
  ),
)
lxkprmvk

lxkprmvk3#

要提供一种似乎不需要直接设置所有Text样式就可以工作的替代方法,请在Widget树中的某个位置更改DefaultTextStyle的样式以使其生效

return DefaultTextStyle(
  style: TextStyle(color: Colors.pink),
  child: _YOUR_WIDGETS_
)
8cdiaqws

8cdiaqws4#

也许有点晚了,但你可以用这个:

ThemeData(
    primaryTextTheme: Typography(platform: TargetPlatform.iOS).white,
    textTheme: Typography(platform: TargetPlatform.iOS).white,
)
unhi4e5o

unhi4e5o5#

我的工作是这样的:

return MaterialApp(
  theme: ThemeData(
    textTheme: TextTheme(
      bodyText2: TextStyle(
        color: Colors.white,
      ),
    ),
  ),
);
i86rm4rw

i86rm4rw6#

我发现在TextTheme上使用copyWith()效果很好,因为你可以只改变特定的属性,比如fontsize --其他的都保持不变。

textTheme: TextTheme().copyWith(
      bodyText2: TextStyle(
        fontSize: 30,
        fontWeight: FontWeight.bold
      )
    ),
iqjalb3h

iqjalb3h7#

合并是用来改变文本的颜色与textTheme...

Text("Company",
style:Theme.of(context).textTheme.bodyText1?.merge(TextStyle(color: Colors.red),
)),

相关问题