在 Flutter 中添加自定义字体,FontWeight 不影响文本

问题描述

image pubspec 我想将 const [enteredFilter,setEnteredFilter] = useState(""); useEffect(() => { fetch("userConf_user.json",{ headers: { "Content-Type": "application/json",Accept: "application/json",},}) .then(function (response) { return response.json(); }) .then(function (responseData) { let users = responseData.result.user; const loadedData = []; for (let obj in users) { loadedData.push(users[obj]); } onLoadUsers(loadedData); setEnteredFilter( loadedData.filter((User) => { User === loadedData.map((user) => user.id); }) ); }); },[enteredFilter,onLoadUsers]); return ( <section className="search"> <Card> <div className="search-input"> <label>search by Id: </label> <input type="text" value={enteredFilter} onChange={(Event) => setEnteredFilter(Event.target.value)} /> </div> </Card> </section> ); }); 设置为我的 Flutter 应用程序的认字体系列。

认 Roboto fontFamily 更改为 NoirPro,但字体粗细 Noir Pro 无法正常工作。我找不到任何其他在线帮助。这让我很沮丧

e.g(.w400,w500,w600)

pubspec.yaml

fonts: - family: NoirPro fonts: - asset: resources/fonts/NoirPro_Light.ttf weight: 300 - asset: resources/fonts/NoirPro_normal.ttf weight: 400 - asset: resources/fonts/NoirPro_Medium.ttf weight: 500 - asset: resources/fonts/NoirPro_Bold.ttf weight: 700 - asset: resources/fonts/NoirPro_Heavy.ttf weight: 800

In main.dart

解决方法

我已经找到了原因及其非常微不足道的:

Flutter 根据字体本身的元数据匹配系列中的字体,而不是 pubspec.yaml 中声明的样式描述符。

我的 NoirPro、中号和粗体字体包含分别声明其权重为 400、410 和 420 的元数据。但是,Flutter 文本子系统仅支持表示 100 (https://api.flutter.dev/flutter/dart-ui/FontWeight-class.html) 的偶数倍的字体权重桶。所以这三种字体都映射到 FontWeight.w400,字体样式匹配器不能根据权重在这些字体之间进行选择。

(您可以使用此站点检查字体文件的元数据:https://fontdrop.info/

在 pubspec.yaml 中将这些字体声明为不同的系列可以解决这个问题。

目前根据字体本身定义的权重元数据选择请求的权重。 pubspec.yaml 中的权重被忽略。

应该更新文档(食谱)以反映这一点,以免混淆其他开发人员。 现在我的 pubspec.yaml 是:

fonts:
- family: NoirProNormal
  fonts:
    - asset: resources/fonts/NoirPro_Normal.ttf
- family: NoirProLight
  fonts:
    - asset: resources/fonts/NoirPro_Light.ttf
- family: NoirProMedium
  fonts:
    - asset: resources/fonts/NoirPro_Medium.ttf
- family: NoirProBold
  fonts:
    - asset: resources/fonts/NoirPro_Bold.ttf
- family: NoirProHeavy
  fonts:
    - asset: resources/fonts/NoirPro_Heavy.ttf

当使用文本小部件时:

Text(
        "Hello World",style: TextStyle(
            fontSize: size.width * 0.075,fontFamily: "NoirProMedium",color: Colors.white)
      ),
,

尝试定义不带空格的姓

- family: NoirPro
,

尝试在没有空格的情况下定义 - family: NoirPro 并且您还需要在文本小部件中提供您想要的权重

Text(
    "Hello",style: TextStyle(
        fontWeight: FontWeight.w400
    ),)