Flutter侧边菜单插件menu_drawer的使用

Flutter侧边菜单插件menu_drawer的使用

插件简介

pub package

menu_drawer 是一个用于自定义侧边菜单的 Flutter 包。

要开始使用此包,请在 pubspec.yaml 文件中添加 menu_drawer 依赖:

dependencies:
  menu_drawer: '<latest_release>'

特性

  • 控制头部菜单
  • 添加多个项目(控制前导图标、标题、点击事件)
  • 添加版本信息

如何使用

以下是一个完整的示例,展示了如何使用 menu_drawer 插件创建一个自定义的侧边菜单:

import 'package:flutter/material.dart';
import 'package:menu_drawer/menu.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const ExampleApp(),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      drawer: Menu(
        item: [
          ListTile(
            title: const Text(
              'Home',
              style: TextStyle(
                color: Colors.grey,
                fontSize: 20,
              ),
            ),
            leading: const Icon(
              Icons.home,
              color: Colors.grey,
              size: 25,
            ),
            onTap: () {
              Navigator.pop(context); // 关闭抽屉菜单
            },
          ),
          Divider(
            height: 1,
            color: Colors.grey[400],
          ),
          const SizedBox(
            height: 10,
          ),
          ListTile(
            title: const Text(
              'Support',
              style: TextStyle(
                color: Colors.grey,
                fontSize: 20,
              ),
            ),
            leading: const Icon(
              Icons.support,
              color: Colors.grey,
              size: 25,
            ),
            onTap: () {
              Navigator.pop(context); // 关闭抽屉菜单
            },
          ),
          Divider(
            height: 1,
            color: Colors.grey[400],
          ),
          const SizedBox(
            height: 10,
          ),
          ListTile(
            title: const Text(
              'About',
              style: TextStyle(
                color: Colors.grey,
                fontSize: 20,
              ),
            ),
            leading: const Icon(
              Icons.abc_outlined,
              color: Colors.grey,
              size: 25,
            ),
            onTap: () {
              Navigator.pop(context); // 关闭抽屉菜单
            },
          ),
          Divider(
            height: 1,
            color: Colors.grey[400],
          ),
          const SizedBox(
            height: 10,
          ),
        ],
        titleDrawerHeader: "mohamed fahmy",
        width: 320.0,
        colorDrawerHeader: Colors.blue,
        heightDrawerHeader: 70.0,
        widthDrawerHeader: 70.0,
        urlImageDrawerHeader:
        "https://www.escapeauthority.com/wp-content/uploads/2116/11/No-image-found.jpg",
        spaceDrawerHeader: 15.0,
        colorTitleDrawerHeader: Colors.white,
        fontSizeTitleDrawerHeader: 20.0,
        subTitleDrawerHeader: "",
        colorSubTitleDrawerHeader: Colors.white,
        fontSizeSubTitleDrawerHeader: 20.0,
        namePoweredBy: 'PoweredBy',
        colorPoweredBy: Colors.blue,
        fontSizePoweredBy: 17.0,
        heightNameImagePoweredBy: 5,
        pressImagePoweredBy: () {
          print('pressImagePoweredBy');
        },
        urlImagePoweredBy: "assets/logoCompany.png",
        heightImagePoweredBy: 40.0,
        widthImagePoweredBy: 150.0,
        heightImageVersion: 10.0,
        nameVersion: 'Version',
        valueVersion: "1.0",
        colorVersion: Colors.blue,
        fontSizeVersion: 17.0,
      ),
    );
  }
}

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

1 回复

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


menu_drawer 是 Flutter 中一个用于创建侧边菜单(抽屉菜单)的插件。它提供了一种简单而灵活的方式来在你的应用中添加可滑动的侧边菜单。以下是如何使用 menu_drawer 插件的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  menu_drawer: ^1.0.0  # 请使用最新版本

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

2. 导入包

在你的 Dart 文件中导入 menu_drawer 包:

import 'package:menu_drawer/menu_drawer.dart';

3. 使用 MenuDrawer

你可以使用 MenuDrawer 小部件来创建一个侧边菜单。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Menu Drawer Example',
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MenuDrawer(
      backgroundColor: Colors.blueGrey, // 背景颜色
      child: Scaffold(
        appBar: AppBar(
          title: Text('Menu Drawer Example'),
        ),
        body: Center(
          child: Text('Main Content'),
        ),
      ),
      menu: Container(
        color: Colors.white,
        child: ListView(
          padding: EdgeInsets.zero,
          children: <Widget>[
            DrawerHeader(
              child: Text('Menu Header'),
              decoration: BoxDecoration(
                color: Colors.blue,
              ),
            ),
            ListTile(
              title: Text('Item 1'),
              onTap: () {
                // 处理点击事件
              },
            ),
            ListTile(
              title: Text('Item 2'),
              onTap: () {
                // 处理点击事件
              },
            ),
            ListTile(
              title: Text('Item 3'),
              onTap: () {
                // 处理点击事件
              },
            ),
          ],
        ),
      ),
    );
  }
}

4. 自定义 MenuDrawer

你可以通过以下属性来自定义 MenuDrawer

  • backgroundColor: 设置抽屉菜单的背景颜色。
  • child: 主内容部分,通常是一个 Scaffold
  • menu: 菜单部分,通常是一个包含列表的 ContainerListView
  • width: 设置抽屉菜单的宽度。
  • position: 设置抽屉菜单的位置(MenuPosition.leftMenuPosition.right)。

5. 控制菜单的打开与关闭

你可以通过 MenuDrawerController 来控制菜单的打开与关闭。例如:

final MenuDrawerController _menuDrawerController = MenuDrawerController();

[@override](/user/override)
Widget build(BuildContext context) {
  return MenuDrawer(
    controller: _menuDrawerController,
    child: Scaffold(
      appBar: AppBar(
        title: Text('Menu Drawer Example'),
        leading: IconButton(
          icon: Icon(Icons.menu),
          onPressed: () {
            _menuDrawerController.toggle();
          },
        ),
      ),
      body: Center(
        child: Text('Main Content'),
      ),
    ),
    menu: Container(
      // 菜单内容
    ),
  );
}
回到顶部