Mounir Bouaiche

Add option for how font size should be scaled

@@ -8,6 +8,8 @@ import 'dart:ui' as ui show FlutterView; @@ -8,6 +8,8 @@ import 'dart:ui' as ui show FlutterView;
8 8
9 import 'package:flutter/widgets.dart'; 9 import 'package:flutter/widgets.dart';
10 10
  11 +typedef FontSizeResolver = double Function(num fontSize, ScreenUtil instance);
  12 +
11 class ScreenUtil { 13 class ScreenUtil {
12 static const Size defaultSize = Size(360, 690); 14 static const Size defaultSize = Size(360, 690);
13 static ScreenUtil _instance = ScreenUtil._(); 15 static ScreenUtil _instance = ScreenUtil._();
@@ -22,6 +24,7 @@ class ScreenUtil { @@ -22,6 +24,7 @@ class ScreenUtil {
22 late bool _minTextAdapt; 24 late bool _minTextAdapt;
23 late MediaQueryData _data; 25 late MediaQueryData _data;
24 late bool _splitScreenMode; 26 late bool _splitScreenMode;
  27 + FontSizeResolver? fontSizeResolver;
25 28
26 ScreenUtil._(); 29 ScreenUtil._();
27 30
@@ -95,6 +98,7 @@ class ScreenUtil { @@ -95,6 +98,7 @@ class ScreenUtil {
95 bool? splitScreenMode, 98 bool? splitScreenMode,
96 bool? minTextAdapt, 99 bool? minTextAdapt,
97 bool? ensureScreenHasSize, 100 bool? ensureScreenHasSize,
  101 + FontSizeResolver? fontSizeResolver,
98 }) async { 102 }) async {
99 if (ensureScreenHasSize ?? false) await ScreenUtil.ensureScreenSize(); 103 if (ensureScreenHasSize ?? false) await ScreenUtil.ensureScreenSize();
100 104
@@ -122,6 +126,7 @@ class ScreenUtil { @@ -122,6 +126,7 @@ class ScreenUtil {
122 : Orientation.portrait); 126 : Orientation.portrait);
123 127
124 _instance 128 _instance
  129 + ..fontSizeResolver = fontSizeResolver ?? _instance.fontSizeResolver
125 .._minTextAdapt = minTextAdapt ?? _instance._minTextAdapt 130 .._minTextAdapt = minTextAdapt ?? _instance._minTextAdapt
126 .._splitScreenMode = splitScreenMode ?? _instance._splitScreenMode 131 .._splitScreenMode = splitScreenMode ?? _instance._splitScreenMode
127 .._orientation = orientation; 132 .._orientation = orientation;
@@ -136,6 +141,7 @@ class ScreenUtil { @@ -136,6 +141,7 @@ class ScreenUtil {
136 bool splitScreenMode = false, 141 bool splitScreenMode = false,
137 bool minTextAdapt = false, 142 bool minTextAdapt = false,
138 bool ensureScreenSize = false, 143 bool ensureScreenSize = false,
  144 + FontSizeResolver? fontSizeResolver,
139 }) { 145 }) {
140 return configure( 146 return configure(
141 data: MediaQuery.maybeOf(context), 147 data: MediaQuery.maybeOf(context),
@@ -143,6 +149,7 @@ class ScreenUtil { @@ -143,6 +149,7 @@ class ScreenUtil {
143 minTextAdapt: minTextAdapt, 149 minTextAdapt: minTextAdapt,
144 splitScreenMode: splitScreenMode, 150 splitScreenMode: splitScreenMode,
145 ensureScreenHasSize: ensureScreenSize, 151 ensureScreenHasSize: ensureScreenSize,
  152 + fontSizeResolver: fontSizeResolver,
146 ); 153 );
147 } 154 }
148 155
@@ -217,7 +224,8 @@ class ScreenUtil { @@ -217,7 +224,8 @@ class ScreenUtil {
217 ///- [fontSize] UI设计上字体的大小,单位dp. 224 ///- [fontSize] UI设计上字体的大小,单位dp.
218 ///Font size adaptation method 225 ///Font size adaptation method
219 ///- [fontSize] The size of the font on the UI design, in dp. 226 ///- [fontSize] The size of the font on the UI design, in dp.
220 - double setSp(num fontSize) => fontSize * scaleText; 227 + double setSp(num fontSize) =>
  228 + fontSizeResolver?.call(fontSize, _instance) ?? fontSize * scaleText;
221 229
222 Widget setVerticalSpacing(num height) => SizedBox(height: setHeight(height)); 230 Widget setVerticalSpacing(num height) => SizedBox(height: setHeight(height));
223 231