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,但还是没有应用。它仅适用于 regulerw600 样式。

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 自定义字体多重权重不能正常工作的主要内容,如果未能解决你的问题,请参考以下文章

css 添加带权重的自定义字体

css 添加带权重的自定义字体

React Native Expo 自定义字体权重在 iOS 设备上不起作用

自定义Label的字体颜色和大小

Flutter中FCM的自定义通知通道

Flutter 应用程序中的 Google 字体包无法正常工作