Flutter屏幕适配插件easy_screenutil的使用
easy_screenutil
A flutter plugin for adapting screen and font size. Let your UI display a reasonable layout on different screen sizes!
注意: 这个插件简单且开放于未来的改进。欢迎您的反馈。
使用方法
1. 添加依赖
在安装之前,请检查最新版本。如果新版本有问题,请使用旧版本。
dependencies:
flutter:
sdk: flutter
# 添加 easy_screenutil
easy_screenutil: ^{最新版本}
2. 在Dart代码中添加以下导入
import 'package:easy_screenutil/easy_screenutil.dart';
初始化方式一:通过 ScreenUtil
void main() {
// 初始化屏幕适配,设置设计宽度为375(通常基于iPhone 6/7/8的设计尺寸)
ScreenUtil.ensureInitialized(designWidth: 375);
runApp(const MyApp());
}
初始化方式二:通过 ScreenUtil.builder
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
home: MyHomePage(title: 'Flutter Demo Home Page'),
// 初始化屏幕适配
builder: ScreenUtil.builder,
);
}
完整示例代码
以下是一个完整的示例代码,展示如何使用 easy_screenutil
插件进行屏幕适配。
import 'package:flutter/material.dart';
import 'package:easy_screenutil/easy_screenutil.dart';
void main() {
// 初始化屏幕适配,设置设计宽度为375
ScreenUtil.ensureInitialized(designWidth: 375);
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
home: MyHomePage(title: 'Flutter Demo Home Page'),
// 初始化屏幕适配
builder: ScreenUtil.builder,
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox(height: 10),
Row(
children: [
Expanded(
child: Container(
height: 50,
alignment: Alignment.center,
color: Colors.yellow,
child: const Text('1/3屏宽'),
),
),
Expanded(
child: Container(
height: 50,
alignment: Alignment.center,
color: Colors.green,
child: const Text('1/3屏宽'),
),
),
Expanded(
child: Container(
height: 50,
alignment: Alignment.center,
color: Colors.blue,
child: const Text('1/3屏宽'),
),
)
],
),
Container(
height: 50,
width: 125,
alignment: Alignment.center,
color: Colors.pink,
child: const Text('125宽度'),
),
Container(
height: 50,
width: 375,
alignment: Alignment.center,
color: Colors.orange,
child: const Text('375宽度'),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
更多关于Flutter屏幕适配插件easy_screenutil的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
easy_screenutil
是一个用于 Flutter 的屏幕适配插件,它可以帮助开发者轻松地实现不同屏幕尺寸的适配。通过 easy_screenutil
,你可以将设计稿的尺寸直接转换为实际屏幕的尺寸,从而确保 UI 在不同设备上保持一致。
安装
首先,你需要在 pubspec.yaml
文件中添加 easy_screenutil
依赖:
dependencies:
flutter:
sdk: flutter
easy_screenutil: ^latest_version
然后运行 flutter pub get
来安装依赖。
基本使用
-
初始化
ScreenUtil
在你的
main.dart
文件中,初始化ScreenUtil
。通常,你可以在main
函数中进行初始化:import 'package:easy_screenutil/easy_screenutil.dart'; import 'package:flutter/material.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await ScreenUtil.ensureScreenSize(); runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return ScreenUtilInit( designSize: const Size(360, 690), // 设计稿的尺寸 minTextAdapt: true, splitScreenMode: true, builder: (context, child) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(), ); }, ); } }
designSize
: 设计稿的尺寸,通常为360x690
或375x812
等。minTextAdapt
: 是否自动适配字体大小。splitScreenMode
: 是否支持分屏模式。
-
使用
ScreenUtil
进行适配在
Widget
中使用ScreenUtil
提供的工具方法来进行尺寸适配:class MyHomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Easy ScreenUtil Example'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Container( width: ScreenUtil().setWidth(100), // 设置宽度为设计稿中的100 height: ScreenUtil().setHeight(50), // 设置高度为设计稿中的50 color: Colors.blue, ), SizedBox(height: ScreenUtil().setHeight(20)), // 设置间距为设计稿中的20 Text( 'Hello, World!', style: TextStyle( fontSize: ScreenUtil().setSp(16), // 设置字体大小为设计稿中的16 ), ), ], ), ), ); } }
ScreenUtil().setWidth(width)
: 将设计稿中的宽度转换为实际屏幕的宽度。ScreenUtil().setHeight(height)
: 将设计稿中的高度转换为实际屏幕的高度。ScreenUtil().setSp(fontSize)
: 将设计稿中的字体大小转换为实际屏幕的字体大小。
-
使用
ScreenUtil
的扩展方法easy_screenutil
还提供了一些扩展方法,使得代码更加简洁:class MyHomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Easy ScreenUtil Example'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Container( width: 100.w, // 使用扩展方法设置宽度 height: 50.h, // 使用扩展方法设置高度 color: Colors.blue, ), SizedBox(height: 20.h), // 使用扩展方法设置间距 Text( 'Hello, World!', style: TextStyle( fontSize: 16.sp, // 使用扩展方法设置字体大小 ), ), ], ), ), ); } }