我尝试应用一个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
构造函数提供样式参数。
但是,如果我删除样式参数,我不会从DefaultTextStyle
中获得样式。
我错过了什么?
3条答案
按热度按时间k5hmc34c1#
像这样将DefaultTextStyle应用于Scaffold,您将在所有子文本小部件中获得此样式
a0x5cqrl2#
我以前也遇到过同样的问题,我认为当使用custome字体或更改语言时(至少这是我的情况),我的解决方案是去
MaterialApp
小部件,然后像这样覆盖所有textTheme
属性:这将使所有文本主题没有额外的填充,因此所有文本将是紧凑的。但请确保在所有代码中使用
style: Theme.of(context).textTheme.WHATEVERTEXT.
zz2j4svz3#
我也遇到过类似的问题。我试图更改
Card
中Text
小部件的文本颜色。我有这个代码,但没有工作:这不起作用,因为
Card
小部件创建了一个Material
小部件,而Card
内的Text
小部件使用Material小部件中的TextStyle
。这就是为什么用DefaultTextStyle.merge
PackageCard
不会更改文本颜色的原因。要更改
Card
中的文本颜色,您可以使用DefaultTextStyle.merge
Package 文本小部件: