Flutter布局插件layoutry的使用

Flutter布局插件layoutry的使用

安装

请参阅官方安装指南:layoutry安装

使用与概述

Layoutry 是对 LayoutBuilder 的一种修改实现,使得我们可以通过其 LayoutInfo 来轻松捕获设备类型(通过屏幕尺寸)。 其中,LayoutDevice 是一个自定义的 Platform.operatingSystem 实现枚举,用于通过屏幕尺寸标记当前设备类型。

Package Example Overview

以下是代码示例:

Layoutry(
  builder: (context, info) {
    // 手动定义的设备类型到颜色映射。
    final colors = <LayoutDevice, Color>{
      LayoutDevice.mobile: Colors.blue,
      LayoutDevice.tablet: Colors.red,
      LayoutDevice.web: Colors.green,
    };

    return AnimatedContainer(
      duration: const Duration(milliseconds: 500),
      // 颜色将从 [colors] 中生成,
      // 并根据设备的屏幕尺寸进行监听。
      color: colors[info.device],
      child: Center(child: Builder(builder: (context) {
        // 如果设备的屏幕尺寸像移动设备:
        // 屏幕上会显示 "Hi Mobile"。
        if (info.device.isMobile()) {
          return const Text(
            'Hi Mobile',
            style: TextStyle(color: Colors.white, fontSize: 20),
          );
        }

        // 如果设备的屏幕尺寸像网页:
        // 屏幕上会显示 "Hi Web"。
        if (info.device.isWeb()) {
          return const Text(
            'Hi Web',
            style: TextStyle(color: Colors.white, fontSize: 20),
          );
        }

        // 在其他情况下:屏幕上会显示当前设备类型。
        return Text(
          'Hi ${info.device.toString()}',
          style: const TextStyle(color: Colors.white, fontSize: 20),
        );
      })),
    );
  },
)

示例代码

example/main.dart 文件中:

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

void main() => runApp(const App());

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

  [@override](/user/override)
  Widget build(BuildContext context) => const MaterialApp(home: Home());
}

// 查看概述:
// https://user-images.githubusercontent.com/59066341/211651068-27f5ca62-4d0d-44fa-b87d-7924605c017c.gif
class Home extends StatelessWidget {
  const Home({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Layoutry(
        builder: (context, info) {
          // 手动定义的设备类型到颜色映射。
          final colors = <LayoutDevice, Color>{
            LayoutDevice.mobile: Colors.blue,
            LayoutDevice.tablet: Colors.red,
            LayoutDevice.web: Colors.green,
          };

          return AnimatedContainer(
            duration: const Duration(milliseconds: 500),
            // 颜色将从 [colors] 中生成,
            // 并根据设备的屏幕尺寸进行监听。
            color: colors[info.device],
            child: Center(child: Builder(builder: (context) {
              // 如果设备的屏幕尺寸像移动设备:
              // 屏幕上会显示 "Hi Mobile"。
              if (info.device.isMobile()) {
                return const Text(
                  'Hi Mobile',
                  style: TextStyle(color: Colors.white, fontSize: 20),
                );
              }

              // 如果设备的屏幕尺寸像网页:
              // 屏幕上会显示 "Hi Web"。
              if (info.device.isWeb()) {
                return const Text(
                  'Hi Web',
                  style: TextStyle(color: Colors.white, fontSize: 20),
                );
              }

              // 在其他情况下:屏幕上会显示当前设备类型。
              return Text(
                'Hi ${info.device.toString()}',
                style: const TextStyle(color: Colors.white, fontSize: 20),
              );
            })),
          );
        },
      ),
    );
  }
}

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

1 回复

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


layoutry 是一个用于简化 Flutter 布局的插件,它提供了一些便捷的 widget 和方法,帮助你更轻松地构建复杂布局。虽然 layoutry 并不是 Flutter 官方提供的插件,但它基于 Flutter 的核心布局系统,提供了更高级的抽象和更简洁的语法。

主要功能

layoutry 提供了以下主要功能:

  1. 简化布局:通过简化的语法和 widget,减少嵌套,使代码更易读。
  2. 灵活的布局组合:提供了一些常用的布局模式,如 Row, Column, Stack 的增强版。
  3. 自适应布局:支持根据屏幕尺寸和方向自动调整布局。
  4. 预定义样式:提供了一些常用的样式和布局模板。

安装

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

dependencies:
  flutter:
    sdk: flutter
  layoutry: ^latest_version

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

基本用法

下面是一些 layoutry 的基本用法示例。

1. 使用 LRowsLColumns

LRowsLColumnsRowColumn 的增强版,支持更简洁的语法。

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

class MyWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: LColumns(
        children: [
          Text('Header'),
          LRows(
            children: [
              Text('Left'),
              Text('Right'),
            ],
          ),
          Text('Footer'),
        ],
      ),
    );
  }
}

2. 使用 LContainer

LContainer 是一个增强版的 Container,支持更多的样式和布局选项。

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

class MyWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: LContainer(
        padding: EdgeInsets.all(16),
        margin: EdgeInsets.all(8),
        color: Colors.blue,
        child: Text('Hello, Layoutry!'),
      ),
    );
  }
}

3. 使用 LStack

LStackStack 的增强版,提供了更灵活的布局选项。

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

class MyWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: LStack(
        children: [
          Positioned(
            top: 0,
            left: 0,
            child: Text('Top Left'),
          ),
          Positioned(
            bottom: 0,
            right: 0,
            child: Text('Bottom Right'),
          ),
        ],
      ),
    );
  }
}

高级用法

layoutry 还提供了一些高级功能,如自适应布局、预定义样式等。

1. 自适应布局

layoutry 提供了 ResponsiveLayout widget,帮助你在不同屏幕尺寸上自动调整布局。

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

class MyWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: ResponsiveLayout(
        mobile: LColumns(
          children: [
            Text('Mobile Layout'),
          ],
        ),
        tablet: LColumns(
          children: [
            Text('Tablet Layout'),
          ],
        ),
        desktop: LColumns(
          children: [
            Text('Desktop Layout'),
          ],
        ),
      ),
    );
  }
}

2. 预定义样式

layoutry 提供了一些常用的样式模板,你可以直接使用或自定义。

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

class MyWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: LContainer(
        style: LayoutryStyles.cardStyle,
        child: Text('Styled Card'),
      ),
    );
  }
}
回到顶部