搜索插件、代码仓与 APP 分类

pluto_layout 封面
插件详情v1.0.0

pluto_layout

PlutoLayout 是一个 Flutter UI 包,可在每一侧配置菜单或标签屏幕。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
130
喜欢数
82
Pub 分数
140

安装插件

flutter pub add pluto_layout

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

PlutoLayout 是一个 Flutter 包,旨在在屏幕的任意一侧创建可自定义的菜单或标签界面。它使开发者能够轻松构建响应式、基于侧边的导航布局,支持水平和垂直排列。非常适合仪表板、管理面板或需要可折叠侧边栏的应用程序,提供流畅的过渡效果和跨多个平台的灵活定位。该包可通过简单的 pub add 命令无缝集成到现有的 Flutter 项目中。

适合场景

  • 侧边导航菜单
  • 仪表板UI
  • 可折叠面板
  • 管理员仪表板
  • 响应式布局
  • 标签式界面设计

主要特点

  • 并排布局配置
  • 可自定义菜单位置
  • 流畅的动画
  • 跨平台支持
  • 通过 pub 轻松集成
  • 灵活的控件放置

适合对象

  • 开发仪表板应用的开发者
  • 需要侧边导航的UI设计师
  • 需要响应式布局的项目
  • Flutter 初学者探索布局模式
  • 具有复杂导航需求的应用程序

使用建议

  • 可能需要为自定义主题添加额外的样式
  • 除了基本示例外,文档有限
  • 最适合单窗格布局
  • 深度嵌套小部件带来的性能影响
  • 不适合全屏模态覆盖

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

PlutoLayout - v1.0.0

License: MIT

PlutoLayout is a Flutter UI package that can configure a menu or tab screen on each side.
You can adjust the width of the tab menu by dragging the right border of the tab menu.
You can also assign custom shortcut keys to open or close tab views and resize tab views.

Demo

Demo Web

Installation

pub.dev

Screenshot

PlutoLayout Screenshot

Usage
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:pluto_layout/pluto_layout.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData.dark(useMaterial3: true),
      home: const ExamplePage(),
    );
  }
}

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

  @override
  State<ExamplePage> createState() => _ExamplePageState();
}

class _ExamplePageState extends State<ExamplePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: PlutoLayout(
        shortcuts: {
          LogicalKeySet(LogicalKeyboardKey.escape):
          PlutoLayoutActions.hideAllTabView(),
          LogicalKeySet(LogicalKeyboardKey.alt, LogicalKeyboardKey.digit1):
          PlutoLayoutActions.rotateTabView(
            PlutoLayoutContainerDirection.left,
          ),
          LogicalKeySet(LogicalKeyboardKey.alt, LogicalKeyboardKey.digit2):
          PlutoLayoutActions.rotateTabView(
            PlutoLayoutContainerDirection.right,
          ),
          LogicalKeySet(LogicalKeyboardKey.alt, LogicalKeyboardKey.arrowUp):
          PlutoLayoutActions.increaseTabView(),
          LogicalKeySet(LogicalKeyboardKey.alt, LogicalKeyboardKey.arrowDown):
          PlutoLayoutActions.decreaseTabView(),
        },
        body: const PlutoLayoutContainer(
          child: Text('Body container'),
        ),
        top: PlutoLayoutContainer(
          child: PlutoLayoutTabs(
            items: [
              PlutoLayoutTabItem(
                id: 'top1',
                title: 'top1',
                tabViewBuilder: (e) => const Text('top1'),
              ),
              PlutoLayoutTabItem(
                id: 'top2',
                title: 'top2',
                tabViewBuilder: (e) => const Text('top2'),
              ),
            ],
          ),
        ),
        left: PlutoLayoutContainer(
          child: PlutoLayoutTabs(
            items: [
              PlutoLayoutTabItem(
                id: 'left1',
                title: 'left1',
                tabViewBuilder: (e) => const Text('left1'),
              ),
              PlutoLayoutTabItem(
                id: 'left2',
                title: 'left2',
                tabViewBuilder: (e) => const Text('left2'),
              ),
            ],
          ),
        ),
        right: PlutoLayoutContainer(
          child: PlutoLayoutTabs(
            items: [
              PlutoLayoutTabItem(
                id: 'right1',
                title: 'right1',
                tabViewBuilder: (e) => const Text('right1'),
              ),
              PlutoLayoutTabItem(
                id: 'right2',
                title: 'right2',
                tabViewBuilder: (e) => const Text('right2'),
              ),
            ],
          ),
        ),
        bottom: PlutoLayoutContainer(
          child: PlutoLayoutTabs(
            items: [
              PlutoLayoutTabItem(
                id: 'bottom1',
                title: 'bottom1',
                tabViewBuilder: (e) => const Text('bottom1'),
              ),
              PlutoLayoutTabItem(
                id: 'bottom2',
                title: 'bottom2',
                tabViewBuilder: (e) => const Text('bottom2'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Flutter version compatible
Flutter PlutoLayout
3.7.0 or higher 1.0.0 or higher
Less than 3.3.7 0.x

Related packages

develop packages that make it easy to develop admin pages or CMS with Flutter.


Donate to this project

Buy me a coffee


Jetbrains provides a free license

IDE license support

所属分类

依赖

依赖清单 3 项

源码仓库

使用此插件的项目

暂无相关数据。