【问题标题】:How can I change the text of all child widgets inside a parent widget?如何更改父小部件内所有子小部件的文本?
【发布时间】:2019-11-05 04:06:45
【问题描述】:
我有一个方便的方法,它返回一个Column,里面有一些Text 小部件,我们称之为mySpecialColumn(String header, String body)。现在我有一种情况,我想在使用此方法的特定位置更改文本颜色。由于这是一个非常罕见的例外,因此在 mySpecialColumn 的方法签名中添加(可选)Color 参数似乎有点过头了。
我发现我可以用Material 包装我的自定义小部件的这个实例,因为它有一个textStyle 属性。这似乎工作正常,但这是执行此操作的首选方式吗?
也许我错了,但Material 似乎应该主要用于创建自定义Material 小部件,而不是像更改文本颜色这样微不足道的事情?我本来希望有一些常见的小部件,如Container 或类似的小部件,可以改变它的孩子的文本颜色?
【问题讨论】:
标签:
flutter
widget
material-design
flutter-layout
【解决方案1】:
用DefaultTextStyle包裹它,例如:
DefaultTextStyle.merge(
style: TextStyle(color: Colors.grey[400], fontSize: 12),
child: Column(...),
)
【解决方案2】:
您可以将mySpecialColumn 包装在Theme 小部件中。然后使用ThemeData设置其子项的文本颜色。
Theme(
// Create a unique theme with "ThemeData"
data: ThemeData(
textTheme: TextTheme(
body1: TextStyle(
color: Colors.red
)
)
),
child: mySpecialColumn(
...
)
);
更多详情见the docs
【解决方案3】:
这样的?
child: Text(
'Post',
style: TextStyle(color: Colors.white),),