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

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

开始使用

要启用响应式设计,可以将 GitsResponsive.builder 包裹在你的 MaterialApp 组件周围。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      builder: (context, child) => GitsResponsive.builder(
        breakpoints: const [
          GitsBreakpoint.mobile(),
          GitsBreakpoint.tablet(),
          GitsBreakpoint.desktop(),
        ],
        child: child,
      ),
      initialRoute: '/',
      // 在这里添加你的路由和其他 MaterialApp 配置。
    );
  }
}

断点设置

该插件提供了三种默认断点:

  • 移动设备:适合小屏幕,如手机。
  • 平板设备:适用于中等尺寸的屏幕,如平板电脑。
  • 桌面设备:为大屏幕设计,如台式机。

你还可以根据应用需求自定义这些断点。例如,你可以设置宽度和高度的设计值来适应不同的方向。

GitsResponsive.builder(
  breakpoints: const [
    GitsBreakpoint(start: 0, end: 599, widthDesign: 360, heightDesign: 800, target: GitsResponsiveTarget.mobile,),  // 自定义移动断点
    GitsBreakpoint(start: 600, end: 1199, widthDesign: 834, heightDesign: 1194, target: GitsResponsiveTarget.tablet,), // 自定义平板断点
    GitsBreakpoint(start: 1200, end: double.infinity, widthDesign: 1024, heightDesign: 1440, target: GitsResponsiveTarget.desktop,), // 自定义桌面断点
  ],
  child: child,
),

示例代码

下面是一个完整的示例代码,展示了如何使用 GitsResponsive.builder 来创建一个具有响应式布局的应用程序。

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: GitsResponsive.builder(
        breakpoints: const [
          GitsBreakpoint.mobile(),
          GitsBreakpoint.tablet(),
          GitsBreakpoint.desktop(),
        ],
        child: const MyHomePage(title: 'Flutter Demo Home Page'),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  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(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              '你已经按下了按钮多少次:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: '增加',
        child: const Icon(Icons.add),
      ),
    );
  }
}

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

1 回复

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


gits_responsive 是一个用于 Flutter 应用中的响应式布局插件,帮助开发者在不同屏幕尺寸和设备上更好地管理布局。它提供了一些工具和实用程序,使得创建响应式 UI 变得更加简单。

安装

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

dependencies:
  flutter:
    sdk: flutter
  gits_responsive: ^1.0.0  # 请检查最新版本

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

基本用法

gits_responsive 提供了一个 Responsive 类,你可以使用它来根据屏幕宽度、高度和方向来调整布局。

1. 导入包

import 'package:gits_responsive/gits_responsive.dart';

2. 使用 Responsive

你可以在 build 方法中使用 Responsive 来获取当前设备的屏幕信息,并根据这些信息调整布局。

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final responsive = Responsive(context);

    return Scaffold(
      appBar: AppBar(
        title: Text('Responsive Layout Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Screen Width: ${responsive.width}',
              style: TextStyle(fontSize: 20),
            ),
            Text(
              'Screen Height: ${responsive.height}',
              style: TextStyle(fontSize: 20),
            ),
            Text(
              'Orientation: ${responsive.orientation}',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            Container(
              width: responsive.width * 0.8, // 80% of screen width
              height: responsive.height * 0.2, // 20% of screen height
              color: Colors.blue,
              child: Center(
                child: Text(
                  'Responsive Container',
                  style: TextStyle(color: Colors.white, fontSize: 18),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

3. 响应式布局

你可以根据屏幕的宽度、高度和方向来调整布局。例如,你可以为不同的屏幕尺寸设置不同的布局:

Widget build(BuildContext context) {
  final responsive = Responsive(context);

  if (responsive.orientation == Orientation.portrait) {
    return PortraitLayout();
  } else {
    return LandscapeLayout();
  }
}

或者根据屏幕宽度来调整布局:

Widget build(BuildContext context) {
  final responsive = Responsive(context);

  if (responsive.width > 600) {
    return TabletLayout();
  } else {
    return MobileLayout();
  }
}

4. 响应式字体大小

你还可以使用 responsive 来调整字体大小,使其在不同设备上保持一致:

Text(
  'Responsive Text',
  style: TextStyle(fontSize: responsive.fontSize(20)),
),

responsive.fontSize(20) 会根据屏幕的宽度和高度自动调整字体大小。

高级用法

gits_responsive 还提供了更多的功能,例如:

  • Breakpoints: 你可以定义自定义的断点来更精细地控制布局。
  • Responsive Widgets: 提供了一些预定义的响应式小部件,如 ResponsiveRowResponsiveColumn

示例代码

以下是一个完整的示例,展示了如何使用 gits_responsive 创建一个简单的响应式布局:

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

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

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

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final responsive = Responsive(context);

    return Scaffold(
      appBar: AppBar(
        title: Text('Responsive Layout Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Screen Width: ${responsive.width}',
              style: TextStyle(fontSize: responsive.fontSize(20)),
            ),
            Text(
              'Screen Height: ${responsive.height}',
              style: TextStyle(fontSize: responsive.fontSize(20)),
            ),
            Text(
              'Orientation: ${responsive.orientation}',
              style: TextStyle(fontSize: responsive.fontSize(20)),
            ),
            SizedBox(height: 20),
            Container(
              width: responsive.width * 0.8,
              height: responsive.height * 0.2,
              color: Colors.blue,
              child: Center(
                child: Text(
                  'Responsive Container',
                  style: TextStyle(color: Colors.white, fontSize: responsive.fontSize(18)),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部