33 changed files with 61 additions and 188 deletions
@ -1,33 +0,0 @@ |
|||||||
import 'package:flutter/material.dart'; |
|
||||||
import 'package:win_text_editor/app/modules/template_parser/template_parser_service.dart'; |
|
||||||
|
|
||||||
class TemplateParserController with ChangeNotifier { |
|
||||||
final TemplateParserService _service = TemplateParserService(); |
|
||||||
|
|
||||||
String _sourceContent = ''; |
|
||||||
String _parsedContent = ''; |
|
||||||
String _statusMessage = '准备就绪'; |
|
||||||
|
|
||||||
String get sourceContent => _sourceContent; |
|
||||||
String get parsedContent => _parsedContent; |
|
||||||
String get statusMessage => _statusMessage; |
|
||||||
|
|
||||||
set sourceContent(String value) { |
|
||||||
_sourceContent = value; |
|
||||||
notifyListeners(); |
|
||||||
} |
|
||||||
|
|
||||||
Future<void> parseTemplates() async { |
|
||||||
try { |
|
||||||
_statusMessage = '解析中...'; |
|
||||||
notifyListeners(); |
|
||||||
|
|
||||||
_parsedContent = await _service.parse(_sourceContent); |
|
||||||
_statusMessage = '解析完成'; |
|
||||||
} catch (e) { |
|
||||||
_statusMessage = '解析失败: $e'; |
|
||||||
} finally { |
|
||||||
notifyListeners(); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,7 +0,0 @@ |
|||||||
class TemplateParserService { |
|
||||||
Future<String> parse(String source) async { |
|
||||||
// 实际的模板解析逻辑 |
|
||||||
await Future.delayed(const Duration(seconds: 1)); // 模拟耗时操作 |
|
||||||
return 'Parssed: $source'; |
|
||||||
} |
|
||||||
} |
|
@ -1,89 +0,0 @@ |
|||||||
import 'package:flutter/material.dart'; |
|
||||||
import 'package:win_text_editor/app/components/text_editor.dart'; |
|
||||||
import 'package:win_text_editor/app/modules/base_view.dart'; |
|
||||||
|
|
||||||
class TemplateParserView extends BaseView { |
|
||||||
const TemplateParserView({super.key, required String tabId}) : super(tabId: tabId); |
|
||||||
|
|
||||||
@override |
|
||||||
TemplateParserViewState createState() => TemplateParserViewState(); |
|
||||||
} |
|
||||||
|
|
||||||
class TemplateParserViewState extends BaseViewState { |
|
||||||
final GlobalKey<TextEditorState> _editor1Key = GlobalKey(); |
|
||||||
final GlobalKey<TextEditorState> _editor2Key = GlobalKey(); |
|
||||||
|
|
||||||
// 添加焦点监听 |
|
||||||
void _setupFocusListeners() {} |
|
||||||
|
|
||||||
@override |
|
||||||
void initState() { |
|
||||||
super.initState(); |
|
||||||
|
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) { |
|
||||||
_setupFocusListeners(); |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
@override |
|
||||||
void dispose() { |
|
||||||
//_controller.dispose(); // 清理控制器 |
|
||||||
super.dispose(); |
|
||||||
} |
|
||||||
|
|
||||||
@override |
|
||||||
void onOpenFolder(String folderPath) { |
|
||||||
// 实现打开文件夹的逻辑 |
|
||||||
print('Opening folder: $folderPath'); |
|
||||||
} |
|
||||||
|
|
||||||
@override |
|
||||||
void onOpenFile(String filePath) { |
|
||||||
// 实现打开文件的逻辑 |
|
||||||
print('Opening file: $filePath'); |
|
||||||
} |
|
||||||
|
|
||||||
// 修改loadFile方法使用_activeEditorIndex |
|
||||||
Future<void> loadFile(BuildContext context, String filePath) async {} |
|
||||||
|
|
||||||
@override |
|
||||||
Widget build(BuildContext context) { |
|
||||||
return SingleChildScrollView( |
|
||||||
child: ConstrainedBox( |
|
||||||
constraints: const BoxConstraints(minHeight: 400), |
|
||||||
child: Column( |
|
||||||
mainAxisSize: MainAxisSize.min, |
|
||||||
children: [ |
|
||||||
Flexible( |
|
||||||
child: SizedBox( |
|
||||||
height: MediaQuery.of(context).size.height / 2 - 100, |
|
||||||
child: Container( |
|
||||||
child: TextEditor( |
|
||||||
key: _editor1Key, |
|
||||||
tabId: '${widget.tabId}_1', |
|
||||||
title: '源文本', // 可配置的标题 |
|
||||||
), |
|
||||||
), |
|
||||||
), |
|
||||||
), |
|
||||||
Flexible( |
|
||||||
child: SizedBox( |
|
||||||
height: MediaQuery.of(context).size.height / 2 - 100, |
|
||||||
child: Container( |
|
||||||
decoration: BoxDecoration( |
|
||||||
border: Border.all(color: Colors.transparent, width: 2.0), |
|
||||||
), |
|
||||||
child: TextEditor( |
|
||||||
key: _editor2Key, |
|
||||||
tabId: '${widget.tabId}_2', |
|
||||||
title: '目标文本', // 可配置的标题 |
|
||||||
), |
|
||||||
), |
|
||||||
), |
|
||||||
), |
|
||||||
], |
|
||||||
), |
|
||||||
), |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
@ -1,7 +1,7 @@ |
|||||||
import 'dart:math'; |
import 'dart:math'; |
||||||
|
|
||||||
import 'package:flutter/material.dart'; |
import 'package:flutter/material.dart'; |
||||||
import 'package:win_text_editor/app/providers/logger.dart'; |
import 'package:win_text_editor/frame/providers/logger.dart'; |
||||||
|
|
||||||
class EditorProvider with ChangeNotifier { |
class EditorProvider with ChangeNotifier { |
||||||
final List<EditorTab> _tabs = []; |
final List<EditorTab> _tabs = []; |
@ -1,5 +1,5 @@ |
|||||||
import 'dart:io'; |
import 'dart:io'; |
||||||
import 'package:win_text_editor/app/models/file_node.dart'; |
import 'package:win_text_editor/frame/models/file_node.dart'; |
||||||
|
|
||||||
class FileService { |
class FileService { |
||||||
/// 延时加载目录内容(不递归) |
/// 延时加载目录内容(不递归) |
@ -1,11 +1,11 @@ |
|||||||
import 'package:flutter/material.dart'; |
import 'package:flutter/material.dart'; |
||||||
import 'package:provider/provider.dart'; |
import 'package:provider/provider.dart'; |
||||||
import 'package:win_text_editor/app/core/file_explorer_pane.dart'; |
import 'package:win_text_editor/frame/file_explorer_pane.dart'; |
||||||
import 'package:win_text_editor/app/core/tab_manager.dart'; |
import 'package:win_text_editor/frame/tab_manager.dart'; |
||||||
import 'package:win_text_editor/app/core/tab_view.dart'; |
import 'package:win_text_editor/frame/tab_view.dart'; |
||||||
import 'package:win_text_editor/app/menus/app_menu.dart'; |
import 'package:win_text_editor/menus/app_menu.dart'; |
||||||
import 'package:win_text_editor/app/providers/file_provider.dart'; |
import 'package:win_text_editor/frame/providers/file_provider.dart'; |
||||||
import 'package:win_text_editor/app/core/console_panel.dart'; |
import 'package:win_text_editor/frame/console_panel.dart'; |
||||||
|
|
||||||
class AppScaffold extends StatelessWidget { |
class AppScaffold extends StatelessWidget { |
||||||
const AppScaffold({super.key}); |
const AppScaffold({super.key}); |
@ -1,7 +1,7 @@ |
|||||||
import 'package:flutter/material.dart'; |
import 'package:flutter/material.dart'; |
||||||
import 'package:provider/provider.dart'; |
import 'package:provider/provider.dart'; |
||||||
import 'package:flutter/services.dart'; // 用于复制到剪贴板 |
import 'package:flutter/services.dart'; // 用于复制到剪贴板 |
||||||
import 'package:win_text_editor/app/providers/logger.dart'; |
import 'package:win_text_editor/frame/providers/logger.dart'; |
||||||
|
|
||||||
class ConsolePanel extends StatefulWidget { |
class ConsolePanel extends StatefulWidget { |
||||||
const ConsolePanel({super.key}); |
const ConsolePanel({super.key}); |
@ -1,8 +1,8 @@ |
|||||||
import 'package:file_picker/file_picker.dart'; |
import 'package:file_picker/file_picker.dart'; |
||||||
import 'package:flutter/material.dart'; |
import 'package:flutter/material.dart'; |
||||||
import 'package:provider/provider.dart'; |
import 'package:provider/provider.dart'; |
||||||
import 'package:win_text_editor/app/providers/file_provider.dart'; |
import 'package:win_text_editor/frame/providers/file_provider.dart'; |
||||||
import 'package:win_text_editor/app/components/file_explorer.dart'; |
import 'package:win_text_editor/shared/components/file_explorer.dart'; |
||||||
|
|
||||||
class FileExplorerPane extends StatelessWidget { |
class FileExplorerPane extends StatelessWidget { |
||||||
final Function(String)? onFileDoubleTap; |
final Function(String)? onFileDoubleTap; |
@ -1,7 +1,7 @@ |
|||||||
import 'package:flutter/material.dart'; |
import 'package:flutter/material.dart'; |
||||||
import 'package:win_text_editor/app/models/tab_model.dart'; |
import 'package:win_text_editor/frame/models/tab_model.dart'; |
||||||
import 'package:win_text_editor/app/modules/base_view.dart'; |
import 'package:win_text_editor/shared/base/base_view.dart'; |
||||||
import 'package:win_text_editor/app/providers/logger.dart'; |
import 'package:win_text_editor/frame/providers/logger.dart'; |
||||||
|
|
||||||
class TabManager with ChangeNotifier { |
class TabManager with ChangeNotifier { |
||||||
final List<AppTab> _tabs = []; |
final List<AppTab> _tabs = []; |
@ -1,5 +1,5 @@ |
|||||||
import 'package:flutter/material.dart'; |
import 'package:flutter/material.dart'; |
||||||
import 'package:win_text_editor/app/menus/menu_constants.dart'; |
import 'package:win_text_editor/menus/menu_constants.dart'; |
||||||
|
|
||||||
import 'menu_actions.dart'; |
import 'menu_actions.dart'; |
||||||
|
|
@ -1,9 +1,9 @@ |
|||||||
import 'package:flutter/material.dart'; |
import 'package:flutter/material.dart'; |
||||||
import 'package:file_picker/file_picker.dart'; |
import 'package:file_picker/file_picker.dart'; |
||||||
import 'package:provider/provider.dart'; |
import 'package:provider/provider.dart'; |
||||||
import 'package:win_text_editor/app/core/tab_manager.dart'; |
import 'package:win_text_editor/frame/tab_manager.dart'; |
||||||
import 'package:win_text_editor/app/menus/menu_constants.dart'; |
import 'package:win_text_editor/menus/menu_constants.dart'; |
||||||
import 'package:win_text_editor/app/providers/file_provider.dart'; |
import 'package:win_text_editor/frame/providers/file_provider.dart'; |
||||||
import 'package:collection/collection.dart'; |
import 'package:collection/collection.dart'; |
||||||
import 'dart:io'; |
import 'dart:io'; |
||||||
|
|
@ -0,0 +1,6 @@ |
|||||||
|
class MatchResult { |
||||||
|
final int start; |
||||||
|
final int end; |
||||||
|
|
||||||
|
const MatchResult({required this.start, required this.end}); |
||||||
|
} |
@ -0,0 +1 @@ |
|||||||
|
enum SearchMode { locate, count } |
@ -1,8 +1,8 @@ |
|||||||
import 'package:flutter/material.dart'; |
import 'package:flutter/material.dart'; |
||||||
import 'package:provider/provider.dart'; |
import 'package:provider/provider.dart'; |
||||||
import 'package:win_text_editor/app/modules/base_view.dart'; |
import 'package:win_text_editor/shared/base/base_view.dart'; |
||||||
import 'package:win_text_editor/app/providers/logger.dart'; |
import 'package:win_text_editor/frame/providers/logger.dart'; |
||||||
import 'content_search_controller.dart'; |
import '../providers/content_search_controller.dart'; |
||||||
import 'directory_settings.dart'; |
import 'directory_settings.dart'; |
||||||
import 'search_settings.dart'; |
import 'search_settings.dart'; |
||||||
import 'results_view.dart'; |
import 'results_view.dart'; |
@ -1,6 +1,6 @@ |
|||||||
import 'package:flutter/material.dart'; |
import 'package:flutter/material.dart'; |
||||||
import 'package:provider/provider.dart'; |
import 'package:provider/provider.dart'; |
||||||
import 'package:win_text_editor/app/modules/content_search/content_search_controller.dart'; |
import 'package:win_text_editor/modules/content_search/providers/content_search_controller.dart'; |
||||||
|
|
||||||
class DirectorySettings extends StatefulWidget { |
class DirectorySettings extends StatefulWidget { |
||||||
const DirectorySettings({super.key}); |
const DirectorySettings({super.key}); |
@ -1,11 +1,11 @@ |
|||||||
import 'package:flutter/material.dart'; |
import 'package:flutter/material.dart'; |
||||||
import 'package:provider/provider.dart'; |
import 'package:provider/provider.dart'; |
||||||
import 'package:win_text_editor/app/components/text_editor.dart'; |
import 'package:win_text_editor/shared/components/text_editor.dart'; |
||||||
import 'package:win_text_editor/app/models/search_model.dart'; |
import 'package:win_text_editor/modules/content_search/providers/content_search_controller.dart'; |
||||||
import 'package:win_text_editor/app/modules/content_search/content_search_controller.dart'; |
import 'package:win_text_editor/modules/content_search/models/search_mode.dart'; |
||||||
|
|
||||||
class SearchSettings extends StatelessWidget { |
class SearchSettings extends StatelessWidget { |
||||||
SearchSettings({super.key}); |
const SearchSettings({super.key}); |
||||||
|
|
||||||
@override |
@override |
||||||
Widget build(BuildContext context) { |
Widget build(BuildContext context) { |
@ -1,6 +1,6 @@ |
|||||||
import 'package:flutter/material.dart'; |
import 'package:flutter/material.dart'; |
||||||
import 'package:provider/provider.dart'; |
import 'package:provider/provider.dart'; |
||||||
import 'package:win_text_editor/app/core/tab_manager.dart'; |
import 'package:win_text_editor/frame/tab_manager.dart'; |
||||||
|
|
||||||
// 修改后的base_view.dart |
// 修改后的base_view.dart |
||||||
abstract class BaseView extends StatefulWidget { |
abstract class BaseView extends StatefulWidget { |
Loading…
Reference in new issue