Flutter布局辅助插件widget_sizer的使用

Flutter布局辅助插件widget_sizer的使用

通过使用widget_sizer插件,您可以轻松创建令人惊叹且响应式的UI,确保在所有移动设备和平板电脑上都能提供完美的用户体验。

简介

widget_sizer 提供了一个全面的解决方案,用于创建能够无缝适应各种屏幕尺寸和设备类型的响应式UI。它包含根据屏幕尺寸按比例缩放UI元素的实用工具。

开始使用

安装

在您的 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  widget_sizer: ^1.0.0

导入到Dart代码中

在您的Dart代码中添加以下导入语句:

import 'package:widget_sizer/widget_sizer.dart';

使用

在应用程序的主小部件的 build 方法中调用 SizerConfig().init() 方法:

[@override](/user/override)
Widget build(BuildContext context) {
    // 初始化 SizeConfig
    SizerConfig().init(context);

    return MaterialApp(
      title: 'SizeConfig Demo',
      home: HomePage(),
    );
}

缩放双精度值

此包中的所有方法都返回一个 double 值,可以直接用于需要 double 值的小部件:

// 示例
Text("Size Matters",
  style: TextStyle(fontSize: SizerConfig.moderateScale(20)),
),

SizedBox(
  height: SizerConfig.verticalScale(30),
),

Container(
  width: SizeConfig.scale(30),
  height: SizerConfig.verticalScale(30),
),

缩放EdgeInsets

对于需要 EdgeInsetsGeometry 值的小部件,可以使用该方法作为 EdgeInsets 构造函数的一部分:

// 示例
Padding(
  padding: EdgeInsets.all(SizerConfig.scale(40)),
  child: Widget(),
)

方法

init(BuildContext context)

此方法使用当前设备的屏幕尺寸初始化 SizeConfig 类。在使用任何缩放方法之前必须调用此方法。(建议在 main.dart 文件中调用此方法,以便在整个应用程序中访问 SizeConfig

static double scale(double size)

根据屏幕宽度按比例缩放给定的大小。

static double verticalScale(double size)

根据屏幕高度按比例缩放给定的大小。

static double moderateScale(double size, [double factor = 0.5])

基于屏幕宽度对给定大小应用适度缩放。可选的 factor 参数允许您控制缩放的程度。

static double moderateVerticalScale(double size, [double factor = 0.5])

基于屏幕高度对给定大小应用适度缩放。可选的 factor 参数允许您控制缩放的程度。


完整示例Demo

以下是一个完整的示例,展示如何使用 widget_sizer 创建响应式UI:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    // 初始化 SizeConfig
    SizerConfig().init(context);

    return MaterialApp(
      title: 'SizeConfig Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("SizeConfig Demo"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              "Size Matters",
              style: TextStyle(
                fontSize: SizerConfig.moderateScale(20),
              ),
            ),
            SizedBox(height: SizerConfig.verticalScale(30)),
            Container(
              width: SizeConfig.scale(100),
              height: SizeConfig.verticalScale(100),
              color: Colors.blue,
            ),
            SizedBox(height: SizerConfig.verticalScale(20)),
            Padding(
              padding: EdgeInsets.all(SizerConfig.scale(20)),
              child: Text(
                "Padding Example",
                style: TextStyle(
                  fontSize: SizerConfig.moderateScale(16),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter布局辅助插件widget_sizer的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter布局辅助插件widget_sizer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


widget_sizer 是一个 Flutter 插件,用于帮助开发者在不同的屏幕尺寸和方向上更方便地调整和布局小部件。它提供了一些便捷的工具和方法,使得在响应式设计中处理布局变得更加轻松。

安装

首先,你需要在 pubspec.yaml 文件中添加 widget_sizer 依赖:

dependencies:
  flutter:
    sdk: flutter
  widget_sizer: ^2.0.0

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

基本用法

1. WidgetSizer 组件

WidgetSizer 是一个 InheritedWidget,它提供了当前设备的屏幕尺寸信息。你可以通过它来获取屏幕的宽度、高度、方向等信息。

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: WidgetSizer(
        builder: (context, orientation, screenType) {
          return Scaffold(
            appBar: AppBar(
              title: Text('WidgetSizer Example'),
            ),
            body: Center(
              child: Text(
                'Screen Width: ${WidgetSizerUtil.getScreenWidth(context)} \n'
                'Screen Height: ${WidgetSizerUtil.getScreenHeight(context)} \n'
                'Orientation: $orientation \n'
                'Screen Type: $screenType',
                textAlign: TextAlign.center,
              ),
            ),
          );
        },
      ),
    );
  }
}

2. WidgetSizerUtil 工具类

WidgetSizerUtil 提供了一些静态方法来获取屏幕的尺寸信息:

  • getScreenWidth(BuildContext context): 获取屏幕的宽度。
  • getScreenHeight(BuildContext context): 获取屏幕的高度。
  • getOrientation(BuildContext context): 获取屏幕的方向(Orientation.portraitOrientation.landscape)。
  • getScreenType(BuildContext context): 获取屏幕的类型(ScreenType.small, ScreenType.medium, ScreenType.large)。

3. 响应式布局

你可以根据屏幕的尺寸和方向来调整布局。例如:

class ResponsiveLayout extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final screenWidth = WidgetSizerUtil.getScreenWidth(context);
    final screenHeight = WidgetSizerUtil.getScreenHeight(context);
    final orientation = WidgetSizerUtil.getOrientation(context);

    if (orientation == Orientation.portrait) {
      return Column(
        children: [
          Container(
            width: screenWidth * 0.8,
            height: screenHeight * 0.3,
            color: Colors.blue,
          ),
          Container(
            width: screenWidth * 0.8,
            height: screenHeight * 0.3,
            color: Colors.green,
          ),
        ],
      );
    } else {
      return Row(
        children: [
          Container(
            width: screenWidth * 0.4,
            height: screenHeight * 0.8,
            color: Colors.blue,
          ),
          Container(
            width: screenWidth * 0.4,
            height: screenHeight * 0.8,
            color: Colors.green,
          ),
        ],
      );
    }
  }
}

高级用法

1. 自定义屏幕类型

你可以通过 WidgetSizerscreenTypeBreakpoints 参数来自定义屏幕类型的断点:

WidgetSizer(
  screenTypeBreakpoints: ScreenTypeBreakpoints(
    small: 600,
    medium: 900,
    large: 1200,
  ),
  builder: (context, orientation, screenType) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Custom Screen Type Example'),
      ),
      body: Center(
        child: Text(
          'Screen Type: $screenType',
          textAlign: TextAlign.center,
        ),
      ),
    );
  },
);

2. 使用 WidgetSizerof 方法

你可以通过 WidgetSizer.of(context) 来获取 WidgetSizer 的实例,从而访问屏幕尺寸和方向信息:

class MyWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final widgetSizer = WidgetSizer.of(context);
    final screenWidth = widgetSizer.screenWidth;
    final screenHeight = widgetSizer.screenHeight;
    final orientation = widgetSizer.orientation;

    return Container(
      width: screenWidth * 0.5,
      height: screenHeight * 0.5,
      color: Colors.red,
      child: Center(
        child: Text('Orientation: $orientation'),
      ),
    );
  }
}
回到顶部