我正在尝试使用主题小部件来覆盖特定容器的主题样式。
在这里,我为所有文本小部件设置了正文颜色为白色。
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
textTheme: TextTheme(
bodyText2: TextStyle(
color: Colors.white
)
)
),
initialRoute: Home.id,
routes: {
Home.id: (context) => Home()
},
);
}
}
现在我正在尝试为此容器内的所有文本小部件设置黑色,但它仍在获取在 Material 应用小部件中设置的白色。
class NewTask extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: (){
Navigator.pop(context);
},
child: Theme(
data: ThemeData(
textTheme: TextTheme(
bodyText2: TextStyle(
color: Colors.black,
)
)
),
child: Container(
child: Column(
children: [
Text(
"New Task",
)
],
),
),
)
);
}
}
我能够通过将 Container 小部件包装在 Builder 方法中并进行设置来使其工作
TextStyle(
color: Theme.of(context).textTheme.bodyText2.color
),
但是如果我在这个容器中有多个文本小部件,这似乎需要做很多工作,我不明白出了什么问题,或者这不是主题小部件应该如何工作。
谢谢
答案 0 :(得分:0)
来自包含给定上下文的最近 Theme 实例的数据。
当您调用 Theme.of(context)
时,您指的是 NewTask.build
的上下文。与此上下文关联的 Theme
对象将是 MaterialApp.theme
。因此,要使用 ThemeData
小部件提供的 Theme
,您可以使用 Builder
或将 Theme
及其后代提取到新的 StatelessWidget
或如果需要,StatefulWidget
Builder
小部件本质上将其后代包装在 StatelessWidget
中,并提供 build
方法作为回调。