You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
5.3 KiB
95 lines
5.3 KiB
// modules/tab_content_registry.dart |
|
import 'package:flutter/material.dart'; |
|
import 'package:win_text_editor/framework/models/tab_model.dart'; |
|
import 'package:win_text_editor/modules/call_function/controllers/call_function_controller.dart'; |
|
import 'package:win_text_editor/modules/call_function/widgets/call_function_view.dart'; |
|
import 'package:win_text_editor/modules/code_creater/controllers/code_creater_controller.dart'; |
|
import 'package:win_text_editor/modules/code_creater/widgets/code_creater_view.dart'; |
|
import 'package:win_text_editor/modules/data_compare/controllers/data_compare_controller.dart'; |
|
import 'package:win_text_editor/modules/data_compare/widgets/data_compare_view.dart'; |
|
import 'package:win_text_editor/modules/data_extract/controllers/data_extract_controller.dart'; |
|
import 'package:win_text_editor/modules/data_extract/widgets/data_extract_view.dart'; |
|
import 'package:win_text_editor/modules/data_format/controllers/data_format_controller.dart'; |
|
import 'package:win_text_editor/modules/data_format/widgets/data_format_view.dart'; |
|
import 'package:win_text_editor/modules/demo/controllers/demo_controller.dart'; |
|
import 'package:win_text_editor/modules/demo/widgets/demo_view.dart'; |
|
import 'package:win_text_editor/modules/memory_table/controllers/memory_table_controller.dart'; |
|
import 'package:win_text_editor/modules/memory_table/widgets/memory_table_view.dart'; |
|
import 'package:win_text_editor/modules/uft_component/controllers/uft_component_controller.dart'; |
|
import 'package:win_text_editor/modules/uft_component/widgets/uft_component_view.dart'; |
|
import 'package:win_text_editor/modules/xml_search/controllers/xml_search_controller.dart'; |
|
import 'package:win_text_editor/modules/xml_search/widgets/xml_search_view.dart'; |
|
import 'package:win_text_editor/shared/base/base_content_controller.dart'; |
|
import 'package:win_text_editor/modules/content_search/controllers/content_search_controller.dart'; |
|
import 'package:win_text_editor/modules/template_parser/controllers/template_parser_controller.dart'; |
|
import 'package:win_text_editor/modules/content_search/widgets/content_search_view.dart'; |
|
import 'package:win_text_editor/modules/template_parser/widgets/template_parser_view.dart'; |
|
|
|
class RouterKey { |
|
static const String contentSearch = 'content_search'; |
|
static const String templateParser = 'template_parser'; |
|
static const String dataFormat = 'data_format'; |
|
static const String textEditor = 'text_editor'; |
|
static const String dataCompare = 'data_compare'; |
|
static const String dataExtract = 'data_extract'; |
|
static const String xmlSearch = 'xml_search'; |
|
static const String memoryTable = 'memory_table'; |
|
static const String uftComponent = 'uft_component'; |
|
static const String callFunction = 'call_function'; |
|
static const String outline = 'outline'; |
|
static const String demo = 'demo'; |
|
static const String codeCreater = 'code_creater'; |
|
} |
|
|
|
class ModuleRouter { |
|
//映射控制器 |
|
static final Map<String, ContentControllerCreator> _controllerCreators = { |
|
RouterKey.contentSearch: (tab) => ContentSearchController(), |
|
RouterKey.templateParser: (tab) => TemplateParserController(), |
|
RouterKey.dataFormat: (tab) => DataFormatController(), |
|
RouterKey.dataCompare: (tab) => DataCompareController(), |
|
RouterKey.dataExtract: (tab) => DataExtractController(), |
|
RouterKey.xmlSearch: (tab) => XmlSearchController(), |
|
RouterKey.memoryTable: (tab) => MemoryTableController(), |
|
RouterKey.uftComponent: (tab) => UftComponentController(), |
|
RouterKey.callFunction: (tab) => CallFunctionController(), |
|
RouterKey.demo: (tab) => DemoController(), |
|
RouterKey.codeCreater: (tab) => CodeCreaterController(), |
|
}; |
|
|
|
// 映射UI组件 |
|
static final Map<String, ContentWidgetBuilder> _widgetBuilders = { |
|
RouterKey.contentSearch: (tab, controller) => ContentSearchView(tabId: tab.id), |
|
RouterKey.templateParser: (tab, controller) => TemplateParserView(tabId: tab.id), |
|
RouterKey.dataFormat: (tab, controller) => DataFormatView(tabId: tab.id), |
|
RouterKey.dataCompare: (tab, controller) => DataCompareView(tabId: tab.id), |
|
RouterKey.dataExtract: (tab, controller) => DataExtractView(tabId: tab.id), |
|
RouterKey.xmlSearch: (tab, controller) => XmlSearchView(tabId: tab.id), |
|
RouterKey.memoryTable: (tab, controller) => MemoryTableView(tabId: tab.id), |
|
RouterKey.uftComponent: (tab, controller) => UftComponentView(tabId: tab.id), |
|
RouterKey.callFunction: (tab, controller) => CallFunctionView(tabId: tab.id), |
|
RouterKey.demo: (tab, controller) => DemoView(tabId: tab.id), |
|
RouterKey.codeCreater: (tab, controller) => CodeCreaterView(tabId: tab.id), |
|
}; |
|
|
|
static BaseContentController? createControllerForTab(AppTab tab) { |
|
final creator = _controllerCreators[tab.type]; |
|
return creator != null ? creator(tab) : null; |
|
} |
|
|
|
static Widget buildWidgetForTab(AppTab tab, ChangeNotifier? controller) { |
|
final builder = _widgetBuilders[tab.type] ?? _widgetBuilders['default']; |
|
return builder!(tab, controller); |
|
} |
|
|
|
static void registerControllerCreator(String type, ContentControllerCreator creator) { |
|
_controllerCreators[type] = creator; |
|
} |
|
|
|
static void registerWidgetBuilder(String type, ContentWidgetBuilder builder) { |
|
_widgetBuilders[type] = builder; |
|
} |
|
} |
|
|
|
typedef ContentControllerCreator = BaseContentController Function(AppTab tab); |
|
typedef ContentWidgetBuilder = Widget Function(AppTab tab, ChangeNotifier? controller);
|
|
|