Mounir Bouaiche
Committed by GitHub

Merge pull request #535 from joker-fu/main

support for disabling scaling. Fixes #534 #459
@@ -41,7 +41,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -41,7 +41,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
41 ### Properties 41 ### Properties
42 42
43 | Property | Type | Default Value | Description | 43 | Property | Type | Default Value | Description |
44 -| ----------------- | ---------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | 44 +| ----------------- | ---------------- | ------------- |-----------------------------------------------------------------------------------------------------------------------------------------------|
45 | designSize | Size | Size(360,690) | The size of the device screen in the design draft, in dp | 45 | designSize | Size | Size(360,690) | The size of the device screen in the design draft, in dp |
46 | builder | Function | null | Return widget that uses the library in a property (ex: MaterialApp's theme) | 46 | builder | Function | null | Return widget that uses the library in a property (ex: MaterialApp's theme) |
47 | child | Widget | null | A part of builder that its dependencies/properties don't use the library | 47 | child | Widget | null | A part of builder that its dependencies/properties don't use the library |
@@ -52,6 +52,8 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -52,6 +52,8 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
52 | fontSizeResolver | Function | _default_ | Function that specify how font size should be adapted. Default is that font size scale with width of screen. | 52 | fontSizeResolver | Function | _default_ | Function that specify how font size should be adapted. Default is that font size scale with width of screen. |
53 | responsiveWidgets | Iterable<String> | null | List/Set of widget names that should be included in rebuilding tree. (See [How flutter_screenutil marks a widget needs build](#rebuild-list)) | 53 | responsiveWidgets | Iterable<String> | null | List/Set of widget names that should be included in rebuilding tree. (See [How flutter_screenutil marks a widget needs build](#rebuild-list)) |
54 | excludeWidgets | Iterable<String> | null | List/Set of widget names that should be excluded from rebuilding tree. | 54 | excludeWidgets | Iterable<String> | null | List/Set of widget names that should be excluded from rebuilding tree. |
  55 +| enableScaleWH | Function | null | Support enable scale width and height. |
  56 +| enableScaleText | Function | null | Support enable scale text. |
55 57
56 58
57 **Note : You must either provide builder, child or both.** 59 **Note : You must either provide builder, child or both.**
@@ -184,6 +186,25 @@ class _HomePageState extends State<HomePage> { @@ -184,6 +186,25 @@ class _HomePageState extends State<HomePage> {
184 186
185 ### API 187 ### API
186 188
  189 +#### Enable or disable scale
  190 +
  191 +```dart
  192 + Widget build(BuildContext context) {
  193 + return ScreenUtilInit(
  194 + enableScaleWH: ()=>false,
  195 + enableScaleText: ()=>false,
  196 + //...
  197 + );
  198 + }
  199 +```
  200 +
  201 +or
  202 +
  203 +```dart
  204 +ScreenUtil.enableScale(enableWH: () => false, enableText: () => false);
  205 +```
  206 +
  207 +
187 #### Pass the dp size of the design draft 208 #### Pass the dp size of the design draft
188 209
189 ```dart 210 ```dart
@@ -16,6 +16,10 @@ class ScreenUtil { @@ -16,6 +16,10 @@ class ScreenUtil {
16 static const Size defaultSize = Size(360, 690); 16 static const Size defaultSize = Size(360, 690);
17 static ScreenUtil _instance = ScreenUtil._(); 17 static ScreenUtil _instance = ScreenUtil._();
18 18
  19 + static bool Function() _enableScaleWH = () => true;
  20 + static bool Function() _enableScaleText = () => true;
  21 +
  22 +
19 /// UI设计中手机尺寸 , dp 23 /// UI设计中手机尺寸 , dp
20 /// Size of the phone in UI Design , dp 24 /// Size of the phone in UI Design , dp
21 late Size _uiSize; 25 late Size _uiSize;
@@ -32,6 +36,16 @@ class ScreenUtil { @@ -32,6 +36,16 @@ class ScreenUtil {
32 36
33 factory ScreenUtil() => _instance; 37 factory ScreenUtil() => _instance;
34 38
  39 + /// Enable scale
  40 + ///
  41 + /// if the enableWH return false, the width and the height scale ratio will be 1
  42 + /// if the enableText return false, the text scale ratio will be 1
  43 + ///
  44 + static void enableScale({bool Function()? enableWH, bool Function()? enableText}) {
  45 + _enableScaleWH = enableWH ?? () => true;
  46 + _enableScaleText = enableText ?? () => true;
  47 + }
  48 +
35 /// Manually wait for window size to be initialized 49 /// Manually wait for window size to be initialized
36 /// 50 ///
37 /// `Recommended` to use before you need access window size 51 /// `Recommended` to use before you need access window size
@@ -199,15 +213,15 @@ class ScreenUtil { @@ -199,15 +213,15 @@ class ScreenUtil {
199 213
200 /// 实际尺寸与UI设计的比例 214 /// 实际尺寸与UI设计的比例
201 /// The ratio of actual width to UI design 215 /// The ratio of actual width to UI design
202 - double get scaleWidth => screenWidth / _uiSize.width; 216 + double get scaleWidth => !_enableScaleWH() ? 1 : screenWidth / _uiSize.width;
203 217
204 /// The ratio of actual height to UI design 218 /// The ratio of actual height to UI design
205 double get scaleHeight => 219 double get scaleHeight =>
206 - (_splitScreenMode ? max(screenHeight, 700) : screenHeight) / 220 + !_enableScaleWH() ? 1 : (_splitScreenMode ? max(screenHeight, 700) : screenHeight) /
207 _uiSize.height; 221 _uiSize.height;
208 222
209 double get scaleText => 223 double get scaleText =>
210 - _minTextAdapt ? min(scaleWidth, scaleHeight) : scaleWidth; 224 + !_enableScaleText() ? 1 : (_minTextAdapt ? min(scaleWidth, scaleHeight) : scaleWidth);
211 225
212 /// 根据UI设计的设备宽度适配 226 /// 根据UI设计的设备宽度适配
213 /// 高度也可以根据这个来做适配可以保证不变形,比如你想要一个正方形的时候. 227 /// 高度也可以根据这个来做适配可以保证不变形,比如你想要一个正方形的时候.
@@ -74,6 +74,8 @@ class ScreenUtilInit extends StatefulWidget { @@ -74,6 +74,8 @@ class ScreenUtilInit extends StatefulWidget {
74 this.minTextAdapt = false, 74 this.minTextAdapt = false,
75 this.useInheritedMediaQuery = false, 75 this.useInheritedMediaQuery = false,
76 this.ensureScreenSize = false, 76 this.ensureScreenSize = false,
  77 + this.enableScaleWH,
  78 + this.enableScaleText,
77 this.responsiveWidgets, 79 this.responsiveWidgets,
78 this.excludeWidgets, 80 this.excludeWidgets,
79 this.fontSizeResolver = FontSizeResolvers.width, 81 this.fontSizeResolver = FontSizeResolvers.width,
@@ -85,6 +87,8 @@ class ScreenUtilInit extends StatefulWidget { @@ -85,6 +87,8 @@ class ScreenUtilInit extends StatefulWidget {
85 final bool minTextAdapt; 87 final bool minTextAdapt;
86 final bool useInheritedMediaQuery; 88 final bool useInheritedMediaQuery;
87 final bool ensureScreenSize; 89 final bool ensureScreenSize;
  90 + final bool Function()? enableScaleWH;
  91 + final bool Function()? enableScaleText;
88 final RebuildFactor rebuildFactor; 92 final RebuildFactor rebuildFactor;
89 final FontSizeResolver fontSizeResolver; 93 final FontSizeResolver fontSizeResolver;
90 94
@@ -97,8 +101,7 @@ class ScreenUtilInit extends StatefulWidget { @@ -97,8 +101,7 @@ class ScreenUtilInit extends StatefulWidget {
97 State<ScreenUtilInit> createState() => _ScreenUtilInitState(); 101 State<ScreenUtilInit> createState() => _ScreenUtilInitState();
98 } 102 }
99 103
100 -class _ScreenUtilInitState extends State<ScreenUtilInit>  
101 - with WidgetsBindingObserver { 104 +class _ScreenUtilInitState extends State<ScreenUtilInit> with WidgetsBindingObserver {
102 final _canMarkedToBuild = HashSet<String>(); 105 final _canMarkedToBuild = HashSet<String>();
103 final _excludedWidgets = HashSet<String>(); 106 final _excludedWidgets = HashSet<String>();
104 MediaQueryData? _mediaQueryData; 107 MediaQueryData? _mediaQueryData;
@@ -110,6 +113,9 @@ class _ScreenUtilInitState extends State<ScreenUtilInit> @@ -110,6 +113,9 @@ class _ScreenUtilInitState extends State<ScreenUtilInit>
110 if (widget.responsiveWidgets != null) { 113 if (widget.responsiveWidgets != null) {
111 _canMarkedToBuild.addAll(widget.responsiveWidgets!); 114 _canMarkedToBuild.addAll(widget.responsiveWidgets!);
112 } 115 }
  116 +
  117 + ScreenUtil.enableScale(enableWH: widget.enableScaleWH, enableText: widget.enableScaleText);
  118 +
113 _validateSize().then(_screenSizeCompleter.complete); 119 _validateSize().then(_screenSizeCompleter.complete);
114 120
115 super.initState(); 121 super.initState();