import 'package:flutter/material.dart'; import 'package:file_picker/file_picker.dart'; import 'package:provider/provider.dart'; import 'package:win_text_editor/framework/controllers/tab_manager.dart'; import 'package:win_text_editor/menus/menu_constants.dart'; import 'package:win_text_editor/framework/controllers/file_provider.dart'; import 'package:collection/collection.dart'; import 'dart:io'; class MenuActions { // 定义模板解析选项卡的常量 static const String templateParserTabType = "template_parser"; static const String templateParserTabTitle = "模板解析"; static const IconData templateParserTabIcon = Icons.auto_awesome_mosaic; static const String templateParserDefaultContent = ""; // 定义内容搜索选项卡的常量 static const String contentSearchTabType = "content_search"; static const String contentSearchTabTitle = "内容搜索"; static const IconData contentSearchTabIcon = Icons.search; static const String contentSearchDefaultContent = ""; static Future handleMenuAction(String value, BuildContext context) async { switch (value) { case MenuConstants.openFolder: await _openFolder(context); break; case MenuConstants.contentSearch: // 新增内容搜索菜单项 await _openContentSearch(context); break; case MenuConstants.templateParser: await _openTemplateParser(context); break; case MenuConstants.exit: _exitApplication(); break; // 其他菜单项可以在这里添加处理逻辑 } } static Future _openFolder(BuildContext context) async { final fileProvider = Provider.of(context, listen: false); final String? selectedDirectory = await FilePicker.platform.getDirectoryPath(); if (selectedDirectory != null) { await fileProvider.loadDirectory(selectedDirectory); } } static Future _openContentSearch(BuildContext context) async { final tabManager = Provider.of(context, listen: false); // Create new tab with unique ID final tabId = DateTime.now().millisecondsSinceEpoch.toString(); await tabManager.addTab( tabId, title: contentSearchTabTitle, type: contentSearchTabType, icon: contentSearchTabIcon, content: contentSearchDefaultContent, ); } static Future _openTemplateParser(BuildContext context) async { final tabManager = Provider.of(context, listen: false); // 使用 firstWhereOrNull 查找选项卡 final existingTab = tabManager.tabs.firstWhereOrNull( (tab) => tab.type == templateParserTabType, ); if (existingTab != null) { // 如果存在,激活该选项卡 tabManager.setActiveTab(existingTab.id); } else { final tabId = DateTime.now().millisecondsSinceEpoch.toString(); await tabManager.addTab( tabId, title: templateParserTabTitle, type: templateParserTabType, icon: templateParserTabIcon, content: templateParserDefaultContent, ); } } static void _exitApplication() { exit(0); } }