Flutter TextStyle(不是TextTheme)apply()和copyWith()之间的区别

Posted

技术标签:

【中文标题】Flutter TextStyle(不是TextTheme)apply()和copyWith()之间的区别【英文标题】:Flutter TextStyle (not TextTheme) difference between apply() and copyWith() 【发布时间】:2021-10-19 18:12:50 【问题描述】:

我正在为我的应用创建主题。

我混淆了 TextStyle 的这两种方法(apply、copyWith)。 应该用什么?

TextTheme 中还有 2 个同名的方法。 我理解它们,但在 TextStyle 中无法理解。

TextStyle 中这 2 个的逻辑与 TextTheme 中的不同

谢谢。

【问题讨论】:

【参考方案1】:

查看文档时,如果您未指定,apply 会为某些参数使用默认值。

TextStyle 应用( 颜色?颜色, 颜色?背景颜色, 文字装饰?装饰, 颜色?装饰颜色, 文字装饰风格?装修风格, 双装饰ThicknessFactor = 1.0, 双装饰ThicknessDelta = 0.0, 细绳?字体系列, 列表? fontFamilyFallback, 双字体大小因子 = 1.0, 双 fontSizeDelta = 0.0, int fontWeightDelta = 0, 字体样式?字体样式, 双字母SpacingFactor = 1.0, 双字母SpacingDelta = 0.0, 双字间距因子 = 1.0, 双字SpacingDelta = 0.0, 双倍高度因子 = 1.0, 双倍高度Delta = 0.0, 文本基线?文本基线, TextLeadingDistribution?领先的分销, 语言环境?语言环境, 列表?阴影, 列表?字体特征 )

https://api.flutter.dev/flutter/painting/TextStyle/apply.html

copywith 不使用默认值并使用(复制)已在原始 TextStyle 对象中定义的值。

TextStyle copyWith( 布尔?继承, 颜色?颜色, 颜色?背景颜色, 细绳?字体系列, 列表? fontFamilyFallback, 双倍的?字体大小, 字体粗细?字体重量, 字体样式?字体样式, 双倍的?字母间距, 双倍的?字间距, 文本基线?文本基线, 双倍的?高度, TextLeadingDistribution?领先的分销, 语言环境?语言环境, 画?前景, 画?背景, 列表?阴影, 列表?字体特征, 文字装饰?装饰, 颜色?装饰颜色, 文字装饰风格?装修风格, 双倍的?装饰厚度, 细绳?调试标签 )

https://api.flutter.dev/flutter/painting/TextStyle/copyWith.html

编辑: 看起来他们也有不同的参数,例如apply没有fontSizefontWeight作为参数。

【讨论】:

我仍然不确定每一个的用例。 啊好吧,我明白了。谢谢。【参考方案2】:

apply() 创建文本样式的副本,替换其中的所有指定属性。

copyWith() 创建文本样式的副本,但它只用新值替换给定值

【讨论】:

以上是关于Flutter TextStyle(不是TextTheme)apply()和copyWith()之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Widget - TextStyle 文字样式

Flutter -- 基础组件文本组件 Text & TextStyle & TextSpan

flutter 基础组件

flutter中富文本

Flutter 支持哪些字体无需外部导入?

如何在 Flutter 中为文本添加阴影