当前位置: 首页 > article >正文

Flutter Web 中文字体显示异常问题

flutter web 在中文使用粗体的时候发现了两个问题

  • 一个字的笔画颜色不相同
  • 带有 ‘口’的字 这个口由于太粗出现了实体闭合的情况

解决方案

替换字体

对于这个问题解决的办法只有替换中文字体库,因为只有粗体才有问题,所以只需要添加粗体字体即可。我使用的阿里普惠字体

遇到的问题

flutter 支持otfttf格式的字体,这两个的大小都在7-8M左右(中文字体都很大), 当加入字体后,如果服务器性能一般,会严重影响网页的加载速度,直接加载肯定不合适。

提速方案
  • 使用 font-spider 对 ttf 字体进行压缩,适配项目中出现的粗体字。把这个字体文件固定到 assets 中进行加载
  • 为了适配其他网络字体,把 otf 文件(体积较小的)上传到cdn平台,提高下载速度,项目启动完成后进行异步下载,下载完成后使用 FontLoader 进行加载完整字体包。
  • 为了防止字体下载失败,可以加入重试机制

import 'package:flutter/services.dart';
import 'package:http/http.dart' as http;

class FontUtil {

  FontUtil._();

  static bool _isLoadSuccess = false;


  static int retryCount = 0;

  static void loadFontRes() async {
    if (_isLoadSuccess == true || retryCount > 3) {
      return;
    }

    try {
      final response = await http.get(Uri.parse("https://oss.static.cn/AlibabaPuHuiTi-3-85-Bold.otf"));
      if (response.statusCode != 200) {
        _onLoadFontError();
        return;
      }
      final bytes = response.bodyBytes.buffer.asByteData();
      final loader = FontLoader(AppFontFamily.AlibabaPuHuiTiAll)..addFont(Future.value(bytes));
      await loader.load();
      _isLoadSuccess = true;
      print("loadFontSuccess");
    } catch (e) {
      _onLoadFontError();
    }
  }

  static void _onLoadFontError() {
    Future.delayed(Duration(minutes: 1), () {
      retryCount++;
      print("load error, retry time $retryCount");
      FontUtil.loadFontRes();
    });
  }
  
  static String get aliFont => _isLoadSuccess ? AppFontFamily.AlibabaPuHuiTiAll : AppFontFamily.AlibabaPuHuiTi;
}

http://www.kler.cn/a/473314.html

相关文章:

  • 攻防世界 ics-07
  • 1.2.1-2部分数据结构的说明02_链表
  • B树及其Java实现详解
  • Java语法总结
  • jenkins 使用 ssh-agent向windows进行部署
  • 使用JMeter玩转tidb压测
  • C++之闭散列哈希表
  • 使用 Python 的 pyttsx3 库进行文本转语音
  • 探索电商宝藏:用Java打造1688商品详情爬虫,挖掘商业价值
  • ChatGPT加速器:解锁高效智能对话的新工具
  • 怎么对PDF插入图片并设置可见程度-免费PDF编辑工具分享
  • fetch-pack: unexpected disconnect while reading sideband packet报错问题排查
  • 设置密码,保护隐私:Excel文件加密的几种方法
  • CH348结合开源ModBus协议组成串口温度采集服务器
  • K-means算法在无监督学习中的应用
  • 网络安全-XSS跨站脚本攻击(基础篇)
  • C++虚函数(八股总结)
  • 深入理解 JSON 数据传递方式:数组格式与对象包装格式的对比与选择
  • 力扣第141题:环形链表 C语言解法
  • CentOS: RPM安装、YUM安装、编译安装(详细解释+实例分析!!!)
  • ExcelDataReader:一个.Net高性能Excel开源读取器
  • 游戏引擎学习第76天
  • 将txt转成excel正则化公式的调整
  • 超完整Docker学习记录,Docker常用命令详解
  • 前后端实现防抖节流实现
  • HTB:Bank[WriteUP]