Files
proxypin/lib/ui/component/chinese_font.dart
2024-01-20 07:38:23 +08:00

64 lines
1.7 KiB
Dart

import 'package:flutter/material.dart';
class SystemChineseFont {
const SystemChineseFont._();
/// Chinese font family fallback, for windows
static const List<String> windowsFontFamily = [
'Microsoft YaHei',
];
static const systemFont = "system-font";
static bool systemFontLoaded = false;
/// Chinese font family fallback, for most platforms
static List<String> get fontFamilyFallback {
return [
systemFont,
"sans-serif",
...windowsFontFamily,
];
}
/// Text style with updated fontFamilyFallback & fontVariations
static TextStyle get textStyle {
return const TextStyle().useSystemChineseFont();
}
/// Text theme with updated fontFamilyFallback & fontVariations
static TextTheme get textTheme {
return Typography().dense.apply(fontFamilyFallback: fontFamilyFallback);
}
}
extension TextStyleUseSystemChineseFont on TextStyle {
/// Add fontFamilyFallback & fontVariation to original font style
TextStyle useSystemChineseFont() {
return copyWith(
fontFamilyFallback: [
...?fontFamilyFallback,
...SystemChineseFont.fontFamilyFallback,
],
fontVariations: [
...?fontVariations,
if (fontWeight != null) FontVariation('wght', (fontWeight!.index + 1) * 100),
],
);
}
}
extension TextThemeUseSystemChineseFont on TextTheme {
/// Add fontFamilyFallback & fontVariation to original text theme
TextTheme useSystemChineseFont() {
return SystemChineseFont.textTheme.merge(this);
}
}
extension ThemeDataUseSystemChineseFont on ThemeData {
/// Add fontFamilyFallback & fontVariation to original theme data
ThemeData useSystemChineseFont() {
return copyWith(textTheme: textTheme.useSystemChineseFont());
}
}