Flutter动画抽屉插件animated_drawer的使用

Flutter动画抽屉插件animated_drawer的使用

Animated Drawer 是一个为 Flutter 提供简单且完全可定制化动画抽屉的插件。它支持丰富的动画效果,并允许开发者自定义抽屉的打开和关闭行为。


效果图


特性

  • 动画速度设置:可以调整动画的速度。
  • 坐标设置:可以设置 X 轴和 Y 轴的坐标值,用于控制动画位置。
  • 旋转角度设置:可以设置旋转角度。
  • 图标设置:可以设置打开和关闭抽屉的图标。
  • 支持渐变背景颜色:支持设置渐变背景。
  • 全定制化支持:可以完全自定义抽屉内容。
  • 任意类型的小部件:支持传递任意类型的小部件到主页和菜单页。
  • 阴影效果:支持增强抽屉的视觉效果。
  • 阴影可定制化:阴影效果也可以进行个性化配置。

使用方法

以下是一个完整的 animated_drawer 使用示例:

import 'package:animated_drawer/views/animated_drawer.dart';
import 'package:flutter/material.dart';

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

class DemoApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Home(),
    );
  }
}

class Home extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return AnimatedDrawer(
      // 主页内容
      homePageContent: Container(
        width: MediaQuery.of(context).size.width,
        height: MediaQuery.of(context).size.height,
        color: Colors.blue[200],
        child: Center(
          child: Image.network(
            "https://user-images.githubusercontent.com/38032118/105316779-2a480980-5be3-11eb-900e-18fcd599493d.png",
            height: MediaQuery.of(context).size.height / 2,
          ),
        ),
      ),
      // 抽屉内容
      menuPageContent: Padding(
        padding: const EdgeInsets.only(top: 100.0, left: 15),
        child: Container(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              FlutterLogo(
                size: MediaQuery.of(context).size.width / 4,
              ),
              Row(
                children: [
                  Text(
                    "FLUTTER",
                    style: TextStyle(
                        fontSize: 17,
                        color: Colors.white,
                        fontWeight: FontWeight.bold),
                  ),
                  Text(
                    "HOLIC",
                    style: TextStyle(
                        fontSize: 17,
                        color: Colors.blue[200],
                        fontWeight: FontWeight.bold),
                  )
                ],
              ),
              Padding(
                padding: EdgeInsets.only(bottom: 40),
              ),
              Text(
                "Home Screen",
                style: TextStyle(
                  color: Colors.white,
                ),
              ),
              Padding(
                padding: EdgeInsets.only(bottom: 20),
              ),
              Text(
                "Screen 2",
                style: TextStyle(
                  color: Colors.white,
                ),
              ),
              Padding(
                padding: EdgeInsets.only(bottom: 20),
              ),
              Divider(
                color: Color(0xFF5950a0),
                thickness: 2,
              ),
              Padding(
                padding: EdgeInsets.only(bottom: 20),
              ),
              Text(
                "About",
                style: TextStyle(
                  color: Colors.white,
                ),
              ),
            ],
          ),
        ),
      ),
      // 动画参数配置
      homePageXValue: 150,
      homePageYValue: 80,
      homePageAngle: -0.2,
      homePageSpeed: 250,
      shadowXValue: 122,
      shadowYValue: 110,
      shadowAngle: -0.275,
      shadowSpeed: 550,
      openIcon: Icon(Icons.menu_open, color: Color(0xFF1f186f)),
      closeIcon: Icon(Icons.arrow_back_ios, color: Color(0xFF1f186f)),
      shadowColor: Color(0xFF4c41a3),
      backgroundGradient: LinearGradient(
        colors: [Color(0xFF4c41a3), Color(0xFF1f186f)],
      ),
    );
  }
}

更多关于Flutter动画抽屉插件animated_drawer的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


animated_drawer 是一个用于 Flutter 的插件,它可以帮助你创建一个带有动画效果的抽屉(Drawer)。这个插件可以让你轻松地实现一个带有滑动动画的侧边栏,提升用户体验。

安装

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

dependencies:
  flutter:
    sdk: flutter
  animated_drawer: ^1.0.0  # 请检查最新版本

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

基本用法

以下是一个简单的示例,展示如何使用 animated_drawer 插件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Animated Drawer Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return AnimatedDrawer(
      homePageXValue: 150, // 主页面在抽屉打开时的X轴偏移量
      homePageYValue: 80,  // 主页面在抽屉打开时的Y轴偏移量
      homePageAngle: -0.2, // 主页面在抽屉打开时的旋转角度
      homePageSpeed: 250,  // 主页面的动画速度
      shadowXValue: 122,   // 阴影的X轴偏移量
      shadowYValue: 110,   // 阴影的Y轴偏移量
      shadowAngle: -0.275, // 阴影的旋转角度
      shadowSpeed: 550,    // 阴影的动画速度
      openIcon: Icons.menu, // 打开抽屉的图标
      closeIcon: Icons.close, // 关闭抽屉的图标
      child: Scaffold(
        appBar: AppBar(
          title: Text('Animated Drawer Demo'),
        ),
        body: Center(
          child: Text('Home Page Content'),
        ),
      ),
      drawer: Drawer(
        child: ListView(
          padding: EdgeInsets.zero,
          children: <Widget>[
            DrawerHeader(
              decoration: BoxDecoration(
                color: Colors.blue,
              ),
              child: Text(
                'Drawer Header',
                style: TextStyle(
                  color: Colors.white,
                  fontSize: 24,
                ),
              ),
            ),
            ListTile(
              leading: Icon(Icons.home),
              title: Text('Home'),
              onTap: () {
                // 处理点击事件
              },
            ),
            ListTile(
              leading: Icon(Icons.settings),
              title: Text('Settings'),
              onTap: () {
                // 处理点击事件
              },
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部