Flutter可调整大小容器插件flutter_resizable_container的使用

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

Flutter可调整大小容器插件flutter_resizable_container的使用

描述

flutter_resizable_container 是一个为Flutter应用程序添加交互式可调整大小容器的插件。它允许你创建可以动态调整大小的UI组件,以适应不同的屏幕尺寸和用户交互。

Basic Resizing

功能特性

  • 嵌套支持:完全支持嵌套,并且兼容从左到右(LTR)和从右到左(RTL)布局。
  • 自定义分隔线:定制分隔线的外观。
  • 响应用户交互:通过 onHoverEnteronHoverExit 响应web桌面端的鼠标事件,通过 onTapDownonTapUp 响应移动端的触摸事件。
  • 编程控制:使用 ResizableController 程序化设置子项大小。
  • 监听变化:通过监听 ResizableController 来响应子项大小的变化。

示例应用

查看交互示例应用 点击这里。每个例子都附带了内嵌的源代码预览,方便你在应用中直接查看代码。

Multiple Examples

开始使用

安装

pubspec.yaml 文件中添加依赖或使用命令安装:

flutter pub add flutter_resizable_container

使用方法

设置方向

指定 ResizableContainer 的方向,确定子项排列及调整大小的方向:

ResizableContainer(
  direction: Axis.horizontal,
  ...
)

使用 ResizableController

如果需要响应大小变化或程序化调整子项大小,需创建并引用 ResizableController

final controller = ResizableController();

@override
void initState() {
    super.initState();
    controller.addListener(() {
        // 反应大小变化
        final List<double> pixels = controller.pixels;
        print(pixels.join(', '));
    });
}

@override
void dispose() {
    controller.dispose(); // 别忘了释放控制器
    super.dispose();
}

添加子项

提供一个 List<ResizableChild>,每个子项包含 child、可选的 dividersize

children: [
    const ResizableChild(
        divider: ResizableDivider(
            thickness: 2,
            color: Colors.blue,
        ),
        size: ResizableSize.expand(max: 350),
        child: NavBarWidget(),
    ),
    const ResizableChild(
        divider: ResizableDivider(
            thickness: 2,
            padding: 3,
        ),
        child: BodyWidget(),
    ),
    const ResizableChild(
        size: ResizableSize.ratio(0.25, min: 100),
        child: SidePanelWidget(),
    ),
],

定义 ResizableSize

ResizableSize 类用于定义子项的初始大小配置:

const half = ResizableSize.ratio(0.5);
const threeHundredPixels = ResizableSize.pixels(300);
const expandable = ResizableSize.expand();

自定义 ResizableDivider

自定义分隔线的外观与行为:

divider: ResizableDivider(
    thickness: 2,
    padding: 5,
    length: const ResizableSize.ratio(0.25),
    onHoverEnter: () => setState(() => hovered = true),
    onHoverExit: () => setState(() => hovered = false),
    color: hovered ? Colors.blue : Colors.black,
    cursor: SystemMouseCursors.grab,
),

示例代码

以下是一个完整的示例,展示了如何使用 flutter_resizable_container 创建一个基本的应用程序结构:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Resizable Container Example')),
        body: MyResizableLayout(),
      ),
    );
  }
}

class MyResizableLayout extends StatefulWidget {
  @override
  _MyResizableLayoutState createState() => _MyResizableLayoutState();
}

class _MyResizableLayoutState extends State<MyResizableLayout> {
  final ResizableController _controller = ResizableController();

  @override
  void initState() {
    super.initState();
    _controller.addListener(() {
      print(_controller.pixels.join(', '));
    });
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return ResizableContainer(
      controller: _controller,
      direction: Axis.horizontal,
      children: [
        ResizableChild(
          size: ResizableSize.pixels(200),
          child: Container(color: Colors.red, child: Center(child: Text('Left'))),
        ),
        ResizableChild(
          size: ResizableSize.expand(),
          child: Container(color: Colors.green, child: Center(child: Text('Middle'))),
        ),
        ResizableChild(
          size: ResizableSize.ratio(0.25),
          child: Container(color: Colors.blue, child: Center(child: Text('Right'))),
        ),
      ],
    );
  }
}

此代码段创建了一个水平排列的可调整大小容器,包含三个部分:左侧固定宽度,中间自动扩展,右侧按比例分配空间。当用户调整这些部分时,控制台将输出当前各部分的宽度。

许可证

该软件遵循MIT许可证,详情请参阅官方文档中的许可信息。


希望以上内容能帮助你更好地理解和使用 flutter_resizable_container 插件!如果有任何问题或需要进一步的帮助,请随时提问。


更多关于Flutter可调整大小容器插件flutter_resizable_container的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter可调整大小容器插件flutter_resizable_container的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 flutter_resizable_container 插件来调整 Flutter 中容器大小的代码示例。这个插件允许用户通过拖动容器的边缘来调整其大小。

首先,确保你已经在 pubspec.yaml 文件中添加了 flutter_resizable_container 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_resizable_container: ^x.y.z  # 请替换为最新版本号

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

接下来,在你的 Dart 文件中,你可以按照以下方式使用 ResizableContainer

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Resizable Container Example'),
        ),
        body: Center(
          child: ResizableContainer(
            child: Container(
              color: Colors.blue,
              child: Center(
                child: Text(
                  'Resizable Container',
                  style: TextStyle(color: Colors.white),
                ),
              ),
            ),
            // 设置最小和最大尺寸
            minWidth: 100,
            minHeight: 100,
            maxWidth: 500,
            maxHeight: 500,
            // 设置边框颜色和宽度
            borderColor: Colors.black,
            borderWidth: 2.0,
            // 设置手柄颜色和大小
            resizeHandleColor: Colors.black,
            resizeHandleSize: 10.0,
            // 设置手柄的可见性(可选)
            isResizableFromAllSides: true,
            // 可选:设置拖动时的背景颜色
            resizeBackgroundColor: Colors.grey.withOpacity(0.5),
          ),
        ),
      ),
    );
  }
}

代码解释

  1. 导入依赖:首先,我们导入了 flutter_resizable_container 包。
  2. 创建主应用:在 MyApp 类中,我们创建了一个简单的 Flutter 应用,包含一个 Scaffold 和一个居中的 ResizableContainer
  3. 配置 ResizableContainer
    • child:要调整的容器内容,这里是一个蓝色的 Container,里面有一个白色的文本。
    • minWidth, minHeight, maxWidth, maxHeight:设置容器的最小和最大尺寸。
    • borderColor, borderWidth:设置容器边框的颜色和宽度。
    • resizeHandleColor, resizeHandleSize:设置调整大小手柄的颜色和大小。
    • isResizableFromAllSides:设置是否可以从所有边调整大小。
    • resizeBackgroundColor:设置拖动时的背景颜色(可选)。

这样,你就可以在 Flutter 应用中使用 flutter_resizable_container 插件来创建一个可调整大小的容器了。用户可以通过拖动容器的边缘来调整其大小。

回到顶部