Flutter响应式布局插件flutter_responsivity_widget的使用

Flutter响应式布局插件flutter_responsivity_widget的使用

by: Eliezer Antonio

您可以获取完全适应屏幕大小的结果

正常

备注

大多数Flutter开发者在组件中添加固定大小,无论是文本、图像还是其他小部件。有时因为这样做,在不同尺寸的屏幕上我们最终会遇到溢出问题。有了这个包,每个组件都会根据不同的设备大小进行调整。尽管有其他方法来解决这个问题,但自动适应每个设备的正确大小可能会在用户体验方面更好,并且还有其他优点。

功能

  • ✅ 宽度百分比
  • ✅ 高度百分比
  • ✅ 对角线百分比
  • ✅ 检测平板电脑大小

支持的平台

  • Flutter Android
  • Flutter iOS
  • Flutter Web
  • Flutter Desktop

视图

安装

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

flutter_responsivity_widget: ^0.0.1

然后导入:

import 'package:flutter_responsivity_widget/flutter_responsivity_widget.dart';

如何使用

class ExamplePage extends StatelessWidget {
  const ExamplePage({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    final responsive = Responsive(context);
    return Scaffold(
      backgroundColor: Colors.white,
      body: Center(
        child: Image.asset(
          'assets/logo_jp.jpg',
          width: responsive.wp(100), // wp-宽度百分比
          height: responsive.hp(100), // hp-高度百分比
        ),
      ),
    );
  }
}

示例 - 使用图像

class ExamplePage extends StatelessWidget {
  const ExamplePage({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    final responsive = Responsive(context);
    return Scaffold(
      backgroundColor: Colors.white,
      body: Center(
        child: Image.asset(
          'assets/logo_jp.jpg',
          width: responsive.wp(100), // wp-宽度百分比
          height: responsive.hp(100), // hp-高度百分比
        ),
      ),
    );
  }
}

示例 - 使用文本

对于文本,建议使用对角线

class ExamplePage extends StatelessWidget {
  const ExamplePage({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    final responsive = Responsive(context);
    return Scaffold(
      backgroundColor: Colors.white,
      body: Center(
        child: Text(
          'Example',
          style: TextStyle(
            fontSize: responsive.dp(8), // dp-对角线百分比
          ),
        ),
      ),
    );
  }
}

上述示例结果

正常

示例 - 检测平板大小

如果您想为平板电脑和手机显示不同的内容

class ExamplePage extends StatelessWidget {
  const ExamplePage({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    final responsive = Responsive(context);
    final isTablet = responsive.isTablet;
    return Scaffold(
      backgroundColor: Colors.white,
      body: Center(
        child: isTablet
            ? Text(
                'iPad',
                style: TextStyle(
                  fontSize: responsive.dp(10), // 对角线百分比
                ),
              )
            : Text(
                'iPhone',
                style: TextStyle(
                  fontSize: responsive.dp(10), // 对角线百分比
                ),
              ),
      ),
    );
  }
}

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

1 回复

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


flutter_responsivity_widget 是一个用于简化 Flutter 应用响应式布局的插件。它可以帮助开发者根据屏幕尺寸、方向等条件动态调整 UI 布局。以下是如何使用 flutter_responsivity_widget 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_responsivity_widget: ^latest_version

然后运行 flutter pub get 来获取依赖。

2. 基本用法

flutter_responsivity_widget 提供了几个核心组件来帮助实现响应式布局,例如 ResponsiveWidgetResponsiveBuilder 等。

使用 ResponsiveWidget

ResponsiveWidget 是一个可以根据屏幕宽度或高度来调整子组件布局的组件。

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

class MyResponsiveWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Responsive Widget Example'),
      ),
      body: ResponsiveWidget(
        builder: (context, constraints, orientation) {
          if (constraints.maxWidth > 600) {
            return _buildWideLayout();
          } else {
            return _buildNormalLayout();
          }
        },
      ),
    );
  }

  Widget _buildWideLayout() {
    return Center(
      child: Text('Wide Layout'),
    );
  }

  Widget _buildNormalLayout() {
    return Center(
      child: Text('Normal Layout'),
    );
  }
}

在这个例子中,ResponsiveWidget 会根据屏幕宽度来决定显示 _buildWideLayout() 还是 _buildNormalLayout()

使用 ResponsiveBuilder

ResponsiveBuilder 是一个可以根据屏幕尺寸、方向等条件来动态构建 UI 的组件。

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

class MyResponsiveBuilder extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Responsive Builder Example'),
      ),
      body: ResponsiveBuilder(
        builder: (context, screenSize, orientation) {
          if (screenSize == ScreenSize.large) {
            return _buildLargeLayout();
          } else if (screenSize == ScreenSize.medium) {
            return _buildMediumLayout();
          } else {
            return _buildSmallLayout();
          }
        },
      ),
    );
  }

  Widget _buildLargeLayout() {
    return Center(
      child: Text('Large Layout'),
    );
  }

  Widget _buildMediumLayout() {
    return Center(
      child: Text('Medium Layout'),
    );
  }

  Widget _buildSmallLayout() {
    return Center(
      child: Text('Small Layout'),
    );
  }
}

在这个例子中,ResponsiveBuilder 会根据屏幕尺寸来决定显示 _buildLargeLayout()_buildMediumLayout() 还是 _buildSmallLayout()

3. 自定义响应式逻辑

你可以根据需要自定义响应式逻辑。例如,你可以根据屏幕的宽高比、设备类型(手机、平板、桌面)等条件来调整布局。

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

class MyCustomResponsiveWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Custom Responsive Widget Example'),
      ),
      body: ResponsiveWidget(
        builder: (context, constraints, orientation) {
          if (constraints.maxWidth > constraints.maxHeight) {
            return _buildLandscapeLayout();
          } else {
            return _buildPortraitLayout();
          }
        },
      ),
    );
  }

  Widget _buildLandscapeLayout() {
    return Center(
      child: Text('Landscape Layout'),
    );
  }

  Widget _buildPortraitLayout() {
    return Center(
      child: Text('Portrait Layout'),
    );
  }
}
回到顶部