Flutter屏幕尺寸适配插件size_util的使用
Flutter屏幕尺寸适配插件size_util的使用
在Flutter开发中,屏幕尺寸适配是一个非常重要的问题。size_util
是一个用于将设计稿(如 Figma)中的尺寸转换为 Flutter 应用实际尺寸的工具库。它可以帮助开发者快速实现跨设备的适配。
特性
- 扩展工具:提供了高度和字体大小的适配功能。
- 基于设计稿:可以根据设计稿中的尺寸动态调整应用界面。
使用方法
1. 添加依赖
在 pubspec.yaml
文件中添加 size_util
依赖:
dependencies:
size_util: ^0.2.0
然后运行以下命令以更新依赖:
flutter pub get
2. 初始化插件
在应用启动时初始化 size_util
。通常可以在 main.dart
中完成初始化:
import 'package:flutter/material.dart';
import 'package:size_util/size_util.dart';
void main() {
// 初始化 size_util,传入设计稿的宽度和高度
SizeUtil.init(widthDesign: 375, heightDesign: 812);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
注意:
- 设计稿的宽度和高度通常是根据 Figma 文件中的基准尺寸设置的。
- 如果你的设计稿是基于 iPhone 6/7/8(375x812),可以直接使用默认值。
3. 使用适配工具
在需要适配的地方,使用 .u
扩展方法来获取适配后的尺寸。例如:
字体大小适配
Text(
'Hello World',
style: TextStyle(fontSize: 16.u), // 将设计稿中的 16px 转换为适配后的尺寸
)
宽度和高度适配
Container(
width: 100.u, // 将设计稿中的 100px 转换为适配后的宽度
height: 50.u, // 将设计稿中的 50px 转换为适配后的高度
color: Colors.blue,
)
边距适配
Padding(
padding: EdgeInsets.all(10.u), // 将设计稿中的 10px 转换为适配后的边距
child: Text('Padding Example'),
)
4. 完整示例
以下是一个完整的示例代码,展示了如何使用 size_util
进行屏幕适配:
import 'package:flutter/material.dart';
import 'package:size_util/size_util.dart';
void main() {
// 初始化 size_util,传入设计稿的宽度和高度
SizeUtil.init(widthDesign: 375, heightDesign: 812);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Size Util 示例'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// 使用适配后的字体大小
Text(
'字体大小适配',
style: TextStyle(fontSize: 16.u),
),
SizedBox(height: 20.u), // 垂直间距适配
// 使用适配后的宽度和高度
Container(
width: 100.u,
height: 50.u,
color: Colors.blue,
),
SizedBox(height: 20.u), // 垂直间距适配
// 使用适配后的边距
Padding(
padding: EdgeInsets.all(10.u),
child: Text('Padding 示例'),
),
],
),
),
);
}
}
更多关于Flutter屏幕尺寸适配插件size_util的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter屏幕尺寸适配插件size_util的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
size_util
是一个用于 Flutter 的屏幕尺寸适配插件,它可以帮助开发者在不同屏幕尺寸的设备上实现 UI 的自适应布局。通过 size_util
,你可以根据屏幕的宽度和高度来动态调整 UI 元素的大小,从而确保应用在各种设备上都能有良好的显示效果。
安装 size_util
首先,你需要在 pubspec.yaml
文件中添加 size_util
依赖:
dependencies:
flutter:
sdk: flutter
size_util: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
使用 size_util
1. 初始化 SizeUtil
在使用 size_util
之前,你需要在应用的入口处(通常是 main.dart
文件)初始化 SizeUtil
。你可以通过 SizeUtil.init()
方法来设置设计稿的尺寸(通常是 UI 设计师提供的设计稿尺寸)。
import 'package:flutter/material.dart';
import 'package:size_util/size_util.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
// 初始化 SizeUtil,设置设计稿的宽度和高度
SizeUtil.init(
designSize: Size(375, 812), // 设计稿尺寸,例如 iPhone X 的尺寸
allowFontScaling: false, // 是否允许字体根据系统设置缩放
);
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
2. 使用 SizeUtil
进行尺寸适配
在 SizeUtil
初始化之后,你可以使用 SizeUtil
提供的方法来动态调整 UI 元素的尺寸。
SizeUtil.setWidth(double width)
:根据屏幕宽度适配宽度。SizeUtil.setHeight(double height)
:根据屏幕高度适配高度。SizeUtil.setSp(double fontSize)
:根据屏幕宽度适配字体大小。SizeUtil.radius(double radius)
:根据屏幕宽度适配圆角半径。
import 'package:flutter/material.dart';
import 'package:size_util/size_util.dart';
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SizeUtil Example'),
),
body: Center(
child: Container(
width: SizeUtil.setWidth(200), // 根据屏幕宽度适配宽度
height: SizeUtil.setHeight(100), // 根据屏幕高度适配高度
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(SizeUtil.radius(10)), // 根据屏幕宽度适配圆角半径
),
child: Center(
child: Text(
'Hello, SizeUtil!',
style: TextStyle(
fontSize: SizeUtil.setSp(16), // 根据屏幕宽度适配字体大小
color: Colors.white,
),
),
),
),
),
);
}
}