Flutter 自定义字体多重权重不能正常工作
Posted
技术标签:
【中文标题】Flutter 自定义字体多重权重不能正常工作【英文标题】:Flutter custom font multi weight doesn't work properly 【发布时间】:2020-07-29 20:14:07 【问题描述】:我正在尝试使用具有多重权重的家庭字体。但是,当我使用带有 bold (w700) 和 heavy(w800) 的字体样式时,它不起作用。只工作到半粗体/中号 (w600)
这是我的字体资源文件夹结构:
myapp\assets\fonts\unisans\unisans_Bold.ttf
myapp\assets\fonts\unisans\unisans_Heavy.ttf
myapp\assets\fonts\unisans\unisans_Reguler.ttf
myapp\assets\fonts\unisans\unisans_Semibold.ttf
pubspec.yaml 中定义的字体:
fonts:
- family: Unisans
fonts:
- asset: assets/fonts/unisans/unisans_Reguler.ttf
- asset: assets/fonts/unisans/unisans_Semibold.ttf
weight: 600
- asset: assets/fonts/unisans/unisans_Bold.ttf
weight: 700
- asset: assets/fonts/unisans/unisans_Heavy.ttf
weight: 800
然后像这样颤抖地称呼他们:
Text(
"Halo",
style: TextStyle(
color: Theme.of(context).primaryColor,
fontFamily: "Unisans",
fontWeight: FontWeight.w800,
fontSize: 30),
)
我也试过 FontWeight.w700,但还是没有应用。它仅适用于 reguler 和 w600 样式。
flutter 不能使用多种字体权重还是取决于字体?
【问题讨论】:
真的很奇怪,在你的代码中一切看起来都很好。尝试从每个资产中删除 weight 属性,并使用每个 FontWeight 制作一个测试小部件并尝试了解差异,然后尝试为每个资产设置 weight 属性并检查更改的内容。 突然发现问题了。很琐碎的问题。这是因为每种字体都有不同的“字体名称”。例如:Unisans-Bold 有字体名称 (UnisansBold) 而不是 Unisans。 Unisans-Heavy 有字体名称 (UnisansHeavy) 而不是 Unisans。在颤振中,要使粗细样式生效,所有字体文件必须具有相同的字体名称。在 Windows 操作系统中打开字体文件时,我会检查字体名称。但是我仍然很好奇为什么即使我们在 pubspec.yaml 上声明它,flutter 也会考虑它。 【参考方案1】:我突然发现了问题。很琐碎的问题。这是因为每种字体都有不同的“字体名称”。例如:Unisans-Bold 有字体名称 (UnisansBold) 而不是 Unisans。 Unisans-Heavy 有字体名称 (UnisansHeavy) 而不是 Unisans。在颤振中,要使粗细样式生效,所有字体文件必须具有相同的字体名称。在 Windows 操作系统中打开字体文件时,我会检查字体名称。但是我仍然很好奇为什么即使我们在 pubspec.yaml 上声明了它,flutter 也会考虑它。
【讨论】:
以上是关于Flutter 自定义字体多重权重不能正常工作的主要内容,如果未能解决你的问题,请参考以下文章