Flutter尺寸获取插件size_helper的使用

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

Flutter尺寸获取插件 size_helper 的使用

size_helper 是一个用于开发响应式UI的Flutter插件,它提供了对基于当前屏幕大小的UI组件的更多控制。通过这个插件,你可以更轻松地管理不同设备和屏幕尺寸下的布局。

不推荐的做法

在没有使用 size_helper 之前,你可能会这样写代码:

@override
Widget build(BuildContext context) {
  final screenSize = MediaQuery.of(context).size;
  final screenHeight = screenSize.height;
  return Container(
    color: Colors.blue,
    margin: screenHeight < 300
        ? const EdgeInsets.all(4.0)
        : screenHeight < 1000
            ? screenHeight < 600
                ? const EdgeInsets.all(8.0)
                : const EdgeInsets.all(16.0)
            : screenHeight > 800
                ? const EdgeInsets.all(32.0)
                : const EdgeInsets.all(16.0),
    child: Text('Hello world'),
  );
}

这种方式不仅难以阅读,而且维护起来也很麻烦。幸运的是,size_helper 插件可以帮你解决这个问题。

如何使用 size_helper

1. 使用 help 方法

只需传递上下文并指定你需要的选项(任何数据类型),SizeHelper 就会为你处理剩下的部分。

方法结构

SizeHelper.of(context).help(
  mobileSmall: /*return whatever you want*/
)

// 或者

context.sizeHelper(
  mobileSmall: /*return whatever you want*/
)

示例 1

Container(
  margin: SizeHelper.of(context).help(
    mobileLarge: const EdgeInsets.all(8.0),
    tableNormal: const EdgeInsets.all(16.0),
    tabletExtraLarge: const EdgeInsets.all(24.0),
    desktopLarge: const EdgeInsets.all(32.0),
  )
)

示例 2

Container(
  width: SizeHelper.of(context).help(
    mobileLarge: 200.0,
    tableNormal: 240.0,
    tabletExtraLarge: 325.0,
    desktopLarge: 380.0,
  )
)

2. 使用 helpBuilder 方法

如果你需要访问当前屏幕的宽度、高度和方向,可以使用 helpBuilder 方法。

方法结构

SizeHelper.of(context).helpBuilder(
  mobileSmall: (screenInfo) => /* return whatever you want with help of screenInfo(width, height, orientation */
)

// 或者

context.sizeHelperBuilder(
  mobileSmall: (screenInfo) => /* return whatever you want with help of screenInfo(width, height, orientation */
)

示例 1

Scaffold(
  body: SizeHelper.of(context, printScreenInfo: true).helpBuilder(
    mobileLarge: (_) => Container(
      alignment: Alignment.center,
      color: Colors.green,
      child: Text('mobileLarge'),
    ),
    tabletSmall: (_) => Container(
      alignment: Alignment.center,
      color: Colors.teal,
      child: Text('tabletSmall'),
    ),
    tabletLarge: (_) => Container(
      alignment: Alignment.center,
      color: Colors.deepPurple,
      child: Text('tabletLarge'),
    ),
    desktopNormal: (screenInfo) => Container(
      alignment: Alignment.center,
      color: screenInfo.height > 850 ? Colors.orange : Colors.yellow,
      child: Text('desktopNormal'),
    ),
  ),
);

示例 2

Scaffold(
  body: context.sizeHelperBuilder(
    mobileExtraLarge: (_) => SingleChildScrollView(
      child: Column(
        children: [
          Text('text 1'),
          Text('text 2'),
          Text('text 3'),
        ],
      ),
    ),
    tabletLarge: (_) => SingleChildScrollView(
      scrollDirection: Axis.horizontal,
      child: Row(
        children: [
          Text('text 1'),
          Text('text 2'),
          Text('text 3'),
        ],
      ),
    ),
    desktopSmall: (_) => Wrap(
      children: [
        Text('text 1'),
        Text('text 2'),
        Text('text 3'),
      ],
    ),
  ),
)

完整示例 Demo

下面是一个完整的示例,展示了如何使用 size_helper 来创建响应式布局。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Home(),
    );
  }
}

