import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:flutter/services.dart'; // 复制功能需要 import 'package:win_text_editor/app/providers/editor_provider.dart'; class TextTab extends StatelessWidget { final String tabId; const TextTab({super.key, required this.tabId}); @override Widget build(BuildContext context) { final provider = Provider.of(context); final tab = provider.tabs.firstWhere((t) => t.id == tabId); return Column( children: [ // 新增工具条 Container( height: 40, padding: const EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( color: Colors.grey[100], border: Border(bottom: BorderSide(color: Colors.grey[300]!)), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const Text('源文本', style: TextStyle(fontWeight: FontWeight.bold)), Row( children: [ IconButton( icon: const Icon(Icons.folder_open, size: 20), tooltip: '打开文件', onPressed: () => _openFile(context, tabId), ), IconButton( icon: const Icon(Icons.content_copy, size: 20), tooltip: '复制内容', onPressed: () => _copyToClipboard(context, tab.content), ), IconButton( icon: const Icon(Icons.save, size: 20), tooltip: '保存文件', onPressed: () => _saveFile(context, tab.content), ), ], ), ], ), ), // 文本编辑区 Expanded( child: TextField( maxLines: null, controller: TextEditingController(text: tab.content), onChanged: (text) => provider.updateContent(tabId, text), decoration: const InputDecoration( border: InputBorder.none, hintText: '开始输入内容...', contentPadding: EdgeInsets.all(16), ), ), ), ], ); } // 打开文件模拟功能 Future _openFile(BuildContext context, String tabId) async { final provider = Provider.of(context, listen: false); // 这里是模拟代码,实际应该使用文件选择器 const mockContent = "从文件加载的示例文本..."; provider.updateContent(tabId, mockContent); ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text('已加载文件内容'))); } // 复制到剪贴板 Future _copyToClipboard(BuildContext context, String content) async { await Clipboard.setData(ClipboardData(text: content)); if (context.mounted) { ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text('已复制到剪贴板'))); } } // 保存文件模拟功能 Future _saveFile(BuildContext context, String content) async { // 这里是模拟代码,实际应该使用文件保存对话框 if (context.mounted) { ScaffoldMessenger.of( context, ).showSnackBar(SnackBar(content: Text('已保存 ${content.length} 个字符'))); } } }