搜尋套件、儲存庫與 APP 分類

drawerbehavior 封面
套件詳情v3.0.4

drawerbehavior

Drawer behavior 是一個提供抽屜額外行為的套件,例如在抽屜滑動時移動視圖或縮放視圖的高度。

AndroidiOSWebmacOSWindowsLinux
近 30 天下載
323
喜歡數
168
Pub 分數
150

安裝套件

flutter pub add drawerbehavior

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

DrawerBehavior 是一個 Flutter 套件,透過在滑動過程中啟用動態視覺效果(例如移動或縮放內容檢視的高度)來增強抽屜功能。它提供流暢、互動式的過渡效果,提升導航密集型應用的使用者體驗。專為希望對抽屜互動擁有更多控制權的開發者設計,可與標準 Drawer 小部件無縫整合。該套件支援 Android、iOS、Web、macOS、Windows 和 Linux 多個平台,適用於跨平台應用程式。

適用情境

  • 增強抽屜動畫
  • 創造沉浸式的導航體驗
  • 提升使用者介面回應速度
  • 自定義抽屜互動效果
  • 建構現代應用程式介面

主要特色

  • 抽屜滑動時的動態視圖移動
  • 內容視圖的高度縮放
  • 跨平台相容性
  • 與現有抽屜的輕鬆整合
  • 平滑、可自定義的過渡效果

適合對象

  • 開發複雜導航模式的開發者
  • 注重設計的Flutter應用
  • 需要動畫抽屜互動的應用
  • 跨平台移動和Web專案
  • UI/UX增強專家

使用建議

  • 可能需要額外的性能調校
  • 可用文件有限
  • 最適合頻繁使用抽屜的應用程式
  • 與其他手勢檢測器的潛在衝突
  • 需要理解手勢和動畫原理

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

pub package

All Contributors

Drawer Behavior - Flutter

Drawer Behavior is a Flutter library that provides advanced effects and behaviors for the side navigation drawer. Unlike the standard Flutter drawer, this package allows you to create immersive interactions such as moving the view, scaling the view's height, or adding 3D effects while the drawer slides.

Alt Text

✨ Features

  • Scale Effect: smoothly scales down the main content as the drawer opens.

  • 3D Effect: Adds a rotation depth effect to the main content.

  • Multi-Directional: Supports both Left and Right side drawers.

  • Peek Drawer: Keep a portion of the drawer visible even when closed.

  • Customization: Full control over headers, footers, item builders, and animations.

  • Null-Safety: Fully supports Dart null-safety.

📦 Installation

Add this to your package's pubspec.yaml file:

dependencies:
  drawerbehavior: ^3.0.0 # Check pub.dev for the latest version

Install it via command line:

flutter pub get

🚀 Usage

1. Import the package
import 'package:drawerbehavior/drawerbehavior.dart';
2. Basic Implementation

Replace your standard Scaffold with DrawerScaffold. Define your drawers using SideDrawer and your main content using the builder.

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int selectedMenuItemId = 0;

  // Define your menu items
  final Menu menu = Menu(
    items: [
      MenuItem(id: 0, title: 'Home', icon: Icons.home),
      MenuItem(id: 1, title: 'Profile', icon: Icons.person),
      MenuItem(id: 2, title: 'Settings', icon: Icons.settings),
    ],
  );

  @override
  Widget build(BuildContext context) {
    return DrawerScaffold(
      // App Bar handles the menu button automatically
      appBar: AppBar(
        title: Text("Drawer Behavior"),
      ),
      
      // Define the drawer(s)
      drawers: [
        SideDrawer(
          percentage: 0.6, // Scale the main view down to 60%
          menu: menu,
          direction: Direction.left,
          animation: true,
          color: Theme.of(context).primaryColor,
          selectedItemId: selectedMenuItemId,
          onMenuItemSelected: (itemId) {
            setState(() {
              selectedMenuItemId = itemId;
            });
          },
        )
      ],
      
      // Build the main screen content based on selection
      builder: (context, id) => IndexedStack(
        index: selectedMenuItemId,
        children: [
          Center(child: Text("Home Page")),
          Center(child: Text("Profile Page")),
          Center(child: Text("Settings Page")),
        ],
      ),
    );
  }
}

