Flutter屏幕适配与尺寸管理插件flutter_sizer的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter屏幕适配与尺寸管理插件flutter_sizer的使用

Flutter Sizer 是一个用于实现响应式布局的工具,它提供了辅助小部件和扩展方法来帮助开发者根据设备的不同调整UI元素的大小。本文将详细介绍如何安装、配置以及使用该插件,并提供完整的示例代码。

目录

安装

首先,在pubspec.yaml文件中添加依赖:

dependencies:
  flutter_sizer: ^1.0.4

然后执行flutter pub get命令以下载并安装插件。

参数

以下是flutter_sizer提供的主要参数及其功能:

  • Adaptive.h() - 根据设备返回计算后的高度。
  • Adaptive.w() - 根据设备返回计算后的宽度。
  • Adaptive.dp() - 根据设备返回计算后的dp单位(已取代.sp)。
  • .h, .w, .dp - 分别对应上述方法的简写形式。
  • Device.boxConstraints - 返回设备的BoxConstraints信息。
  • Device.orientation - 返回屏幕方向(横屏或竖屏)。
  • Device.screenType - 返回屏幕类型(手机或平板)。
  • Device.devicePixelRatio - 返回设备像素比,默认为1.0。

使用说明

导入包

确保在Dart文件顶部正确导入了flutter_sizer库:

import 'package:flutter_sizer/flutter_sizer.dart';

包裹MaterialApp

为了使整个应用程序都能使用flutter_sizer的功能,你需要用FlutterSizer包裹你的MaterialApp

FlutterSizer(
  builder: (context, orientation, screenType) {
    return MaterialApp();
  }
)

设置Widget大小

你可以通过调用.w().h() 方法轻松地根据屏幕比例设置容器的宽高:

Container(
  width: Adaptive.w(20), // 占屏幕宽度的20%
  height: 30.5.h         // 占屏幕高度的30.5%
)

设置字体大小

同样地,你也可以利用.dp()来创建自适应的文本样式:

Text(
  'Flutter Sizer',
  style: TextStyle(fontSize: 15.dp),
)

处理不同方向

如果需要根据屏幕方向调整界面布局,可以检查Device.orientation属性:

Device.orientation == Orientation.portrait
  ? Container(
      width: 100.w,
      height: 20.5.h,
   )
  : Container(
      width: 100.w,
      height: 12.5.h,
   )

针对不同设备类型

对于想要区分移动设备和平板电脑的设计,可以借助Device.screenType进行判断:

Device.screenType == ScreenType.tablet
  ? Container(
      width: 100.w,
      height: 20.5.h,
   )
  : Container(
      width: 100.w,
      height: 12.5.h,
   )

注意事项

由于VSCode和Android Studio中的自动导入功能不支持Dart扩展方法,因此当你尝试使用类似10.h这样的语法时,可能不会出现自动提示。此时可以通过先输入Device关键字触发正确的自动导入建议。

社区支持

如果你有任何疑问或者发现了问题,请随时前往GitHub Issues提交反馈;同时也欢迎贡献者们提交Pull Request来改进这个项目。

示例Demo

下面是一个完整的demo例子,展示了如何结合以上所有特性创建一个简单的Flutter应用:

import 'package:flutter/material.dart';
import 'package:flutter_sizer/flutter_sizer.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FlutterSizer(
      builder: (context, orientation, screenType) {
        return MaterialApp(
          title: 'Flutter Sizer Example',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: Home(),
        );
      },
    );
  }
}

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Container(
              height: Adaptive.h(12.5), // or 12.5.h
              width: 50.w, // or Adaptive.w(50)
              color: Colors.black,
            ),
            Text(
              "Resolution is -> ${100.0.w}x${100.0.h}",
            ),
            Text(
              "This text is responsive 12dp -> ${12.0.dp}",
              style: TextStyle(fontSize: 12.0.dp),
            ),
            Text(
              "This text is responsive 24dp -> ${24.0.dp}",
              style: TextStyle(fontSize: 24.0.dp),
            ),
            Device.orientation == Orientation.portrait
                ? Text("My Orientation is Portrait")
                : Text("My Orientation is Landscape"),
            Device.screenType == ScreenType.tablet
                ? Text("My Screen's Type is a Tablet")
                : Text("My Screen's Type is a Phone")
          ],
        ),
      ),
    );
  }
}

通过这段代码,你可以看到如何使用flutter_sizer插件来创建一个能够自动适应各种屏幕尺寸的应用程序。希望这篇文档对你有所帮助!


更多关于Flutter屏幕适配与尺寸管理插件flutter_sizer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter屏幕适配与尺寸管理插件flutter_sizer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter屏幕适配与尺寸管理插件flutter_sizer的使用,以下是一个简单的代码案例来展示如何利用这个插件进行屏幕适配。

首先,确保你已经在pubspec.yaml文件中添加了flutter_sizer依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_sizer: ^x.x.x  # 请替换为最新版本号

然后,运行flutter pub get来安装依赖。

接下来,我们可以编写一个简单的Flutter应用来展示如何使用flutter_sizer进行屏幕适配。flutter_sizer主要提供了两个重要的类:ResponsiveBuilderScreenUtilInit,以及相关的尺寸单位(如w, h, sp等)。

以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:flutter_sizer/flutter_sizer.dart';

void main() {
  // 初始化ScreenUtil
  runApp(ScreenUtilInit(
    designSize: Size(360, 690), // 设计稿基准尺寸
    builder: () => MyApp(),
  ));
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Sizer Example'),
        ),
        body: SafeArea(
          child: ResponsiveBuilder(
            builder: (context, sizingInformation) {
              return Column(
                crossAxisAlignment: CrossAxisAlignment.center,
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  // 使用w(宽度单位)和h(高度单位)
                  Container(
                    width: sizingInformation.screenWidth * 0.5w, // 占据屏幕宽度的一半
                    height: sizingInformation.screenHeight * 0.2h, // 占据屏幕高度的20%
                    color: Colors.blue,
                    child: Center(
                      child: Text(
                        '50% Width, 20% Height',
                        style: TextStyle(color: Colors.white),
                      ),
                    ),
                  ),
                  SizedBox(height: sizingInformation.screenHeight * 0.05h), // 垂直间距
                  // 使用sp(字体缩放单位)
                  Text(
                    'Responsive Text',
                    style: TextStyle(fontSize: 24.sp), // 根据屏幕大小自动缩放的字体大小
                  ),
                ],
              );
            },
          ),
        ),
      ),
    );
  }
}

在这个示例中:

  1. ScreenUtilInit用于初始化flutter_sizerScreenUtil类,并设置设计稿的基准尺寸。这里的designSize设置为Size(360, 690),你可以根据你自己的设计稿尺寸进行调整。

  2. ResponsiveBuilder是一个响应式构建器,它提供了一个sizingInformation对象,该对象包含了当前屏幕的宽度、高度等信息,以及相对于设计稿尺寸的缩放比例。

  3. 使用sizingInformation.screenWidth * 0.5wsizingInformation.screenHeight * 0.2h来设置容器的宽度和高度,这样可以确保容器在不同屏幕尺寸上保持相对一致的布局比例。

  4. 使用24.sp来设置文本的字体大小,这样字体大小会根据屏幕尺寸进行自动缩放,以保持文本的可读性。

通过这种方式,你可以很方便地实现Flutter应用的屏幕适配和尺寸管理。

回到顶部