Flutter 为什么文本小部件没有采用主题中定义的样式?

Flutter 为什么文本小部件没有采用主题中定义的样式?,flutter,themes,Flutter,Themes,当我编写以下代码时,我希望文本是红色的: 主题( 数据:Theme.of(context).copyWith( textTheme:Theme.of(context).textTheme.copyWith( bodyText2:TextStyle(颜色:Colors.red), ), 主题:主题(上下文) buttonTheme先生 .copyWith(按钮颜色:颜色.黄色), ), 孩子:建筑工人( 生成器:(上下文){ 返回列( 儿童:[ 文本(“颤振”), Text(“太棒了!”), 升起

当我编写以下代码时,我希望文本是红色的:

主题(
数据:Theme.of(context).copyWith(
textTheme:Theme.of(context).textTheme.copyWith(
bodyText2:TextStyle(颜色:Colors.red),
),
主题:主题(上下文)
buttonTheme先生
.copyWith(按钮颜色:颜色.黄色),
),
孩子:建筑工人(
生成器:(上下文){
返回列(
儿童:[
文本(“颤振”),
Text(“太棒了!”),
升起的按钮(
按下:(){},
子项:文本('OK'),
)
],
);
},
),
)
但文本为黑色,而按钮为黄色,如您所见:

正如您所看到的,
文本
小部件忽略了主题中定义的样式,而
RaisedButton
没有。为什么?


我知道我可以使用
DefaultTextStyle
,但我正在试图理解为什么它不能像我预期的那样工作。

Text
小部件具有
style
属性。从中我们可以看到:

很明显,如果您没有像以前那样指定,文本将使用来自
DefaultTextStyle
小部件(而不是来自
Theme
)的样式。如果要使用“来自主题的样式”,应明确指定它:

 Text('Flutter', style: Theme.of(context).textTheme.bodyText2)

至于按钮-任何MaterialButton子级(也有RaisedButton)都使用
ButtonTheme.of(context).textTheme
作为
textTheme
属性的默认值。

谢谢!这确实有道理,但对我来说仍然很奇怪,因为如果我们在
MaterialApp
级别定义主题,就不需要显式添加
DefaultTextStyle
 Text('Flutter', style: Theme.of(context).textTheme.bodyText2)