🎨 Customization

You can fine-tune the look and feel using parameters in DrawerScaffold and SideDrawer.

DrawerScaffold Options
Parameter Description
drawers A list of SideDrawer widgets (e.g., left and right).
builder Builder for the main content area. Use this to react to state changes.
defaultDirection The default direction (left/right) controlled by the toggle button.
cornerRadius Radius of the main content's corners when the drawer is open.
contentShadow Shadow definition for the main content panel.
enableGestures Boolean to enable/disable drag gestures.
onSlide Callback triggered while the drawer is sliding.
controller DrawerScaffoldController for programmatic control (open/close).
SideDrawer Options
Parameter Description
percentage How much the main content scales down (e.g., 0.8) when open.
degree The rotation degree for the 3D effect (between 15 and 45).
slide If true, the main content slides horizontally with the drawer.
peekMenu If true, a small part of the drawer remains visible when closed.
peekSize The width of the drawer when peekMenu is active.
direction Direction.left or Direction.right.
headerView Widget to display at the top of the drawer.
footerView Widget to display at the bottom of the drawer.
itemBuilder Custom builder for menu items if you don't want the default look.
color Background color of the drawer.
background Background DecorationImage for the drawer.

🔄 Migration Guide

If you are upgrading from older versions, please note the following breaking changes:

v2.0 to v3.0 (Null-safety & API Cleanup)
  1. DrawerScaffold:

    • mainDrawer property is now defaultDirection.

    • percentage property moved inside SideDrawer.

    • contentView is now builder.

  2. SideDrawer:

    • menuView is now replaced by the drawers list containing SideDrawer.

Example:

// OLD
DrawerScaffold(
  mainDrawer: Direction.left,
  contentView: Screen(...),
  percentage: 0.6,
  menuView: MenuView(...),
)

// NEW
DrawerScaffold(
  defaultDirection: Direction.left,
  builder: (context, id) => ...,
  drawers: [
    SideDrawer(
      percentage: 0.6,
      ...
    )
  ],
)

📱 Previews

Scale Effect
DrawerScaffold(
  drawers: [
    SideDrawer(
      percentage: 0.6,
      // ...
    )
  ],
  // ...
);

Right Drawer
DrawerScaffold(
  drawers: [
    SideDrawer(
      direction: Direction.right,
      // ...
    )
  ],
  // ...
);

3D Effect
DrawerScaffold(
  drawers: [
    SideDrawer(
      degree: 45,
      // ...
    )
  ],
  // ...
);

Drawer with Header
```dart DrawerScaffold( headerView: headerView(context), // ... );

### Drawer with Footer

<img src="https://github.com/shiburagi/Drawer-Behavior-Flutter/blob/preview/preview-ios-4.png?raw=true" width="200px"/>

```dart
DrawerScaffold(
  footerView: footerView(context),
  // ...
);

Drawer with Header and Custom Builder
DrawerScaffold(
  headerView: headerView(context),
  drawers: [
    SideDrawer(
      itemBuilder: (BuildContext context, MenuItem menuItem, bool isSelected) {
        return Container(
          color: isSelected ? Theme.of(context).colorScheme.secondary.withOpacity(0.7) : Colors.transparent,
          padding: EdgeInsets.fromLTRB(24, 16, 24, 16),
          child: Text(
            menuItem.title,
            style: Theme.of(context).textTheme.subtitle1?.copyWith(
              color: isSelected ? Colors.black87 : Colors.white70),
          ),
        );
      }
    )
  ],
  // ...
);

Peek Drawer
DrawerScaffold(
  headerView: headerView(context),
  drawers: [
    SideDrawer(
      peekMenu: true,
      percentage: 1,
      menu: menuWithIcon,
      direction: Direction.left,
    )
  ],
  // ...
);

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

Based on the original work by shiburagi.

Contributors

trademunch
trademunch

💻
anjarnaufals
anjarnaufals

💻
Vladimir Vlach
Vladimir Vlach

💻
Chris Hayen
Chris Hayen

💻

所屬分類

原始碼儲存庫

使用此套件的專案

暫無相關資料。