sunalwaysknows
Committed by GitHub

update README_CN.md (#415)

Showing 1 changed file with 144 additions and 100 deletions
@@ -4,10 +4,10 @@ @@ -4,10 +4,10 @@
4 [![pub points](https://badges.bar/flutter_screenutil/pub%20points)](https://pub.dev/packages/flutter_screenutil/score) 4 [![pub points](https://badges.bar/flutter_screenutil/pub%20points)](https://pub.dev/packages/flutter_screenutil/score)
5 [![popularity](https://badges.bar/flutter_screenutil/popularity)](https://pub.dev/packages/flutter_screenutil/score) 5 [![popularity](https://badges.bar/flutter_screenutil/popularity)](https://pub.dev/packages/flutter_screenutil/score)
6 6
7 -**flutter 屏幕适配方案,让你的UI在不同尺寸的屏幕上都能显示合理的布局!** 7 +**flutter 屏幕适配方案,用于调整屏幕和字体大小的flutter插件,让你的UI在不同尺寸的屏幕上都能显示合理的布局!**
8 8
9 9
10 -*注意*:此插件仍处于开发阶段,某些API可能尚未推出 10 +*注意*:此插件仍处于开发阶段,某些API可能尚不可用
11 11
12 [README of English](https://github.com/OpenFlutter/flutter_ScreenUtil/blob/master/README.md) 12 [README of English](https://github.com/OpenFlutter/flutter_ScreenUtil/blob/master/README.md)
13 13
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 ### 安装依赖: 24 ### 安装依赖:
25 25
26 安装之前请查看最新版本 26 安装之前请查看最新版本
27 -新版本如有问题请使用上一版 27 +新版本如有问题请使用以前的版本
28 ```yaml 28 ```yaml
29 dependencies: 29 dependencies:
30 flutter: 30 flutter:
@@ -51,12 +51,13 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -51,12 +51,13 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
51 | child | Widget | null | builder的一部分,其依赖项属性不使用该库 | 51 | child | Widget | null | builder的一部分,其依赖项属性不使用该库 |
52 | rebuildFactor | Function | *default* | 返回屏幕指标更改时是否重建。 | 52 | rebuildFactor | Function | *default* | 返回屏幕指标更改时是否重建。 |
53 53
  54 +注意:builder和child中必须填写至少一项
54 55
55 ### 初始化并设置适配尺寸及字体大小是否根据系统的“字体大小”辅助选项来进行缩放 56 ### 初始化并设置适配尺寸及字体大小是否根据系统的“字体大小”辅助选项来进行缩放
56 在使用之前请设置好设计稿的宽度和高度,传入设计稿的宽度和高度(单位随意,但在使用过程中必须保持一致) 57 在使用之前请设置好设计稿的宽度和高度,传入设计稿的宽度和高度(单位随意,但在使用过程中必须保持一致)
57 一定要进行初始化(只需设置一次),以保证在每次使用之前设置好了适配尺寸: 58 一定要进行初始化(只需设置一次),以保证在每次使用之前设置好了适配尺寸:
58 59
59 -#### 方式一: 60 +#### 方式一(您必须在app中使用它一次):
60 ```dart 61 ```dart
61 void main() => runApp(MyApp()); 62 void main() => runApp(MyApp());
62 63
@@ -65,39 +66,67 @@ class MyApp extends StatelessWidget { @@ -65,39 +66,67 @@ class MyApp extends StatelessWidget {
65 Widget build(BuildContext context) { 66 Widget build(BuildContext context) {
66 //填入设计稿中设备的屏幕尺寸,单位dp 67 //填入设计稿中设备的屏幕尺寸,单位dp
67 return ScreenUtilInit( 68 return ScreenUtilInit(
68 - designSize: Size(360, 690), 69 + designSize: const Size(360, 690),
69 minTextAdapt: true, 70 minTextAdapt: true,
70 splitScreenMode: true, 71 splitScreenMode: true,
71 - builder: () =>  
72 - MaterialApp(  
73 - //... other code  
74 - builder: (context, widget) {  
75 - //add this line  
76 - ScreenUtil.setContext(context);  
77 - return MediaQuery(  
78 - //Setting font does not change with system font size  
79 - data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),  
80 - child: widget!,  
81 - );  
82 - },  
83 - theme: ThemeData(  
84 - textTheme: TextTheme(  
85 - //要支持下面这个需要使用第一种初始化方式  
86 - button: TextStyle(fontSize: 45.sp)  
87 - ),  
88 - ), 72 + builder: (context , child) {
  73 + return MaterialApp(
  74 + debugShowCheckedModeBanner: false,
  75 + title: 'First Method',
  76 + // You can use the library anywhere in the app even in theme
  77 + theme: ThemeData(
  78 + primarySwatch: Colors.blue,
  79 + textTheme: Typography.englishLike2018.apply(fontSizeFactor: 1.sp),
89 ), 80 ),
  81 + home: child,
  82 + );
  83 + },
  84 + child: const HomePage(title: 'First Method'),
90 ); 85 );
91 } 86 }
92 } 87 }
93 ``` 88 ```
94 89
95 -#### 方式二: 不支持在MaterialApp的theme的textTheme中使用字体适配 90 +#### 方式二: 你需要一个技巧来支持文字自适应主题
96 91
97 -**如非必要,建议使用第二种**  
98 -**混合开发使用第二种方式**  
99 -**ScreenUtil.init只需在home或者根路由(即第一个flutter页面)中调用一次即可。** 92 +**混合开发使用方式二**
  93 +
  94 +不支持这样做:
  95 +```dart
  96 +MaterialApp(
  97 + ...
  98 + //如果你想这样做,你应该选择方式一
  99 + theme: ThemeData(
  100 + textTheme: TextTheme(
  101 + button: TextStyle(fontSize: 45.sp)
  102 + ),
  103 + ),
  104 +)
  105 +```
  106 +
  107 +正确的方法应当是这样:
  108 +```dart
  109 +void main() async {
  110 + // Add this line
  111 + await ScreenUtil.ensureScreenSize();
  112 + runApp(MyApp());
  113 +}
  114 +...
  115 +MaterialApp(
  116 + ...
  117 + builder: (ctx, child) {
  118 + ScreenUtil.init(ctx);
  119 + return Theme(
  120 + data: ThemeData(
  121 + primarySwatch: Colors.blue,
  122 + textTheme: TextTheme(bodyText2: TextStyle(fontSize: 30.sp)),
  123 + ),
  124 + child: HomePage(title: 'FlutterScreenUtil Demo'),
  125 + );
  126 + },
  127 +)
100 ``` 128 ```
  129 +```dart
101 class MyApp extends StatelessWidget { 130 class MyApp extends StatelessWidget {
102 @override 131 @override
103 Widget build(BuildContext context) { 132 Widget build(BuildContext context) {
@@ -125,15 +154,8 @@ class _HomePageState extends State<HomePage> { @@ -125,15 +154,8 @@ class _HomePageState extends State<HomePage> {
125 @override 154 @override
126 Widget build(BuildContext context) { 155 Widget build(BuildContext context) {
127 //设置尺寸(填写设计中设备的屏幕尺寸)如果设计基于360dp * 690dp的屏幕 156 //设置尺寸(填写设计中设备的屏幕尺寸)如果设计基于360dp * 690dp的屏幕
128 - ScreenUtil.init(  
129 - BoxConstraints(  
130 - maxWidth: MediaQuery.of(context).size.width,  
131 - maxHeight: MediaQuery.of(context).size.height),  
132 - designSize: Size(360, 690),  
133 - context: context,  
134 - minTextAdapt: true,  
135 - orientation: Orientation.portrait);  
136 - return Scaffold(); 157 + ScreenUtil.init(context, designSize: const Size(360, 690));
  158 + ...
137 } 159 }
138 } 160 }
139 ``` 161 ```
@@ -143,15 +165,15 @@ class _HomePageState extends State<HomePage> { @@ -143,15 +165,15 @@ class _HomePageState extends State<HomePage> {
143 ### API 165 ### API
144 #### 传入设计稿的dp尺寸 166 #### 传入设计稿的dp尺寸
145 ```dart 167 ```dart
146 - ScreenUtil().setWidth(540) (sdk>=2.6 : 540.w) //根据屏幕宽度适配尺寸  
147 - ScreenUtil().setHeight(200) (sdk>=2.6 : 200.h) //根据屏幕高度适配尺寸(一般根据宽度适配即可)  
148 - ScreenUtil().radius(200) (sdk>=2.6 : 200.r) //根据宽度或高度中的较小者进行调整  
149 - ScreenUtil().setSp(24) (sdk>=2.6 : 24.sp) //适配字体 168 + ScreenUtil().setWidth(540) (dart sdk>=2.6 : 540.w) //根据屏幕宽度适配尺寸
  169 + ScreenUtil().setHeight(200) (dart sdk>=2.6 : 200.h) //根据屏幕高度适配尺寸(一般根据宽度适配即可)
  170 + ScreenUtil().radius(200) (dart sdk>=2.6 : 200.r) //根据宽度或高度中的较小者进行调整
  171 + ScreenUtil().setSp(24) (dart sdk>=2.6 : 24.sp) //适配字体
150 12.sm // 取12和12.sp中的最小值 172 12.sm // 取12和12.sp中的最小值
151 173
152 ScreenUtil.pixelRatio //设备的像素密度 174 ScreenUtil.pixelRatio //设备的像素密度
153 - ScreenUtil.screenWidth (sdk>=2.6 : 1.sw) //设备宽度  
154 - ScreenUtil.screenHeight (sdk>=2.6 : 1.sh) //设备高度 175 + ScreenUtil.screenWidth (dart sdk>=2.6 : 1.sw) //设备宽度
  176 + ScreenUtil.screenHeight (dart sdk>=2.6 : 1.sh) //设备高度
155 ScreenUtil.bottomBarHeight //底部安全区距离,适用于全面屏下面有按键的 177 ScreenUtil.bottomBarHeight //底部安全区距离,适用于全面屏下面有按键的
156 ScreenUtil.statusBarHeight //状态栏高度 刘海屏会更高 178 ScreenUtil.statusBarHeight //状态栏高度 刘海屏会更高
157 ScreenUtil.textScaleFactor //系统字体缩放比例 179 ScreenUtil.textScaleFactor //系统字体缩放比例
@@ -165,7 +187,7 @@ class _HomePageState extends State<HomePage> { @@ -165,7 +187,7 @@ class _HomePageState extends State<HomePage> {
165 0.5.sh //屏幕高度的50% 187 0.5.sh //屏幕高度的50%
166 20.setVerticalSpacing // SizedBox(height: 20 * scaleHeight) 188 20.setVerticalSpacing // SizedBox(height: 20 * scaleHeight)
167 20.horizontalSpace // SizedBox(height: 20 * scaleWidth) 189 20.horizontalSpace // SizedBox(height: 20 * scaleWidth)
168 - const RPadding.all(8) // Padding.all(8.r) - take advantage of const key word 190 + const RPadding.all(8) // Padding.all(8.r) - 获取到const的优点
169 REdgeInsts.all(8) // EdgeInsets.all(8.r) 191 REdgeInsts.all(8) // EdgeInsets.all(8.r)
170 EdgeInsets.only(left:8,right:8).r // EdgeInsets.only(left:8.r,right:8.r). 192 EdgeInsets.only(left:8,right:8).r // EdgeInsets.only(left:8.r,right:8.r).
171 193
@@ -180,85 +202,96 @@ class _HomePageState extends State<HomePage> { @@ -180,85 +202,96 @@ class _HomePageState extends State<HomePage> {
180 202
181 根据屏幕高度适配 `height: ScreenUtil().setHeight(200)`, 一般来说,控件高度也根据宽度进行适配 203 根据屏幕高度适配 `height: ScreenUtil().setHeight(200)`, 一般来说,控件高度也根据宽度进行适配
182 204
183 -一般来说,50.w!=50.h 205 +如果您的 dart sdk>=2.6,则可以使用一些特殊的函数:
  206 +
  207 +例子:
  208 +
  209 +你不应当这样做:
  210 +```dart
  211 +Container(
  212 + width: ScreenUtil().setWidth(50),
  213 + height:ScreenUtil().setHeight(200),
  214 +)
  215 +```
  216 +正确的方法应当是这样使用:
  217 +```dart
  218 +Container(
  219 + width: 50.w,
  220 + height:200.h
  221 +)
  222 +```
184 223
185 -**注意** 224 +`注意`
186 225
187 高度也根据setWidth来做适配可以保证不变形(当你想要一个正方形的时候) 226 高度也根据setWidth来做适配可以保证不变形(当你想要一个正方形的时候)
188 227
189 setHeight方法主要是在高度上进行适配, 在你想控制UI上一屏的高度与实际中显示一样时使用. 228 setHeight方法主要是在高度上进行适配, 在你想控制UI上一屏的高度与实际中显示一样时使用.
190 229
  230 +一般来说,50.w!=50.h
  231 +
191 例如: 232 例如:
192 233
193 ```dart 234 ```dart
194 -//UI可能显示长方形: 235 +//如果你想显示一个矩形:
195 Container( 236 Container(
196 - width: 375.w,  
197 - height: 375.h,  
198 - ),  
199 -  
200 -//如果你想显示一个正方形: 237 + width: 375.w,
  238 + height: 375.h,
  239 +),
  240 +
  241 +//如果你想基于宽显示一个正方形:
201 Container( 242 Container(
202 - width: 300.r,  
203 - height: 300.r,  
204 - ),  
205 -``` 243 + width: 300.w,
  244 + height: 300.w,
  245 +),
206 246
207 -如果你的dart sdk>=2.6,可以使用扩展函数:  
208 -example:  
209 -不用这个:  
210 -```dart 247 +//如果你想基于高显示一个正方形:
211 Container( 248 Container(
212 -width: ScreenUtil().setWidth(50),  
213 -height:ScreenUtil().setHeight(200),  
214 -)  
215 -```  
216 -而是用这个:  
217 -```dart 249 + width: 300.h,
  250 + height: 300.h,
  251 +),
  252 +
  253 +//如果你想基于高或宽中的较小值显示一个正方形:
218 Container( 254 Container(
219 -width: 50.w,  
220 -height:200.h  
221 -) 255 + width: 300.r,
  256 + height: 300.r,
  257 +),
222 ``` 258 ```
223 259
224 -#### 适配字体:  
225 -传入设计稿的字体大小: 260 +**适配字体**
226 261
227 -```dart  
228 -//传入字体大小(单位和初始化时的单位保持一致)  
229 -ScreenUtil().setSp(28)  
230 -  
231 -28.sp (dart sdk>=2.6)  
232 -  
233 -//for example: 262 +```dart
  263 +//输入字体大小(单位与初始化时的单位相同)
  264 +ScreenUtil().setSp(28)
  265 +28.sp
234 266
  267 +//例子:
235 Column( 268 Column(
236 - crossAxisAlignment: CrossAxisAlignment.start,  
237 - children: <Widget>[  
238 - Text(  
239 - '我的文字大小在设计稿上是16dp,因为设置了`textScaleFactor`,所以不会随着系统的文字缩放比例变化',  
240 - style: TextStyle(  
241 - color: Colors.black,  
242 - fontSize: 16.sp,  
243 - ),  
244 - textScaleFactor: 1.0,  
245 - ),  
246 - Text(  
247 - '我的文字大小在设计稿上是16dp,会随着系统的文字缩放比例变化',  
248 - style: TextStyle(  
249 - color: Colors.black,  
250 - fontSize: 16.sp,  
251 - ),  
252 - ),  
253 - ],  
254 - ) 269 + crossAxisAlignment: CrossAxisAlignment.start,
  270 + children: <Widget>[
  271 + Text(
  272 + '16sp, 因为设置了`textScaleFactor`,不会随系统变化.',
  273 + style: TextStyle(
  274 + color: Colors.black,
  275 + fontSize: 16.sp,
  276 + ),
  277 + textScaleFactor: 1.0,
  278 + ),
  279 + Text(
  280 + '16sp,如果未设置,我的字体大小将随系统而变化.',
  281 + style: TextStyle(
  282 + color: Colors.black,
  283 + fontSize: 16.sp,
  284 + ),
  285 + ),
  286 + ],
  287 +)
255 ``` 288 ```
256 289
257 #### 设置字体不随系统字体大小进行改变 290 #### 设置字体不随系统字体大小进行改变
258 291
259 APP全局: 292 APP全局:
260 ```dart 293 ```dart
261 - MaterialApp( 294 + MaterialApp(
262 debugShowCheckedModeBanner: false, 295 debugShowCheckedModeBanner: false,
263 title: 'Flutter_ScreenUtil', 296 title: 'Flutter_ScreenUtil',
264 theme: ThemeData( 297 theme: ThemeData(
@@ -279,12 +312,23 @@ APP全局: @@ -279,12 +312,23 @@ APP全局:
279 Text("text", textScaleFactor: 1.0) 312 Text("text", textScaleFactor: 1.0)
280 ``` 313 ```
281 314
282 -[widget test](https://github.com/OpenFlutter/flutter_screenutil/issues/115) 315 +指定的小部件:
  316 +```dart
  317 +MediaQuery(
  318 + // 如果这里context不可用,你可以新建一个 [Builder] 将 [MediaQuery] 放入其中
  319 + data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
  320 + child: AnyWidget(),
  321 +)
  322 +```
  323 +
  324 +[小部件测试](https://github.com/OpenFlutter/flutter_screenutil/issues/115)
283 325
284 ### 使用示例: 326 ### 使用示例:
285 327
286 -[example demo](https://github.com/OpenFlutter/flutter_ScreenUtil/blob/master/example/lib/main_zh.dart)  
287 - 328 +[示例演示](https://github.com/OpenFlutter/flutter_ScreenUtil/blob/master/example/lib/main_zh.dart)
  329 +
  330 +要使用第二种方法,请运行:`flutter run --dart-define=method=2`
  331 +
288 效果: 332 效果:
289 333
290 ![手机效果](demo_zh.png) 334 ![手机效果](demo_zh.png)