diff --git a/win_text_editor/lib/framework/controllers/tab_manager.dart b/win_text_editor/lib/framework/controllers/tab_items_controller.dart similarity index 83% rename from win_text_editor/lib/framework/controllers/tab_manager.dart rename to win_text_editor/lib/framework/controllers/tab_items_controller.dart index 3272996..670680d 100644 --- a/win_text_editor/lib/framework/controllers/tab_manager.dart +++ b/win_text_editor/lib/framework/controllers/tab_items_controller.dart @@ -4,9 +4,9 @@ import 'package:win_text_editor/modules/content_search/controllers/content_searc import 'package:win_text_editor/shared/base/base_content_controller.dart'; import 'package:win_text_editor/framework/controllers/logger.dart'; -class TabManager with ChangeNotifier { +class TabItemsController with ChangeNotifier { final List _tabs = []; - final Map _tabControllers = {}; // 保存各Tab的Controller + final Map _contentControllers = {}; // 保存各Tab的Controller String? _activeTabId; List get tabs => _tabs; @@ -37,7 +37,7 @@ class TabManager with ChangeNotifier { // 创建provider,管理状态 final controller = createContentController(newTab); if (controller != null) { - _tabControllers[id] = controller; + _contentControllers[id] = controller; } _activeTabId = id; notifyListeners(); @@ -63,14 +63,14 @@ class TabManager with ChangeNotifier { BaseContentController? get activeContentController { if (_activeTabId == null) return null; - final controller = _tabControllers[_activeTabId]; + final controller = _contentControllers[_activeTabId]; return controller is BaseContentController ? controller : null; } void closeTab(String tabId) { - final controller = _tabControllers[tabId]; + final controller = _contentControllers[tabId]; controller?.dispose(); // 先释放Controller - _tabControllers.remove(tabId); // 移除Controller引用 + _contentControllers.remove(tabId); // 移除Controller引用 _tabs.removeWhere((tab) => tab.id == tabId); // 再移除Tab if (_activeTabId == tabId) { @@ -80,16 +80,16 @@ class TabManager with ChangeNotifier { } void registerController(String tabId, BaseContentController controller) { - _tabControllers[tabId] = controller; + _contentControllers[tabId] = controller; } T? getController(String tabId) { - return _tabControllers[tabId] as T?; + return _contentControllers[tabId] as T?; } void disposeController(String tabId) { - _tabControllers[tabId]?.dispose(); - _tabControllers.remove(tabId); + _contentControllers[tabId]?.dispose(); + _contentControllers.remove(tabId); } void setActiveTab(String tabId) { diff --git a/win_text_editor/lib/framework/widgets/app_scaffold.dart b/win_text_editor/lib/framework/widgets/app_scaffold.dart index 40501ad..ab1360a 100644 --- a/win_text_editor/lib/framework/widgets/app_scaffold.dart +++ b/win_text_editor/lib/framework/widgets/app_scaffold.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:win_text_editor/framework/controllers/tab_items_controller.dart'; import 'package:win_text_editor/framework/widgets/file_explorer_pane.dart'; -import 'package:win_text_editor/framework/controllers/tab_manager.dart'; import 'package:win_text_editor/framework/widgets/tab_view.dart'; import 'package:win_text_editor/menus/app_menu.dart'; import 'package:win_text_editor/framework/controllers/file_provider.dart'; @@ -15,7 +15,7 @@ class AppScaffold extends StatelessWidget { return MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => FileProvider()), - ChangeNotifierProvider(create: (_) => TabManager()), + ChangeNotifierProvider(create: (_) => TabItemsController()), ], child: Scaffold( backgroundColor: Colors.grey[100], @@ -26,7 +26,7 @@ class AppScaffold extends StatelessWidget { child: Row( children: [ // 左侧文件树 - 传递双击事件回调 - Consumer( + Consumer( builder: (context, tabManager, child) { return FileExplorerPane( onFileDoubleTap: (path) => tabManager.handleFileDoubleTap(path), @@ -36,7 +36,7 @@ class AppScaffold extends StatelessWidget { ), // 主内容区 Expanded( - child: Consumer( + child: Consumer( builder: (_, manager, __) => TabView(tabs: manager.tabs, currentTabId: manager.activeTabId), diff --git a/win_text_editor/lib/framework/widgets/tab_view.dart b/win_text_editor/lib/framework/widgets/tab_view.dart index a7f7c95..c88b53c 100644 --- a/win_text_editor/lib/framework/widgets/tab_view.dart +++ b/win_text_editor/lib/framework/widgets/tab_view.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:win_text_editor/shared/components/text_editor.dart'; -import 'package:win_text_editor/framework/controllers/tab_manager.dart'; +import 'package:win_text_editor/framework/controllers/tab_items_controller.dart'; import 'package:win_text_editor/framework/models/tab_model.dart'; import 'package:win_text_editor/modules/content_search/widgets/content_search_view.dart'; @@ -32,8 +32,8 @@ class _TabViewState extends State { return _TabItem( tab: tab, isActive: tab.id == widget.currentTabId, - onClose: () => context.read().closeTab(tab.id), - onTap: () => context.read().setActiveTab(tab.id), + onClose: () => context.read().closeTab(tab.id), + onTap: () => context.read().setActiveTab(tab.id), ); }, ), @@ -41,7 +41,7 @@ class _TabViewState extends State { } Widget _buildTabContent() { - final tabManager = Provider.of(context, listen: false); + final tabManager = Provider.of(context, listen: false); final activeIndex = widget.tabs.indexWhere((t) => t.id == widget.currentTabId); if (activeIndex == -1) return const Center(child: Text('无活动标签页')); diff --git a/win_text_editor/lib/menus/menu_actions.dart b/win_text_editor/lib/menus/menu_actions.dart index ee20030..f0eda6e 100644 --- a/win_text_editor/lib/menus/menu_actions.dart +++ b/win_text_editor/lib/menus/menu_actions.dart @@ -1,7 +1,7 @@ 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/framework/controllers/tab_items_controller.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'; @@ -48,7 +48,7 @@ class MenuActions { } static Future _openContentSearch(BuildContext context) async { - final tabManager = Provider.of(context, listen: false); + final tabManager = Provider.of(context, listen: false); // Create new tab with unique ID final tabId = DateTime.now().millisecondsSinceEpoch.toString(); @@ -63,7 +63,7 @@ class MenuActions { } static Future _openTemplateParser(BuildContext context) async { - final tabManager = Provider.of(context, listen: false); + final tabManager = Provider.of(context, listen: false); // 使用 firstWhereOrNull 查找选项卡 final existingTab = tabManager.tabs.firstWhereOrNull( diff --git a/win_text_editor/lib/modules/content_search/widgets/content_search_view.dart b/win_text_editor/lib/modules/content_search/widgets/content_search_view.dart index 33d7158..fe22b60 100644 --- a/win_text_editor/lib/modules/content_search/widgets/content_search_view.dart +++ b/win_text_editor/lib/modules/content_search/widgets/content_search_view.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:win_text_editor/framework/controllers/tab_manager.dart'; +import 'package:win_text_editor/framework/controllers/tab_items_controller.dart'; import '../controllers/content_search_controller.dart'; import 'directory_settings.dart'; import 'search_settings.dart'; @@ -18,7 +18,7 @@ class ContentSearchView extends StatefulWidget { class ContentSearchViewState extends State { late final ContentSearchController _controller; - get tabManager => Provider.of(context, listen: false); + get tabManager => Provider.of(context, listen: false); @override void initState() {