Flutter上下文菜单插件contextual_menu_plus的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter上下文菜单插件contextual_menu_plus的使用

contextual_menu_plus

pub version Discord

此插件允许Flutter桌面应用程序创建原生上下文菜单。


英文 | 简体中文


目录


平台支持

Linux macOS Windows
✔️ ✔️ ✔️

截图

macOS Linux Windows

快速开始

安装

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

dependencies:
  contextual_menu_plus: ^0.1.2

或者通过Git仓库直接引用:

dependencies:
  contextual_menu_plus:
    git:
      url: https://github.com/leanflutter/contextual_menu_plus.git
      ref: main

使用

以下是一个简单的使用示例:

import 'package:flutter/material.dart' hide MenuItem; // 避免与Material库冲突
import 'package:contextual_menu_plus/contextual_menu_plus.dart'; // 导入上下文菜单插件

// 定义上下文菜单
Menu menu = Menu(
  items: [
    MenuItem(
      label: '复制', // 菜单项名称
      icon: 'doc.on.doc', // 图标(使用SF Symbols图标)
      shortcutKey: 'C', // 快捷键
      shortcutModifiers: ShortcutModifiers(command: true), // 使用Command键(macOS)或Ctrl键(Windows)
      onClick: (_) {
        print('点击了复制'); // 点击事件处理
      },
    ),
    MenuItem(
      label: '禁用的项目', // 禁用的菜单项
      disabled: true,
    ),
    MenuItem.checkbox(
      key: 'checkbox1', // 唯一标识符
      label: '复选框1', // 菜单项名称
      checked: true, // 初始状态为选中
      onClick: (menuItem) {
        print('点击了复选框1'); // 点击事件处理
        menuItem.checked = !(menuItem.checked == true); // 切换选中状态
      },
    ),
    MenuItem.separator(), // 分隔线
  ],
);

// 显示上下文菜单
popUpContextualMenu(
  context, // 当前上下文
  menu, // 菜单实例
  placement: Placement.bottomLeft, // 菜单位置
);

示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用 contextual_menu_plus 插件:

main.dart

import 'package:flutter/material.dart';
import 'package:bot_toast/bot_toast.dart';
import './pages/home.dart'; // 引入主页

void main() {
  WidgetsFlutterBinding.ensureInitialized(); // 初始化Flutter绑定
  runApp(const MyApp()); // 启动应用
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primaryColor: const Color(0xff416ff4), // 主色调
        canvasColor: Colors.white, // 画布颜色
        scaffoldBackgroundColor: const Color(0xffF7F9FB), // 页面背景色
        dividerColor: Colors.grey.withOpacity(0.3), // 分割线颜色
      ),
      builder: BotToastInit(), // 初始化BotToast插件
      navigatorObservers: [BotToastNavigatorObserver()], // 注册导航观察器
      home: const HomePage(), // 设置主页
    );
  }
}

home.dart

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

class HomePage extends StatelessWidget {
  const HomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('上下文菜单示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 显示上下文菜单
            popUpContextualMenu(
              context,
              menu, // 菜单实例
              placement: Placement.bottomLeft, // 菜单位置
            );
          },
          child: Text('右键点击我'),
        ),
      ),
    );
  }
}

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

1 回复

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


contextual_menu_plus 是一个 Flutter 插件,用于在应用中显示上下文菜单。它允许你在用户长按或右键点击某个元素时,弹出一个菜单,提供相关的操作选项。以下是如何使用 contextual_menu_plus 插件的基本步骤:

1. 添加依赖

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

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

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

2. 导入包

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

import 'package:contextual_menu_plus/contextual_menu_plus.dart';

3. 使用 ContextualMenuPlus

你可以在任何需要显示上下文菜单的地方使用 ContextualMenuPlus 组件。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Contextual Menu Plus Example'),
        ),
        body: Center(
          child: ContextualMenuPlus(
            menuItems: [
              ContextualMenuItem(
                title: 'Copy',
                onTap: () {
                  print('Copy tapped');
                },
              ),
              ContextualMenuItem(
                title: 'Paste',
                onTap: () {
                  print('Paste tapped');
                },
              ),
              ContextualMenuItem(
                title: 'Delete',
                onTap: () {
                  print('Delete tapped');
                },
              ),
            ],
            child: Container(
              padding: EdgeInsets.all(20),
              color: Colors.blue,
              child: Text(
                'Long press here',
                style: TextStyle(color: Colors.white, fontSize: 20),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

4. 解释代码

  • ContextualMenuPlus: 这是主要的组件,用于包裹你想要显示上下文菜单的部件。
  • menuItems: 这是一个 List<ContextualMenuItem>,用于定义菜单中的选项。每个 ContextualMenuItem 都有一个 title 和一个 onTap 回调函数,当用户点击该菜单项时会触发。
  • child: 这是你想要触发上下文菜单的部件。在这个例子中,我们使用了一个 Container,当用户长按这个 Container 时,会弹出上下文菜单。

5. 运行应用

运行你的 Flutter 应用,长按蓝色的 Container,你会看到一个上下文菜单弹出,包含 “Copy”、“Paste” 和 “Delete” 三个选项。点击这些选项会触发相应的回调函数。

6. 自定义菜单

你可以根据需要自定义菜单项的样式、图标、分隔符等。ContextualMenuItem 还支持其他属性,例如 iconenabled 等,你可以根据需要进行配置。

ContextualMenuItem(
  title: 'Copy',
  icon: Icon(Icons.copy),
  onTap: () {
    print('Copy tapped');
  },
),
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!