initFont static method

Future<void> initFont(
  1. FontModel fontModel
)

初始化全局默认字体

Implementation

static Future<void> initFont(FontModel fontModel) async {
  var localStr = localStorage.getItem(_localKey);

  // 第一次加载
  if (localStr == null) return await _initFont(fontModel);

  // 获取本地初始化的字体,如果本地初始化的字体和传递的fontModel不一致,说明用户更改了fontModel,
  // 那么我们需要重新加载用户传递的fontModel
  var initialLocalStr = localStorage.getItem(_initialLocalKey);

  if (initialLocalStr == null) {
    _initialFont = fontModel;
    localStorage.setItem(_initialLocalKey, jsonEncode(_initialFont.toJson()));
  } else {
    _initialFont = FontModel.fromJson(
      (jsonDecode(initialLocalStr) as Map).cast<String, dynamic>(),
    );
    if (_initialFont.fontFamily != fontModel.fontFamily) {
      _initialFont = fontModel;
      localStorage.setItem(
        _initialLocalKey,
        jsonEncode(_initialFont.toJson()),
      );
      return await _initFont(fontModel);
    }
  }

  try {
    FontModel localFontModel = FontModel.fromJson(
      (jsonDecode(localStr) as Map).cast<String, dynamic>(),
    );
    await loadFont(localFontModel);
  } catch (error) {
    logger.e(error, '本地缓存字体加载异常');
    await _initFont(fontModel);
  }
}