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),
      ),
    );
  }
}
1 回复

更多关于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 来安装依赖。

基本使用

  1. 初始化 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: 设计稿的尺寸,通常为 360x690375x812 等。
    • minTextAdapt: 是否自动适配字体大小。
    • splitScreenMode: 是否支持分屏模式。
  2. 使用 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): 将设计稿中的字体大小转换为实际屏幕的字体大小。
  3. 使用 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, // 使用扩展方法设置字体大小
                  ),
                ),
              ],
            ),
          ),
        );
      }
    }
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!