Flutter:主题不适用于“文本”小部件

时间:2018-07-17 13:24:04

标签: dart flutter

我正在尝试制作一个仅适用于该主题的子级的自定义主题。

但是,当我运行该应用程序时,显示“ hello”的“文本”小部件仍为蓝色。我想把它变黄。

谁能告诉我我要去哪里错了?

<rating readOnly="true" max="5" checked="{{myValue}}" ></rating>

3 个答案:

答案 0 :(得分:3)

要以Text为主题,您需要将值分配给style属性

Text("Hello", style: Theme.of(context).textTheme.body1)

在进行context时,请确保使用正确的Theme.of(context)。您需要一个context的子代,该子代是新Theme的子代。

您需要执行以下操作:

 Theme(
     child: Builder(
       builder: (context) {
         return Text("Hello", style: Theme.of(context).textTheme.body1);
       }
     )
  )

答案 1 :(得分:3)

这是另一种方式,因为有时覆盖默认样式会更方便

文本小部件:

  

如果style参数为null,则文本将使用   最接近的DefaultTextStyle

  @override
  Widget build(BuildContext context) {
    final DefaultTextStyle defaultTextStyle = DefaultTextStyle.of(context);
    TextStyle effectiveTextStyle = style;
    if (style == null || style.inherit)
      effectiveTextStyle = defaultTextStyle.style.merge(style);

因此,如果您想覆盖Text小部件的默认样式(当您不传递style属性时),则需要使用DefaultTextStyle小部件

return new Scaffold(
    appBar: new AppBar(
      title: Text(widget.title),
    ),
    body: Center(
        child: DefaultTextStyle(
          style: Theme.of(context).textTheme.body1.copyWith(color: Colors.yellow), 
          child: Text("hello"))
        )
);

DefaultTextStyle

MaterialApp使用其TextStyle作为其DefaultTextStyle,以鼓励开发人员故意对其DefaultTextStyle

答案 2 :(得分:0)

最新的Flutter Release标记body1已过时,因此现在我们可以使用bodyText2

Text("My Text", style: Theme.of(context).textTheme.bodyText2)

新参数(右边的是新参数)

body2 => bodyText1;
body1 => bodyText2;