我正在尝试制作一个仅适用于该主题的子级的自定义主题。
但是,当我运行该应用程序时,显示“ hello”的“文本”小部件仍为蓝色。我想把它变黄。
谁能告诉我我要去哪里错了?
<rating readOnly="true" max="5" checked="{{myValue}}" ></rating>
答案 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"))
)
);
MaterialApp
使用其TextStyle
作为其DefaultTextStyle
,以鼓励开发人员故意对其DefaultTextStyle
答案 2 :(得分:0)
最新的Flutter Release标记body1
已过时,因此现在我们可以使用bodyText2
:
Text("My Text", style: Theme.of(context).textTheme.bodyText2)
新参数(右边的是新参数)
body2 => bodyText1;
body1 => bodyText2;