如何在Flutter中定义自定义文本主题?

stu*_*low 3 flutter

如何制作自己的文字主题样式?我只能找到这样的默认文本主题,但还不够。

textTheme: TextTheme(
  body1: TextStyle(),
  body2: TextStyle(),
  button: TextStyle(),
  caption: TextStyle(),
  display1: TextStyle(),
  display2: TextStyle(),
  display3: TextStyle(),
  display4: TextStyle(),
  headline: TextStyle(),
  overline: TextStyle(),
  subhead: TextStyle(),
  subtitle: TextStyle(),
  title: TextStyle(),
),
Run Code Online (Sandbox Code Playgroud)

例如,我想要一个带有直行的文本,然后其他带有下划线的文本,我想覆盖body2for下划线样式,然后如何定义另一种样式来设置直行?

亲切的问候

JK8*_*JK8 11

这是使用带有 lineThrough 的扩展方法的替代方法:

extension CustomStyles on TextTheme {
 TextStyle get error => const TextStyle(decoration: TextDecoration.lineThrough, fontSize: 20.0, color: Colors.blue, fontWeight: FontWeight.bold);
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

Text("your text", style: Theme.of(context).textTheme.error)
Run Code Online (Sandbox Code Playgroud)


小智 9

从 dart 2.7 开始,你还可以使用扩展方法:

extension CustomStyles on TextTheme {
  TextStyle get error {
    return TextStyle(
      fontSize: 18.0,
      color: Colors.red,
      fontWeight: FontWeight.bold,
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

Text(error, style: Theme.of(context).textTheme.error)
Run Code Online (Sandbox Code Playgroud)


che*_*ins 6

您可以创建一个类来保留您的样式,然后在应用程序中的任何位置调用它。

class CustomTextStyle {
  static TextStyle display5(BuildContext context) {
    return Theme.of(context).textTheme.display4.copyWith(fontSize: 192.0);
  }
}
Run Code Online (Sandbox Code Playgroud)

并将其用作

Text(
   'Wow',
   style: CustomTextStyle.display5(context),
),
Run Code Online (Sandbox Code Playgroud)

看问题Flutter:定义自定义TextStyles以在整个应用程序使用,其中包含此处引用的完整答案。