import 'package:flutter/material.dart'; import 'package:win_text_editor/frame/models/tab_model.dart'; import 'package:win_text_editor/shared/base/base_view.dart'; import 'package:win_text_editor/frame/providers/logger.dart'; class TabManager with ChangeNotifier { final List _tabs = []; String? _activeTabId; List get tabs => _tabs; String? get activeTabId => _activeTabId; BaseViewState? _activeViewState; AppTab? get activeTab { if (_activeTabId == null) return null; try { return _tabs.firstWhere((tab) => tab.id == _activeTabId); } catch (e) { Logger().error("找不到活动选项卡: $_activeTabId", source: 'EditorProvider'); return null; } } Future addTab( String id, { String title = '未命名', String? type, IconData? icon, String content = '', }) async { final newTab = AppTab(id: id, title: title, type: type, icon: icon, content: content); _tabs.add(newTab); _activeTabId = newTab.id; notifyListeners(); } AppTab? getTabById(String tabId) { try { return _tabs.firstWhere((tab) => tab.id == tabId); } catch (e) { Logger().error("找不到选项卡: ${tabId}", source: 'EditorProvider'); return null; } } void closeTab(String tabId) { Logger().info('关闭选项卡: $tabId'); _tabs.removeWhere((tab) => tab.id == tabId); if (_activeTabId == tabId) { _activeTabId = _tabs.isNotEmpty ? _tabs.last.id : null; } notifyListeners(); } void setActiveTab(String tabId) { if (_activeTabId == tabId) return; // 如果已经是活动Tab则不通知 Logger().info('设置活动选项卡: $tabId'); _activeTabId = tabId; notifyListeners(); } void handleFolderDoubleTap(String folderPath) { _activeViewState?.onOpenFolder(folderPath); } void handleFileDoubleTap(String filePath) { _activeViewState?.onOpenFile(filePath); } void setActiveViewState(BaseViewState? state) { if (_activeViewState != state) { _activeViewState = state; // 不需要 notifyListeners(),因为这只是内部状态更新 } } }