class Home extends StatelessWidget {
  const Home({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return _buildExample1(context);
  }

  Widget _buildExample1(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Size Helper Example')),
      body: SizeHelper.of(context, printScreenInfo: true).helpBuilder(
        mobileNormal: (_) => Container(
          alignment: Alignment.center,
          color: Colors.greenAccent,
          child: Text('mobileNormal'),
        ),
        mobileLarge: (_) => Container(
          alignment: Alignment.center,
          color: Colors.green,
          child: Text('mobileLarge'),
        ),
        mobileExtraLarge: (_) => Container(
          alignment: Alignment.center,
          color: Colors.cyanAccent,
          child: Text('mobileExtraLarge'),
        ),
        tabletSmall: (_) => Container(
          alignment: Alignment.center,
          color: Colors.teal,
          child: Text('tabletSmall'),
        ),
        tabletNormal: (_) => Container(
          alignment: Alignment.center,
          color: Colors.blue,
          child: Text('tabletNormal'),
        ),
        tabletLarge: (_) => Container(
          alignment: Alignment.center,
          color: Colors.deepPurple,
          child: Text('tabletLarge'),
        ),
        tabletExtraLarge: (_) => Container(
          alignment: Alignment.center,
          color: Colors.pink,
          child: Text('tabletExtraLarge'),
        ),
        desktopSmall: (_) => Container(
          alignment: Alignment.center,
          color: Colors.red,
          child: Text('desktopSmall'),
        ),
        desktopNormal: (screenInfo) => Container(
          alignment: Alignment.center,
          color: screenInfo.height > 850 ? Colors.orange : Colors.yellow,
          child: Text('desktopNormal'),
        ),
      ),
    );
  }
}

总结

size_helper 插件提供了一种简单且有效的方式来处理不同屏幕尺寸下的UI布局问题。通过使用 helphelpBuilder 方法,你可以轻松实现响应式设计,并且代码更加简洁易读。


更多关于Flutter尺寸获取插件size_helper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter尺寸获取插件size_helper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter中使用size_helper插件来获取设备屏幕尺寸和屏幕方向变化的示例代码。请注意,size_helper并非Flutter官方插件,因此在实际项目中,你可能需要确保该插件的可用性和最新性。这里假设你已经通过pubspec.yaml文件添加了size_helper依赖并运行了flutter pub get

首先,确保你的pubspec.yaml文件中包含以下依赖项(如果size_helper存在的话,实际插件名称和版本可能会有所不同,请参考其官方文档):

dependencies:
  flutter:
    sdk: flutter
  size_helper: ^最新版本号  # 替换为实际版本号

然后,你可以按照以下步骤在Flutter项目中使用size_helper插件:

  1. 导入插件

在你的Dart文件中导入size_helper插件:

import 'package:size_helper/size_helper.dart';
  1. 获取屏幕尺寸

你可以使用Screen类来获取屏幕尺寸和方向信息。下面是一个示例,展示如何在Flutter应用中获取并使用这些信息:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Size Helper Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    // 使用Screen类获取屏幕尺寸和方向信息
    final screen = Screen(context);
    final double screenWidth = screen.width;
    final double screenHeight = screen.height;
    final Orientation screenOrientation = screen.orientation;

    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Size Helper Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Screen Width: $screenWidth',
              style: TextStyle(fontSize: 20),
            ),
            Text(
              'Screen Height: $screenHeight',
              style: TextStyle(fontSize: 20),
            ),
            Text(
              'Screen Orientation: ${screenOrientation == Orientation.portrait ? 'Portrait' : 'Landscape'}',
              style: TextStyle(fontSize: 20),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它使用Screen类来获取当前设备的屏幕宽度、高度和方向,并在界面上显示这些信息。

注意:由于size_helper插件并非官方插件,上述代码中的类和方法调用可能需要根据实际插件的API进行调整。如果size_helper插件不存在或API有所变化,你可以考虑使用Flutter自带的MediaQuery类来获取屏幕尺寸和方向信息,如下所示:

final size = MediaQuery.of(context).size;
final double screenWidth = size.width;
final double screenHeight = size.height;
final Orientation screenOrientation = MediaQuery.of(context).orientation;

这段代码同样可以实现获取屏幕尺寸和方向的功能,且不需要依赖第三方插件。

回到顶部