패키지, 저장소 및 앱 카테고리 검색

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 등 여러 플랫폼을 지원하여 크로스플랫폼 애플리케이션에 유연하게 활용할 수 있습니다.

사용 사례

  • 드로워 애니메이션 향상
  • 몰입형 탐색 경험 만들기
  • UI 반응성 향상
  • 드로어 상호작용 효과 맞춤 설정
  • 현대적인 앱 인터페이스 구축

주요 기능

  • 드로워 슬라이드 중 동적 뷰 이동
  • 콘텐츠 뷰의 높이 스케일링
  • 크로스 플랫폼 호환성
  • 기존 서랍과의 간편한 통합
  • 부드럽고 사용자 정의 가능한 전환 효과

적합한 대상

  • 복잡한 탐색 패턴을 구축하는 개발자
  • 디자인 중심의 플러터 앱
  • 애니메이션 드로어 상호작용을 요구하는 앱
  • 크로스 플랫폼 모바일 및 웹 프로젝트
  • 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

💻

카테고리

소스 저장소

이 패키지를 사용하는 프로젝트

아직 데이터가 없습니다.