我正在尝试应用 DefaultTextStyle
,但即使样式已定义且可用(通过调用 DefaultTextStyle.of(context).style
建立),它也不会默认应用于子对象 Text
。那么我做错了什么,或者不明白什么?
这是来自我的调用类的 build
方法,我在其中定义了 DefaultTextStyle
:
Widget build(BuildContext context) {
return new MaterialApp(
onGenerateTitle: (BuildContext context) =>
Strings.of(context).getStr('app_title'),
localizationsDelegates: [
const StringsDelegate(),
GlobalWidgetsLocalizations.delegate,
],
localeResolutionCallback: Strings.resolveLocale,
// Watch out: MaterialApp creates a Localizations widget
// with the specified delegates. DemoLocalizations.of()
// will only find the app's Localizations widget if its
// context is a child of the app.
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new DefaultTextStyle(
style: new TextStyle(
fontWeight: FontWeight.bold,
decoration: TextDecoration.underline,
decorationColor: Colors.red,
decorationStyle: TextDecorationStyle.wavy,
color: Colors.blue
),
child: new StatusPage())
);
}
这是
StatusPage
,我正在尝试使用 DefaultTextStyle
:class StatusPage extends MyStatelessWidget {
@override
Widget build(BuildContext context) {
TextStyle style = DefaultTextStyle.of(context).style;
print("STYLE: $style");
return new Scaffold(
appBar: new AppBar(
title: getText(context, 'app_title')
),
body: new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Text('wibble', style:style),
new ActivityStatus(),
new MonitoringStatus()]
)));
}
}
使用所示代码,文本“wibble”以适当的样式正确显示。我从文档中的理解是,默认情况下应该应用这种样式,所以我不需要“wibble”的
Text
构造函数的样式参数。但是,如果我删除 style 参数,我不会从我的
DefaultTextStyle
中获得样式。我错过了什么?
最佳答案
像这样将 DefaultTextStyle 应用到 Scaffold,您将在所有后代 Text 小部件中获得此样式
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new StatusPage());
}
}
class StatusPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
TextStyle style = DefaultTextStyle.of(context).style;
return new Scaffold(
appBar: new AppBar(),
body: new DefaultTextStyle(
style: new TextStyle(
inherit: true,
fontSize: 20.0,
fontWeight: FontWeight.bold,
decoration: TextDecoration.underline,
decorationColor: Colors.red,
decorationStyle: TextDecorationStyle.wavy,
color: Colors.blue),
child: new Center(
child: new Column(
children: <Widget>[
new Text("hello"),
],
),
)));
}
}
关于flutter - 在 flutter 中使用 DefaultTextStyle,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49806705/