Showing
5 changed files
with
33 additions
and
40 deletions
| @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; | @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; | ||
| 2 | import 'package:flutter_screenutil/flutter_screenutil.dart'; | 2 | import 'package:flutter_screenutil/flutter_screenutil.dart'; |
| 3 | 3 | ||
| 4 | void main() { | 4 | void main() { |
| 5 | - WidgetsFlutterBinding.ensureInitialized(); | ||
| 6 | runApp(MyApp()); | 5 | runApp(MyApp()); |
| 7 | } | 6 | } |
| 8 | 7 | ||
| @@ -22,6 +21,7 @@ class MyApp extends StatelessWidget { | @@ -22,6 +21,7 @@ class MyApp extends StatelessWidget { | ||
| 22 | textTheme: TextTheme(button: TextStyle(fontSize: 45.sp)), | 21 | textTheme: TextTheme(button: TextStyle(fontSize: 45.sp)), |
| 23 | ), | 22 | ), |
| 24 | builder: (context, widget) { | 23 | builder: (context, widget) { |
| 24 | + ScreenUtil.setContext(context); | ||
| 25 | return MediaQuery( | 25 | return MediaQuery( |
| 26 | //Setting font does not change with system font size | 26 | //Setting font does not change with system font size |
| 27 | data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0), | 27 | data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0), |
| @@ -15,13 +15,10 @@ class ScreenUtil { | @@ -15,13 +15,10 @@ class ScreenUtil { | ||
| 15 | ///屏幕方向 | 15 | ///屏幕方向 |
| 16 | late Orientation _orientation; | 16 | late Orientation _orientation; |
| 17 | 17 | ||
| 18 | - late double _pixelRatio; | ||
| 19 | - late double _textScaleFactor; | ||
| 20 | late double _screenWidth; | 18 | late double _screenWidth; |
| 21 | late double _screenHeight; | 19 | late double _screenHeight; |
| 22 | - late double _statusBarHeight; | ||
| 23 | - late double _bottomBarHeight; | ||
| 24 | late bool _minTextAdapt; | 20 | late bool _minTextAdapt; |
| 21 | + late BuildContext? context; | ||
| 25 | 22 | ||
| 26 | ScreenUtil._(); | 23 | ScreenUtil._(); |
| 27 | 24 | ||
| @@ -29,6 +26,10 @@ class ScreenUtil { | @@ -29,6 +26,10 @@ class ScreenUtil { | ||
| 29 | return _instance; | 26 | return _instance; |
| 30 | } | 27 | } |
| 31 | 28 | ||
| 29 | + static void setContext(BuildContext context) { | ||
| 30 | + _instance.context = context; | ||
| 31 | + } | ||
| 32 | + | ||
| 32 | static void init( | 33 | static void init( |
| 33 | BoxConstraints constraints, { | 34 | BoxConstraints constraints, { |
| 34 | BuildContext? context, | 35 | BuildContext? context, |
| @@ -45,17 +46,7 @@ class ScreenUtil { | @@ -45,17 +46,7 @@ class ScreenUtil { | ||
| 45 | .._screenHeight = splitScreenMode | 46 | .._screenHeight = splitScreenMode |
| 46 | ? max(constraints.maxHeight, 700) | 47 | ? max(constraints.maxHeight, 700) |
| 47 | : constraints.maxHeight; | 48 | : constraints.maxHeight; |
| 48 | - | ||
| 49 | - var windowData; | ||
| 50 | - if (context != null) { | ||
| 51 | - windowData = MediaQuery.of(context); | ||
| 52 | - } else { | ||
| 53 | - windowData = WidgetsBinding.instance?.window ?? ui.window; | ||
| 54 | - } | ||
| 55 | - _instance._pixelRatio = windowData.devicePixelRatio; | ||
| 56 | - _instance._statusBarHeight = windowData.padding.top; | ||
| 57 | - _instance._bottomBarHeight = windowData.padding.bottom; | ||
| 58 | - _instance._textScaleFactor = windowData.textScaleFactor; | 49 | + if (context != null) setContext(context); |
| 59 | } | 50 | } |
| 60 | 51 | ||
| 61 | ///获取屏幕方向 | 52 | ///获取屏幕方向 |
| @@ -64,11 +55,11 @@ class ScreenUtil { | @@ -64,11 +55,11 @@ class ScreenUtil { | ||
| 64 | 55 | ||
| 65 | /// 每个逻辑像素的字体像素数,字体的缩放比例 | 56 | /// 每个逻辑像素的字体像素数,字体的缩放比例 |
| 66 | /// The number of font pixels for each logical pixel. | 57 | /// The number of font pixels for each logical pixel. |
| 67 | - double get textScaleFactor => _textScaleFactor; | 58 | + double get textScaleFactor => MediaQuery.of(context!).textScaleFactor; |
| 68 | 59 | ||
| 69 | /// 设备的像素密度 | 60 | /// 设备的像素密度 |
| 70 | /// The size of the media in logical pixels (e.g, the size of the screen). | 61 | /// The size of the media in logical pixels (e.g, the size of the screen). |
| 71 | - double get pixelRatio => _pixelRatio; | 62 | + double? get pixelRatio => MediaQuery.of(context!).devicePixelRatio; |
| 72 | 63 | ||
| 73 | /// 当前设备宽度 dp | 64 | /// 当前设备宽度 dp |
| 74 | /// The horizontal extent of this size. | 65 | /// The horizontal extent of this size. |
| @@ -80,11 +71,11 @@ class ScreenUtil { | @@ -80,11 +71,11 @@ class ScreenUtil { | ||
| 80 | 71 | ||
| 81 | /// 状态栏高度 dp 刘海屏会更高 | 72 | /// 状态栏高度 dp 刘海屏会更高 |
| 82 | /// The offset from the top, in dp | 73 | /// The offset from the top, in dp |
| 83 | - double get statusBarHeight => _statusBarHeight / _pixelRatio; | 74 | + double get statusBarHeight => MediaQuery.of(context!).padding.top; |
| 84 | 75 | ||
| 85 | /// 底部安全区距离 dp | 76 | /// 底部安全区距离 dp |
| 86 | /// The offset from the bottom, in dp | 77 | /// The offset from the bottom, in dp |
| 87 | - double get bottomBarHeight => _bottomBarHeight / _pixelRatio; | 78 | + double get bottomBarHeight => MediaQuery.of(context!).padding.bottom; |
| 88 | 79 | ||
| 89 | /// 实际尺寸与UI设计的比例 | 80 | /// 实际尺寸与UI设计的比例 |
| 90 | /// The ratio of actual width to UI design | 81 | /// The ratio of actual width to UI design |
| @@ -19,24 +19,21 @@ class ScreenUtilInit extends StatelessWidget { | @@ -19,24 +19,21 @@ class ScreenUtilInit extends StatelessWidget { | ||
| 19 | 19 | ||
| 20 | @override | 20 | @override |
| 21 | Widget build(BuildContext context) { | 21 | Widget build(BuildContext context) { |
| 22 | - return MediaQuery( | ||
| 23 | - data: MediaQueryData(), | ||
| 24 | - child: LayoutBuilder(builder: (_, BoxConstraints constraints) { | ||
| 25 | - if (constraints.maxWidth != 0) { | ||
| 26 | - final Orientation orientation = | ||
| 27 | - constraints.maxWidth > constraints.maxHeight | ||
| 28 | - ? Orientation.landscape | ||
| 29 | - : Orientation.portrait; | ||
| 30 | - ScreenUtil.init(constraints, | ||
| 31 | - context: _, | ||
| 32 | - orientation: orientation, | ||
| 33 | - designSize: designSize, | ||
| 34 | - splitScreenMode: splitScreenMode, | ||
| 35 | - minTextAdapt: minTextAdapt); | ||
| 36 | - return builder(); | ||
| 37 | - } | ||
| 38 | - return Container(); | ||
| 39 | - }), | ||
| 40 | - ); | 22 | + return LayoutBuilder(builder: (_, BoxConstraints constraints) { |
| 23 | + if (constraints.maxWidth != 0) { | ||
| 24 | + final Orientation orientation = | ||
| 25 | + constraints.maxWidth > constraints.maxHeight | ||
| 26 | + ? Orientation.landscape | ||
| 27 | + : Orientation.portrait; | ||
| 28 | + ScreenUtil.init(constraints, | ||
| 29 | + context: _, | ||
| 30 | + orientation: orientation, | ||
| 31 | + designSize: designSize, | ||
| 32 | + splitScreenMode: splitScreenMode, | ||
| 33 | + minTextAdapt: minTextAdapt); | ||
| 34 | + return builder(); | ||
| 35 | + } | ||
| 36 | + return Container(); | ||
| 37 | + }); | ||
| 41 | } | 38 | } |
| 42 | } | 39 | } |
| 1 | name: flutter_screenutil | 1 | name: flutter_screenutil |
| 2 | description: A flutter plugin for adapting screen and font size.Guaranteed to look good on different models | 2 | description: A flutter plugin for adapting screen and font size.Guaranteed to look good on different models |
| 3 | -version: 5.0.3 | 3 | +version: 5.0.4 |
| 4 | homepage: https://github.com/OpenFlutter/flutter_screenutil | 4 | homepage: https://github.com/OpenFlutter/flutter_screenutil |
| 5 | +publish_to: https://pub.dev | ||
| 5 | 6 | ||
| 6 | environment: | 7 | environment: |
| 7 | sdk: ">=2.12.0 <3.0.0" | 8 | sdk: ">=2.12.0 <3.0.0" |
-
Please register or login to post a comment