Flutter隐藏抽屉菜单插件hidden_drawer的使用

Flutter隐藏抽屉菜单插件hidden_drawer的使用

简介

hidden_drawer 是一个基于 hidden_drawer_menu 的 Flutter 插件,用于实现隐藏式抽屉菜单。该插件允许用户通过滑动手势或点击图标来打开和关闭抽屉菜单。

特性

  • 支持自定义菜单样式。
  • 提供默认和自定义菜单选项。
  • 可以轻松集成到现有项目中。

使用方法

添加依赖

在项目的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  hidden_drawer: ^1.0.0

然后运行以下命令以安装依赖:

flutter pub get

示例代码

以下是一个完整的示例代码,展示了如何使用 hidden_drawer 插件。

示例代码

import 'package:flutter/material.dart';

// 导入默认隐藏抽屉示例
import 'exampleHiddenDrawer/example_hidden_drawer.dart';

void main() => runApp(MyApp());

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

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            SizedBox(
              width: 200.0,
              child: ElevatedButton(
                style: ElevatedButton.styleFrom(
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(20.0),
                  ),
                  primary: Colors.blue,
                ),
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) => ExampleHiddenDrawer()),
                  );
                },
                child: Text(
                  "默认隐藏抽屉示例",
                  style: TextStyle(color: Colors.white),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

默认隐藏抽屉示例

接下来,我们来看一下如何实现一个默认的隐藏抽屉菜单。

示例代码

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

class ExampleHiddenDrawer extends StatefulWidget {
  [@override](/user/override)
  _ExampleHiddenDrawerState createState() => _ExampleHiddenDrawerState();
}

class _ExampleHiddenDrawerState extends State<ExampleHiddenDrawer> {

  final items = <ItemHiddenMenu>[
    ItemHiddenMenu(
      name: "首页",
      baseStyle: TextStyle(fontSize: 20, color: Colors.white),
      selectedStyle: TextStyle(fontSize: 22, fontWeight: FontWeight.w800, color: Colors.white),
      onTapFab: () {},
      initHiddenTab: true,
    ),
    ItemHiddenMenu(
      name: "设置",
      baseStyle: TextStyle(fontSize: 20, color: Colors.white),
      selectedStyle: TextStyle(fontSize: 22, fontWeight: FontWeight.w800, color: Colors.white),
      onTapFab: () {},
      initHiddenTab: true,
    ),
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return HiddenDrawerMenu(
      backgroundColorMenu: Colors.blue[900],
      menuItems: items,
      contentBelowShadow: false,
      slidePercent: 80,
      isBaseOpen: true,
      content: ContentHiddenDrawer(),
    );
  }
}

class ContentHiddenDrawer extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      child: Center(
        child: Text(
          "主内容区域",
          style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
        ),
      ),
    );
  }
}

效果图

隐藏抽屉菜单

自定义菜单示例

如果你想自定义菜单的外观,可以使用 CustomMenu 组件。

示例代码

import 'package:flutter/material.dart';
import 'package:hidden_drawer_menu/custom_hidden_drawer/custom_menu.dart';

class ExampleCustomMenu extends StatefulWidget {
  [@override](/user/override)
  _ExampleCustomMenuState createState() => _ExampleCustomMenuState();
}

class _ExampleCustomMenuState extends State<ExampleCustomMenu> {

  [@override](/user/override)
  Widget build(BuildContext context) {
    return CustomMenu(
      menuItems: [
        MenuItem("首页", Icons.home),
        MenuItem("设置", Icons.settings),
      ],
      builder: (context, animation, position) {
        return Transform(
          transform: Matrix4.translationValues(
            0.0,
            250.0 * (1.0 - animation.value),
            0.0,
          ),
          child: Container(
            color: Colors.blue[900],
            child: Center(
              child: Text(
                "自定义菜单",
                style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold, color: Colors.white),
              ),
            ),
          ),
        );
      },
    );
  }
}

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

1 回复

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


hidden_drawer 是一个用于 Flutter 的插件,它允许你创建一个隐藏式的抽屉菜单。这个抽屉菜单可以在用户滑动屏幕时显示或隐藏,提供了一种简洁的方式来管理应用的导航菜单。

以下是如何使用 hidden_drawer 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  hidden_drawer_menu: ^2.0.0

然后运行 flutter pub get 来获取依赖。

2. 创建抽屉菜单内容

你需要定义抽屉菜单的内容。通常,你可以使用 ListTile 或其他小部件来创建菜单项。

import 'package:flutter/material.dart';

class DrawerMenu extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ListView(
      padding: EdgeInsets.zero,
      children: <Widget>[
        DrawerHeader(
          decoration: BoxDecoration(
            color: Colors.blue,
          ),
          child: Text(
            'Menu',
            style: TextStyle(
              color: Colors.white,
              fontSize: 24,
            ),
          ),
        ),
        ListTile(
          leading: Icon(Icons.home),
          title: Text('Home'),
          onTap: () {
            // Handle the tap
          },
        ),
        ListTile(
          leading: Icon(Icons.settings),
          title: Text('Settings'),
          onTap: () {
            // Handle the tap
          },
        ),
      ],
    );
  }
}

3. 使用 HiddenDrawer 组件

接下来,你可以在你的应用中使用 HiddenDrawer 组件来包裹你的主内容。

import 'package:flutter/material.dart';
import 'package:hidden_drawer_menu/hidden_drawer_menu.dart';
import 'drawer_menu.dart'; // 导入你定义的抽屉菜单

class HiddenDrawerExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return HiddenDrawer(
      menu: DrawerMenu(), // 你的抽屉菜单
      child: Scaffold(
        appBar: AppBar(
          title: Text('Hidden Drawer Example'),
        ),
        body: Center(
          child: Text('Main Content'),
        ),
      ),
    );
  }
}

4. 运行应用

最后,你可以在 main.dart 中运行你的应用:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Hidden Drawer Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HiddenDrawerExample(),
    );
  }
}

5. 自定义 HiddenDrawer

HiddenDrawer 提供了多个参数来自定义其行为,例如:

  • slidePercent: 控制抽屉滑动的百分比。
  • contentCornerRadius: 主内容的圆角半径。
  • menuCornerRadius: 抽屉菜单的圆角半径。
  • screenSelected: 当前选中的屏幕。

你可以根据需求调整这些参数。

6. 处理抽屉的打开和关闭

你可以通过 HiddenDrawerController 来控制抽屉的打开和关闭。

HiddenDrawerController _controller = HiddenDrawerController();

// 打开抽屉
_controller.open();

// 关闭抽屉
_controller.close();
回到顶部