Committed by
GitHub
Merge pull request #138 from sarbagyastha/master
No need of BuildContext for initialization
Showing
29 changed files
with
395 additions
and
692 deletions
@@ -5,6 +5,11 @@ | @@ -5,6 +5,11 @@ | ||
5 | * @LastEditTime: 2020年6月20日 11:20:02 | 5 | * @LastEditTime: 2020年6月20日 11:20:02 |
6 | * @Description: Update log | 6 | * @Description: Update log |
7 | --> | 7 | --> |
8 | +# 3.0.0-beta.1 | ||
9 | +**BREAKING CHANGES** | ||
10 | +- `BuildContext` is no more required while initializing. i.e. ScreenUtil.init(~~context~~) | ||
11 | +- Initialize size of design draft using `designSize` instead of width & height. | ||
12 | +- All the static methods are now member methods. | ||
8 | 13 | ||
9 | # 2.3.1 | 14 | # 2.3.1 |
10 | - add textStyle Example. | 15 | - add textStyle Example. |
1 | +# This branch is suitable for the beta version of flutter | ||
1 | 2 | ||
2 | # flutter_screenutil | 3 | # flutter_screenutil |
3 | [](https://pub.dartlang.org/packages/flutter_screenutil) | 4 | [](https://pub.dartlang.org/packages/flutter_screenutil) |
@@ -14,6 +15,9 @@ | @@ -14,6 +15,9 @@ | ||
14 | 15 | ||
15 | [Update log](https://github.com/OpenFlutter/flutter_screenutil/blob/master/CHANGELOG.md) | 16 | [Update log](https://github.com/OpenFlutter/flutter_screenutil/blob/master/CHANGELOG.md) |
16 | 17 | ||
18 | +## Note | ||
19 | +v3 requires `flutter >= 1.19.0`. Use v2 for current stable version of flutter. | ||
20 | + | ||
17 | ## Usage: | 21 | ## Usage: |
18 | 22 | ||
19 | ### Add dependency: | 23 | ### Add dependency: |
@@ -24,7 +28,7 @@ dependencies: | @@ -24,7 +28,7 @@ dependencies: | ||
24 | flutter: | 28 | flutter: |
25 | sdk: flutter | 29 | sdk: flutter |
26 | # add flutter_screenutil | 30 | # add flutter_screenutil |
27 | - flutter_screenutil: ^2.3.0 | 31 | + flutter_screenutil: ^3.0.0-beta.1 |
28 | ``` | 32 | ``` |
29 | 33 | ||
30 | ### Add the following imports to your Dart code: | 34 | ### Add the following imports to your Dart code: |
@@ -36,26 +40,25 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; | @@ -36,26 +40,25 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; | ||
36 | 40 | ||
37 | |Property|Type|Default Value|Description| | 41 | |Property|Type|Default Value|Description| |
38 | |:---|:---|:---|:---| | 42 | |:---|:---|:---|:---| |
39 | -|width|double|1080px|The width of the device in the design draft, in px| | ||
40 | -|height|double|1920px|The height of the device in the design draft, in px| | 43 | +|designSize|Size|Size(1080, 1920)|The size of the device in the design draft, in px| |
41 | |allowFontScaling|bool|false|Sets whether the font size is scaled according to the system's "font size" assist option| | 44 | |allowFontScaling|bool|false|Sets whether the font size is scaled according to the system's "font size" assist option| |
42 | 45 | ||
43 | ### Initialize and set the fit size and font size to scale according to the system's "font size" accessibility option | 46 | ### Initialize and set the fit size and font size to scale according to the system's "font size" accessibility option |
44 | -Please set the width and height of the design draft before use, the width and height of the design draft (unit px). | ||
45 | -Be sure to set the page in the MaterialApp's home/initialRoute(ie the entry file, just set it once) to ensure that the fit size is set before each use: | 47 | +Please set the size of the design draft before use, the width and height of the design draft (unit px). |
48 | + | ||
46 | 49 | ||
47 | ```dart | 50 | ```dart |
48 | 51 | ||
49 | //fill in the screen size of the device in the design | 52 | //fill in the screen size of the device in the design |
50 | 53 | ||
51 | //default value : width : 1080px , height:1920px , allowFontScaling:false | 54 | //default value : width : 1080px , height:1920px , allowFontScaling:false |
52 | -ScreenUtil.init(context); | 55 | +ScreenUtil.init(); |
53 | 56 | ||
54 | //If the design is based on the size of the iPhone6 (iPhone6 750*1334) | 57 | //If the design is based on the size of the iPhone6 (iPhone6 750*1334) |
55 | -ScreenUtil.init(context, width: 750, height: 1334); | 58 | +ScreenUtil.init(designSize: Size(750, 1334)); |
56 | 59 | ||
57 | //If you want to set the font size is scaled according to the system's "font size" assist option | 60 | //If you want to set the font size is scaled according to the system's "font size" assist option |
58 | -ScreenUtil.init(context, width: 750, height: 1334, allowFontScaling: true); | 61 | +ScreenUtil.init(designSize: Size(750, 1334), allowFontScaling: true); |
59 | 62 | ||
60 | ``` | 63 | ``` |
61 | 64 | ||
@@ -72,12 +75,12 @@ ScreenUtil.init(context, width: 750, height: 1334, allowFontScaling: true); | @@ -72,12 +75,12 @@ ScreenUtil.init(context, width: 750, height: 1334, allowFontScaling: true); | ||
72 | ScreenUtil().setSp(24, allowFontScalingSelf: true) (sdk>=2.6 : 24.ssp) //Adapter font(fonts will scale to respect Text Size accessibility settings) | 75 | ScreenUtil().setSp(24, allowFontScalingSelf: true) (sdk>=2.6 : 24.ssp) //Adapter font(fonts will scale to respect Text Size accessibility settings) |
73 | ScreenUtil().setSp(24, allowFontScalingSelf: false) (sdk>=2.6 : 24.nsp) //Adapter font(fonts will not scale to respect Text Size accessibility settings) | 76 | ScreenUtil().setSp(24, allowFontScalingSelf: false) (sdk>=2.6 : 24.nsp) //Adapter font(fonts will not scale to respect Text Size accessibility settings) |
74 | 77 | ||
75 | - ScreenUtil.pixelRatio //Device pixel density | ||
76 | - ScreenUtil.screenWidth (sdk>=2.6 : 1.wp) //Device width | ||
77 | - ScreenUtil.screenHeight (sdk>=2.6 : 1.hp) //Device height | ||
78 | - ScreenUtil.bottomBarHeight //Bottom safe zone distance, suitable for buttons with full screen | ||
79 | - ScreenUtil.statusBarHeight //Status bar height , Notch will be higher Unit px | ||
80 | - ScreenUtil.textScaleFactor //System font scaling factor | 78 | + ScreenUtil().pixelRatio //Device pixel density |
79 | + ScreenUtil().screenWidth (sdk>=2.6 : 1.wp) //Device width | ||
80 | + ScreenUtil().screenHeight (sdk>=2.6 : 1.hp) //Device height | ||
81 | + ScreenUtil().bottomBarHeight //Bottom safe zone distance, suitable for buttons with full screen | ||
82 | + ScreenUtil().statusBarHeight //Status bar height , Notch will be higher Unit px | ||
83 | + ScreenUtil().textScaleFactor //System font scaling factor | ||
81 | 84 | ||
82 | ScreenUtil().scaleWidth //Ratio of actual width dp to design draft px | 85 | ScreenUtil().scaleWidth //Ratio of actual width dp to design draft px |
83 | ScreenUtil().scaleHeight //Ratio of actual height dp to design draft px | 86 | ScreenUtil().scaleHeight //Ratio of actual height dp to design draft px |
@@ -166,167 +169,11 @@ Column( | @@ -166,167 +169,11 @@ Column( | ||
166 | ) | 169 | ) |
167 | ``` | 170 | ``` |
168 | 171 | ||
169 | -```dart | ||
170 | -//import | ||
171 | -import 'package:flutter/material.dart'; | ||
172 | -import 'package:flutter_screenutil/flutter_screenutil.dart'; | ||
173 | - | ||
174 | -void main() => runApp(MyApp()); | ||
175 | - | ||
176 | -class MyApp extends StatelessWidget { | ||
177 | - @override | ||
178 | - Widget build(BuildContext context) { | ||
179 | - return MaterialApp( | ||
180 | - debugShowCheckedModeBanner: false, | ||
181 | - title: 'Flutter_ScreenUtil', | ||
182 | - theme: ThemeData( | ||
183 | - primarySwatch: Colors.blue, | ||
184 | - ), | ||
185 | - home: MyHomePage(), | ||
186 | - ); | ||
187 | - } | ||
188 | -} | ||
189 | - | ||
190 | -class MyHomePage extends StatefulWidget { | ||
191 | - @override | ||
192 | - _MyHomePageState createState() => _MyHomePageState(); | ||
193 | -} | ||
194 | - | ||
195 | -class _MyHomePageState extends State<MyHomePage> { | ||
196 | - @override | ||
197 | - Widget build(BuildContext context) { | ||
198 | - //Set the fit size (fill in the screen size of the device in the design) If the design is based on the size of the iPhone6 (iPhone6 750*1334) | ||
199 | - ScreenUtil.init(width: 750, height: 1334, allowFontScaling: false); | ||
200 | - | ||
201 | - return ExampleWidget(title: 'FlutterScreenUtil Demo'); | ||
202 | - } | ||
203 | -} | ||
204 | - | ||
205 | -class ExampleWidget extends StatefulWidget { | ||
206 | - const ExampleWidget({Key key, this.title}) : super(key: key); | ||
207 | - | ||
208 | - final String title; | ||
209 | - | ||
210 | - @override | ||
211 | - _ExampleWidgetState createState() => _ExampleWidgetState(); | ||
212 | -} | ||
213 | - | ||
214 | -class _ExampleWidgetState extends State<ExampleWidget> { | ||
215 | - @override | ||
216 | - Widget build(BuildContext context) { | ||
217 | - printScreenInformation(); | ||
218 | - return Scaffold( | ||
219 | - appBar: AppBar( | ||
220 | - title: Text(widget.title), | ||
221 | - ), | ||
222 | - body: SingleChildScrollView( | ||
223 | - child: Column( | ||
224 | - crossAxisAlignment: CrossAxisAlignment.center, | ||
225 | - children: <Widget>[ | ||
226 | - Row( | ||
227 | - children: <Widget>[ | ||
228 | - Container( | ||
229 | - padding: EdgeInsets.all(ScreenUtil().setWidth(10)), | ||
230 | - width: ScreenUtil().setWidth(375), | ||
231 | - height: ScreenUtil().setHeight(200), | ||
232 | - color: Colors.red, | ||
233 | - child: Text( | ||
234 | - 'My width:${ScreenUtil().setWidth(375)}dp \n' | ||
235 | - 'My height:${ScreenUtil().setHeight(200)}dp', | ||
236 | - style: TextStyle( | ||
237 | - color: Colors.white, fontSize: ScreenUtil().setSp(24)), | ||
238 | - ), | ||
239 | - ), | ||
240 | - Container( | ||
241 | - padding: EdgeInsets.all(ScreenUtil().setWidth(10)), | ||
242 | - width: ScreenUtil().setWidth(375), | ||
243 | - height: ScreenUtil().setHeight(200), | ||
244 | - color: Colors.blue, | ||
245 | - child: Text( | ||
246 | - 'My width:${ScreenUtil().setWidth(375)}dp \n' | ||
247 | - 'My height:${ScreenUtil().setHeight(200)}dp', | ||
248 | - style: TextStyle( | ||
249 | - color: Colors.white, | ||
250 | - fontSize: ScreenUtil().setSp(24))), | ||
251 | - ), | ||
252 | - ], | ||
253 | - ), | ||
254 | - Text('Device width:${ScreenUtil.screenWidth}dp'), | ||
255 | - Text('Device height:${ScreenUtil.screenHeight}dp'), | ||
256 | - Text('Device width:${ScreenUtil.screenWidthPx}px'), | ||
257 | - Text('Device height:${ScreenUtil.screenHeightPx}px'), | ||
258 | - Text('Device pixel density:${ScreenUtil.pixelRatio}'), | ||
259 | - Text('Bottom safe zone distance:${ScreenUtil.bottomBarHeight}dp'), | ||
260 | - Text('Status bar height:${ScreenUtil.statusBarHeight}dp'), | ||
261 | - Text( | ||
262 | - 'Ratio of actual width dp to design draft px:${ScreenUtil().scaleWidth}', | ||
263 | - textAlign: TextAlign.center, | ||
264 | - ), | ||
265 | - Text( | ||
266 | - 'Ratio of actual height dp to design draft px:${ScreenUtil().scaleHeight}', | ||
267 | - textAlign: TextAlign.center, | ||
268 | - ), | ||
269 | - SizedBox( | ||
270 | - height: ScreenUtil().setHeight(100), | ||
271 | - ), | ||
272 | - Text('System font scaling factor:${ScreenUtil.textScaleFactor}'), | ||
273 | - Column( | ||
274 | - crossAxisAlignment: CrossAxisAlignment.start, | ||
275 | - children: <Widget>[ | ||
276 | - Text( | ||
277 | - 'My font size is 24px on the design draft and will not change with the system.', | ||
278 | - style: TextStyle( | ||
279 | - color: Colors.black, | ||
280 | - fontSize: ScreenUtil().setSp(24), | ||
281 | - )), | ||
282 | - Text( | ||
283 | - 'My font size is 24px on the design draft and will change with the system.', | ||
284 | - style: TextStyle( | ||
285 | - color: Colors.black, | ||
286 | - fontSize: ScreenUtil() | ||
287 | - .setSp(24, allowFontScalingSelf: true))), | ||
288 | - ], | ||
289 | - ) | ||
290 | - ], | ||
291 | - ), | ||
292 | - ), | ||
293 | - floatingActionButton: FloatingActionButton( | ||
294 | - child: Icon(Icons.title), | ||
295 | - onPressed: () { | ||
296 | - ScreenUtil.init(width: 1500, height: 1334, allowFontScaling: false); | ||
297 | - setState(() {}); | ||
298 | - }, | ||
299 | - ), | ||
300 | - ); | ||
301 | - } | ||
302 | - | ||
303 | - void printScreenInformation() { | ||
304 | - print('Device width dp:${ScreenUtil.screenWidth}'); //Device width | ||
305 | - print('Device height dp:${ScreenUtil.screenHeight}'); //Device height | ||
306 | - print( | ||
307 | - 'Device pixel density:${ScreenUtil.pixelRatio}'); //Device pixel density | ||
308 | - print( | ||
309 | - 'Bottom safe zone distance dp:${ScreenUtil.bottomBarHeight}'); //Bottom safe zone distance,suitable for buttons with full screen | ||
310 | - print( | ||
311 | - 'Status bar height dp:${ScreenUtil.statusBarHeight}dp'); //Status bar height , Notch will be higher Unit dp | ||
312 | - print( | ||
313 | - 'Ratio of actual width dp to design draft px:${ScreenUtil().scaleWidth}'); | ||
314 | - print( | ||
315 | - 'Ratio of actual height dp to design draft px:${ScreenUtil().scaleHeight}'); | ||
316 | - print( | ||
317 | - 'The ratio of font and width to the size of the design:${ScreenUtil().scaleWidth * ScreenUtil.pixelRatio}'); | ||
318 | - print( | ||
319 | - 'The ratio of height width to the size of the design:${ScreenUtil().scaleHeight * ScreenUtil.pixelRatio}'); | ||
320 | - } | ||
321 | -} | ||
322 | - | ||
323 | -``` | ||
324 | - | ||
325 | -### example: | 172 | +### Example: |
326 | 173 | ||
327 | [example demo](/example/lib/main.dart) | 174 | [example demo](/example/lib/main.dart) |
328 | 175 | ||
329 | -effect: | 176 | +### Effect: |
330 | 177 | ||
331 |  | 178 |  |
332 |  | 179 |  |
1 | +# This branch is suitable for the beta version of flutter | ||
1 | 2 | ||
2 | # flutter_screenutil | 3 | # flutter_screenutil |
3 | [](https://pub.dartlang.org/packages/flutter_screenutil) | 4 | [](https://pub.dartlang.org/packages/flutter_screenutil) |
1 | -# example | ||
2 | - | ||
3 | -flutter_screenutil example | 1 | +# Example |
4 | 2 | ||
5 |  | 3 |  |
6 |  | 4 |  |
7 | 5 | ||
8 |  | 6 |  |
9 |  | 7 |  |
10 | -## Getting Started | 8 | + |
9 | +```dart | ||
10 | +void main() { | ||
11 | + WidgetsFlutterBinding.ensureInitialized(); | ||
12 | + //Set the fit size (fill in the screen size of the device in the design) If the design is based on the size of the iPhone6 (iPhone6 750*1334) | ||
13 | + ScreenUtil.init(designSize: Size(750, 1334), allowFontScaling: false); | ||
14 | + runApp(MyApp()); | ||
15 | +} | ||
16 | + | ||
17 | +class MyApp extends StatelessWidget { | ||
18 | + @override | ||
19 | + Widget build(BuildContext context) { | ||
20 | + return MaterialApp( | ||
21 | + debugShowCheckedModeBanner: false, | ||
22 | + title: 'Flutter_ScreenUtil', | ||
23 | + theme: ThemeData( | ||
24 | + primarySwatch: Colors.blue, | ||
25 | + ), | ||
26 | + home: ExampleWidget(title: 'FlutterScreenUtil Demo'), | ||
27 | + ); | ||
28 | + } | ||
29 | +} | ||
30 | + | ||
31 | +class ExampleWidget extends StatefulWidget { | ||
32 | + const ExampleWidget({Key key, this.title}) : super(key: key); | ||
33 | + | ||
34 | + final String title; | ||
35 | + | ||
36 | + @override | ||
37 | + _ExampleWidgetState createState() => _ExampleWidgetState(); | ||
38 | +} | ||
39 | + | ||
40 | +class _ExampleWidgetState extends State<ExampleWidget> { | ||
41 | + @override | ||
42 | + Widget build(BuildContext context) { | ||
43 | + printScreenInformation(); | ||
44 | + return Scaffold( | ||
45 | + appBar: AppBar( | ||
46 | + title: Text(widget.title), | ||
47 | + ), | ||
48 | + body: SingleChildScrollView( | ||
49 | + child: Column( | ||
50 | + crossAxisAlignment: CrossAxisAlignment.center, | ||
51 | + children: <Widget>[ | ||
52 | + Row( | ||
53 | + children: <Widget>[ | ||
54 | + // Using Extensions | ||
55 | + Container( | ||
56 | + padding: EdgeInsets.all(10.w), | ||
57 | + width: 0.5.wp, | ||
58 | + height: 200.h, | ||
59 | + color: Colors.red, | ||
60 | + child: Text( | ||
61 | + 'My width:${0.5.wp}dp \n' | ||
62 | + 'My height:${200.h}dp', | ||
63 | + style: TextStyle( | ||
64 | + color: Colors.white, | ||
65 | + fontSize: 24.sp, | ||
66 | + ), | ||
67 | + ), | ||
68 | + ), | ||
69 | + // Without using Extensions | ||
70 | + Container( | ||
71 | + padding: EdgeInsets.all(ScreenUtil().setWidth(10)), | ||
72 | + width: ScreenUtil().screenWidth * 0.5, | ||
73 | + height: ScreenUtil().setHeight(200), | ||
74 | + color: Colors.blue, | ||
75 | + child: Text( | ||
76 | + 'My width:${ScreenUtil().screenWidth * 0.5}dp \n' | ||
77 | + 'My height:${ScreenUtil().setHeight(200)}dp', | ||
78 | + style: TextStyle( | ||
79 | + color: Colors.white, | ||
80 | + fontSize: ScreenUtil().setSp(24), | ||
81 | + ), | ||
82 | + ), | ||
83 | + ), | ||
84 | + ], | ||
85 | + ), | ||
86 | + Text('Device width:${ScreenUtil().screenWidthPx}px'), | ||
87 | + Text('Device height:${ScreenUtil().screenHeightPx}px'), | ||
88 | + Text('Device width:${ScreenUtil().screenWidth}dp'), | ||
89 | + Text('Device height:${ScreenUtil().screenHeight}dp'), | ||
90 | + Text('Device pixel density:${ScreenUtil().pixelRatio}'), | ||
91 | + Text('Bottom safe zone distance:${ScreenUtil().bottomBarHeight}dp'), | ||
92 | + Text('Status bar height:${ScreenUtil().statusBarHeight}dp'), | ||
93 | + Text( | ||
94 | + 'Ratio of actual width dp to design draft px:${ScreenUtil().scaleWidth}', | ||
95 | + textAlign: TextAlign.center, | ||
96 | + ), | ||
97 | + Text( | ||
98 | + 'Ratio of actual height dp to design draft px:${ScreenUtil().scaleHeight}', | ||
99 | + textAlign: TextAlign.center, | ||
100 | + ), | ||
101 | + SizedBox( | ||
102 | + height: ScreenUtil().setHeight(100), | ||
103 | + ), | ||
104 | + Text('System font scaling factor:${ScreenUtil().textScaleFactor}'), | ||
105 | + Column( | ||
106 | + crossAxisAlignment: CrossAxisAlignment.start, | ||
107 | + children: <Widget>[ | ||
108 | + Text( | ||
109 | + 'My font size is 24px on the design draft and will not change with the system.', | ||
110 | + style: TextStyle( | ||
111 | + color: Colors.black, | ||
112 | + fontSize: 24.sp, | ||
113 | + ), | ||
114 | + ), | ||
115 | + Text( | ||
116 | + 'My font size is 24px on the design draft and will change with the system.', | ||
117 | + style: ts.t1, | ||
118 | + ), | ||
119 | + ], | ||
120 | + ) | ||
121 | + ], | ||
122 | + ), | ||
123 | + ), | ||
124 | + floatingActionButton: FloatingActionButton( | ||
125 | + child: Icon(Icons.title), | ||
126 | + onPressed: () { | ||
127 | + ScreenUtil.init( | ||
128 | + designSize: Size(1500, 1334), | ||
129 | + allowFontScaling: false, | ||
130 | + ); | ||
131 | + setState(() {}); | ||
132 | + }, | ||
133 | + ), | ||
134 | + ); | ||
135 | + } | ||
136 | + | ||
137 | + void printScreenInformation() { | ||
138 | + print('Device width dp:${ScreenUtil().screenWidth}'); //Device width | ||
139 | + print('Device height dp:${ScreenUtil().screenHeight}'); //Device height | ||
140 | + print( | ||
141 | + 'Device pixel density:${ScreenUtil().pixelRatio}'); //Device pixel density | ||
142 | + print( | ||
143 | + 'Bottom safe zone distance dp:${ScreenUtil().bottomBarHeight}'); //Bottom safe zone distance,suitable for buttons with full screen | ||
144 | + print( | ||
145 | + 'Status bar height px:${ScreenUtil().statusBarHeight}dp'); //Status bar height , Notch will be higher Unit px | ||
146 | + print( | ||
147 | + 'Ratio of actual width dp to design draft px:${ScreenUtil().scaleWidth}'); | ||
148 | + print( | ||
149 | + 'Ratio of actual height dp to design draft px:${ScreenUtil().scaleHeight}'); | ||
150 | + print( | ||
151 | + 'The ratio of font and width to the size of the design:${ScreenUtil().scaleWidth * ScreenUtil().pixelRatio}'); | ||
152 | + print( | ||
153 | + 'The ratio of height width to the size of the design:${ScreenUtil().scaleHeight * ScreenUtil().pixelRatio}'); | ||
154 | + print('System font scaling:${ScreenUtil().textScaleFactor}'); | ||
155 | + print('0.5 times the screen width:${0.5.wp}'); | ||
156 | + print('0.5 times the screen height:${0.5.hp}'); | ||
157 | + } | ||
158 | +} | ||
159 | +``` | ||
11 | 160 |
example/android/.project
deleted
100644 → 0
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<projectDescription> | ||
3 | - <name>android</name> | ||
4 | - <comment>Project android created by Buildship.</comment> | ||
5 | - <projects> | ||
6 | - </projects> | ||
7 | - <buildSpec> | ||
8 | - <buildCommand> | ||
9 | - <name>org.eclipse.buildship.core.gradleprojectbuilder</name> | ||
10 | - <arguments> | ||
11 | - </arguments> | ||
12 | - </buildCommand> | ||
13 | - </buildSpec> | ||
14 | - <natures> | ||
15 | - <nature>org.eclipse.buildship.core.gradleprojectnature</nature> | ||
16 | - </natures> | ||
17 | -</projectDescription> |
example/android/app/.classpath
deleted
100644 → 0
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<classpath> | ||
3 | - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/> | ||
4 | - <classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/> | ||
5 | - <classpathentry kind="output" path="bin/default"/> | ||
6 | -</classpath> |
example/android/app/.project
deleted
100644 → 0
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<projectDescription> | ||
3 | - <name>app</name> | ||
4 | - <comment>Project app created by Buildship.</comment> | ||
5 | - <projects> | ||
6 | - </projects> | ||
7 | - <buildSpec> | ||
8 | - <buildCommand> | ||
9 | - <name>org.eclipse.jdt.core.javabuilder</name> | ||
10 | - <arguments> | ||
11 | - </arguments> | ||
12 | - </buildCommand> | ||
13 | - <buildCommand> | ||
14 | - <name>org.eclipse.buildship.core.gradleprojectbuilder</name> | ||
15 | - <arguments> | ||
16 | - </arguments> | ||
17 | - </buildCommand> | ||
18 | - </buildSpec> | ||
19 | - <natures> | ||
20 | - <nature>org.eclipse.jdt.core.javanature</nature> | ||
21 | - <nature>org.eclipse.buildship.core.gradleprojectnature</nature> | ||
22 | - </natures> | ||
23 | -</projectDescription> |
@@ -22,11 +22,16 @@ if (flutterVersionName == null) { | @@ -22,11 +22,16 @@ if (flutterVersionName == null) { | ||
22 | } | 22 | } |
23 | 23 | ||
24 | apply plugin: 'com.android.application' | 24 | apply plugin: 'com.android.application' |
25 | +apply plugin: 'kotlin-android' | ||
25 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" | 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" |
26 | 27 | ||
27 | android { | 28 | android { |
28 | compileSdkVersion 28 | 29 | compileSdkVersion 28 |
29 | 30 | ||
31 | + sourceSets { | ||
32 | + main.java.srcDirs += 'src/main/kotlin' | ||
33 | + } | ||
34 | + | ||
30 | lintOptions { | 35 | lintOptions { |
31 | disable 'InvalidPackage' | 36 | disable 'InvalidPackage' |
32 | } | 37 | } |
@@ -38,7 +43,6 @@ android { | @@ -38,7 +43,6 @@ android { | ||
38 | targetSdkVersion 28 | 43 | targetSdkVersion 28 |
39 | versionCode flutterVersionCode.toInteger() | 44 | versionCode flutterVersionCode.toInteger() |
40 | versionName flutterVersionName | 45 | versionName flutterVersionName |
41 | - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" | ||
42 | } | 46 | } |
43 | 47 | ||
44 | buildTypes { | 48 | buildTypes { |
@@ -55,7 +59,5 @@ flutter { | @@ -55,7 +59,5 @@ flutter { | ||
55 | } | 59 | } |
56 | 60 | ||
57 | dependencies { | 61 | dependencies { |
58 | - testImplementation 'junit:junit:4.12' | ||
59 | - androidTestImplementation 'com.android.support.test:runner:1.0.2' | ||
60 | - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' | 62 | + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" |
61 | } | 63 | } |
1 | +<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
2 | + package="li.zhuoyuan.example"> | ||
3 | + <!-- Flutter needs it to communicate with the running application | ||
4 | + to allow setting breakpoints, to provide hot reload, etc. | ||
5 | + --> | ||
6 | + <uses-permission android:name="android.permission.INTERNET"/> | ||
7 | +</manifest> |
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android" | 1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android" |
2 | package="li.zhuoyuan.example"> | 2 | package="li.zhuoyuan.example"> |
3 | - | ||
4 | - <!-- The INTERNET permission is required for development. Specifically, | ||
5 | - flutter needs it to communicate with the running application | ||
6 | - to allow setting breakpoints, to provide hot reload, etc. | ||
7 | - --> | ||
8 | - <uses-permission android:name="android.permission.INTERNET"/> | ||
9 | - | ||
10 | <!-- io.flutter.app.FlutterApplication is an android.app.Application that | 3 | <!-- io.flutter.app.FlutterApplication is an android.app.Application that |
11 | calls FlutterMain.startInitialization(this); in its onCreate method. | 4 | calls FlutterMain.startInitialization(this); in its onCreate method. |
12 | In most cases you can leave this as-is, but you if you want to provide | 5 | In most cases you can leave this as-is, but you if you want to provide |
@@ -20,20 +13,35 @@ | @@ -20,20 +13,35 @@ | ||
20 | android:name=".MainActivity" | 13 | android:name=".MainActivity" |
21 | android:launchMode="singleTop" | 14 | android:launchMode="singleTop" |
22 | android:theme="@style/LaunchTheme" | 15 | android:theme="@style/LaunchTheme" |
23 | - android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density" | 16 | + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" |
24 | android:hardwareAccelerated="true" | 17 | android:hardwareAccelerated="true" |
25 | android:windowSoftInputMode="adjustResize"> | 18 | android:windowSoftInputMode="adjustResize"> |
26 | - <!-- This keeps the window background of the activity showing | ||
27 | - until Flutter renders its first frame. It can be removed if | ||
28 | - there is no splash screen (such as the default splash screen | ||
29 | - defined in @style/LaunchTheme). --> | 19 | + <!-- Specifies an Android theme to apply to this Activity as soon as |
20 | + the Android process has started. This theme is visible to the user | ||
21 | + while the Flutter UI initializes. After that, this theme continues | ||
22 | + to determine the Window background behind the Flutter UI. --> | ||
30 | <meta-data | 23 | <meta-data |
31 | - android:name="io.flutter.app.android.SplashScreenUntilFirstFrame" | ||
32 | - android:value="true" /> | 24 | + android:name="io.flutter.embedding.android.NormalTheme" |
25 | + android:resource="@style/NormalTheme" | ||
26 | + /> | ||
27 | + <!-- Displays an Android View that continues showing the launch screen | ||
28 | + Drawable until Flutter paints its first frame, then this splash | ||
29 | + screen fades out. A splash screen is useful to avoid any visual | ||
30 | + gap between the end of Android's launch screen and the painting of | ||
31 | + Flutter's first frame. --> | ||
32 | + <meta-data | ||
33 | + android:name="io.flutter.embedding.android.SplashScreenDrawable" | ||
34 | + android:resource="@drawable/launch_background" | ||
35 | + /> | ||
33 | <intent-filter> | 36 | <intent-filter> |
34 | <action android:name="android.intent.action.MAIN"/> | 37 | <action android:name="android.intent.action.MAIN"/> |
35 | <category android:name="android.intent.category.LAUNCHER"/> | 38 | <category android:name="android.intent.category.LAUNCHER"/> |
36 | </intent-filter> | 39 | </intent-filter> |
37 | </activity> | 40 | </activity> |
41 | + <!-- Don't delete the meta-data below. | ||
42 | + This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> | ||
43 | + <meta-data | ||
44 | + android:name="flutterEmbedding" | ||
45 | + android:value="2" /> | ||
38 | </application> | 46 | </application> |
39 | </manifest> | 47 | </manifest> |
1 | -package li.zhuoyuan.example; | ||
2 | - | ||
3 | -import android.os.Bundle; | ||
4 | -import io.flutter.app.FlutterActivity; | ||
5 | -import io.flutter.plugins.GeneratedPluginRegistrant; | ||
6 | - | ||
7 | -public class MainActivity extends FlutterActivity { | ||
8 | - @Override | ||
9 | - protected void onCreate(Bundle savedInstanceState) { | ||
10 | - super.onCreate(savedInstanceState); | ||
11 | - GeneratedPluginRegistrant.registerWith(this); | ||
12 | - } | ||
13 | -} |
1 | <?xml version="1.0" encoding="utf-8"?> | 1 | <?xml version="1.0" encoding="utf-8"?> |
2 | <resources> | 2 | <resources> |
3 | + <!-- Theme applied to the Android Window while the process is starting --> | ||
3 | <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar"> | 4 | <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar"> |
4 | <!-- Show a splash screen on the activity. Automatically removed when | 5 | <!-- Show a splash screen on the activity. Automatically removed when |
5 | Flutter draws its first frame --> | 6 | Flutter draws its first frame --> |
6 | <item name="android:windowBackground">@drawable/launch_background</item> | 7 | <item name="android:windowBackground">@drawable/launch_background</item> |
7 | </style> | 8 | </style> |
9 | + <!-- Theme applied to the Android Window as soon as the process has started. | ||
10 | + This theme determines the color of the Android Window while your | ||
11 | + Flutter UI initializes, as well as behind your Flutter UI while its | ||
12 | + running. | ||
13 | + | ||
14 | + This Theme is only used starting with V2 of Flutter's Android embedding. --> | ||
15 | + <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar"> | ||
16 | + <item name="android:windowBackground">@android:color/white</item> | ||
17 | + </style> | ||
8 | </resources> | 18 | </resources> |
1 | +<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
2 | + package="li.zhuoyuan.example"> | ||
3 | + <!-- Flutter needs it to communicate with the running application | ||
4 | + to allow setting breakpoints, to provide hot reload, etc. | ||
5 | + --> | ||
6 | + <uses-permission android:name="android.permission.INTERNET"/> | ||
7 | +</manifest> |
1 | buildscript { | 1 | buildscript { |
2 | + ext.kotlin_version = '1.3.50' | ||
2 | repositories { | 3 | repositories { |
3 | google() | 4 | google() |
4 | jcenter() | 5 | jcenter() |
5 | - maven { url "http://download.flutter.io" } | ||
6 | } | 6 | } |
7 | 7 | ||
8 | dependencies { | 8 | dependencies { |
9 | - classpath 'com.android.tools.build:gradle:3.1.2' | 9 | + classpath 'com.android.tools.build:gradle:3.5.0' |
10 | + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" | ||
10 | } | 11 | } |
11 | } | 12 | } |
12 | 13 | ||
@@ -14,7 +15,6 @@ allprojects { | @@ -14,7 +15,6 @@ allprojects { | ||
14 | repositories { | 15 | repositories { |
15 | google() | 16 | google() |
16 | jcenter() | 17 | jcenter() |
17 | - maven { url "http://download.flutter.io" } | ||
18 | } | 18 | } |
19 | } | 19 | } |
20 | 20 |
No preview for this file type
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME | @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME | ||
3 | distributionPath=wrapper/dists | 3 | distributionPath=wrapper/dists |
4 | zipStoreBase=GRADLE_USER_HOME | 4 | zipStoreBase=GRADLE_USER_HOME |
5 | zipStorePath=wrapper/dists | 5 | zipStorePath=wrapper/dists |
6 | -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip | 6 | +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip |
example/android/gradlew
deleted
100755 → 0
1 | -#!/usr/bin/env bash | ||
2 | - | ||
3 | -############################################################################## | ||
4 | -## | ||
5 | -## Gradle start up script for UN*X | ||
6 | -## | ||
7 | -############################################################################## | ||
8 | - | ||
9 | -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||
10 | -DEFAULT_JVM_OPTS="" | ||
11 | - | ||
12 | -APP_NAME="Gradle" | ||
13 | -APP_BASE_NAME=`basename "$0"` | ||
14 | - | ||
15 | -# Use the maximum available, or set MAX_FD != -1 to use that value. | ||
16 | -MAX_FD="maximum" | ||
17 | - | ||
18 | -warn ( ) { | ||
19 | - echo "$*" | ||
20 | -} | ||
21 | - | ||
22 | -die ( ) { | ||
23 | - echo | ||
24 | - echo "$*" | ||
25 | - echo | ||
26 | - exit 1 | ||
27 | -} | ||
28 | - | ||
29 | -# OS specific support (must be 'true' or 'false'). | ||
30 | -cygwin=false | ||
31 | -msys=false | ||
32 | -darwin=false | ||
33 | -case "`uname`" in | ||
34 | - CYGWIN* ) | ||
35 | - cygwin=true | ||
36 | - ;; | ||
37 | - Darwin* ) | ||
38 | - darwin=true | ||
39 | - ;; | ||
40 | - MINGW* ) | ||
41 | - msys=true | ||
42 | - ;; | ||
43 | -esac | ||
44 | - | ||
45 | -# Attempt to set APP_HOME | ||
46 | -# Resolve links: $0 may be a link | ||
47 | -PRG="$0" | ||
48 | -# Need this for relative symlinks. | ||
49 | -while [ -h "$PRG" ] ; do | ||
50 | - ls=`ls -ld "$PRG"` | ||
51 | - link=`expr "$ls" : '.*-> \(.*\)$'` | ||
52 | - if expr "$link" : '/.*' > /dev/null; then | ||
53 | - PRG="$link" | ||
54 | - else | ||
55 | - PRG=`dirname "$PRG"`"/$link" | ||
56 | - fi | ||
57 | -done | ||
58 | -SAVED="`pwd`" | ||
59 | -cd "`dirname \"$PRG\"`/" >/dev/null | ||
60 | -APP_HOME="`pwd -P`" | ||
61 | -cd "$SAVED" >/dev/null | ||
62 | - | ||
63 | -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | ||
64 | - | ||
65 | -# Determine the Java command to use to start the JVM. | ||
66 | -if [ -n "$JAVA_HOME" ] ; then | ||
67 | - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | ||
68 | - # IBM's JDK on AIX uses strange locations for the executables | ||
69 | - JAVACMD="$JAVA_HOME/jre/sh/java" | ||
70 | - else | ||
71 | - JAVACMD="$JAVA_HOME/bin/java" | ||
72 | - fi | ||
73 | - if [ ! -x "$JAVACMD" ] ; then | ||
74 | - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | ||
75 | - | ||
76 | -Please set the JAVA_HOME variable in your environment to match the | ||
77 | -location of your Java installation." | ||
78 | - fi | ||
79 | -else | ||
80 | - JAVACMD="java" | ||
81 | - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||
82 | - | ||
83 | -Please set the JAVA_HOME variable in your environment to match the | ||
84 | -location of your Java installation." | ||
85 | -fi | ||
86 | - | ||
87 | -# Increase the maximum file descriptors if we can. | ||
88 | -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then | ||
89 | - MAX_FD_LIMIT=`ulimit -H -n` | ||
90 | - if [ $? -eq 0 ] ; then | ||
91 | - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then | ||
92 | - MAX_FD="$MAX_FD_LIMIT" | ||
93 | - fi | ||
94 | - ulimit -n $MAX_FD | ||
95 | - if [ $? -ne 0 ] ; then | ||
96 | - warn "Could not set maximum file descriptor limit: $MAX_FD" | ||
97 | - fi | ||
98 | - else | ||
99 | - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" | ||
100 | - fi | ||
101 | -fi | ||
102 | - | ||
103 | -# For Darwin, add options to specify how the application appears in the dock | ||
104 | -if $darwin; then | ||
105 | - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" | ||
106 | -fi | ||
107 | - | ||
108 | -# For Cygwin, switch paths to Windows format before running java | ||
109 | -if $cygwin ; then | ||
110 | - APP_HOME=`cygpath --path --mixed "$APP_HOME"` | ||
111 | - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | ||
112 | - JAVACMD=`cygpath --unix "$JAVACMD"` | ||
113 | - | ||
114 | - # We build the pattern for arguments to be converted via cygpath | ||
115 | - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` | ||
116 | - SEP="" | ||
117 | - for dir in $ROOTDIRSRAW ; do | ||
118 | - ROOTDIRS="$ROOTDIRS$SEP$dir" | ||
119 | - SEP="|" | ||
120 | - done | ||
121 | - OURCYGPATTERN="(^($ROOTDIRS))" | ||
122 | - # Add a user-defined pattern to the cygpath arguments | ||
123 | - if [ "$GRADLE_CYGPATTERN" != "" ] ; then | ||
124 | - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" | ||
125 | - fi | ||
126 | - # Now convert the arguments - kludge to limit ourselves to /bin/sh | ||
127 | - i=0 | ||
128 | - for arg in "$@" ; do | ||
129 | - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` | ||
130 | - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option | ||
131 | - | ||
132 | - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition | ||
133 | - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` | ||
134 | - else | ||
135 | - eval `echo args$i`="\"$arg\"" | ||
136 | - fi | ||
137 | - i=$((i+1)) | ||
138 | - done | ||
139 | - case $i in | ||
140 | - (0) set -- ;; | ||
141 | - (1) set -- "$args0" ;; | ||
142 | - (2) set -- "$args0" "$args1" ;; | ||
143 | - (3) set -- "$args0" "$args1" "$args2" ;; | ||
144 | - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; | ||
145 | - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | ||
146 | - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | ||
147 | - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | ||
148 | - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | ||
149 | - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | ||
150 | - esac | ||
151 | -fi | ||
152 | - | ||
153 | -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules | ||
154 | -function splitJvmOpts() { | ||
155 | - JVM_OPTS=("$@") | ||
156 | -} | ||
157 | -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS | ||
158 | -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" | ||
159 | - | ||
160 | -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" |
example/android/gradlew.bat
deleted
100644 → 0
1 | -@if "%DEBUG%" == "" @echo off | ||
2 | -@rem ########################################################################## | ||
3 | -@rem | ||
4 | -@rem Gradle startup script for Windows | ||
5 | -@rem | ||
6 | -@rem ########################################################################## | ||
7 | - | ||
8 | -@rem Set local scope for the variables with windows NT shell | ||
9 | -if "%OS%"=="Windows_NT" setlocal | ||
10 | - | ||
11 | -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | ||
12 | -set DEFAULT_JVM_OPTS= | ||
13 | - | ||
14 | -set DIRNAME=%~dp0 | ||
15 | -if "%DIRNAME%" == "" set DIRNAME=. | ||
16 | -set APP_BASE_NAME=%~n0 | ||
17 | -set APP_HOME=%DIRNAME% | ||
18 | - | ||
19 | -@rem Find java.exe | ||
20 | -if defined JAVA_HOME goto findJavaFromJavaHome | ||
21 | - | ||
22 | -set JAVA_EXE=java.exe | ||
23 | -%JAVA_EXE% -version >NUL 2>&1 | ||
24 | -if "%ERRORLEVEL%" == "0" goto init | ||
25 | - | ||
26 | -echo. | ||
27 | -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | ||
28 | -echo. | ||
29 | -echo Please set the JAVA_HOME variable in your environment to match the | ||
30 | -echo location of your Java installation. | ||
31 | - | ||
32 | -goto fail | ||
33 | - | ||
34 | -:findJavaFromJavaHome | ||
35 | -set JAVA_HOME=%JAVA_HOME:"=% | ||
36 | -set JAVA_EXE=%JAVA_HOME%/bin/java.exe | ||
37 | - | ||
38 | -if exist "%JAVA_EXE%" goto init | ||
39 | - | ||
40 | -echo. | ||
41 | -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% | ||
42 | -echo. | ||
43 | -echo Please set the JAVA_HOME variable in your environment to match the | ||
44 | -echo location of your Java installation. | ||
45 | - | ||
46 | -goto fail | ||
47 | - | ||
48 | -:init | ||
49 | -@rem Get command-line arguments, handling Windowz variants | ||
50 | - | ||
51 | -if not "%OS%" == "Windows_NT" goto win9xME_args | ||
52 | -if "%@eval[2+2]" == "4" goto 4NT_args | ||
53 | - | ||
54 | -:win9xME_args | ||
55 | -@rem Slurp the command line arguments. | ||
56 | -set CMD_LINE_ARGS= | ||
57 | -set _SKIP=2 | ||
58 | - | ||
59 | -:win9xME_args_slurp | ||
60 | -if "x%~1" == "x" goto execute | ||
61 | - | ||
62 | -set CMD_LINE_ARGS=%* | ||
63 | -goto execute | ||
64 | - | ||
65 | -:4NT_args | ||
66 | -@rem Get arguments from the 4NT Shell from JP Software | ||
67 | -set CMD_LINE_ARGS=%$ | ||
68 | - | ||
69 | -:execute | ||
70 | -@rem Setup the command line | ||
71 | - | ||
72 | -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | ||
73 | - | ||
74 | -@rem Execute Gradle | ||
75 | -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% | ||
76 | - | ||
77 | -:end | ||
78 | -@rem End local scope for the variables with windows NT shell | ||
79 | -if "%ERRORLEVEL%"=="0" goto mainEnd | ||
80 | - | ||
81 | -:fail | ||
82 | -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | ||
83 | -rem the _cmd.exe /c_ return code! | ||
84 | -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 | ||
85 | -exit /b 1 | ||
86 | - | ||
87 | -:mainEnd | ||
88 | -if "%OS%"=="Windows_NT" endlocal | ||
89 | - | ||
90 | -:omega |
1 | +// Copyright 2014 The Flutter Authors. All rights reserved. | ||
2 | +// Use of this source code is governed by a BSD-style license that can be | ||
3 | +// found in the LICENSE file. | ||
4 | + | ||
1 | include ':app' | 5 | include ':app' |
2 | 6 | ||
3 | -def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() | 7 | +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") |
8 | +def properties = new Properties() | ||
4 | 9 | ||
5 | -def plugins = new Properties() | ||
6 | -def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') | ||
7 | -if (pluginsFile.exists()) { | ||
8 | - pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } | ||
9 | -} | 10 | +assert localPropertiesFile.exists() |
11 | +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } | ||
10 | 12 | ||
11 | -plugins.each { name, path -> | ||
12 | - def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() | ||
13 | - include ":$name" | ||
14 | - project(":$name").projectDir = pluginDirectory | ||
15 | -} | 13 | +def flutterSdkPath = properties.getProperty("flutter.sdk") |
14 | +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" | ||
15 | +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" |
1 | #!/bin/sh | 1 | #!/bin/sh |
2 | # This is a generated file; do not edit or check into version control. | 2 | # This is a generated file; do not edit or check into version control. |
3 | -export "FLUTTER_ROOT=/Users/lizhuoyuan/Development/flutter" | ||
4 | -export "FLUTTER_APPLICATION_PATH=/Users/lizhuoyuan/Development/Project/flutter_screenutil/example" | ||
5 | -export "FLUTTER_TARGET=lib/main.dart" | 3 | +export "FLUTTER_ROOT=D:\Develop\flutter" |
4 | +export "FLUTTER_APPLICATION_PATH=D:\Develop\Project\flutter_screenutil\example" | ||
5 | +export "FLUTTER_TARGET=lib\main.dart" | ||
6 | export "FLUTTER_BUILD_DIR=build" | 6 | export "FLUTTER_BUILD_DIR=build" |
7 | -export "SYMROOT=${SOURCE_ROOT}/../build/ios" | ||
8 | -export "FLUTTER_FRAMEWORK_DIR=/Users/lizhuoyuan/Development/flutter/bin/cache/artifacts/engine/ios" | 7 | +export "SYMROOT=${SOURCE_ROOT}/../build\ios" |
8 | +export "OTHER_LDFLAGS=$(inherited) -framework Flutter" | ||
9 | +export "FLUTTER_FRAMEWORK_DIR=D:\Develop\flutter\bin\cache\artifacts\engine\ios" | ||
9 | export "FLUTTER_BUILD_NAME=1.0.0" | 10 | export "FLUTTER_BUILD_NAME=1.0.0" |
10 | export "FLUTTER_BUILD_NUMBER=1" | 11 | export "FLUTTER_BUILD_NUMBER=1" |
1 | import 'dart:ui'; | 1 | import 'dart:ui'; |
2 | 2 | ||
3 | -import 'package:example/text_style.dart'; | ||
4 | import 'package:flutter/material.dart'; | 3 | import 'package:flutter/material.dart'; |
5 | import 'package:flutter_screenutil/flutter_screenutil.dart'; | 4 | import 'package:flutter_screenutil/flutter_screenutil.dart'; |
6 | 5 | ||
7 | -void main() => runApp(MyApp()); | 6 | +import 'text_style.dart'; |
7 | + | ||
8 | +void main() { | ||
9 | + WidgetsFlutterBinding.ensureInitialized(); | ||
10 | + //Set the fit size (fill in the screen size of the device in the design) If the design is based on the size of the iPhone6 (iPhone6 750*1334) | ||
11 | + ScreenUtil.init(designSize: Size(750, 1334), allowFontScaling: false); | ||
12 | + runApp(MyApp()); | ||
13 | +} | ||
8 | 14 | ||
9 | class MyApp extends StatelessWidget { | 15 | class MyApp extends StatelessWidget { |
10 | @override | 16 | @override |
@@ -15,20 +21,11 @@ class MyApp extends StatelessWidget { | @@ -15,20 +21,11 @@ class MyApp extends StatelessWidget { | ||
15 | theme: ThemeData( | 21 | theme: ThemeData( |
16 | primarySwatch: Colors.blue, | 22 | primarySwatch: Colors.blue, |
17 | ), | 23 | ), |
18 | - home: MyHomePage(), | 24 | + home: ExampleWidget(title: 'FlutterScreenUtil Demo'), |
19 | ); | 25 | ); |
20 | } | 26 | } |
21 | } | 27 | } |
22 | 28 | ||
23 | -class MyHomePage extends StatelessWidget { | ||
24 | - @override | ||
25 | - Widget build(BuildContext context) { | ||
26 | - //Set the fit size (fill in the screen size of the device in the design) If the design is based on the size of the iPhone6 (iPhone6 750*1334) | ||
27 | - ScreenUtil.init(context, width: 750, height: 1334, allowFontScaling: false); | ||
28 | - return ExampleWidget(title: 'FlutterScreenUtil Demo'); | ||
29 | - } | ||
30 | -} | ||
31 | - | ||
32 | class ExampleWidget extends StatefulWidget { | 29 | class ExampleWidget extends StatefulWidget { |
33 | const ExampleWidget({Key key, this.title}) : super(key: key); | 30 | const ExampleWidget({Key key, this.title}) : super(key: key); |
34 | 31 | ||
@@ -41,7 +38,7 @@ class ExampleWidget extends StatefulWidget { | @@ -41,7 +38,7 @@ class ExampleWidget extends StatefulWidget { | ||
41 | class _ExampleWidgetState extends State<ExampleWidget> { | 38 | class _ExampleWidgetState extends State<ExampleWidget> { |
42 | @override | 39 | @override |
43 | Widget build(BuildContext context) { | 40 | Widget build(BuildContext context) { |
44 | - printScreenInformation(); | 41 | + // printScreenInformation(); |
45 | return Scaffold( | 42 | return Scaffold( |
46 | appBar: AppBar( | 43 | appBar: AppBar( |
47 | title: Text(widget.title), | 44 | title: Text(widget.title), |
@@ -52,39 +49,45 @@ class _ExampleWidgetState extends State<ExampleWidget> { | @@ -52,39 +49,45 @@ class _ExampleWidgetState extends State<ExampleWidget> { | ||
52 | children: <Widget>[ | 49 | children: <Widget>[ |
53 | Row( | 50 | Row( |
54 | children: <Widget>[ | 51 | children: <Widget>[ |
52 | + // Using Extensions | ||
55 | Container( | 53 | Container( |
56 | - padding: EdgeInsets.all(ScreenUtil().setWidth(10)), | ||
57 | - width: 375.w, | 54 | + padding: EdgeInsets.all(10.w), |
55 | + width: 0.5.wp, | ||
58 | height: 200.h, | 56 | height: 200.h, |
59 | color: Colors.red, | 57 | color: Colors.red, |
60 | child: Text( | 58 | child: Text( |
61 | - 'My width:${375.w}dp \n' | 59 | + 'My width:${0.5.wp}dp \n' |
62 | 'My height:${200.h}dp', | 60 | 'My height:${200.h}dp', |
63 | style: TextStyle( | 61 | style: TextStyle( |
64 | - color: Colors.white, fontSize: ScreenUtil().setSp(24)), | 62 | + color: Colors.white, |
63 | + fontSize: 24.sp, | ||
64 | + ), | ||
65 | ), | 65 | ), |
66 | ), | 66 | ), |
67 | + // Without using Extensions | ||
67 | Container( | 68 | Container( |
68 | padding: EdgeInsets.all(ScreenUtil().setWidth(10)), | 69 | padding: EdgeInsets.all(ScreenUtil().setWidth(10)), |
69 | - width: ScreenUtil().setWidth(375), | 70 | + width: ScreenUtil().screenWidth * 0.5, |
70 | height: ScreenUtil().setHeight(200), | 71 | height: ScreenUtil().setHeight(200), |
71 | color: Colors.blue, | 72 | color: Colors.blue, |
72 | child: Text( | 73 | child: Text( |
73 | - 'My width:${0.5.wp}dp \n' | 74 | + 'My width:${ScreenUtil().screenWidth * 0.5}dp \n' |
74 | 'My height:${ScreenUtil().setHeight(200)}dp', | 75 | 'My height:${ScreenUtil().setHeight(200)}dp', |
75 | style: TextStyle( | 76 | style: TextStyle( |
76 | color: Colors.white, | 77 | color: Colors.white, |
77 | - fontSize: ScreenUtil().setSp(24))), | 78 | + fontSize: ScreenUtil().setSp(24), |
79 | + ), | ||
80 | + ), | ||
78 | ), | 81 | ), |
79 | ], | 82 | ], |
80 | ), | 83 | ), |
81 | - Text('Device width:${ScreenUtil.screenWidthPx}px'), | ||
82 | - Text('Device height:${ScreenUtil.screenHeightPx}px'), | ||
83 | - Text('Device width:${ScreenUtil.screenWidth}dp'), | ||
84 | - Text('Device height:${ScreenUtil.screenHeight}dp'), | ||
85 | - Text('Device pixel density:${ScreenUtil.pixelRatio}'), | ||
86 | - Text('Bottom safe zone distance:${ScreenUtil.bottomBarHeight}dp'), | ||
87 | - Text('Status bar height:${ScreenUtil.statusBarHeight}dp'), | 84 | + Text('Device width:${ScreenUtil().screenWidthPx}px'), |
85 | + Text('Device height:${ScreenUtil().screenHeightPx}px'), | ||
86 | + Text('Device width:${ScreenUtil().screenWidth}dp'), | ||
87 | + Text('Device height:${ScreenUtil().screenHeight}dp'), | ||
88 | + Text('Device pixel density:${ScreenUtil().pixelRatio}'), | ||
89 | + Text('Bottom safe zone distance:${ScreenUtil().bottomBarHeight}dp'), | ||
90 | + Text('Status bar height:${ScreenUtil().statusBarHeight}dp'), | ||
88 | Text( | 91 | Text( |
89 | 'Ratio of actual width dp to design draft px:${ScreenUtil().scaleWidth}', | 92 | 'Ratio of actual width dp to design draft px:${ScreenUtil().scaleWidth}', |
90 | textAlign: TextAlign.center, | 93 | textAlign: TextAlign.center, |
@@ -96,7 +99,7 @@ class _ExampleWidgetState extends State<ExampleWidget> { | @@ -96,7 +99,7 @@ class _ExampleWidgetState extends State<ExampleWidget> { | ||
96 | SizedBox( | 99 | SizedBox( |
97 | height: ScreenUtil().setHeight(100), | 100 | height: ScreenUtil().setHeight(100), |
98 | ), | 101 | ), |
99 | - Text('System font scaling factor:${ScreenUtil.textScaleFactor}'), | 102 | + Text('System font scaling factor:${ScreenUtil().textScaleFactor}'), |
100 | Column( | 103 | Column( |
101 | crossAxisAlignment: CrossAxisAlignment.start, | 104 | crossAxisAlignment: CrossAxisAlignment.start, |
102 | children: <Widget>[ | 105 | children: <Widget>[ |
@@ -105,10 +108,12 @@ class _ExampleWidgetState extends State<ExampleWidget> { | @@ -105,10 +108,12 @@ class _ExampleWidgetState extends State<ExampleWidget> { | ||
105 | style: TextStyle( | 108 | style: TextStyle( |
106 | color: Colors.black, | 109 | color: Colors.black, |
107 | fontSize: 24.sp, | 110 | fontSize: 24.sp, |
108 | - )), | 111 | + ), |
112 | + ), | ||
109 | Text( | 113 | Text( |
110 | 'My font size is 24px on the design draft and will change with the system.', | 114 | 'My font size is 24px on the design draft and will change with the system.', |
111 | - style: ts.t1), | 115 | + style: ts.t1, |
116 | + ), | ||
112 | ], | 117 | ], |
113 | ) | 118 | ) |
114 | ], | 119 | ], |
@@ -117,8 +122,10 @@ class _ExampleWidgetState extends State<ExampleWidget> { | @@ -117,8 +122,10 @@ class _ExampleWidgetState extends State<ExampleWidget> { | ||
117 | floatingActionButton: FloatingActionButton( | 122 | floatingActionButton: FloatingActionButton( |
118 | child: Icon(Icons.title), | 123 | child: Icon(Icons.title), |
119 | onPressed: () { | 124 | onPressed: () { |
120 | - ScreenUtil.init(context, | ||
121 | - width: 1500, height: 1334, allowFontScaling: false); | 125 | + ScreenUtil.init( |
126 | + designSize: Size(1500, 1334), | ||
127 | + allowFontScaling: false, | ||
128 | + ); | ||
122 | setState(() {}); | 129 | setState(() {}); |
123 | }, | 130 | }, |
124 | ), | 131 | ), |
@@ -126,23 +133,23 @@ class _ExampleWidgetState extends State<ExampleWidget> { | @@ -126,23 +133,23 @@ class _ExampleWidgetState extends State<ExampleWidget> { | ||
126 | } | 133 | } |
127 | 134 | ||
128 | void printScreenInformation() { | 135 | void printScreenInformation() { |
129 | - print('Device width dp:${ScreenUtil.screenWidth}'); //Device width | ||
130 | - print('Device height dp:${ScreenUtil.screenHeight}'); //Device height | 136 | + print('Device width dp:${ScreenUtil().screenWidth}'); //Device width |
137 | + print('Device height dp:${ScreenUtil().screenHeight}'); //Device height | ||
131 | print( | 138 | print( |
132 | - 'Device pixel density:${ScreenUtil.pixelRatio}'); //Device pixel density | 139 | + 'Device pixel density:${ScreenUtil().pixelRatio}'); //Device pixel density |
133 | print( | 140 | print( |
134 | - 'Bottom safe zone distance dp:${ScreenUtil.bottomBarHeight}'); //Bottom safe zone distance,suitable for buttons with full screen | 141 | + 'Bottom safe zone distance dp:${ScreenUtil().bottomBarHeight}'); //Bottom safe zone distance,suitable for buttons with full screen |
135 | print( | 142 | print( |
136 | - 'Status bar height px:${ScreenUtil.statusBarHeight}dp'); //Status bar height , Notch will be higher Unit px | 143 | + 'Status bar height px:${ScreenUtil().statusBarHeight}dp'); //Status bar height , Notch will be higher Unit px |
137 | print( | 144 | print( |
138 | 'Ratio of actual width dp to design draft px:${ScreenUtil().scaleWidth}'); | 145 | 'Ratio of actual width dp to design draft px:${ScreenUtil().scaleWidth}'); |
139 | print( | 146 | print( |
140 | 'Ratio of actual height dp to design draft px:${ScreenUtil().scaleHeight}'); | 147 | 'Ratio of actual height dp to design draft px:${ScreenUtil().scaleHeight}'); |
141 | print( | 148 | print( |
142 | - 'The ratio of font and width to the size of the design:${ScreenUtil().scaleWidth * ScreenUtil.pixelRatio}'); | 149 | + 'The ratio of font and width to the size of the design:${ScreenUtil().scaleWidth * ScreenUtil().pixelRatio}'); |
143 | print( | 150 | print( |
144 | - 'The ratio of height width to the size of the design:${ScreenUtil().scaleHeight * ScreenUtil.pixelRatio}'); | ||
145 | - print('System font scaling:${ScreenUtil.textScaleFactor}'); | 151 | + 'The ratio of height width to the size of the design:${ScreenUtil().scaleHeight * ScreenUtil().pixelRatio}'); |
152 | + print('System font scaling:${ScreenUtil().textScaleFactor}'); | ||
146 | print('0.5 times the screen width:${0.5.wp}'); | 153 | print('0.5 times the screen width:${0.5.wp}'); |
147 | print('0.5 times the screen height:${0.5.hp}'); | 154 | print('0.5 times the screen height:${0.5.hp}'); |
148 | } | 155 | } |
1 | -import 'package:example/text_style.dart'; | ||
2 | import 'package:flutter/material.dart'; | 1 | import 'package:flutter/material.dart'; |
3 | import 'package:flutter_screenutil/flutter_screenutil.dart'; | 2 | import 'package:flutter_screenutil/flutter_screenutil.dart'; |
4 | 3 | ||
5 | -void main() => runApp(MyApp()); | 4 | +import 'text_style.dart'; |
5 | + | ||
6 | +void main() { | ||
7 | + WidgetsFlutterBinding.ensureInitialized(); | ||
8 | + //设置适配尺寸 (填入设计稿中设备的屏幕尺寸) 此处假如设计稿是按iPhone6的尺寸设计的(iPhone6 750*1334) | ||
9 | + ScreenUtil.init(designSize: Size(750, 1334), allowFontScaling: false); | ||
10 | + runApp(MyApp()); | ||
11 | +} | ||
6 | 12 | ||
7 | class MyApp extends StatelessWidget { | 13 | class MyApp extends StatelessWidget { |
8 | @override | 14 | @override |
@@ -13,31 +19,11 @@ class MyApp extends StatelessWidget { | @@ -13,31 +19,11 @@ class MyApp extends StatelessWidget { | ||
13 | theme: ThemeData( | 19 | theme: ThemeData( |
14 | primarySwatch: Colors.blue, | 20 | primarySwatch: Colors.blue, |
15 | ), | 21 | ), |
16 | - home: MyHomePage(), | 22 | + home: ExampleWidget(title: 'FlutterScreenUtil示例'), |
17 | ); | 23 | ); |
18 | } | 24 | } |
19 | } | 25 | } |
20 | 26 | ||
21 | -class MyHomePage extends StatefulWidget { | ||
22 | - MyHomePage({Key key, this.title}) : super(key: key); | ||
23 | - | ||
24 | - final String title; | ||
25 | - | ||
26 | - @override | ||
27 | - _MyHomePageState createState() => _MyHomePageState(); | ||
28 | -} | ||
29 | - | ||
30 | -class _MyHomePageState extends State<MyHomePage> { | ||
31 | - @override | ||
32 | - Widget build(BuildContext context) { | ||
33 | - //设置适配尺寸 (填入设计稿中设备的屏幕尺寸) 此处假如设计稿是按iPhone6的尺寸设计的(iPhone6 750*1334) | ||
34 | - | ||
35 | - ScreenUtil.init(context, width: 750, height: 1334, allowFontScaling: false); | ||
36 | - | ||
37 | - return ExampleWidget(title: 'FlutterScreenUtil示例'); | ||
38 | - } | ||
39 | -} | ||
40 | - | ||
41 | class ExampleWidget extends StatefulWidget { | 27 | class ExampleWidget extends StatefulWidget { |
42 | const ExampleWidget({Key key, this.title}) : super(key: key); | 28 | const ExampleWidget({Key key, this.title}) : super(key: key); |
43 | 29 | ||
@@ -87,13 +73,13 @@ class _ExampleWidgetState extends State<ExampleWidget> { | @@ -87,13 +73,13 @@ class _ExampleWidgetState extends State<ExampleWidget> { | ||
87 | ), | 73 | ), |
88 | ], | 74 | ], |
89 | ), | 75 | ), |
90 | - Text('设备宽度:${ScreenUtil.screenWidthPx}px'), | ||
91 | - Text('设备高度:${ScreenUtil.screenHeightPx}px'), | ||
92 | - Text('设备宽度:${ScreenUtil.screenWidth}dp'), | ||
93 | - Text('设备高度:${ScreenUtil.screenHeight}dp'), | ||
94 | - Text('设备的像素密度:${ScreenUtil.pixelRatio}'), | ||
95 | - Text('底部安全区距离:${ScreenUtil.bottomBarHeight}dp'), | ||
96 | - Text('状态栏高度:${ScreenUtil.statusBarHeight}dp'), | 76 | + Text('设备宽度:${ScreenUtil().screenWidthPx}px'), |
77 | + Text('设备高度:${ScreenUtil().screenHeightPx}px'), | ||
78 | + Text('设备宽度:${ScreenUtil().screenWidth}dp'), | ||
79 | + Text('设备高度:${ScreenUtil().screenHeight}dp'), | ||
80 | + Text('设备的像素密度:${ScreenUtil().pixelRatio}'), | ||
81 | + Text('底部安全区距离:${ScreenUtil().bottomBarHeight}dp'), | ||
82 | + Text('状态栏高度:${ScreenUtil().statusBarHeight}dp'), | ||
97 | Text( | 83 | Text( |
98 | '实际宽度的dp与设计稿px的比例:${ScreenUtil().scaleWidth}', | 84 | '实际宽度的dp与设计稿px的比例:${ScreenUtil().scaleWidth}', |
99 | textAlign: TextAlign.center, | 85 | textAlign: TextAlign.center, |
@@ -105,7 +91,7 @@ class _ExampleWidgetState extends State<ExampleWidget> { | @@ -105,7 +91,7 @@ class _ExampleWidgetState extends State<ExampleWidget> { | ||
105 | SizedBox( | 91 | SizedBox( |
106 | height: 100.h, | 92 | height: 100.h, |
107 | ), | 93 | ), |
108 | - Text('系统的字体缩放比例:${ScreenUtil.textScaleFactor}'), | 94 | + Text('系统的字体缩放比例:${ScreenUtil().textScaleFactor}'), |
109 | Column( | 95 | Column( |
110 | crossAxisAlignment: CrossAxisAlignment.start, | 96 | crossAxisAlignment: CrossAxisAlignment.start, |
111 | children: <Widget>[ | 97 | children: <Widget>[ |
@@ -125,8 +111,10 @@ class _ExampleWidgetState extends State<ExampleWidget> { | @@ -125,8 +111,10 @@ class _ExampleWidgetState extends State<ExampleWidget> { | ||
125 | floatingActionButton: FloatingActionButton( | 111 | floatingActionButton: FloatingActionButton( |
126 | child: Icon(Icons.title), | 112 | child: Icon(Icons.title), |
127 | onPressed: () { | 113 | onPressed: () { |
128 | - ScreenUtil.init(context, | ||
129 | - width: 1500, height: 1334, allowFontScaling: false); | 114 | + ScreenUtil.init( |
115 | + designSize: Size(1500, 1334), | ||
116 | + allowFontScaling: false, | ||
117 | + ); | ||
130 | setState(() {}); | 118 | setState(() {}); |
131 | }, | 119 | }, |
132 | ), | 120 | ), |
@@ -134,21 +122,26 @@ class _ExampleWidgetState extends State<ExampleWidget> { | @@ -134,21 +122,26 @@ class _ExampleWidgetState extends State<ExampleWidget> { | ||
134 | } | 122 | } |
135 | 123 | ||
136 | void printScreenInformation() { | 124 | void printScreenInformation() { |
137 | - print('设备宽度:${ScreenUtil.screenWidth}'); //Device width | ||
138 | - print('设备高度:${ScreenUtil.screenHeight}'); //Device height | ||
139 | - print('设备的像素密度:${ScreenUtil.pixelRatio}'); //Device pixel density | 125 | + print('设备宽度:${ScreenUtil().screenWidth}'); //Device width |
126 | + print('设备高度:${ScreenUtil().screenHeight}'); //Device height | ||
127 | + print('设备的像素密度:${ScreenUtil().pixelRatio}'); //Device pixel density | ||
140 | print( | 128 | print( |
141 | - '底部安全区距离:${ScreenUtil.bottomBarHeight}dp'); //Bottom safe zone distance,suitable for buttons with full screen | 129 | + '底部安全区距离:${ScreenUtil().bottomBarHeight}dp', |
130 | + ); //Bottom safe zone distance,suitable for buttons with full screen | ||
142 | print( | 131 | print( |
143 | - '状态栏高度:${ScreenUtil.statusBarHeight}dp'); //Status bar height , Notch will be higher Unit px | 132 | + '状态栏高度:${ScreenUtil().statusBarHeight}dp', |
133 | + ); //Status bar height , Notch will be higher Unit px | ||
144 | 134 | ||
145 | print('实际宽度的dp与设计稿px的比例:${ScreenUtil().scaleWidth}'); | 135 | print('实际宽度的dp与设计稿px的比例:${ScreenUtil().scaleWidth}'); |
146 | print('实际高度的dp与设计稿px的比例:${ScreenUtil().scaleHeight}'); | 136 | print('实际高度的dp与设计稿px的比例:${ScreenUtil().scaleHeight}'); |
147 | 137 | ||
148 | print( | 138 | print( |
149 | - '宽度和字体相对于设计稿放大的比例:${ScreenUtil().scaleWidth * ScreenUtil.pixelRatio}'); | ||
150 | - print('高度相对于设计稿放大的比例:${ScreenUtil().scaleHeight * ScreenUtil.pixelRatio}'); | ||
151 | - print('系统的字体缩放比例:${ScreenUtil.textScaleFactor}'); | 139 | + '宽度和字体相对于设计稿放大的比例:${ScreenUtil().scaleWidth * ScreenUtil().pixelRatio}', |
140 | + ); | ||
141 | + print( | ||
142 | + '高度相对于设计稿放大的比例:${ScreenUtil().scaleHeight * ScreenUtil().pixelRatio}', | ||
143 | + ); | ||
144 | + print('系统的字体缩放比例:${ScreenUtil().textScaleFactor}'); | ||
152 | 145 | ||
153 | print('屏幕宽度的0.5:${0.5.wp}'); | 146 | print('屏幕宽度的0.5:${0.5.wp}'); |
154 | print('屏幕高度的0.5:${0.5.hp}'); | 147 | print('屏幕高度的0.5:${0.5.hp}'); |
@@ -4,91 +4,96 @@ | @@ -4,91 +4,96 @@ | ||
4 | */ | 4 | */ |
5 | 5 | ||
6 | import 'package:flutter/material.dart'; | 6 | import 'package:flutter/material.dart'; |
7 | +import 'package:flutter/scheduler.dart'; | ||
7 | 8 | ||
8 | class ScreenUtil { | 9 | class ScreenUtil { |
9 | static ScreenUtil _instance; | 10 | static ScreenUtil _instance; |
10 | - static const int defaultWidth = 1080; | ||
11 | - static const int defaultHeight = 1920; | 11 | + static const Size defaultSize = Size(1080, 1920); |
12 | 12 | ||
13 | /// UI设计中手机尺寸 , px | 13 | /// UI设计中手机尺寸 , px |
14 | /// Size of the phone in UI Design , px | 14 | /// Size of the phone in UI Design , px |
15 | - num uiWidthPx; | ||
16 | - num uiHeightPx; | 15 | + Size uiSize = defaultSize; |
17 | 16 | ||
18 | /// 控制字体是否要根据系统的“字体大小”辅助选项来进行缩放。默认值为false。 | 17 | /// 控制字体是否要根据系统的“字体大小”辅助选项来进行缩放。默认值为false。 |
19 | /// allowFontScaling Specifies whether fonts should scale to respect Text Size accessibility settings. The default is false. | 18 | /// allowFontScaling Specifies whether fonts should scale to respect Text Size accessibility settings. The default is false. |
20 | - bool allowFontScaling; | ||
21 | - | ||
22 | - static double _screenWidth; | ||
23 | - static double _screenHeight; | ||
24 | - static double _pixelRatio; | ||
25 | - static double _statusBarHeight; | ||
26 | - static double _bottomBarHeight; | ||
27 | - static double _textScaleFactor; | ||
28 | - | ||
29 | - ScreenUtil._(); | 19 | + bool allowFontScaling = false; |
20 | + | ||
21 | + double _pixelRatio; | ||
22 | + double _screenWidth; | ||
23 | + double _screenHeight; | ||
24 | + double _statusBarHeight; | ||
25 | + double _bottomBarHeight; | ||
26 | + double _textScaleFactor; | ||
27 | + | ||
28 | + ScreenUtil._() { | ||
29 | + final window = SchedulerBinding.instance?.window; | ||
30 | + assert( | ||
31 | + window != null, | ||
32 | + '\nYou need to explicitly call the `WidgetsFlutterBinding.ensureInitialized()`, before initializing ScreenUtil.', | ||
33 | + ); | ||
34 | + _pixelRatio = window.devicePixelRatio; | ||
35 | + _screenWidth = window.physicalSize.width / _pixelRatio; | ||
36 | + _screenHeight = window.physicalSize.height / _pixelRatio; | ||
37 | + _statusBarHeight = window.padding.top; | ||
38 | + _bottomBarHeight = window.padding.bottom; | ||
39 | + _textScaleFactor = window.textScaleFactor; | ||
40 | + } | ||
30 | 41 | ||
31 | factory ScreenUtil() { | 42 | factory ScreenUtil() { |
43 | + assert( | ||
44 | + _instance != null, | ||
45 | + '\nEnsure to initialize ScreenUtil before accessing it.', | ||
46 | + ); | ||
32 | return _instance; | 47 | return _instance; |
33 | } | 48 | } |
34 | 49 | ||
35 | - static void init(BuildContext context, | ||
36 | - {num width = defaultWidth, | ||
37 | - num height = defaultHeight, | ||
38 | - bool allowFontScaling = false}) { | ||
39 | - if (_instance == null) { | ||
40 | - _instance = ScreenUtil._(); | ||
41 | - } | ||
42 | - _instance.uiWidthPx = width; | ||
43 | - _instance.uiHeightPx = height; | ||
44 | - _instance.allowFontScaling = allowFontScaling; | ||
45 | - | ||
46 | - MediaQueryData mediaQuery = MediaQuery.of(context); | ||
47 | - _pixelRatio = mediaQuery.devicePixelRatio; | ||
48 | - _screenWidth = mediaQuery.size.width; | ||
49 | - _screenHeight = mediaQuery.size.height; | ||
50 | - _statusBarHeight = mediaQuery.padding.top; | ||
51 | - _bottomBarHeight = mediaQuery.padding.bottom; | ||
52 | - _textScaleFactor = mediaQuery.textScaleFactor; | 50 | + static void init({ |
51 | + Size designSize = defaultSize, | ||
52 | + bool allowFontScaling = false, | ||
53 | + }) { | ||
54 | + _instance ??= ScreenUtil._(); | ||
55 | + _instance | ||
56 | + ..uiSize = designSize | ||
57 | + ..allowFontScaling = allowFontScaling; | ||
53 | } | 58 | } |
54 | 59 | ||
55 | /// 每个逻辑像素的字体像素数,字体的缩放比例 | 60 | /// 每个逻辑像素的字体像素数,字体的缩放比例 |
56 | /// The number of font pixels for each logical pixel. | 61 | /// The number of font pixels for each logical pixel. |
57 | - static double get textScaleFactor => _textScaleFactor; | 62 | + double get textScaleFactor => _textScaleFactor; |
58 | 63 | ||
59 | /// 设备的像素密度 | 64 | /// 设备的像素密度 |
60 | /// The size of the media in logical pixels (e.g, the size of the screen). | 65 | /// The size of the media in logical pixels (e.g, the size of the screen). |
61 | - static double get pixelRatio => _pixelRatio; | 66 | + double get pixelRatio => _pixelRatio; |
62 | 67 | ||
63 | /// 当前设备宽度 dp | 68 | /// 当前设备宽度 dp |
64 | /// The horizontal extent of this size. | 69 | /// The horizontal extent of this size. |
65 | - static double get screenWidth => _screenWidth; | 70 | + double get screenWidth => _screenWidth; |
66 | 71 | ||
67 | ///当前设备高度 dp | 72 | ///当前设备高度 dp |
68 | ///The vertical extent of this size. dp | 73 | ///The vertical extent of this size. dp |
69 | - static double get screenHeight => _screenHeight; | 74 | + double get screenHeight => _screenHeight; |
70 | 75 | ||
71 | /// 当前设备宽度 px | 76 | /// 当前设备宽度 px |
72 | /// The vertical extent of this size. px | 77 | /// The vertical extent of this size. px |
73 | - static double get screenWidthPx => _screenWidth * _pixelRatio; | 78 | + double get screenWidthPx => _screenWidth * _pixelRatio; |
74 | 79 | ||
75 | /// 当前设备高度 px | 80 | /// 当前设备高度 px |
76 | /// The vertical extent of this size. px | 81 | /// The vertical extent of this size. px |
77 | - static double get screenHeightPx => _screenHeight * _pixelRatio; | 82 | + double get screenHeightPx => _screenHeight * _pixelRatio; |
78 | 83 | ||
79 | /// 状态栏高度 dp 刘海屏会更高 | 84 | /// 状态栏高度 dp 刘海屏会更高 |
80 | /// The offset from the top | 85 | /// The offset from the top |
81 | - static double get statusBarHeight => _statusBarHeight; | 86 | + double get statusBarHeight => _statusBarHeight; |
82 | 87 | ||
83 | /// 底部安全区距离 dp | 88 | /// 底部安全区距离 dp |
84 | /// The offset from the bottom. | 89 | /// The offset from the bottom. |
85 | - static double get bottomBarHeight => _bottomBarHeight; | 90 | + double get bottomBarHeight => _bottomBarHeight; |
86 | 91 | ||
87 | /// 实际的dp与UI设计px的比例 | 92 | /// 实际的dp与UI设计px的比例 |
88 | /// The ratio of the actual dp to the design draft px | 93 | /// The ratio of the actual dp to the design draft px |
89 | - double get scaleWidth => _screenWidth / uiWidthPx; | 94 | + double get scaleWidth => _screenWidth / uiSize.width; |
90 | 95 | ||
91 | - double get scaleHeight => _screenHeight / uiHeightPx; | 96 | + double get scaleHeight => _screenHeight / uiSize.height; |
92 | 97 | ||
93 | double get scaleText => scaleWidth; | 98 | double get scaleText => scaleWidth; |
94 | 99 |
@@ -18,9 +18,9 @@ extension SizeExtension on num { | @@ -18,9 +18,9 @@ extension SizeExtension on num { | ||
18 | 18 | ||
19 | ///屏幕宽度的倍数 | 19 | ///屏幕宽度的倍数 |
20 | ///Multiple of screen width | 20 | ///Multiple of screen width |
21 | - num get wp => ScreenUtil.screenWidth * this; | 21 | + num get wp => ScreenUtil().screenWidth * this; |
22 | 22 | ||
23 | ///屏幕高度的倍数 | 23 | ///屏幕高度的倍数 |
24 | ///Multiple of screen height | 24 | ///Multiple of screen height |
25 | - num get hp => ScreenUtil.screenHeight * this; | 25 | + num get hp => ScreenUtil().screenHeight * this; |
26 | } | 26 | } |
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: 2.3.1 | 3 | +version: 3.0.0-beta.1 |
4 | homepage: https://github.com/OpenFlutter/flutter_screenutil | 4 | homepage: https://github.com/OpenFlutter/flutter_screenutil |
5 | 5 | ||
6 | environment: | 6 | environment: |
7 | sdk: ">=2.6.0 <3.0.0" | 7 | sdk: ">=2.6.0 <3.0.0" |
8 | + flutter: ">=1.19.0-4.3.pre" | ||
8 | 9 | ||
9 | dependencies: | 10 | dependencies: |
10 | flutter: | 11 | flutter: |
@@ -13,38 +14,3 @@ dependencies: | @@ -13,38 +14,3 @@ dependencies: | ||
13 | dev_dependencies: | 14 | dev_dependencies: |
14 | flutter_test: | 15 | flutter_test: |
15 | sdk: flutter | 16 | sdk: flutter |
16 | - | ||
17 | -# For information on the generic Dart part of this file, see the | ||
18 | -# following page: https://www.dartlang.org/tools/pub/pubspec | ||
19 | - | ||
20 | -# The following section is specific to Flutter. | ||
21 | -flutter: | ||
22 | - # To add assets to your package, add an assets section, like this: | ||
23 | - # assets: | ||
24 | - # - images/a_dot_burr.jpeg | ||
25 | - # - images/a_dot_ham.jpeg | ||
26 | - # | ||
27 | - # For details regarding assets in packages, see | ||
28 | - # https://flutter.io/assets-and-images/#from-packages | ||
29 | - # | ||
30 | - # An image asset can refer to one or more resolution-specific "variants", see | ||
31 | - # https://flutter.io/assets-and-images/#resolution-aware. | ||
32 | - # To add custom fonts to your package, add a fonts section here, | ||
33 | - # in this "flutter" section. Each entry in this list should have a | ||
34 | - # "family" key with the font family name, and a "fonts" key with a | ||
35 | - # list giving the asset and other descriptors for the font. For | ||
36 | - # example: | ||
37 | - # fonts: | ||
38 | - # - family: Schyler | ||
39 | - # fonts: | ||
40 | - # - asset: fonts/Schyler-Regular.ttf | ||
41 | - # - asset: fonts/Schyler-Italic.ttf | ||
42 | - # style: italic | ||
43 | - # - family: Trajan Pro | ||
44 | - # fonts: | ||
45 | - # - asset: fonts/TrajanPro.ttf | ||
46 | - # - asset: fonts/TrajanPro_Bold.ttf | ||
47 | - # weight: 700 | ||
48 | - # | ||
49 | - # For details regarding fonts in packages, see | ||
50 | - # https://flutter.io/custom-fonts/#from-packages |
-
Please register or login to post a comment