From 932a7fde25929ce246f9b5ee34bef2fa68d5fefa Mon Sep 17 00:00:00 2001 From: lizy Date: Fri, 14 Aug 2026 15:58:31 +0800 Subject: [PATCH 01/17] refactor: relocate-flutter-study-app [relocate-flutter-study-app] --- .metadata => apps/flutter_study/.metadata | 0 .../flutter_study/analysis_options.yaml | 0 .../flutter_study/assets}/demo.gif | Bin .../flutter_study/flutterguard.yaml | 0 .../flutter_study/lib}/AI_ANALYSIS.md | 0 .../flutter_study/lib}/AI_MODULE_INDEX.md | 0 .../flutter_study/lib}/app/AI_ANALYSIS.md | 0 {lib => apps/flutter_study/lib}/app/app.dart | 0 .../flutter_study/lib}/app/app_bootstrap.dart | 0 .../lib}/app/category_navigation.dart | 0 .../lib}/app/category_window_app.dart | 0 .../lib}/app/module_home_page.dart | 0 .../lib}/app/router/AI_ANALYSIS.md | 0 .../lib}/app/router/app_route_table.dart | 0 .../lib}/app/router/app_router.dart | 0 {lib => apps/flutter_study/lib}/main.dart | 0 .../lib}/module_registry/AI_ANALYSIS.md | 0 .../module_registry/module_catalog_utils.dart | 0 .../lib}/module_registry/module_category.dart | 0 .../lib}/module_registry/module_entry.dart | 0 .../flutter_study/lib}/modules/AI_ANALYSIS.md | 0 .../lib}/modules/async/AI_ANALYSIS.md | 0 .../async/isolate_basic/AI_ANALYSIS.md | 0 .../async/isolate_basic/module_entry.dart | 0 .../async/isolate_basic/module_root.dart | 0 .../async/isolate_basic/module_routes.dart | 0 .../isolate_basic/with_isolate_page.dart | 0 .../isolate_basic/without_isolate_page.dart | 0 .../async/isolate_task_manager/AI_ANALYSIS.md | 0 .../isolate_task_manager/module_entry.dart | 0 .../isolate_task_manager/module_root.dart | 0 .../isolate_task_manager/task_manager.dart | 0 .../async/stream_subscription/AI_ANALYSIS.md | 0 .../models/message_model.dart | 0 .../stream_subscription/module_entry.dart | 0 .../stream_subscription/module_routes.dart | 0 .../pages/broadcast_demo_page.dart | 0 .../stream_subscription/pages/home_page.dart | 0 .../pages/stream_demo_controller.dart | 0 .../pages/stream_demo_page.dart | 0 .../services/stream_service.dart | 0 .../utils/stream_utils.dart | 0 .../lib}/modules/basic/AI_ANALYSIS.md | 0 .../basic/debounce_throttle/AI_ANALYSIS.md | 0 .../basic/debounce_throttle/module_entry.dart | 0 .../basic/debounce_throttle/module_root.dart | 0 .../utils/debounce_throttle.dart | 0 .../modules/basic/microtask/AI_ANALYSIS.md | 0 .../basic/microtask/models/event_log.dart | 0 .../modules/basic/microtask/module_entry.dart | 0 .../basic/microtask/module_routes.dart | 0 .../pages/advanced_examples_page.dart | 0 .../microtask/pages/event_queue_page.dart | 0 .../basic/microtask/pages/home_page.dart | 0 .../microtask/pages/microtask_queue_page.dart | 0 .../microtask/widgets/code_snippet_view.dart | 0 .../microtask/widgets/event_log_view.dart | 0 .../modules/basic/tree_state/AI_ANALYSIS.md | 0 .../basic/tree_state/module_entry.dart | 0 .../basic/tree_state/module_routes.dart | 0 .../tree_state/pages/basic_widgets_page.dart | 0 .../tree_state/pages/demo_home_page.dart | 0 .../tree_state/pages/painter_demo_page.dart | 0 .../pages/repaint_boundary_demo_page.dart | 0 .../pages/state_lifecycle_page.dart | 0 .../lib}/modules/platform/AI_ANALYSIS.md | 0 .../platform/dio_interceptor/AI_ANALYSIS.md | 0 .../mock_server/mock_server.dart | 0 .../dio_interceptor/models/article.dart | 0 .../dio_interceptor/module_entry.dart | 0 .../dio_interceptor/module_routes.dart | 0 .../network/api/api_service.dart | 0 .../dio_interceptor/network/http_client.dart | 0 .../network/interceptor/auth_interceptor.dart | 0 .../interceptor/error_interceptor.dart | 0 .../network/interceptor/log_interceptor.dart | 0 .../interceptor/retry_interceptor.dart | 0 .../dio_interceptor/pages/home_page.dart | 0 .../dio_interceptor/pages/login_page.dart | 0 .../platform/file_picker/AI_ANALYSIS.md | 0 .../platform/file_picker/module_entry.dart | 0 .../platform/file_picker/module_root.dart | 0 .../file_picker/pages/file_picker_page.dart | 0 .../state/file_picker_controller.dart | 0 .../online_video_player/AI_ANALYSIS.md | 0 .../online_video_player/module_entry.dart | 0 .../online_video_player/module_root.dart | 0 .../state/media_kit_player_adapter.dart | 0 .../widgets/video_player_controls.dart | 0 .../platform/usb_detector/AI_ANALYSIS.md | 0 .../usb_detector/models/usb_device_info.dart | 0 .../platform/usb_detector/module_entry.dart | 0 .../platform/usb_detector/module_root.dart | 0 .../services/usb_detection_service.dart | 0 .../lib}/modules/popup_table/AI_ANALYSIS.md | 0 .../overlay_follow_compare/AI_ANALYSIS.md | 0 .../overlay_follow_compare/module_entry.dart | 0 .../overlay_follow_compare/module_root.dart | 0 .../widgets/compare_panel.dart | 0 .../widgets/dropdown_surface.dart | 0 .../widgets/follower_demo.dart | 0 .../widgets/manual_demo.dart | 0 .../widgets/status_info.dart | 0 .../popup_list_interaction/AI_ANALYSIS.md | 0 .../popup_list_interaction/module_entry.dart | 0 .../popup_list_interaction/module_root.dart | 0 .../popup_list_interaction/module_routes.dart | 0 .../pages/list_page.dart | 0 .../pages/popup_page.dart | 0 .../popup_table/popup_widgets/AI_ANALYSIS.md | 0 .../popup_widgets/module_entry.dart | 0 .../popup_widgets/module_root.dart | 0 .../widgets/bottom_sheet_demo.dart | 0 .../widgets/context_menu_demo.dart | 0 .../popup_widgets/widgets/demo_section.dart | 0 .../widgets/dialog_demo_tile.dart | 0 .../widgets/learning_content.dart | 0 .../popup_table/scroll_table/AI_ANALYSIS.md | 0 .../scroll_table/module_entry.dart | 0 .../popup_table/scroll_table/module_root.dart | 0 .../scroll_table/widgets/scroll_table.dart | 0 .../lib}/modules/state/AI_ANALYSIS.md | 0 .../modules/state/flutter_ioc/AI_ANALYSIS.md | 0 .../flutter_ioc/model/counter_model.dart | 0 .../state/flutter_ioc/module_entry.dart | 0 .../state/flutter_ioc/module_root.dart | 0 .../state/status_management/AI_ANALYSIS.md | 0 .../state/status_management/module_entry.dart | 0 .../status_management/module_routes.dart | 0 .../pages/bloc/bloc_route.dart | 0 .../pages/bloc/counter_bloc.dart | 0 .../pages/bloc/counter_event.dart | 0 .../pages/bloc/counter_state.dart | 0 .../status_management/pages/home_page.dart | 0 .../pages/provider/models/counter_cn.dart | 0 .../pages/provider/models/counter_model.dart | 0 .../pages/provider/provider_future_route.dart | 0 .../provider/provider_lifting_route.dart | 0 .../pages/provider/provider_route.dart | 0 .../pages/provider/provider_todo_route.dart | 0 .../pages/provider/widgets/granular_grid.dart | 0 .../provider/widgets/provider_perks.dart | 0 .../pages/riverpod/riverpod_future_route.dart | 0 .../riverpod/riverpod_lifting_route.dart | 0 .../pages/riverpod/riverpod_route.dart | 0 .../pages/riverpod/riverpod_todo_route.dart | 0 .../widgets/state_flow_demo.dart | 0 .../lib}/modules/ui/AI_ANALYSIS.md | 0 .../modules/ui/adsorption_line/AI_ANALYSIS.md | 0 .../models/drawing_element.dart | 0 .../ui/adsorption_line/module_entry.dart | 0 .../pages/adsorption_line_page.dart | 0 .../services/adsorption_manager.dart | 0 .../adsorption_line/state/drawing_state.dart | 0 .../widgets/drawing_board.dart | 0 .../widgets/drawing_canvas.dart | 0 .../ui/download_animation/AI_ANALYSIS.md | 0 .../models/animation_config.dart | 0 .../models/download_item.dart | 0 .../models/overlay_download_item.dart | 0 .../ui/download_animation/module_entry.dart | 0 .../ui/download_animation/module_root.dart | 0 .../ui/download_animation/module_routes.dart | 0 .../pages/download_animation_page.dart | 0 .../pages/download_comparison_page.dart | 0 .../pages/paint_animation_page.dart | 0 .../services/overlay_download_service.dart | 0 .../modules/ui/font_picker/AI_ANALYSIS.md | 0 .../ui/font_picker/data/font_catalog.dart | 0 .../ui/font_picker/models/font_option.dart | 0 .../modules/ui/font_picker/module_entry.dart | 0 .../modules/ui/font_picker/module_root.dart | 0 .../modules/ui/font_picker/module_routes.dart | 0 .../font_picker/pages/font_picker_page.dart | 0 .../pages/weight_compare_page.dart | 0 .../state/font_loader_service.dart | 0 .../font_picker/widgets/font_picker_list.dart | 0 .../widgets/font_preview_panel.dart | 0 .../ui/gcode_visualizer/AI_ANALYSIS.md | 0 .../ui/gcode_visualizer/module_entry.dart | 0 .../pages/gcode_visualizer_page.dart | 0 .../state/gcode_player_controller.dart | 0 .../widgets/current_segment_inspector.dart | 0 .../widgets/gcode_editor_panel.dart | 0 .../flutter_study/lib}/shared/AI_ANALYSIS.md | 0 .../lib}/shared/multi_window/AI_ANALYSIS.md | 0 .../multi_window/multi_window_manager.dart | 0 .../lib}/shared/platform/AI_ANALYSIS.md | 0 .../flutter_study/macos}/.gitignore | 1 + .../macos}/Flutter/Flutter-Debug.xcconfig | 0 .../macos}/Flutter/Flutter-Release.xcconfig | 0 .../Flutter/GeneratedPluginRegistrant.swift | 0 {macos => apps/flutter_study/macos}/Podfile | 0 .../flutter_study/macos}/Podfile.lock | 0 .../macos}/Runner.xcodeproj/project.pbxproj | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/xcschemes/Runner.xcscheme | 0 .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../macos}/Runner/AppDelegate.swift | 0 .../AppIcon.appiconset/Contents.json | 0 .../AppIcon.appiconset/app_icon_1024.png | Bin .../AppIcon.appiconset/app_icon_128.png | Bin .../AppIcon.appiconset/app_icon_16.png | Bin .../AppIcon.appiconset/app_icon_256.png | Bin .../AppIcon.appiconset/app_icon_32.png | Bin .../AppIcon.appiconset/app_icon_512.png | Bin .../AppIcon.appiconset/app_icon_64.png | Bin .../macos}/Runner/Base.lproj/MainMenu.xib | 0 .../macos}/Runner/Configs/AppInfo.xcconfig | 0 .../macos}/Runner/Configs/Debug.xcconfig | 0 .../macos}/Runner/Configs/Release.xcconfig | 0 .../macos}/Runner/Configs/Warnings.xcconfig | 0 .../macos}/Runner/DebugProfile.entitlements | 0 .../flutter_study/macos}/Runner/Info.plist | 0 .../macos}/Runner/MainFlutterWindow.swift | 0 .../macos}/Runner/Release.entitlements | 0 .../macos}/RunnerTests/RunnerTests.swift | 0 apps/flutter_study/pubspec.yaml | 46 ++++++++++++++++++ .../stream_subscription_test.dart | 0 .../file_picker/file_picker_test.dart | 0 .../online_video_player_test.dart | 0 .../overlay_follow_compare_test.dart | 0 .../popup_widgets/popup_widgets_test.dart | 0 .../adsorption_line/adsorption_line_test.dart | 0 .../download_animation_test.dart | 0 .../ui/font_picker/font_picker_test.dart | 0 .../gcode_visualizer_test.dart | 0 .../shared/module_catalog_utils_test.dart | 0 .../flutter_study/windows}/.gitignore | 0 .../flutter_study/windows}/CMakeLists.txt | 0 .../windows}/flutter/CMakeLists.txt | 0 .../windows}/runner/CMakeLists.txt | 0 .../flutter_study/windows}/runner/Runner.rc | 0 .../windows}/runner/flutter_window.cpp | 0 .../windows}/runner/flutter_window.h | 0 .../flutter_study/windows}/runner/main.cpp | 0 .../flutter_study/windows}/runner/resource.h | 0 .../windows}/runner/resources/app_icon.ico | Bin .../windows}/runner/runner.exe.manifest | 0 .../flutter_study/windows}/runner/utils.cpp | 0 .../flutter_study/windows}/runner/utils.h | 0 .../windows}/runner/win32_window.cpp | 0 .../windows}/runner/win32_window.h | 0 pubspec.yaml | 43 ++-------------- 245 files changed, 50 insertions(+), 40 deletions(-) rename .metadata => apps/flutter_study/.metadata (100%) rename analysis_options.yaml => apps/flutter_study/analysis_options.yaml (100%) rename {assets => apps/flutter_study/assets}/demo.gif (100%) rename flutterguard.yaml => apps/flutter_study/flutterguard.yaml (100%) rename {lib => apps/flutter_study/lib}/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/AI_MODULE_INDEX.md (100%) rename {lib => apps/flutter_study/lib}/app/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/app/app.dart (100%) rename {lib => apps/flutter_study/lib}/app/app_bootstrap.dart (100%) rename {lib => apps/flutter_study/lib}/app/category_navigation.dart (100%) rename {lib => apps/flutter_study/lib}/app/category_window_app.dart (100%) rename {lib => apps/flutter_study/lib}/app/module_home_page.dart (100%) rename {lib => apps/flutter_study/lib}/app/router/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/app/router/app_route_table.dart (100%) rename {lib => apps/flutter_study/lib}/app/router/app_router.dart (100%) rename {lib => apps/flutter_study/lib}/main.dart (100%) rename {lib => apps/flutter_study/lib}/module_registry/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/module_registry/module_catalog_utils.dart (100%) rename {lib => apps/flutter_study/lib}/module_registry/module_category.dart (100%) rename {lib => apps/flutter_study/lib}/module_registry/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/async/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/async/isolate_basic/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/async/isolate_basic/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/isolate_basic/module_root.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/isolate_basic/module_routes.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/isolate_basic/with_isolate_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/isolate_basic/without_isolate_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/isolate_task_manager/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/async/isolate_task_manager/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/isolate_task_manager/module_root.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/isolate_task_manager/task_manager.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/stream_subscription/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/async/stream_subscription/models/message_model.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/stream_subscription/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/stream_subscription/module_routes.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/stream_subscription/pages/broadcast_demo_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/stream_subscription/pages/home_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/stream_subscription/pages/stream_demo_controller.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/stream_subscription/pages/stream_demo_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/stream_subscription/services/stream_service.dart (100%) rename {lib => apps/flutter_study/lib}/modules/async/stream_subscription/utils/stream_utils.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/basic/debounce_throttle/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/basic/debounce_throttle/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/debounce_throttle/module_root.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/debounce_throttle/utils/debounce_throttle.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/microtask/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/basic/microtask/models/event_log.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/microtask/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/microtask/module_routes.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/microtask/pages/advanced_examples_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/microtask/pages/event_queue_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/microtask/pages/home_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/microtask/pages/microtask_queue_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/microtask/widgets/code_snippet_view.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/microtask/widgets/event_log_view.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/tree_state/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/basic/tree_state/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/tree_state/module_routes.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/tree_state/pages/basic_widgets_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/tree_state/pages/demo_home_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/tree_state/pages/painter_demo_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/tree_state/pages/repaint_boundary_demo_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/basic/tree_state/pages/state_lifecycle_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/platform/dio_interceptor/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/platform/dio_interceptor/mock_server/mock_server.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/dio_interceptor/models/article.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/dio_interceptor/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/dio_interceptor/module_routes.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/dio_interceptor/network/api/api_service.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/dio_interceptor/network/http_client.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/dio_interceptor/network/interceptor/auth_interceptor.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/dio_interceptor/network/interceptor/error_interceptor.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/dio_interceptor/network/interceptor/log_interceptor.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/dio_interceptor/network/interceptor/retry_interceptor.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/dio_interceptor/pages/home_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/dio_interceptor/pages/login_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/file_picker/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/platform/file_picker/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/file_picker/module_root.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/file_picker/pages/file_picker_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/file_picker/state/file_picker_controller.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/online_video_player/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/platform/online_video_player/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/online_video_player/module_root.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/online_video_player/state/media_kit_player_adapter.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/online_video_player/widgets/video_player_controls.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/usb_detector/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/platform/usb_detector/models/usb_device_info.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/usb_detector/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/usb_detector/module_root.dart (100%) rename {lib => apps/flutter_study/lib}/modules/platform/usb_detector/services/usb_detection_service.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/overlay_follow_compare/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/overlay_follow_compare/module_root.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/overlay_follow_compare/widgets/compare_panel.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/overlay_follow_compare/widgets/dropdown_surface.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/overlay_follow_compare/widgets/follower_demo.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/overlay_follow_compare/widgets/manual_demo.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/overlay_follow_compare/widgets/status_info.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/popup_list_interaction/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/popup_list_interaction/module_root.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/popup_list_interaction/module_routes.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/popup_list_interaction/pages/list_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/popup_list_interaction/pages/popup_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/popup_widgets/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/popup_widgets/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/popup_widgets/module_root.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/popup_widgets/widgets/bottom_sheet_demo.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/popup_widgets/widgets/context_menu_demo.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/popup_widgets/widgets/demo_section.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/popup_widgets/widgets/dialog_demo_tile.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/popup_widgets/widgets/learning_content.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/scroll_table/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/scroll_table/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/scroll_table/module_root.dart (100%) rename {lib => apps/flutter_study/lib}/modules/popup_table/scroll_table/widgets/scroll_table.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/state/flutter_ioc/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/state/flutter_ioc/model/counter_model.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/flutter_ioc/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/flutter_ioc/module_root.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/module_routes.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/bloc/bloc_route.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/bloc/counter_bloc.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/bloc/counter_event.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/bloc/counter_state.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/home_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/provider/models/counter_cn.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/provider/models/counter_model.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/provider/provider_future_route.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/provider/provider_lifting_route.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/provider/provider_route.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/provider/provider_todo_route.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/provider/widgets/granular_grid.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/provider/widgets/provider_perks.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/riverpod/riverpod_future_route.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/riverpod/riverpod_lifting_route.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/riverpod/riverpod_route.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/pages/riverpod/riverpod_todo_route.dart (100%) rename {lib => apps/flutter_study/lib}/modules/state/status_management/widgets/state_flow_demo.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/ui/adsorption_line/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/ui/adsorption_line/models/drawing_element.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/adsorption_line/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/adsorption_line/pages/adsorption_line_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/adsorption_line/services/adsorption_manager.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/adsorption_line/state/drawing_state.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/adsorption_line/widgets/drawing_board.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/adsorption_line/widgets/drawing_canvas.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/download_animation/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/ui/download_animation/models/animation_config.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/download_animation/models/download_item.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/download_animation/models/overlay_download_item.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/download_animation/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/download_animation/module_root.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/download_animation/module_routes.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/download_animation/pages/download_animation_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/download_animation/pages/download_comparison_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/download_animation/pages/paint_animation_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/download_animation/services/overlay_download_service.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/font_picker/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/ui/font_picker/data/font_catalog.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/font_picker/models/font_option.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/font_picker/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/font_picker/module_root.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/font_picker/module_routes.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/font_picker/pages/font_picker_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/font_picker/pages/weight_compare_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/font_picker/state/font_loader_service.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/font_picker/widgets/font_picker_list.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/font_picker/widgets/font_preview_panel.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/gcode_visualizer/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/modules/ui/gcode_visualizer/module_entry.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/gcode_visualizer/state/gcode_player_controller.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/gcode_visualizer/widgets/current_segment_inspector.dart (100%) rename {lib => apps/flutter_study/lib}/modules/ui/gcode_visualizer/widgets/gcode_editor_panel.dart (100%) rename {lib => apps/flutter_study/lib}/shared/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/shared/multi_window/AI_ANALYSIS.md (100%) rename {lib => apps/flutter_study/lib}/shared/multi_window/multi_window_manager.dart (100%) rename {lib => apps/flutter_study/lib}/shared/platform/AI_ANALYSIS.md (100%) rename {macos => apps/flutter_study/macos}/.gitignore (86%) rename {macos => apps/flutter_study/macos}/Flutter/Flutter-Debug.xcconfig (100%) rename {macos => apps/flutter_study/macos}/Flutter/Flutter-Release.xcconfig (100%) rename {macos => apps/flutter_study/macos}/Flutter/GeneratedPluginRegistrant.swift (100%) rename {macos => apps/flutter_study/macos}/Podfile (100%) rename {macos => apps/flutter_study/macos}/Podfile.lock (100%) rename {macos => apps/flutter_study/macos}/Runner.xcodeproj/project.pbxproj (100%) rename {macos => apps/flutter_study/macos}/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {macos => apps/flutter_study/macos}/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme (100%) rename {macos => apps/flutter_study/macos}/Runner.xcworkspace/contents.xcworkspacedata (100%) rename {macos => apps/flutter_study/macos}/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {macos => apps/flutter_study/macos}/Runner/AppDelegate.swift (100%) rename {macos => apps/flutter_study/macos}/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename {macos => apps/flutter_study/macos}/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png (100%) rename {macos => apps/flutter_study/macos}/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png (100%) rename {macos => apps/flutter_study/macos}/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png (100%) rename {macos => apps/flutter_study/macos}/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png (100%) rename {macos => apps/flutter_study/macos}/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png (100%) rename {macos => apps/flutter_study/macos}/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png (100%) rename {macos => apps/flutter_study/macos}/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png (100%) rename {macos => apps/flutter_study/macos}/Runner/Base.lproj/MainMenu.xib (100%) rename {macos => apps/flutter_study/macos}/Runner/Configs/AppInfo.xcconfig (100%) rename {macos => apps/flutter_study/macos}/Runner/Configs/Debug.xcconfig (100%) rename {macos => apps/flutter_study/macos}/Runner/Configs/Release.xcconfig (100%) rename {macos => apps/flutter_study/macos}/Runner/Configs/Warnings.xcconfig (100%) rename {macos => apps/flutter_study/macos}/Runner/DebugProfile.entitlements (100%) rename {macos => apps/flutter_study/macos}/Runner/Info.plist (100%) rename {macos => apps/flutter_study/macos}/Runner/MainFlutterWindow.swift (100%) rename {macos => apps/flutter_study/macos}/Runner/Release.entitlements (100%) rename {macos => apps/flutter_study/macos}/RunnerTests/RunnerTests.swift (100%) create mode 100644 apps/flutter_study/pubspec.yaml rename {test => apps/flutter_study/test}/modules/async/stream_subscription/stream_subscription_test.dart (100%) rename {test => apps/flutter_study/test}/modules/platform/file_picker/file_picker_test.dart (100%) rename {test => apps/flutter_study/test}/modules/platform/online_video_player/online_video_player_test.dart (100%) rename {test => apps/flutter_study/test}/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart (100%) rename {test => apps/flutter_study/test}/modules/popup_table/popup_widgets/popup_widgets_test.dart (100%) rename {test => apps/flutter_study/test}/modules/ui/adsorption_line/adsorption_line_test.dart (100%) rename {test => apps/flutter_study/test}/modules/ui/download_animation/download_animation_test.dart (100%) rename {test => apps/flutter_study/test}/modules/ui/font_picker/font_picker_test.dart (100%) rename {test => apps/flutter_study/test}/modules/ui/gcode_visualizer/gcode_visualizer_test.dart (100%) rename {test => apps/flutter_study/test}/shared/module_catalog_utils_test.dart (100%) rename {windows => apps/flutter_study/windows}/.gitignore (100%) rename {windows => apps/flutter_study/windows}/CMakeLists.txt (100%) rename {windows => apps/flutter_study/windows}/flutter/CMakeLists.txt (100%) rename {windows => apps/flutter_study/windows}/runner/CMakeLists.txt (100%) rename {windows => apps/flutter_study/windows}/runner/Runner.rc (100%) rename {windows => apps/flutter_study/windows}/runner/flutter_window.cpp (100%) rename {windows => apps/flutter_study/windows}/runner/flutter_window.h (100%) rename {windows => apps/flutter_study/windows}/runner/main.cpp (100%) rename {windows => apps/flutter_study/windows}/runner/resource.h (100%) rename {windows => apps/flutter_study/windows}/runner/resources/app_icon.ico (100%) rename {windows => apps/flutter_study/windows}/runner/runner.exe.manifest (100%) rename {windows => apps/flutter_study/windows}/runner/utils.cpp (100%) rename {windows => apps/flutter_study/windows}/runner/utils.h (100%) rename {windows => apps/flutter_study/windows}/runner/win32_window.cpp (100%) rename {windows => apps/flutter_study/windows}/runner/win32_window.h (100%) diff --git a/.metadata b/apps/flutter_study/.metadata similarity index 100% rename from .metadata rename to apps/flutter_study/.metadata diff --git a/analysis_options.yaml b/apps/flutter_study/analysis_options.yaml similarity index 100% rename from analysis_options.yaml rename to apps/flutter_study/analysis_options.yaml diff --git a/assets/demo.gif b/apps/flutter_study/assets/demo.gif similarity index 100% rename from assets/demo.gif rename to apps/flutter_study/assets/demo.gif diff --git a/flutterguard.yaml b/apps/flutter_study/flutterguard.yaml similarity index 100% rename from flutterguard.yaml rename to apps/flutter_study/flutterguard.yaml diff --git a/lib/AI_ANALYSIS.md b/apps/flutter_study/lib/AI_ANALYSIS.md similarity index 100% rename from lib/AI_ANALYSIS.md rename to apps/flutter_study/lib/AI_ANALYSIS.md diff --git a/lib/AI_MODULE_INDEX.md b/apps/flutter_study/lib/AI_MODULE_INDEX.md similarity index 100% rename from lib/AI_MODULE_INDEX.md rename to apps/flutter_study/lib/AI_MODULE_INDEX.md diff --git a/lib/app/AI_ANALYSIS.md b/apps/flutter_study/lib/app/AI_ANALYSIS.md similarity index 100% rename from lib/app/AI_ANALYSIS.md rename to apps/flutter_study/lib/app/AI_ANALYSIS.md diff --git a/lib/app/app.dart b/apps/flutter_study/lib/app/app.dart similarity index 100% rename from lib/app/app.dart rename to apps/flutter_study/lib/app/app.dart diff --git a/lib/app/app_bootstrap.dart b/apps/flutter_study/lib/app/app_bootstrap.dart similarity index 100% rename from lib/app/app_bootstrap.dart rename to apps/flutter_study/lib/app/app_bootstrap.dart diff --git a/lib/app/category_navigation.dart b/apps/flutter_study/lib/app/category_navigation.dart similarity index 100% rename from lib/app/category_navigation.dart rename to apps/flutter_study/lib/app/category_navigation.dart diff --git a/lib/app/category_window_app.dart b/apps/flutter_study/lib/app/category_window_app.dart similarity index 100% rename from lib/app/category_window_app.dart rename to apps/flutter_study/lib/app/category_window_app.dart diff --git a/lib/app/module_home_page.dart b/apps/flutter_study/lib/app/module_home_page.dart similarity index 100% rename from lib/app/module_home_page.dart rename to apps/flutter_study/lib/app/module_home_page.dart diff --git a/lib/app/router/AI_ANALYSIS.md b/apps/flutter_study/lib/app/router/AI_ANALYSIS.md similarity index 100% rename from lib/app/router/AI_ANALYSIS.md rename to apps/flutter_study/lib/app/router/AI_ANALYSIS.md diff --git a/lib/app/router/app_route_table.dart b/apps/flutter_study/lib/app/router/app_route_table.dart similarity index 100% rename from lib/app/router/app_route_table.dart rename to apps/flutter_study/lib/app/router/app_route_table.dart diff --git a/lib/app/router/app_router.dart b/apps/flutter_study/lib/app/router/app_router.dart similarity index 100% rename from lib/app/router/app_router.dart rename to apps/flutter_study/lib/app/router/app_router.dart diff --git a/lib/main.dart b/apps/flutter_study/lib/main.dart similarity index 100% rename from lib/main.dart rename to apps/flutter_study/lib/main.dart diff --git a/lib/module_registry/AI_ANALYSIS.md b/apps/flutter_study/lib/module_registry/AI_ANALYSIS.md similarity index 100% rename from lib/module_registry/AI_ANALYSIS.md rename to apps/flutter_study/lib/module_registry/AI_ANALYSIS.md diff --git a/lib/module_registry/module_catalog_utils.dart b/apps/flutter_study/lib/module_registry/module_catalog_utils.dart similarity index 100% rename from lib/module_registry/module_catalog_utils.dart rename to apps/flutter_study/lib/module_registry/module_catalog_utils.dart diff --git a/lib/module_registry/module_category.dart b/apps/flutter_study/lib/module_registry/module_category.dart similarity index 100% rename from lib/module_registry/module_category.dart rename to apps/flutter_study/lib/module_registry/module_category.dart diff --git a/lib/module_registry/module_entry.dart b/apps/flutter_study/lib/module_registry/module_entry.dart similarity index 100% rename from lib/module_registry/module_entry.dart rename to apps/flutter_study/lib/module_registry/module_entry.dart diff --git a/lib/modules/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/AI_ANALYSIS.md similarity index 100% rename from lib/modules/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/AI_ANALYSIS.md diff --git a/lib/modules/async/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/async/AI_ANALYSIS.md similarity index 100% rename from lib/modules/async/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/async/AI_ANALYSIS.md diff --git a/lib/modules/async/isolate_basic/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/async/isolate_basic/AI_ANALYSIS.md similarity index 100% rename from lib/modules/async/isolate_basic/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/async/isolate_basic/AI_ANALYSIS.md diff --git a/lib/modules/async/isolate_basic/module_entry.dart b/apps/flutter_study/lib/modules/async/isolate_basic/module_entry.dart similarity index 100% rename from lib/modules/async/isolate_basic/module_entry.dart rename to apps/flutter_study/lib/modules/async/isolate_basic/module_entry.dart diff --git a/lib/modules/async/isolate_basic/module_root.dart b/apps/flutter_study/lib/modules/async/isolate_basic/module_root.dart similarity index 100% rename from lib/modules/async/isolate_basic/module_root.dart rename to apps/flutter_study/lib/modules/async/isolate_basic/module_root.dart diff --git a/lib/modules/async/isolate_basic/module_routes.dart b/apps/flutter_study/lib/modules/async/isolate_basic/module_routes.dart similarity index 100% rename from lib/modules/async/isolate_basic/module_routes.dart rename to apps/flutter_study/lib/modules/async/isolate_basic/module_routes.dart diff --git a/lib/modules/async/isolate_basic/with_isolate_page.dart b/apps/flutter_study/lib/modules/async/isolate_basic/with_isolate_page.dart similarity index 100% rename from lib/modules/async/isolate_basic/with_isolate_page.dart rename to apps/flutter_study/lib/modules/async/isolate_basic/with_isolate_page.dart diff --git a/lib/modules/async/isolate_basic/without_isolate_page.dart b/apps/flutter_study/lib/modules/async/isolate_basic/without_isolate_page.dart similarity index 100% rename from lib/modules/async/isolate_basic/without_isolate_page.dart rename to apps/flutter_study/lib/modules/async/isolate_basic/without_isolate_page.dart diff --git a/lib/modules/async/isolate_task_manager/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/async/isolate_task_manager/AI_ANALYSIS.md similarity index 100% rename from lib/modules/async/isolate_task_manager/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/async/isolate_task_manager/AI_ANALYSIS.md diff --git a/lib/modules/async/isolate_task_manager/module_entry.dart b/apps/flutter_study/lib/modules/async/isolate_task_manager/module_entry.dart similarity index 100% rename from lib/modules/async/isolate_task_manager/module_entry.dart rename to apps/flutter_study/lib/modules/async/isolate_task_manager/module_entry.dart diff --git a/lib/modules/async/isolate_task_manager/module_root.dart b/apps/flutter_study/lib/modules/async/isolate_task_manager/module_root.dart similarity index 100% rename from lib/modules/async/isolate_task_manager/module_root.dart rename to apps/flutter_study/lib/modules/async/isolate_task_manager/module_root.dart diff --git a/lib/modules/async/isolate_task_manager/task_manager.dart b/apps/flutter_study/lib/modules/async/isolate_task_manager/task_manager.dart similarity index 100% rename from lib/modules/async/isolate_task_manager/task_manager.dart rename to apps/flutter_study/lib/modules/async/isolate_task_manager/task_manager.dart diff --git a/lib/modules/async/stream_subscription/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/async/stream_subscription/AI_ANALYSIS.md similarity index 100% rename from lib/modules/async/stream_subscription/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/async/stream_subscription/AI_ANALYSIS.md diff --git a/lib/modules/async/stream_subscription/models/message_model.dart b/apps/flutter_study/lib/modules/async/stream_subscription/models/message_model.dart similarity index 100% rename from lib/modules/async/stream_subscription/models/message_model.dart rename to apps/flutter_study/lib/modules/async/stream_subscription/models/message_model.dart diff --git a/lib/modules/async/stream_subscription/module_entry.dart b/apps/flutter_study/lib/modules/async/stream_subscription/module_entry.dart similarity index 100% rename from lib/modules/async/stream_subscription/module_entry.dart rename to apps/flutter_study/lib/modules/async/stream_subscription/module_entry.dart diff --git a/lib/modules/async/stream_subscription/module_routes.dart b/apps/flutter_study/lib/modules/async/stream_subscription/module_routes.dart similarity index 100% rename from lib/modules/async/stream_subscription/module_routes.dart rename to apps/flutter_study/lib/modules/async/stream_subscription/module_routes.dart diff --git a/lib/modules/async/stream_subscription/pages/broadcast_demo_page.dart b/apps/flutter_study/lib/modules/async/stream_subscription/pages/broadcast_demo_page.dart similarity index 100% rename from lib/modules/async/stream_subscription/pages/broadcast_demo_page.dart rename to apps/flutter_study/lib/modules/async/stream_subscription/pages/broadcast_demo_page.dart diff --git a/lib/modules/async/stream_subscription/pages/home_page.dart b/apps/flutter_study/lib/modules/async/stream_subscription/pages/home_page.dart similarity index 100% rename from lib/modules/async/stream_subscription/pages/home_page.dart rename to apps/flutter_study/lib/modules/async/stream_subscription/pages/home_page.dart diff --git a/lib/modules/async/stream_subscription/pages/stream_demo_controller.dart b/apps/flutter_study/lib/modules/async/stream_subscription/pages/stream_demo_controller.dart similarity index 100% rename from lib/modules/async/stream_subscription/pages/stream_demo_controller.dart rename to apps/flutter_study/lib/modules/async/stream_subscription/pages/stream_demo_controller.dart diff --git a/lib/modules/async/stream_subscription/pages/stream_demo_page.dart b/apps/flutter_study/lib/modules/async/stream_subscription/pages/stream_demo_page.dart similarity index 100% rename from lib/modules/async/stream_subscription/pages/stream_demo_page.dart rename to apps/flutter_study/lib/modules/async/stream_subscription/pages/stream_demo_page.dart diff --git a/lib/modules/async/stream_subscription/services/stream_service.dart b/apps/flutter_study/lib/modules/async/stream_subscription/services/stream_service.dart similarity index 100% rename from lib/modules/async/stream_subscription/services/stream_service.dart rename to apps/flutter_study/lib/modules/async/stream_subscription/services/stream_service.dart diff --git a/lib/modules/async/stream_subscription/utils/stream_utils.dart b/apps/flutter_study/lib/modules/async/stream_subscription/utils/stream_utils.dart similarity index 100% rename from lib/modules/async/stream_subscription/utils/stream_utils.dart rename to apps/flutter_study/lib/modules/async/stream_subscription/utils/stream_utils.dart diff --git a/lib/modules/basic/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/basic/AI_ANALYSIS.md similarity index 100% rename from lib/modules/basic/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/basic/AI_ANALYSIS.md diff --git a/lib/modules/basic/debounce_throttle/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/basic/debounce_throttle/AI_ANALYSIS.md similarity index 100% rename from lib/modules/basic/debounce_throttle/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/basic/debounce_throttle/AI_ANALYSIS.md diff --git a/lib/modules/basic/debounce_throttle/module_entry.dart b/apps/flutter_study/lib/modules/basic/debounce_throttle/module_entry.dart similarity index 100% rename from lib/modules/basic/debounce_throttle/module_entry.dart rename to apps/flutter_study/lib/modules/basic/debounce_throttle/module_entry.dart diff --git a/lib/modules/basic/debounce_throttle/module_root.dart b/apps/flutter_study/lib/modules/basic/debounce_throttle/module_root.dart similarity index 100% rename from lib/modules/basic/debounce_throttle/module_root.dart rename to apps/flutter_study/lib/modules/basic/debounce_throttle/module_root.dart diff --git a/lib/modules/basic/debounce_throttle/utils/debounce_throttle.dart b/apps/flutter_study/lib/modules/basic/debounce_throttle/utils/debounce_throttle.dart similarity index 100% rename from lib/modules/basic/debounce_throttle/utils/debounce_throttle.dart rename to apps/flutter_study/lib/modules/basic/debounce_throttle/utils/debounce_throttle.dart diff --git a/lib/modules/basic/microtask/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/basic/microtask/AI_ANALYSIS.md similarity index 100% rename from lib/modules/basic/microtask/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/basic/microtask/AI_ANALYSIS.md diff --git a/lib/modules/basic/microtask/models/event_log.dart b/apps/flutter_study/lib/modules/basic/microtask/models/event_log.dart similarity index 100% rename from lib/modules/basic/microtask/models/event_log.dart rename to apps/flutter_study/lib/modules/basic/microtask/models/event_log.dart diff --git a/lib/modules/basic/microtask/module_entry.dart b/apps/flutter_study/lib/modules/basic/microtask/module_entry.dart similarity index 100% rename from lib/modules/basic/microtask/module_entry.dart rename to apps/flutter_study/lib/modules/basic/microtask/module_entry.dart diff --git a/lib/modules/basic/microtask/module_routes.dart b/apps/flutter_study/lib/modules/basic/microtask/module_routes.dart similarity index 100% rename from lib/modules/basic/microtask/module_routes.dart rename to apps/flutter_study/lib/modules/basic/microtask/module_routes.dart diff --git a/lib/modules/basic/microtask/pages/advanced_examples_page.dart b/apps/flutter_study/lib/modules/basic/microtask/pages/advanced_examples_page.dart similarity index 100% rename from lib/modules/basic/microtask/pages/advanced_examples_page.dart rename to apps/flutter_study/lib/modules/basic/microtask/pages/advanced_examples_page.dart diff --git a/lib/modules/basic/microtask/pages/event_queue_page.dart b/apps/flutter_study/lib/modules/basic/microtask/pages/event_queue_page.dart similarity index 100% rename from lib/modules/basic/microtask/pages/event_queue_page.dart rename to apps/flutter_study/lib/modules/basic/microtask/pages/event_queue_page.dart diff --git a/lib/modules/basic/microtask/pages/home_page.dart b/apps/flutter_study/lib/modules/basic/microtask/pages/home_page.dart similarity index 100% rename from lib/modules/basic/microtask/pages/home_page.dart rename to apps/flutter_study/lib/modules/basic/microtask/pages/home_page.dart diff --git a/lib/modules/basic/microtask/pages/microtask_queue_page.dart b/apps/flutter_study/lib/modules/basic/microtask/pages/microtask_queue_page.dart similarity index 100% rename from lib/modules/basic/microtask/pages/microtask_queue_page.dart rename to apps/flutter_study/lib/modules/basic/microtask/pages/microtask_queue_page.dart diff --git a/lib/modules/basic/microtask/widgets/code_snippet_view.dart b/apps/flutter_study/lib/modules/basic/microtask/widgets/code_snippet_view.dart similarity index 100% rename from lib/modules/basic/microtask/widgets/code_snippet_view.dart rename to apps/flutter_study/lib/modules/basic/microtask/widgets/code_snippet_view.dart diff --git a/lib/modules/basic/microtask/widgets/event_log_view.dart b/apps/flutter_study/lib/modules/basic/microtask/widgets/event_log_view.dart similarity index 100% rename from lib/modules/basic/microtask/widgets/event_log_view.dart rename to apps/flutter_study/lib/modules/basic/microtask/widgets/event_log_view.dart diff --git a/lib/modules/basic/tree_state/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/basic/tree_state/AI_ANALYSIS.md similarity index 100% rename from lib/modules/basic/tree_state/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/basic/tree_state/AI_ANALYSIS.md diff --git a/lib/modules/basic/tree_state/module_entry.dart b/apps/flutter_study/lib/modules/basic/tree_state/module_entry.dart similarity index 100% rename from lib/modules/basic/tree_state/module_entry.dart rename to apps/flutter_study/lib/modules/basic/tree_state/module_entry.dart diff --git a/lib/modules/basic/tree_state/module_routes.dart b/apps/flutter_study/lib/modules/basic/tree_state/module_routes.dart similarity index 100% rename from lib/modules/basic/tree_state/module_routes.dart rename to apps/flutter_study/lib/modules/basic/tree_state/module_routes.dart diff --git a/lib/modules/basic/tree_state/pages/basic_widgets_page.dart b/apps/flutter_study/lib/modules/basic/tree_state/pages/basic_widgets_page.dart similarity index 100% rename from lib/modules/basic/tree_state/pages/basic_widgets_page.dart rename to apps/flutter_study/lib/modules/basic/tree_state/pages/basic_widgets_page.dart diff --git a/lib/modules/basic/tree_state/pages/demo_home_page.dart b/apps/flutter_study/lib/modules/basic/tree_state/pages/demo_home_page.dart similarity index 100% rename from lib/modules/basic/tree_state/pages/demo_home_page.dart rename to apps/flutter_study/lib/modules/basic/tree_state/pages/demo_home_page.dart diff --git a/lib/modules/basic/tree_state/pages/painter_demo_page.dart b/apps/flutter_study/lib/modules/basic/tree_state/pages/painter_demo_page.dart similarity index 100% rename from lib/modules/basic/tree_state/pages/painter_demo_page.dart rename to apps/flutter_study/lib/modules/basic/tree_state/pages/painter_demo_page.dart diff --git a/lib/modules/basic/tree_state/pages/repaint_boundary_demo_page.dart b/apps/flutter_study/lib/modules/basic/tree_state/pages/repaint_boundary_demo_page.dart similarity index 100% rename from lib/modules/basic/tree_state/pages/repaint_boundary_demo_page.dart rename to apps/flutter_study/lib/modules/basic/tree_state/pages/repaint_boundary_demo_page.dart diff --git a/lib/modules/basic/tree_state/pages/state_lifecycle_page.dart b/apps/flutter_study/lib/modules/basic/tree_state/pages/state_lifecycle_page.dart similarity index 100% rename from lib/modules/basic/tree_state/pages/state_lifecycle_page.dart rename to apps/flutter_study/lib/modules/basic/tree_state/pages/state_lifecycle_page.dart diff --git a/lib/modules/platform/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/platform/AI_ANALYSIS.md similarity index 100% rename from lib/modules/platform/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/platform/AI_ANALYSIS.md diff --git a/lib/modules/platform/dio_interceptor/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/platform/dio_interceptor/AI_ANALYSIS.md similarity index 100% rename from lib/modules/platform/dio_interceptor/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/platform/dio_interceptor/AI_ANALYSIS.md diff --git a/lib/modules/platform/dio_interceptor/mock_server/mock_server.dart b/apps/flutter_study/lib/modules/platform/dio_interceptor/mock_server/mock_server.dart similarity index 100% rename from lib/modules/platform/dio_interceptor/mock_server/mock_server.dart rename to apps/flutter_study/lib/modules/platform/dio_interceptor/mock_server/mock_server.dart diff --git a/lib/modules/platform/dio_interceptor/models/article.dart b/apps/flutter_study/lib/modules/platform/dio_interceptor/models/article.dart similarity index 100% rename from lib/modules/platform/dio_interceptor/models/article.dart rename to apps/flutter_study/lib/modules/platform/dio_interceptor/models/article.dart diff --git a/lib/modules/platform/dio_interceptor/module_entry.dart b/apps/flutter_study/lib/modules/platform/dio_interceptor/module_entry.dart similarity index 100% rename from lib/modules/platform/dio_interceptor/module_entry.dart rename to apps/flutter_study/lib/modules/platform/dio_interceptor/module_entry.dart diff --git a/lib/modules/platform/dio_interceptor/module_routes.dart b/apps/flutter_study/lib/modules/platform/dio_interceptor/module_routes.dart similarity index 100% rename from lib/modules/platform/dio_interceptor/module_routes.dart rename to apps/flutter_study/lib/modules/platform/dio_interceptor/module_routes.dart diff --git a/lib/modules/platform/dio_interceptor/network/api/api_service.dart b/apps/flutter_study/lib/modules/platform/dio_interceptor/network/api/api_service.dart similarity index 100% rename from lib/modules/platform/dio_interceptor/network/api/api_service.dart rename to apps/flutter_study/lib/modules/platform/dio_interceptor/network/api/api_service.dart diff --git a/lib/modules/platform/dio_interceptor/network/http_client.dart b/apps/flutter_study/lib/modules/platform/dio_interceptor/network/http_client.dart similarity index 100% rename from lib/modules/platform/dio_interceptor/network/http_client.dart rename to apps/flutter_study/lib/modules/platform/dio_interceptor/network/http_client.dart diff --git a/lib/modules/platform/dio_interceptor/network/interceptor/auth_interceptor.dart b/apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/auth_interceptor.dart similarity index 100% rename from lib/modules/platform/dio_interceptor/network/interceptor/auth_interceptor.dart rename to apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/auth_interceptor.dart diff --git a/lib/modules/platform/dio_interceptor/network/interceptor/error_interceptor.dart b/apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/error_interceptor.dart similarity index 100% rename from lib/modules/platform/dio_interceptor/network/interceptor/error_interceptor.dart rename to apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/error_interceptor.dart diff --git a/lib/modules/platform/dio_interceptor/network/interceptor/log_interceptor.dart b/apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/log_interceptor.dart similarity index 100% rename from lib/modules/platform/dio_interceptor/network/interceptor/log_interceptor.dart rename to apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/log_interceptor.dart diff --git a/lib/modules/platform/dio_interceptor/network/interceptor/retry_interceptor.dart b/apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/retry_interceptor.dart similarity index 100% rename from lib/modules/platform/dio_interceptor/network/interceptor/retry_interceptor.dart rename to apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/retry_interceptor.dart diff --git a/lib/modules/platform/dio_interceptor/pages/home_page.dart b/apps/flutter_study/lib/modules/platform/dio_interceptor/pages/home_page.dart similarity index 100% rename from lib/modules/platform/dio_interceptor/pages/home_page.dart rename to apps/flutter_study/lib/modules/platform/dio_interceptor/pages/home_page.dart diff --git a/lib/modules/platform/dio_interceptor/pages/login_page.dart b/apps/flutter_study/lib/modules/platform/dio_interceptor/pages/login_page.dart similarity index 100% rename from lib/modules/platform/dio_interceptor/pages/login_page.dart rename to apps/flutter_study/lib/modules/platform/dio_interceptor/pages/login_page.dart diff --git a/lib/modules/platform/file_picker/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/platform/file_picker/AI_ANALYSIS.md similarity index 100% rename from lib/modules/platform/file_picker/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/platform/file_picker/AI_ANALYSIS.md diff --git a/lib/modules/platform/file_picker/module_entry.dart b/apps/flutter_study/lib/modules/platform/file_picker/module_entry.dart similarity index 100% rename from lib/modules/platform/file_picker/module_entry.dart rename to apps/flutter_study/lib/modules/platform/file_picker/module_entry.dart diff --git a/lib/modules/platform/file_picker/module_root.dart b/apps/flutter_study/lib/modules/platform/file_picker/module_root.dart similarity index 100% rename from lib/modules/platform/file_picker/module_root.dart rename to apps/flutter_study/lib/modules/platform/file_picker/module_root.dart diff --git a/lib/modules/platform/file_picker/pages/file_picker_page.dart b/apps/flutter_study/lib/modules/platform/file_picker/pages/file_picker_page.dart similarity index 100% rename from lib/modules/platform/file_picker/pages/file_picker_page.dart rename to apps/flutter_study/lib/modules/platform/file_picker/pages/file_picker_page.dart diff --git a/lib/modules/platform/file_picker/state/file_picker_controller.dart b/apps/flutter_study/lib/modules/platform/file_picker/state/file_picker_controller.dart similarity index 100% rename from lib/modules/platform/file_picker/state/file_picker_controller.dart rename to apps/flutter_study/lib/modules/platform/file_picker/state/file_picker_controller.dart diff --git a/lib/modules/platform/online_video_player/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/platform/online_video_player/AI_ANALYSIS.md similarity index 100% rename from lib/modules/platform/online_video_player/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/platform/online_video_player/AI_ANALYSIS.md diff --git a/lib/modules/platform/online_video_player/module_entry.dart b/apps/flutter_study/lib/modules/platform/online_video_player/module_entry.dart similarity index 100% rename from lib/modules/platform/online_video_player/module_entry.dart rename to apps/flutter_study/lib/modules/platform/online_video_player/module_entry.dart diff --git a/lib/modules/platform/online_video_player/module_root.dart b/apps/flutter_study/lib/modules/platform/online_video_player/module_root.dart similarity index 100% rename from lib/modules/platform/online_video_player/module_root.dart rename to apps/flutter_study/lib/modules/platform/online_video_player/module_root.dart diff --git a/lib/modules/platform/online_video_player/state/media_kit_player_adapter.dart b/apps/flutter_study/lib/modules/platform/online_video_player/state/media_kit_player_adapter.dart similarity index 100% rename from lib/modules/platform/online_video_player/state/media_kit_player_adapter.dart rename to apps/flutter_study/lib/modules/platform/online_video_player/state/media_kit_player_adapter.dart diff --git a/lib/modules/platform/online_video_player/widgets/video_player_controls.dart b/apps/flutter_study/lib/modules/platform/online_video_player/widgets/video_player_controls.dart similarity index 100% rename from lib/modules/platform/online_video_player/widgets/video_player_controls.dart rename to apps/flutter_study/lib/modules/platform/online_video_player/widgets/video_player_controls.dart diff --git a/lib/modules/platform/usb_detector/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/platform/usb_detector/AI_ANALYSIS.md similarity index 100% rename from lib/modules/platform/usb_detector/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/platform/usb_detector/AI_ANALYSIS.md diff --git a/lib/modules/platform/usb_detector/models/usb_device_info.dart b/apps/flutter_study/lib/modules/platform/usb_detector/models/usb_device_info.dart similarity index 100% rename from lib/modules/platform/usb_detector/models/usb_device_info.dart rename to apps/flutter_study/lib/modules/platform/usb_detector/models/usb_device_info.dart diff --git a/lib/modules/platform/usb_detector/module_entry.dart b/apps/flutter_study/lib/modules/platform/usb_detector/module_entry.dart similarity index 100% rename from lib/modules/platform/usb_detector/module_entry.dart rename to apps/flutter_study/lib/modules/platform/usb_detector/module_entry.dart diff --git a/lib/modules/platform/usb_detector/module_root.dart b/apps/flutter_study/lib/modules/platform/usb_detector/module_root.dart similarity index 100% rename from lib/modules/platform/usb_detector/module_root.dart rename to apps/flutter_study/lib/modules/platform/usb_detector/module_root.dart diff --git a/lib/modules/platform/usb_detector/services/usb_detection_service.dart b/apps/flutter_study/lib/modules/platform/usb_detector/services/usb_detection_service.dart similarity index 100% rename from lib/modules/platform/usb_detector/services/usb_detection_service.dart rename to apps/flutter_study/lib/modules/platform/usb_detector/services/usb_detection_service.dart diff --git a/lib/modules/popup_table/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/popup_table/AI_ANALYSIS.md similarity index 100% rename from lib/modules/popup_table/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/popup_table/AI_ANALYSIS.md diff --git a/lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md similarity index 100% rename from lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md diff --git a/lib/modules/popup_table/overlay_follow_compare/module_entry.dart b/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/module_entry.dart similarity index 100% rename from lib/modules/popup_table/overlay_follow_compare/module_entry.dart rename to apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/module_entry.dart diff --git a/lib/modules/popup_table/overlay_follow_compare/module_root.dart b/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/module_root.dart similarity index 100% rename from lib/modules/popup_table/overlay_follow_compare/module_root.dart rename to apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/module_root.dart diff --git a/lib/modules/popup_table/overlay_follow_compare/widgets/compare_panel.dart b/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/compare_panel.dart similarity index 100% rename from lib/modules/popup_table/overlay_follow_compare/widgets/compare_panel.dart rename to apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/compare_panel.dart diff --git a/lib/modules/popup_table/overlay_follow_compare/widgets/dropdown_surface.dart b/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/dropdown_surface.dart similarity index 100% rename from lib/modules/popup_table/overlay_follow_compare/widgets/dropdown_surface.dart rename to apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/dropdown_surface.dart diff --git a/lib/modules/popup_table/overlay_follow_compare/widgets/follower_demo.dart b/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/follower_demo.dart similarity index 100% rename from lib/modules/popup_table/overlay_follow_compare/widgets/follower_demo.dart rename to apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/follower_demo.dart diff --git a/lib/modules/popup_table/overlay_follow_compare/widgets/manual_demo.dart b/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/manual_demo.dart similarity index 100% rename from lib/modules/popup_table/overlay_follow_compare/widgets/manual_demo.dart rename to apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/manual_demo.dart diff --git a/lib/modules/popup_table/overlay_follow_compare/widgets/status_info.dart b/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/status_info.dart similarity index 100% rename from lib/modules/popup_table/overlay_follow_compare/widgets/status_info.dart rename to apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/status_info.dart diff --git a/lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md similarity index 100% rename from lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md diff --git a/lib/modules/popup_table/popup_list_interaction/module_entry.dart b/apps/flutter_study/lib/modules/popup_table/popup_list_interaction/module_entry.dart similarity index 100% rename from lib/modules/popup_table/popup_list_interaction/module_entry.dart rename to apps/flutter_study/lib/modules/popup_table/popup_list_interaction/module_entry.dart diff --git a/lib/modules/popup_table/popup_list_interaction/module_root.dart b/apps/flutter_study/lib/modules/popup_table/popup_list_interaction/module_root.dart similarity index 100% rename from lib/modules/popup_table/popup_list_interaction/module_root.dart rename to apps/flutter_study/lib/modules/popup_table/popup_list_interaction/module_root.dart diff --git a/lib/modules/popup_table/popup_list_interaction/module_routes.dart b/apps/flutter_study/lib/modules/popup_table/popup_list_interaction/module_routes.dart similarity index 100% rename from lib/modules/popup_table/popup_list_interaction/module_routes.dart rename to apps/flutter_study/lib/modules/popup_table/popup_list_interaction/module_routes.dart diff --git a/lib/modules/popup_table/popup_list_interaction/pages/list_page.dart b/apps/flutter_study/lib/modules/popup_table/popup_list_interaction/pages/list_page.dart similarity index 100% rename from lib/modules/popup_table/popup_list_interaction/pages/list_page.dart rename to apps/flutter_study/lib/modules/popup_table/popup_list_interaction/pages/list_page.dart diff --git a/lib/modules/popup_table/popup_list_interaction/pages/popup_page.dart b/apps/flutter_study/lib/modules/popup_table/popup_list_interaction/pages/popup_page.dart similarity index 100% rename from lib/modules/popup_table/popup_list_interaction/pages/popup_page.dart rename to apps/flutter_study/lib/modules/popup_table/popup_list_interaction/pages/popup_page.dart diff --git a/lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md similarity index 100% rename from lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md diff --git a/lib/modules/popup_table/popup_widgets/module_entry.dart b/apps/flutter_study/lib/modules/popup_table/popup_widgets/module_entry.dart similarity index 100% rename from lib/modules/popup_table/popup_widgets/module_entry.dart rename to apps/flutter_study/lib/modules/popup_table/popup_widgets/module_entry.dart diff --git a/lib/modules/popup_table/popup_widgets/module_root.dart b/apps/flutter_study/lib/modules/popup_table/popup_widgets/module_root.dart similarity index 100% rename from lib/modules/popup_table/popup_widgets/module_root.dart rename to apps/flutter_study/lib/modules/popup_table/popup_widgets/module_root.dart diff --git a/lib/modules/popup_table/popup_widgets/widgets/bottom_sheet_demo.dart b/apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/bottom_sheet_demo.dart similarity index 100% rename from lib/modules/popup_table/popup_widgets/widgets/bottom_sheet_demo.dart rename to apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/bottom_sheet_demo.dart diff --git a/lib/modules/popup_table/popup_widgets/widgets/context_menu_demo.dart b/apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/context_menu_demo.dart similarity index 100% rename from lib/modules/popup_table/popup_widgets/widgets/context_menu_demo.dart rename to apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/context_menu_demo.dart diff --git a/lib/modules/popup_table/popup_widgets/widgets/demo_section.dart b/apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/demo_section.dart similarity index 100% rename from lib/modules/popup_table/popup_widgets/widgets/demo_section.dart rename to apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/demo_section.dart diff --git a/lib/modules/popup_table/popup_widgets/widgets/dialog_demo_tile.dart b/apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/dialog_demo_tile.dart similarity index 100% rename from lib/modules/popup_table/popup_widgets/widgets/dialog_demo_tile.dart rename to apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/dialog_demo_tile.dart diff --git a/lib/modules/popup_table/popup_widgets/widgets/learning_content.dart b/apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/learning_content.dart similarity index 100% rename from lib/modules/popup_table/popup_widgets/widgets/learning_content.dart rename to apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/learning_content.dart diff --git a/lib/modules/popup_table/scroll_table/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/popup_table/scroll_table/AI_ANALYSIS.md similarity index 100% rename from lib/modules/popup_table/scroll_table/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/popup_table/scroll_table/AI_ANALYSIS.md diff --git a/lib/modules/popup_table/scroll_table/module_entry.dart b/apps/flutter_study/lib/modules/popup_table/scroll_table/module_entry.dart similarity index 100% rename from lib/modules/popup_table/scroll_table/module_entry.dart rename to apps/flutter_study/lib/modules/popup_table/scroll_table/module_entry.dart diff --git a/lib/modules/popup_table/scroll_table/module_root.dart b/apps/flutter_study/lib/modules/popup_table/scroll_table/module_root.dart similarity index 100% rename from lib/modules/popup_table/scroll_table/module_root.dart rename to apps/flutter_study/lib/modules/popup_table/scroll_table/module_root.dart diff --git a/lib/modules/popup_table/scroll_table/widgets/scroll_table.dart b/apps/flutter_study/lib/modules/popup_table/scroll_table/widgets/scroll_table.dart similarity index 100% rename from lib/modules/popup_table/scroll_table/widgets/scroll_table.dart rename to apps/flutter_study/lib/modules/popup_table/scroll_table/widgets/scroll_table.dart diff --git a/lib/modules/state/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/state/AI_ANALYSIS.md similarity index 100% rename from lib/modules/state/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/state/AI_ANALYSIS.md diff --git a/lib/modules/state/flutter_ioc/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/state/flutter_ioc/AI_ANALYSIS.md similarity index 100% rename from lib/modules/state/flutter_ioc/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/state/flutter_ioc/AI_ANALYSIS.md diff --git a/lib/modules/state/flutter_ioc/model/counter_model.dart b/apps/flutter_study/lib/modules/state/flutter_ioc/model/counter_model.dart similarity index 100% rename from lib/modules/state/flutter_ioc/model/counter_model.dart rename to apps/flutter_study/lib/modules/state/flutter_ioc/model/counter_model.dart diff --git a/lib/modules/state/flutter_ioc/module_entry.dart b/apps/flutter_study/lib/modules/state/flutter_ioc/module_entry.dart similarity index 100% rename from lib/modules/state/flutter_ioc/module_entry.dart rename to apps/flutter_study/lib/modules/state/flutter_ioc/module_entry.dart diff --git a/lib/modules/state/flutter_ioc/module_root.dart b/apps/flutter_study/lib/modules/state/flutter_ioc/module_root.dart similarity index 100% rename from lib/modules/state/flutter_ioc/module_root.dart rename to apps/flutter_study/lib/modules/state/flutter_ioc/module_root.dart diff --git a/lib/modules/state/status_management/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/state/status_management/AI_ANALYSIS.md similarity index 100% rename from lib/modules/state/status_management/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/state/status_management/AI_ANALYSIS.md diff --git a/lib/modules/state/status_management/module_entry.dart b/apps/flutter_study/lib/modules/state/status_management/module_entry.dart similarity index 100% rename from lib/modules/state/status_management/module_entry.dart rename to apps/flutter_study/lib/modules/state/status_management/module_entry.dart diff --git a/lib/modules/state/status_management/module_routes.dart b/apps/flutter_study/lib/modules/state/status_management/module_routes.dart similarity index 100% rename from lib/modules/state/status_management/module_routes.dart rename to apps/flutter_study/lib/modules/state/status_management/module_routes.dart diff --git a/lib/modules/state/status_management/pages/bloc/bloc_route.dart b/apps/flutter_study/lib/modules/state/status_management/pages/bloc/bloc_route.dart similarity index 100% rename from lib/modules/state/status_management/pages/bloc/bloc_route.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/bloc/bloc_route.dart diff --git a/lib/modules/state/status_management/pages/bloc/counter_bloc.dart b/apps/flutter_study/lib/modules/state/status_management/pages/bloc/counter_bloc.dart similarity index 100% rename from lib/modules/state/status_management/pages/bloc/counter_bloc.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/bloc/counter_bloc.dart diff --git a/lib/modules/state/status_management/pages/bloc/counter_event.dart b/apps/flutter_study/lib/modules/state/status_management/pages/bloc/counter_event.dart similarity index 100% rename from lib/modules/state/status_management/pages/bloc/counter_event.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/bloc/counter_event.dart diff --git a/lib/modules/state/status_management/pages/bloc/counter_state.dart b/apps/flutter_study/lib/modules/state/status_management/pages/bloc/counter_state.dart similarity index 100% rename from lib/modules/state/status_management/pages/bloc/counter_state.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/bloc/counter_state.dart diff --git a/lib/modules/state/status_management/pages/home_page.dart b/apps/flutter_study/lib/modules/state/status_management/pages/home_page.dart similarity index 100% rename from lib/modules/state/status_management/pages/home_page.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/home_page.dart diff --git a/lib/modules/state/status_management/pages/provider/models/counter_cn.dart b/apps/flutter_study/lib/modules/state/status_management/pages/provider/models/counter_cn.dart similarity index 100% rename from lib/modules/state/status_management/pages/provider/models/counter_cn.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/provider/models/counter_cn.dart diff --git a/lib/modules/state/status_management/pages/provider/models/counter_model.dart b/apps/flutter_study/lib/modules/state/status_management/pages/provider/models/counter_model.dart similarity index 100% rename from lib/modules/state/status_management/pages/provider/models/counter_model.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/provider/models/counter_model.dart diff --git a/lib/modules/state/status_management/pages/provider/provider_future_route.dart b/apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_future_route.dart similarity index 100% rename from lib/modules/state/status_management/pages/provider/provider_future_route.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_future_route.dart diff --git a/lib/modules/state/status_management/pages/provider/provider_lifting_route.dart b/apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_lifting_route.dart similarity index 100% rename from lib/modules/state/status_management/pages/provider/provider_lifting_route.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_lifting_route.dart diff --git a/lib/modules/state/status_management/pages/provider/provider_route.dart b/apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_route.dart similarity index 100% rename from lib/modules/state/status_management/pages/provider/provider_route.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_route.dart diff --git a/lib/modules/state/status_management/pages/provider/provider_todo_route.dart b/apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_todo_route.dart similarity index 100% rename from lib/modules/state/status_management/pages/provider/provider_todo_route.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_todo_route.dart diff --git a/lib/modules/state/status_management/pages/provider/widgets/granular_grid.dart b/apps/flutter_study/lib/modules/state/status_management/pages/provider/widgets/granular_grid.dart similarity index 100% rename from lib/modules/state/status_management/pages/provider/widgets/granular_grid.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/provider/widgets/granular_grid.dart diff --git a/lib/modules/state/status_management/pages/provider/widgets/provider_perks.dart b/apps/flutter_study/lib/modules/state/status_management/pages/provider/widgets/provider_perks.dart similarity index 100% rename from lib/modules/state/status_management/pages/provider/widgets/provider_perks.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/provider/widgets/provider_perks.dart diff --git a/lib/modules/state/status_management/pages/riverpod/riverpod_future_route.dart b/apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_future_route.dart similarity index 100% rename from lib/modules/state/status_management/pages/riverpod/riverpod_future_route.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_future_route.dart diff --git a/lib/modules/state/status_management/pages/riverpod/riverpod_lifting_route.dart b/apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_lifting_route.dart similarity index 100% rename from lib/modules/state/status_management/pages/riverpod/riverpod_lifting_route.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_lifting_route.dart diff --git a/lib/modules/state/status_management/pages/riverpod/riverpod_route.dart b/apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_route.dart similarity index 100% rename from lib/modules/state/status_management/pages/riverpod/riverpod_route.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_route.dart diff --git a/lib/modules/state/status_management/pages/riverpod/riverpod_todo_route.dart b/apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_todo_route.dart similarity index 100% rename from lib/modules/state/status_management/pages/riverpod/riverpod_todo_route.dart rename to apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_todo_route.dart diff --git a/lib/modules/state/status_management/widgets/state_flow_demo.dart b/apps/flutter_study/lib/modules/state/status_management/widgets/state_flow_demo.dart similarity index 100% rename from lib/modules/state/status_management/widgets/state_flow_demo.dart rename to apps/flutter_study/lib/modules/state/status_management/widgets/state_flow_demo.dart diff --git a/lib/modules/ui/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/ui/AI_ANALYSIS.md similarity index 100% rename from lib/modules/ui/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/ui/AI_ANALYSIS.md diff --git a/lib/modules/ui/adsorption_line/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/ui/adsorption_line/AI_ANALYSIS.md similarity index 100% rename from lib/modules/ui/adsorption_line/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/ui/adsorption_line/AI_ANALYSIS.md diff --git a/lib/modules/ui/adsorption_line/models/drawing_element.dart b/apps/flutter_study/lib/modules/ui/adsorption_line/models/drawing_element.dart similarity index 100% rename from lib/modules/ui/adsorption_line/models/drawing_element.dart rename to apps/flutter_study/lib/modules/ui/adsorption_line/models/drawing_element.dart diff --git a/lib/modules/ui/adsorption_line/module_entry.dart b/apps/flutter_study/lib/modules/ui/adsorption_line/module_entry.dart similarity index 100% rename from lib/modules/ui/adsorption_line/module_entry.dart rename to apps/flutter_study/lib/modules/ui/adsorption_line/module_entry.dart diff --git a/lib/modules/ui/adsorption_line/pages/adsorption_line_page.dart b/apps/flutter_study/lib/modules/ui/adsorption_line/pages/adsorption_line_page.dart similarity index 100% rename from lib/modules/ui/adsorption_line/pages/adsorption_line_page.dart rename to apps/flutter_study/lib/modules/ui/adsorption_line/pages/adsorption_line_page.dart diff --git a/lib/modules/ui/adsorption_line/services/adsorption_manager.dart b/apps/flutter_study/lib/modules/ui/adsorption_line/services/adsorption_manager.dart similarity index 100% rename from lib/modules/ui/adsorption_line/services/adsorption_manager.dart rename to apps/flutter_study/lib/modules/ui/adsorption_line/services/adsorption_manager.dart diff --git a/lib/modules/ui/adsorption_line/state/drawing_state.dart b/apps/flutter_study/lib/modules/ui/adsorption_line/state/drawing_state.dart similarity index 100% rename from lib/modules/ui/adsorption_line/state/drawing_state.dart rename to apps/flutter_study/lib/modules/ui/adsorption_line/state/drawing_state.dart diff --git a/lib/modules/ui/adsorption_line/widgets/drawing_board.dart b/apps/flutter_study/lib/modules/ui/adsorption_line/widgets/drawing_board.dart similarity index 100% rename from lib/modules/ui/adsorption_line/widgets/drawing_board.dart rename to apps/flutter_study/lib/modules/ui/adsorption_line/widgets/drawing_board.dart diff --git a/lib/modules/ui/adsorption_line/widgets/drawing_canvas.dart b/apps/flutter_study/lib/modules/ui/adsorption_line/widgets/drawing_canvas.dart similarity index 100% rename from lib/modules/ui/adsorption_line/widgets/drawing_canvas.dart rename to apps/flutter_study/lib/modules/ui/adsorption_line/widgets/drawing_canvas.dart diff --git a/lib/modules/ui/download_animation/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/ui/download_animation/AI_ANALYSIS.md similarity index 100% rename from lib/modules/ui/download_animation/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/ui/download_animation/AI_ANALYSIS.md diff --git a/lib/modules/ui/download_animation/models/animation_config.dart b/apps/flutter_study/lib/modules/ui/download_animation/models/animation_config.dart similarity index 100% rename from lib/modules/ui/download_animation/models/animation_config.dart rename to apps/flutter_study/lib/modules/ui/download_animation/models/animation_config.dart diff --git a/lib/modules/ui/download_animation/models/download_item.dart b/apps/flutter_study/lib/modules/ui/download_animation/models/download_item.dart similarity index 100% rename from lib/modules/ui/download_animation/models/download_item.dart rename to apps/flutter_study/lib/modules/ui/download_animation/models/download_item.dart diff --git a/lib/modules/ui/download_animation/models/overlay_download_item.dart b/apps/flutter_study/lib/modules/ui/download_animation/models/overlay_download_item.dart similarity index 100% rename from lib/modules/ui/download_animation/models/overlay_download_item.dart rename to apps/flutter_study/lib/modules/ui/download_animation/models/overlay_download_item.dart diff --git a/lib/modules/ui/download_animation/module_entry.dart b/apps/flutter_study/lib/modules/ui/download_animation/module_entry.dart similarity index 100% rename from lib/modules/ui/download_animation/module_entry.dart rename to apps/flutter_study/lib/modules/ui/download_animation/module_entry.dart diff --git a/lib/modules/ui/download_animation/module_root.dart b/apps/flutter_study/lib/modules/ui/download_animation/module_root.dart similarity index 100% rename from lib/modules/ui/download_animation/module_root.dart rename to apps/flutter_study/lib/modules/ui/download_animation/module_root.dart diff --git a/lib/modules/ui/download_animation/module_routes.dart b/apps/flutter_study/lib/modules/ui/download_animation/module_routes.dart similarity index 100% rename from lib/modules/ui/download_animation/module_routes.dart rename to apps/flutter_study/lib/modules/ui/download_animation/module_routes.dart diff --git a/lib/modules/ui/download_animation/pages/download_animation_page.dart b/apps/flutter_study/lib/modules/ui/download_animation/pages/download_animation_page.dart similarity index 100% rename from lib/modules/ui/download_animation/pages/download_animation_page.dart rename to apps/flutter_study/lib/modules/ui/download_animation/pages/download_animation_page.dart diff --git a/lib/modules/ui/download_animation/pages/download_comparison_page.dart b/apps/flutter_study/lib/modules/ui/download_animation/pages/download_comparison_page.dart similarity index 100% rename from lib/modules/ui/download_animation/pages/download_comparison_page.dart rename to apps/flutter_study/lib/modules/ui/download_animation/pages/download_comparison_page.dart diff --git a/lib/modules/ui/download_animation/pages/paint_animation_page.dart b/apps/flutter_study/lib/modules/ui/download_animation/pages/paint_animation_page.dart similarity index 100% rename from lib/modules/ui/download_animation/pages/paint_animation_page.dart rename to apps/flutter_study/lib/modules/ui/download_animation/pages/paint_animation_page.dart diff --git a/lib/modules/ui/download_animation/services/overlay_download_service.dart b/apps/flutter_study/lib/modules/ui/download_animation/services/overlay_download_service.dart similarity index 100% rename from lib/modules/ui/download_animation/services/overlay_download_service.dart rename to apps/flutter_study/lib/modules/ui/download_animation/services/overlay_download_service.dart diff --git a/lib/modules/ui/font_picker/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/ui/font_picker/AI_ANALYSIS.md similarity index 100% rename from lib/modules/ui/font_picker/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/ui/font_picker/AI_ANALYSIS.md diff --git a/lib/modules/ui/font_picker/data/font_catalog.dart b/apps/flutter_study/lib/modules/ui/font_picker/data/font_catalog.dart similarity index 100% rename from lib/modules/ui/font_picker/data/font_catalog.dart rename to apps/flutter_study/lib/modules/ui/font_picker/data/font_catalog.dart diff --git a/lib/modules/ui/font_picker/models/font_option.dart b/apps/flutter_study/lib/modules/ui/font_picker/models/font_option.dart similarity index 100% rename from lib/modules/ui/font_picker/models/font_option.dart rename to apps/flutter_study/lib/modules/ui/font_picker/models/font_option.dart diff --git a/lib/modules/ui/font_picker/module_entry.dart b/apps/flutter_study/lib/modules/ui/font_picker/module_entry.dart similarity index 100% rename from lib/modules/ui/font_picker/module_entry.dart rename to apps/flutter_study/lib/modules/ui/font_picker/module_entry.dart diff --git a/lib/modules/ui/font_picker/module_root.dart b/apps/flutter_study/lib/modules/ui/font_picker/module_root.dart similarity index 100% rename from lib/modules/ui/font_picker/module_root.dart rename to apps/flutter_study/lib/modules/ui/font_picker/module_root.dart diff --git a/lib/modules/ui/font_picker/module_routes.dart b/apps/flutter_study/lib/modules/ui/font_picker/module_routes.dart similarity index 100% rename from lib/modules/ui/font_picker/module_routes.dart rename to apps/flutter_study/lib/modules/ui/font_picker/module_routes.dart diff --git a/lib/modules/ui/font_picker/pages/font_picker_page.dart b/apps/flutter_study/lib/modules/ui/font_picker/pages/font_picker_page.dart similarity index 100% rename from lib/modules/ui/font_picker/pages/font_picker_page.dart rename to apps/flutter_study/lib/modules/ui/font_picker/pages/font_picker_page.dart diff --git a/lib/modules/ui/font_picker/pages/weight_compare_page.dart b/apps/flutter_study/lib/modules/ui/font_picker/pages/weight_compare_page.dart similarity index 100% rename from lib/modules/ui/font_picker/pages/weight_compare_page.dart rename to apps/flutter_study/lib/modules/ui/font_picker/pages/weight_compare_page.dart diff --git a/lib/modules/ui/font_picker/state/font_loader_service.dart b/apps/flutter_study/lib/modules/ui/font_picker/state/font_loader_service.dart similarity index 100% rename from lib/modules/ui/font_picker/state/font_loader_service.dart rename to apps/flutter_study/lib/modules/ui/font_picker/state/font_loader_service.dart diff --git a/lib/modules/ui/font_picker/widgets/font_picker_list.dart b/apps/flutter_study/lib/modules/ui/font_picker/widgets/font_picker_list.dart similarity index 100% rename from lib/modules/ui/font_picker/widgets/font_picker_list.dart rename to apps/flutter_study/lib/modules/ui/font_picker/widgets/font_picker_list.dart diff --git a/lib/modules/ui/font_picker/widgets/font_preview_panel.dart b/apps/flutter_study/lib/modules/ui/font_picker/widgets/font_preview_panel.dart similarity index 100% rename from lib/modules/ui/font_picker/widgets/font_preview_panel.dart rename to apps/flutter_study/lib/modules/ui/font_picker/widgets/font_preview_panel.dart diff --git a/lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md similarity index 100% rename from lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md rename to apps/flutter_study/lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md diff --git a/lib/modules/ui/gcode_visualizer/module_entry.dart b/apps/flutter_study/lib/modules/ui/gcode_visualizer/module_entry.dart similarity index 100% rename from lib/modules/ui/gcode_visualizer/module_entry.dart rename to apps/flutter_study/lib/modules/ui/gcode_visualizer/module_entry.dart diff --git a/lib/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart b/apps/flutter_study/lib/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart similarity index 100% rename from lib/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart rename to apps/flutter_study/lib/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart diff --git a/lib/modules/ui/gcode_visualizer/state/gcode_player_controller.dart b/apps/flutter_study/lib/modules/ui/gcode_visualizer/state/gcode_player_controller.dart similarity index 100% rename from lib/modules/ui/gcode_visualizer/state/gcode_player_controller.dart rename to apps/flutter_study/lib/modules/ui/gcode_visualizer/state/gcode_player_controller.dart diff --git a/lib/modules/ui/gcode_visualizer/widgets/current_segment_inspector.dart b/apps/flutter_study/lib/modules/ui/gcode_visualizer/widgets/current_segment_inspector.dart similarity index 100% rename from lib/modules/ui/gcode_visualizer/widgets/current_segment_inspector.dart rename to apps/flutter_study/lib/modules/ui/gcode_visualizer/widgets/current_segment_inspector.dart diff --git a/lib/modules/ui/gcode_visualizer/widgets/gcode_editor_panel.dart b/apps/flutter_study/lib/modules/ui/gcode_visualizer/widgets/gcode_editor_panel.dart similarity index 100% rename from lib/modules/ui/gcode_visualizer/widgets/gcode_editor_panel.dart rename to apps/flutter_study/lib/modules/ui/gcode_visualizer/widgets/gcode_editor_panel.dart diff --git a/lib/shared/AI_ANALYSIS.md b/apps/flutter_study/lib/shared/AI_ANALYSIS.md similarity index 100% rename from lib/shared/AI_ANALYSIS.md rename to apps/flutter_study/lib/shared/AI_ANALYSIS.md diff --git a/lib/shared/multi_window/AI_ANALYSIS.md b/apps/flutter_study/lib/shared/multi_window/AI_ANALYSIS.md similarity index 100% rename from lib/shared/multi_window/AI_ANALYSIS.md rename to apps/flutter_study/lib/shared/multi_window/AI_ANALYSIS.md diff --git a/lib/shared/multi_window/multi_window_manager.dart b/apps/flutter_study/lib/shared/multi_window/multi_window_manager.dart similarity index 100% rename from lib/shared/multi_window/multi_window_manager.dart rename to apps/flutter_study/lib/shared/multi_window/multi_window_manager.dart diff --git a/lib/shared/platform/AI_ANALYSIS.md b/apps/flutter_study/lib/shared/platform/AI_ANALYSIS.md similarity index 100% rename from lib/shared/platform/AI_ANALYSIS.md rename to apps/flutter_study/lib/shared/platform/AI_ANALYSIS.md diff --git a/macos/.gitignore b/apps/flutter_study/macos/.gitignore similarity index 86% rename from macos/.gitignore rename to apps/flutter_study/macos/.gitignore index 746adbb..96502ed 100644 --- a/macos/.gitignore +++ b/apps/flutter_study/macos/.gitignore @@ -1,6 +1,7 @@ # Flutter-related **/Flutter/ephemeral/ **/Pods/ +!Podfile.lock # Xcode-related **/dgph diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/apps/flutter_study/macos/Flutter/Flutter-Debug.xcconfig similarity index 100% rename from macos/Flutter/Flutter-Debug.xcconfig rename to apps/flutter_study/macos/Flutter/Flutter-Debug.xcconfig diff --git a/macos/Flutter/Flutter-Release.xcconfig b/apps/flutter_study/macos/Flutter/Flutter-Release.xcconfig similarity index 100% rename from macos/Flutter/Flutter-Release.xcconfig rename to apps/flutter_study/macos/Flutter/Flutter-Release.xcconfig diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/apps/flutter_study/macos/Flutter/GeneratedPluginRegistrant.swift similarity index 100% rename from macos/Flutter/GeneratedPluginRegistrant.swift rename to apps/flutter_study/macos/Flutter/GeneratedPluginRegistrant.swift diff --git a/macos/Podfile b/apps/flutter_study/macos/Podfile similarity index 100% rename from macos/Podfile rename to apps/flutter_study/macos/Podfile diff --git a/macos/Podfile.lock b/apps/flutter_study/macos/Podfile.lock similarity index 100% rename from macos/Podfile.lock rename to apps/flutter_study/macos/Podfile.lock diff --git a/macos/Runner.xcodeproj/project.pbxproj b/apps/flutter_study/macos/Runner.xcodeproj/project.pbxproj similarity index 100% rename from macos/Runner.xcodeproj/project.pbxproj rename to apps/flutter_study/macos/Runner.xcodeproj/project.pbxproj diff --git a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/apps/flutter_study/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to apps/flutter_study/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/apps/flutter_study/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme similarity index 100% rename from macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme rename to apps/flutter_study/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme diff --git a/macos/Runner.xcworkspace/contents.xcworkspacedata b/apps/flutter_study/macos/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from macos/Runner.xcworkspace/contents.xcworkspacedata rename to apps/flutter_study/macos/Runner.xcworkspace/contents.xcworkspacedata diff --git a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/apps/flutter_study/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to apps/flutter_study/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/macos/Runner/AppDelegate.swift b/apps/flutter_study/macos/Runner/AppDelegate.swift similarity index 100% rename from macos/Runner/AppDelegate.swift rename to apps/flutter_study/macos/Runner/AppDelegate.swift diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json rename to apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png rename to apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png rename to apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png rename to apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png rename to apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png rename to apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png rename to apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png similarity index 100% rename from macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png rename to apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png diff --git a/macos/Runner/Base.lproj/MainMenu.xib b/apps/flutter_study/macos/Runner/Base.lproj/MainMenu.xib similarity index 100% rename from macos/Runner/Base.lproj/MainMenu.xib rename to apps/flutter_study/macos/Runner/Base.lproj/MainMenu.xib diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/apps/flutter_study/macos/Runner/Configs/AppInfo.xcconfig similarity index 100% rename from macos/Runner/Configs/AppInfo.xcconfig rename to apps/flutter_study/macos/Runner/Configs/AppInfo.xcconfig diff --git a/macos/Runner/Configs/Debug.xcconfig b/apps/flutter_study/macos/Runner/Configs/Debug.xcconfig similarity index 100% rename from macos/Runner/Configs/Debug.xcconfig rename to apps/flutter_study/macos/Runner/Configs/Debug.xcconfig diff --git a/macos/Runner/Configs/Release.xcconfig b/apps/flutter_study/macos/Runner/Configs/Release.xcconfig similarity index 100% rename from macos/Runner/Configs/Release.xcconfig rename to apps/flutter_study/macos/Runner/Configs/Release.xcconfig diff --git a/macos/Runner/Configs/Warnings.xcconfig b/apps/flutter_study/macos/Runner/Configs/Warnings.xcconfig similarity index 100% rename from macos/Runner/Configs/Warnings.xcconfig rename to apps/flutter_study/macos/Runner/Configs/Warnings.xcconfig diff --git a/macos/Runner/DebugProfile.entitlements b/apps/flutter_study/macos/Runner/DebugProfile.entitlements similarity index 100% rename from macos/Runner/DebugProfile.entitlements rename to apps/flutter_study/macos/Runner/DebugProfile.entitlements diff --git a/macos/Runner/Info.plist b/apps/flutter_study/macos/Runner/Info.plist similarity index 100% rename from macos/Runner/Info.plist rename to apps/flutter_study/macos/Runner/Info.plist diff --git a/macos/Runner/MainFlutterWindow.swift b/apps/flutter_study/macos/Runner/MainFlutterWindow.swift similarity index 100% rename from macos/Runner/MainFlutterWindow.swift rename to apps/flutter_study/macos/Runner/MainFlutterWindow.swift diff --git a/macos/Runner/Release.entitlements b/apps/flutter_study/macos/Runner/Release.entitlements similarity index 100% rename from macos/Runner/Release.entitlements rename to apps/flutter_study/macos/Runner/Release.entitlements diff --git a/macos/RunnerTests/RunnerTests.swift b/apps/flutter_study/macos/RunnerTests/RunnerTests.swift similarity index 100% rename from macos/RunnerTests/RunnerTests.swift rename to apps/flutter_study/macos/RunnerTests/RunnerTests.swift diff --git a/apps/flutter_study/pubspec.yaml b/apps/flutter_study/pubspec.yaml new file mode 100644 index 0000000..e9d91de --- /dev/null +++ b/apps/flutter_study/pubspec.yaml @@ -0,0 +1,46 @@ +name: main_app +description: A Flutter app shell. +publish_to: 'none' +version: 1.1.0 + +environment: + sdk: ^3.11.5 + +resolution: workspace + +dependencies: + gcode_core: + path: ../../packages/gcode_core + flutter_study_learning: + path: ../../packages/flutter_study_learning + file_picker_bridge: + path: ../../packages/file_picker_bridge + flutter_ioc_core: + path: ../../packages/flutter_ioc_core + flutter: + sdk: flutter + go_router: ^14.2.0 + provider: ^6.1.5+1 + flutter_riverpod: ^2.5.1 + flutter_bloc: ^8.1.3 + equatable: ^2.0.5 + dio: ^5.8.0+1 + collection: ^1.18.0 + flutter_svg: ^2.0.10+1 + two_dimensional_scrollables: ^0.3.0 + usb_serial: ^0.5.0 + device_info_plus: ^10.1.2 + desktop_multi_window: ^0.3.0 + media_kit: ^1.2.6 + media_kit_video: ^2.0.1 + media_kit_libs_video: ^1.0.7 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^4.0.0 + flutterguard_cli: + path: ../../../flutterguard + +flutter: + uses-material-design: true diff --git a/test/modules/async/stream_subscription/stream_subscription_test.dart b/apps/flutter_study/test/modules/async/stream_subscription/stream_subscription_test.dart similarity index 100% rename from test/modules/async/stream_subscription/stream_subscription_test.dart rename to apps/flutter_study/test/modules/async/stream_subscription/stream_subscription_test.dart diff --git a/test/modules/platform/file_picker/file_picker_test.dart b/apps/flutter_study/test/modules/platform/file_picker/file_picker_test.dart similarity index 100% rename from test/modules/platform/file_picker/file_picker_test.dart rename to apps/flutter_study/test/modules/platform/file_picker/file_picker_test.dart diff --git a/test/modules/platform/online_video_player/online_video_player_test.dart b/apps/flutter_study/test/modules/platform/online_video_player/online_video_player_test.dart similarity index 100% rename from test/modules/platform/online_video_player/online_video_player_test.dart rename to apps/flutter_study/test/modules/platform/online_video_player/online_video_player_test.dart diff --git a/test/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart b/apps/flutter_study/test/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart similarity index 100% rename from test/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart rename to apps/flutter_study/test/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart diff --git a/test/modules/popup_table/popup_widgets/popup_widgets_test.dart b/apps/flutter_study/test/modules/popup_table/popup_widgets/popup_widgets_test.dart similarity index 100% rename from test/modules/popup_table/popup_widgets/popup_widgets_test.dart rename to apps/flutter_study/test/modules/popup_table/popup_widgets/popup_widgets_test.dart diff --git a/test/modules/ui/adsorption_line/adsorption_line_test.dart b/apps/flutter_study/test/modules/ui/adsorption_line/adsorption_line_test.dart similarity index 100% rename from test/modules/ui/adsorption_line/adsorption_line_test.dart rename to apps/flutter_study/test/modules/ui/adsorption_line/adsorption_line_test.dart diff --git a/test/modules/ui/download_animation/download_animation_test.dart b/apps/flutter_study/test/modules/ui/download_animation/download_animation_test.dart similarity index 100% rename from test/modules/ui/download_animation/download_animation_test.dart rename to apps/flutter_study/test/modules/ui/download_animation/download_animation_test.dart diff --git a/test/modules/ui/font_picker/font_picker_test.dart b/apps/flutter_study/test/modules/ui/font_picker/font_picker_test.dart similarity index 100% rename from test/modules/ui/font_picker/font_picker_test.dart rename to apps/flutter_study/test/modules/ui/font_picker/font_picker_test.dart diff --git a/test/modules/ui/gcode_visualizer/gcode_visualizer_test.dart b/apps/flutter_study/test/modules/ui/gcode_visualizer/gcode_visualizer_test.dart similarity index 100% rename from test/modules/ui/gcode_visualizer/gcode_visualizer_test.dart rename to apps/flutter_study/test/modules/ui/gcode_visualizer/gcode_visualizer_test.dart diff --git a/test/shared/module_catalog_utils_test.dart b/apps/flutter_study/test/shared/module_catalog_utils_test.dart similarity index 100% rename from test/shared/module_catalog_utils_test.dart rename to apps/flutter_study/test/shared/module_catalog_utils_test.dart diff --git a/windows/.gitignore b/apps/flutter_study/windows/.gitignore similarity index 100% rename from windows/.gitignore rename to apps/flutter_study/windows/.gitignore diff --git a/windows/CMakeLists.txt b/apps/flutter_study/windows/CMakeLists.txt similarity index 100% rename from windows/CMakeLists.txt rename to apps/flutter_study/windows/CMakeLists.txt diff --git a/windows/flutter/CMakeLists.txt b/apps/flutter_study/windows/flutter/CMakeLists.txt similarity index 100% rename from windows/flutter/CMakeLists.txt rename to apps/flutter_study/windows/flutter/CMakeLists.txt diff --git a/windows/runner/CMakeLists.txt b/apps/flutter_study/windows/runner/CMakeLists.txt similarity index 100% rename from windows/runner/CMakeLists.txt rename to apps/flutter_study/windows/runner/CMakeLists.txt diff --git a/windows/runner/Runner.rc b/apps/flutter_study/windows/runner/Runner.rc similarity index 100% rename from windows/runner/Runner.rc rename to apps/flutter_study/windows/runner/Runner.rc diff --git a/windows/runner/flutter_window.cpp b/apps/flutter_study/windows/runner/flutter_window.cpp similarity index 100% rename from windows/runner/flutter_window.cpp rename to apps/flutter_study/windows/runner/flutter_window.cpp diff --git a/windows/runner/flutter_window.h b/apps/flutter_study/windows/runner/flutter_window.h similarity index 100% rename from windows/runner/flutter_window.h rename to apps/flutter_study/windows/runner/flutter_window.h diff --git a/windows/runner/main.cpp b/apps/flutter_study/windows/runner/main.cpp similarity index 100% rename from windows/runner/main.cpp rename to apps/flutter_study/windows/runner/main.cpp diff --git a/windows/runner/resource.h b/apps/flutter_study/windows/runner/resource.h similarity index 100% rename from windows/runner/resource.h rename to apps/flutter_study/windows/runner/resource.h diff --git a/windows/runner/resources/app_icon.ico b/apps/flutter_study/windows/runner/resources/app_icon.ico similarity index 100% rename from windows/runner/resources/app_icon.ico rename to apps/flutter_study/windows/runner/resources/app_icon.ico diff --git a/windows/runner/runner.exe.manifest b/apps/flutter_study/windows/runner/runner.exe.manifest similarity index 100% rename from windows/runner/runner.exe.manifest rename to apps/flutter_study/windows/runner/runner.exe.manifest diff --git a/windows/runner/utils.cpp b/apps/flutter_study/windows/runner/utils.cpp similarity index 100% rename from windows/runner/utils.cpp rename to apps/flutter_study/windows/runner/utils.cpp diff --git a/windows/runner/utils.h b/apps/flutter_study/windows/runner/utils.h similarity index 100% rename from windows/runner/utils.h rename to apps/flutter_study/windows/runner/utils.h diff --git a/windows/runner/win32_window.cpp b/apps/flutter_study/windows/runner/win32_window.cpp similarity index 100% rename from windows/runner/win32_window.cpp rename to apps/flutter_study/windows/runner/win32_window.cpp diff --git a/windows/runner/win32_window.h b/apps/flutter_study/windows/runner/win32_window.h similarity index 100% rename from windows/runner/win32_window.h rename to apps/flutter_study/windows/runner/win32_window.h diff --git a/pubspec.yaml b/pubspec.yaml index eb32c59..a84d40e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,50 +1,13 @@ -name: main_app -description: A Flutter app shell. +name: flutter_study_workspace +description: Flutter Study workspace container. publish_to: 'none' -version: 1.1.0 environment: sdk: ^3.11.5 workspace: + - apps/flutter_study - packages/gcode_core - packages/flutter_study_learning - packages/file_picker_bridge - packages/flutter_ioc_core - -dependencies: - gcode_core: - path: packages/gcode_core - flutter_study_learning: - path: packages/flutter_study_learning - file_picker_bridge: - path: packages/file_picker_bridge - flutter_ioc_core: - path: packages/flutter_ioc_core - flutter: - sdk: flutter - go_router: ^14.2.0 - provider: ^6.1.5+1 - flutter_riverpod: ^2.5.1 - flutter_bloc: ^8.1.3 - equatable: ^2.0.5 - dio: ^5.8.0+1 - collection: ^1.18.0 - flutter_svg: ^2.0.10+1 - two_dimensional_scrollables: ^0.3.0 - usb_serial: ^0.5.0 - device_info_plus: ^10.1.2 - desktop_multi_window: ^0.3.0 - media_kit: ^1.2.6 - media_kit_video: ^2.0.1 - media_kit_libs_video: ^1.0.7 - -dev_dependencies: - flutter_test: - sdk: flutter - flutter_lints: ^4.0.0 - flutterguard_cli: - path: ../flutterguard - -flutter: - uses-material-design: true From 7ef5bee5489b50e417efab454c929a37e6ac43c2 Mon Sep 17 00:00:00 2001 From: lizy Date: Fri, 14 Aug 2026 17:08:14 +0800 Subject: [PATCH 02/17] refactor: establish-package-boundary-contracts [establish-package-boundary-contracts] --- packages/file_picker_bridge/OWNERS.md | 16 ++++++++++++++++ packages/flutter_ioc_core/OWNERS.md | 16 ++++++++++++++++ packages/flutter_study_learning/OWNERS.md | 16 ++++++++++++++++ packages/gcode_core/OWNERS.md | 16 ++++++++++++++++ 4 files changed, 64 insertions(+) create mode 100644 packages/file_picker_bridge/OWNERS.md create mode 100644 packages/flutter_ioc_core/OWNERS.md create mode 100644 packages/flutter_study_learning/OWNERS.md create mode 100644 packages/gcode_core/OWNERS.md diff --git a/packages/file_picker_bridge/OWNERS.md b/packages/file_picker_bridge/OWNERS.md new file mode 100644 index 0000000..f3c10af --- /dev/null +++ b/packages/file_picker_bridge/OWNERS.md @@ -0,0 +1,16 @@ +# file_picker_bridge Ownership Contract + +## Package + +`file_picker_bridge` + +## Public Contract + +`file_picker_bridge` owns the mock-friendly Dart API and MethodChannel client boundary for adapting host file picker implementations into a stable Flutter-facing file selection service. + +It must not own native application UI, business-specific file parsing, G-code loading behavior, app routing, platform bootstrap policy, or any caller-specific file management workflow. + +## Maintenance Owners + +- Flutter Study package maintainers +- Platform bridge maintainers diff --git a/packages/flutter_ioc_core/OWNERS.md b/packages/flutter_ioc_core/OWNERS.md new file mode 100644 index 0000000..66f4294 --- /dev/null +++ b/packages/flutter_ioc_core/OWNERS.md @@ -0,0 +1,16 @@ +# flutter_ioc_core Ownership Contract + +## Package + +`flutter_ioc_core` + +## Public Contract + +`flutter_ioc_core` owns the pure Dart inversion-of-control container boundary, including registration lifetimes, scoped resolution, container resolver APIs, factories, conditions, property injection hooks, and container exceptions. + +It must not own Flutter widgets, app bootstrap, route composition, module teaching screens, service implementations registered by callers, or platform integration behavior. + +## Maintenance Owners + +- Flutter Study package maintainers +- IoC core maintainers diff --git a/packages/flutter_study_learning/OWNERS.md b/packages/flutter_study_learning/OWNERS.md new file mode 100644 index 0000000..41d0be7 --- /dev/null +++ b/packages/flutter_study_learning/OWNERS.md @@ -0,0 +1,16 @@ +# flutter_study_learning Ownership Contract + +## Package + +`flutter_study_learning` + +## Public Contract + +`flutter_study_learning` owns shared teaching UI components for Flutter Study learning modules, including scaffolds, learning objectives, concept chips, code snippets, state logs, pitfalls, and exercise cards. + +It must not own module-specific business logic, route registration, module metadata, persistence, platform capabilities, or app shell behavior. + +## Maintenance Owners + +- Flutter Study package maintainers +- Learning UI maintainers diff --git a/packages/gcode_core/OWNERS.md b/packages/gcode_core/OWNERS.md new file mode 100644 index 0000000..29912fc --- /dev/null +++ b/packages/gcode_core/OWNERS.md @@ -0,0 +1,16 @@ +# gcode_core Ownership Contract + +## Package + +`gcode_core` + +## Public Contract + +`gcode_core` owns the reusable G-code package boundary for parsing G-code, reading line streams, collecting parse errors, building toolpath segments, and rendering Flutter visualization widgets such as the canvas, command timeline, and playback controls. + +It must not own host file picking, app-level route composition, app playback state, module catalog metadata, platform bootstrap policy, or feature-specific Flutter Study screens outside this package. + +## Maintenance Owners + +- Flutter Study package maintainers +- G-code package maintainers From 5defea69578dfe2d38f871ac0c765c48d5932ff0 Mon Sep 17 00:00:00 2001 From: lizy Date: Mon, 17 Aug 2026 10:12:02 +0800 Subject: [PATCH 03/17] refactor: fix-dio-retry-interceptor-resolution [fix-dio-retry-interceptor-resolution] --- apps/flutter_study/pubspec.yaml | 2 +- pubspec.lock | 40 ++++++++++++++++----------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/apps/flutter_study/pubspec.yaml b/apps/flutter_study/pubspec.yaml index e9d91de..da19787 100644 --- a/apps/flutter_study/pubspec.yaml +++ b/apps/flutter_study/pubspec.yaml @@ -40,7 +40,7 @@ dev_dependencies: sdk: flutter flutter_lints: ^4.0.0 flutterguard_cli: - path: ../../../flutterguard + path: ../../../../flutterguard flutter: uses-material-design: true diff --git a/pubspec.lock b/pubspec.lock index 051e521..0895ff3 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -74,7 +74,7 @@ packages: source: hosted version: "1.1.2" collection: - dependency: "direct main" + dependency: transitive description: name: collection sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" @@ -106,7 +106,7 @@ packages: source: hosted version: "0.7.14" desktop_multi_window: - dependency: "direct main" + dependency: transitive description: name: desktop_multi_window sha256: "60ba38725b8887b60e44d15afdcf0c3813568b5da2ccaf1e7f6fd09a380a6e24" @@ -114,7 +114,7 @@ packages: source: hosted version: "0.3.0" device_info_plus: - dependency: "direct main" + dependency: transitive description: name: device_info_plus sha256: a7fd703482b391a87d60b6061d04dfdeab07826b96f9abd8f5ed98068acc0074 @@ -130,7 +130,7 @@ packages: source: hosted version: "7.0.3" dio: - dependency: "direct main" + dependency: transitive description: name: dio sha256: aff32c08f92787a557dd5c0145ac91536481831a01b4648136373cddb0e64f8c @@ -146,7 +146,7 @@ packages: source: hosted version: "2.1.2" equatable: - dependency: "direct main" + dependency: transitive description: name: equatable sha256: "3e0141505477fd8ad55d6eb4e7776d3fe8430be8e497ccb1521370c3f21a3e2b" @@ -186,12 +186,12 @@ packages: source: hosted version: "1.1.1" flutter: - dependency: "direct main" + dependency: transitive description: flutter source: sdk version: "0.0.0" flutter_bloc: - dependency: "direct main" + dependency: transitive description: name: flutter_bloc sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a @@ -199,7 +199,7 @@ packages: source: hosted version: "8.1.6" flutter_lints: - dependency: "direct dev" + dependency: transitive description: name: flutter_lints sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" @@ -207,7 +207,7 @@ packages: source: hosted version: "4.0.0" flutter_riverpod: - dependency: "direct main" + dependency: transitive description: name: flutter_riverpod sha256: "9532ee6db4a943a1ed8383072a2e3eeda041db5657cdf6d2acecf3c21ecbe7e1" @@ -215,7 +215,7 @@ packages: source: hosted version: "2.6.1" flutter_svg: - dependency: "direct main" + dependency: transitive description: name: flutter_svg sha256: "1ded017b39c8e15c8948ea855070a5ff8ff8b3d5e83f3446e02d6bb12add7ad9" @@ -223,7 +223,7 @@ packages: source: hosted version: "2.2.4" flutter_test: - dependency: "direct dev" + dependency: transitive description: flutter source: sdk version: "0.0.0" @@ -233,9 +233,9 @@ packages: source: sdk version: "0.0.0" flutterguard_cli: - dependency: "direct dev" + dependency: transitive description: - path: "../flutterguard" + path: "../../flutterguard" relative: true source: path version: "0.7.1" @@ -248,7 +248,7 @@ packages: source: hosted version: "2.1.3" go_router: - dependency: "direct main" + dependency: transitive description: name: go_router sha256: f02fd7d2a4dc512fec615529824fdd217fecb3a3d3de68360293a551f21634b3 @@ -336,7 +336,7 @@ packages: source: hosted version: "0.13.0" media_kit: - dependency: "direct main" + dependency: transitive description: name: media_kit sha256: ae9e79597500c7ad6083a3c7b7b7544ddabfceacce7ae5c9709b0ec16a5d6643 @@ -376,7 +376,7 @@ packages: source: hosted version: "1.1.4" media_kit_libs_video: - dependency: "direct main" + dependency: transitive description: name: media_kit_libs_video sha256: "2b235b5dac79c6020e01eef5022c6cc85fedc0df1738aadc6ea489daa12a92a9" @@ -392,7 +392,7 @@ packages: source: hosted version: "1.0.11" media_kit_video: - dependency: "direct main" + dependency: transitive description: name: media_kit_video sha256: afaa509e7b7e0bf247557a3a740cde903a52c34ace9810f94500e127bd7b043d @@ -488,7 +488,7 @@ packages: source: hosted version: "6.5.0" provider: - dependency: "direct main" + dependency: transitive description: name: provider sha256: "4e82183fa20e5ca25703ead7e05de9e4cceed1fbd1eadc1ac3cb6f565a09f272" @@ -589,7 +589,7 @@ packages: source: hosted version: "0.7.11" two_dimensional_scrollables: - dependency: "direct main" + dependency: transitive description: name: two_dimensional_scrollables sha256: "221130454e75f3c27d247770b981d04b56a4c5c542715b59e10b84b46d23a12b" @@ -621,7 +621,7 @@ packages: source: hosted version: "3.0.2" usb_serial: - dependency: "direct main" + dependency: transitive description: name: usb_serial sha256: a605a600e34e7f28d4e80851ca3999ef747e42e406138887b8a88b8c382a8b07 From 0938961d0fee40b6e9e72f658503ae1a2730b3ba Mon Sep 17 00:00:00 2001 From: lizy Date: Mon, 17 Aug 2026 11:07:04 +0800 Subject: [PATCH 04/17] refactor: fix-popup-overlay-protected-set-state [fix-popup-overlay-protected-set-state] --- .../popup_table/popup_widgets/module_root.dart | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/flutter_study/lib/modules/popup_table/popup_widgets/module_root.dart b/apps/flutter_study/lib/modules/popup_table/popup_widgets/module_root.dart index 579bb54..30005fb 100644 --- a/apps/flutter_study/lib/modules/popup_table/popup_widgets/module_root.dart +++ b/apps/flutter_study/lib/modules/popup_table/popup_widgets/module_root.dart @@ -195,6 +195,13 @@ class _PopDemoHomePageState extends State { }); } + void _saveOverlayOrders(List open, List close) { + setState(() { + _orderStore.setOrders(open: open, close: close); + _overlayApplyVisibleOrder(open); + }); + } + Future _showDatePicker() async { final now = DateTime.now(); await showDatePicker( @@ -444,12 +451,7 @@ extension _PopupOverlayDialogs on _PopDemoHomePageState { fixedIds: kChainDialogIds, initialOpen: List.of(_orderStore.openOrder.value), initialClose: List.of(_orderStore.closeOrder.value), - onSave: (open, close) { - setState(() { - _orderStore.setOrders(open: open, close: close); - _overlayApplyVisibleOrder(open); - }); - }, + onSave: _saveOverlayOrders, ), ); } From a070426acfe19ba3c8861a6dc9b203bd74db891e Mon Sep 17 00:00:00 2001 From: lizy Date: Mon, 17 Aug 2026 15:36:02 +0800 Subject: [PATCH 05/17] refactor: replace-media-plugin-with-video-player [replace-media-plugin-with-video-player] --- apps/flutter_study/lib/AI_MODULE_INDEX.md | 3 +- apps/flutter_study/lib/app/app_bootstrap.dart | 2 - .../lib/app/router/app_route_table.dart | 11 +- .../lib/modules/platform/AI_ANALYSIS.md | 3 +- .../online_video_player/AI_ANALYSIS.md | 3 +- .../online_video_player/module_root.dart | 39 ++-- ...adapter.dart => video_player_adapter.dart} | 72 +++--- .../widgets/video_player_controls.dart | 2 +- .../Flutter/GeneratedPluginRegistrant.swift | 10 +- apps/flutter_study/macos/Podfile.lock | 28 +-- apps/flutter_study/pubspec.yaml | 4 +- .../online_video_player_test.dart | 6 +- pubspec.lock | 218 ++++-------------- tool/generate_agent_indexes.js | 10 +- 14 files changed, 134 insertions(+), 277 deletions(-) rename apps/flutter_study/lib/modules/platform/online_video_player/state/{media_kit_player_adapter.dart => video_player_adapter.dart} (54%) diff --git a/apps/flutter_study/lib/AI_MODULE_INDEX.md b/apps/flutter_study/lib/AI_MODULE_INDEX.md index f40f9ef..e8bb476 100644 --- a/apps/flutter_study/lib/AI_MODULE_INDEX.md +++ b/apps/flutter_study/lib/AI_MODULE_INDEX.md @@ -262,8 +262,7 @@ "status": "ready", "depends": [ "flutter_study_learning", - "media_kit", - "media_kit_video", + "video_player", "module_registry" ], "analysis": "lib/modules/platform/online_video_player/AI_ANALYSIS.md" diff --git a/apps/flutter_study/lib/app/app_bootstrap.dart b/apps/flutter_study/lib/app/app_bootstrap.dart index 3a322c0..f8f0c2c 100644 --- a/apps/flutter_study/lib/app/app_bootstrap.dart +++ b/apps/flutter_study/lib/app/app_bootstrap.dart @@ -1,7 +1,6 @@ import 'package:desktop_multi_window/desktop_multi_window.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:media_kit/media_kit.dart'; import '../shared/multi_window/multi_window_manager.dart'; import 'app.dart'; @@ -10,7 +9,6 @@ import 'category_window_app.dart'; /// Resolves the host-specific application shell before mounting Flutter. Future bootstrapFlutterStudyApp() async { WidgetsFlutterBinding.ensureInitialized(); - MediaKit.ensureInitialized(); Widget root = const App(); if (MultiWindowManager.isSupported) { diff --git a/apps/flutter_study/lib/app/router/app_route_table.dart b/apps/flutter_study/lib/app/router/app_route_table.dart index 7fd2923..1bcadd9 100644 --- a/apps/flutter_study/lib/app/router/app_route_table.dart +++ b/apps/flutter_study/lib/app/router/app_route_table.dart @@ -300,10 +300,17 @@ final List _modules = [ ModuleEntry( title: '在线视频播放', path: '/online-video-player', - subtitle: '使用 media_kit 播放在线 HTTP 视频流并操控播放参数', + subtitle: '使用 video_player 播放在线 HTTP 视频流并操控播放参数', category: ModuleCategory.platform, difficulty: Difficulty.intermediate, - concepts: ['media_kit', 'libmpv', 'HTTP 流', '播放控制', '倍速', 'Player 生命周期'], + concepts: [ + 'video_player', + '平台播放器', + 'HTTP 流', + '播放控制', + '倍速', + 'Controller 生命周期', + ], estimatedMinutes: 35, status: ModuleStatus.ready, builder: (context) => const OnlineVideoPlayerEntry(), diff --git a/apps/flutter_study/lib/modules/platform/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/platform/AI_ANALYSIS.md index 76d4833..151d964 100644 --- a/apps/flutter_study/lib/modules/platform/AI_ANALYSIS.md +++ b/apps/flutter_study/lib/modules/platform/AI_ANALYSIS.md @@ -21,8 +21,7 @@ "dio", "usb_serial", "device_info_plus", - "media_kit", - "media_kit_video", + "video_player", "flutter_study_learning", "file_picker_bridge" ], diff --git a/apps/flutter_study/lib/modules/platform/online_video_player/AI_ANALYSIS.md b/apps/flutter_study/lib/modules/platform/online_video_player/AI_ANALYSIS.md index be43d7d..f746caf 100644 --- a/apps/flutter_study/lib/modules/platform/online_video_player/AI_ANALYSIS.md +++ b/apps/flutter_study/lib/modules/platform/online_video_player/AI_ANALYSIS.md @@ -23,8 +23,7 @@ ], "depends": [ "flutter_study_learning", - "media_kit", - "media_kit_video", + "video_player", "module_registry" ], "children": [], diff --git a/apps/flutter_study/lib/modules/platform/online_video_player/module_root.dart b/apps/flutter_study/lib/modules/platform/online_video_player/module_root.dart index 239f0b0..0169a45 100644 --- a/apps/flutter_study/lib/modules/platform/online_video_player/module_root.dart +++ b/apps/flutter_study/lib/modules/platform/online_video_player/module_root.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_study_learning/flutter_study_learning.dart'; -import 'package:media_kit_video/media_kit_video.dart'; +import 'package:video_player/video_player.dart'; -import 'state/media_kit_player_adapter.dart'; +import 'state/video_player_adapter.dart'; import 'widgets/video_player_controls.dart'; class MyHomePage extends StatefulWidget { @@ -17,7 +17,7 @@ class MyHomePage extends StatefulWidget { class _MyHomePageState extends State { late final VideoPlayerAdapter _adapter = - widget.adapter ?? MediaKitPlayerAdapter(); + widget.adapter ?? VideoPlayerPluginAdapter(); @override void initState() { @@ -75,10 +75,7 @@ class _MyHomePageState extends State { return Stack( fit: StackFit.expand, children: [ - Video( - controller: controller, - controls: NoVideoControls, - ), + VideoPlayer(controller), if (state == PlayerUiState.loading) const ColoredBox( color: Color(0x66000000), @@ -103,37 +100,37 @@ class _MyHomePageState extends State { sections: const [ LearningObjectives( objectives: [ - '理解 media_kit、VideoController 与原生 libmpv 的职责边界', + '理解 video_player、VideoPlayerController 与平台播放器的职责边界', '掌握在线媒体打开、播放、暂停、跳转、音量和倍速控制', - '正确管理 Player、流订阅和 ValueNotifier 的生命周期', + '正确管理 VideoPlayerController、监听器和 ValueNotifier 的生命周期', ], ), ConceptChips( concepts: [ - 'media_kit', - 'libmpv', + 'video_player', + '平台播放器', 'HTTP 流', '播放控制', '倍速', - 'Player 生命周期', + 'Controller 生命周期', ], ), CodeSnippetCard( title: '打开并播放在线媒体', code: - "final player = Player();\n" - "final controller = VideoController(player);\n" - "await player.open(\n" - " Media('https://example.com/video.mp4'),\n" - " play: true,\n" - ");", - explanation: 'Player 负责媒体状态,VideoController 将视频画面连接到 Flutter Widget。', + "final controller = VideoPlayerController.networkUrl(\n" + " Uri.parse('https://example.com/video.mp4'),\n" + ");\n" + "await controller.initialize();\n" + "await controller.play();", + explanation: + 'VideoPlayerController 负责媒体状态,并把平台播放器画面连接到 Flutter Widget。', ), CommonPitfalls( pitfalls: [ 'macOS 沙箱默认禁止外部网络访问,需要同时配置 DebugProfile 与 Release 的 network.client 权限', - 'media_kit 必须在 runApp 前完成全局初始化,否则原生后端可能无法正确加载', - 'Player、流订阅和监听器必须在页面销毁时释放,避免原生资源与回调泄漏', + 'VideoPlayerController 必须先完成 initialize,才能可靠读取时长并渲染画面', + 'VideoPlayerController 和监听器必须在页面销毁时释放,避免原生资源与回调泄漏', ], ), ExerciseCard( diff --git a/apps/flutter_study/lib/modules/platform/online_video_player/state/media_kit_player_adapter.dart b/apps/flutter_study/lib/modules/platform/online_video_player/state/video_player_adapter.dart similarity index 54% rename from apps/flutter_study/lib/modules/platform/online_video_player/state/media_kit_player_adapter.dart rename to apps/flutter_study/lib/modules/platform/online_video_player/state/video_player_adapter.dart index b787ee4..d7c66d6 100644 --- a/apps/flutter_study/lib/modules/platform/online_video_player/state/media_kit_player_adapter.dart +++ b/apps/flutter_study/lib/modules/platform/online_video_player/state/video_player_adapter.dart @@ -1,8 +1,7 @@ import 'dart:async'; import 'package:flutter/foundation.dart'; -import 'package:media_kit/media_kit.dart'; -import 'package:media_kit_video/media_kit_video.dart'; +import 'package:video_player/video_player.dart'; const sampleStreamUrl = 'https://media.w3.org/2010/05/sintel/trailer.mp4'; @@ -14,7 +13,7 @@ abstract interface class VideoPlayerAdapter { ValueNotifier get duration; ValueNotifier get volume; ValueNotifier get rate; - VideoController? get videoController; + VideoPlayerController? get videoController; Future openAndPlay(); Future play(); @@ -26,30 +25,16 @@ abstract interface class VideoPlayerAdapter { void dispose(); } -class MediaKitPlayerAdapter implements VideoPlayerAdapter { - MediaKitPlayerAdapter({Player? player}) : _player = player ?? Player() { - videoController = VideoController(_player); - _subscriptions.addAll([ - _player.stream.position.listen((value) => position.value = value), - _player.stream.duration.listen((value) => duration.value = value), - _player.stream.playing.listen((isPlaying) { - if (uiState.value == PlayerUiState.loading || - uiState.value == PlayerUiState.error) { - if (!isPlaying) return; - } - uiState.value = isPlaying - ? PlayerUiState.playing - : PlayerUiState.paused; - }), - _player.stream.error.listen((_) => uiState.value = PlayerUiState.error), - ]); +class VideoPlayerPluginAdapter implements VideoPlayerAdapter { + VideoPlayerPluginAdapter({VideoPlayerController? controller}) + : videoController = + controller ?? + VideoPlayerController.networkUrl(Uri.parse(sampleStreamUrl)) { + videoController.addListener(_synchronizeState); } - final Player _player; - final List> _subscriptions = []; - @override - late final VideoController videoController; + final VideoPlayerController videoController; @override final ValueNotifier uiState = ValueNotifier( @@ -73,43 +58,60 @@ class MediaKitPlayerAdapter implements VideoPlayerAdapter { uiState.value = PlayerUiState.loading; position.value = Duration.zero; try { - await _player.open(Media(sampleStreamUrl), play: true); + await videoController.initialize(); + await videoController.play(); } on Object { uiState.value = PlayerUiState.error; } } @override - Future play() => _player.play(); + Future play() => videoController.play(); @override - Future pause() => _player.pause(); + Future pause() => videoController.pause(); @override - Future togglePlayPause() => _player.playOrPause(); + Future togglePlayPause() => + videoController.value.isPlaying ? pause() : play(); @override - Future seek(Duration value) => _player.seek(value); + Future seek(Duration value) => videoController.seekTo(value); @override Future setVolume(double value) async { final normalized = value.clamp(0.0, 1.0); volume.value = normalized; - await _player.setVolume(normalized * 100); + await videoController.setVolume(normalized); } @override Future setRate(double value) async { rate.value = value; - await _player.setRate(value); + await videoController.setPlaybackSpeed(value); + } + + void _synchronizeState() { + final value = videoController.value; + if (value.hasError) { + uiState.value = PlayerUiState.error; + return; + } + position.value = value.position; + duration.value = value.duration; + volume.value = value.volume; + rate.value = value.playbackSpeed; + if (value.isInitialized) { + uiState.value = value.isPlaying + ? PlayerUiState.playing + : PlayerUiState.paused; + } } @override void dispose() { - for (final subscription in _subscriptions) { - unawaited(subscription.cancel()); - } - unawaited(_player.dispose()); + videoController.removeListener(_synchronizeState); + unawaited(videoController.dispose()); uiState.dispose(); position.dispose(); duration.dispose(); diff --git a/apps/flutter_study/lib/modules/platform/online_video_player/widgets/video_player_controls.dart b/apps/flutter_study/lib/modules/platform/online_video_player/widgets/video_player_controls.dart index b10dab7..ca9d6b9 100644 --- a/apps/flutter_study/lib/modules/platform/online_video_player/widgets/video_player_controls.dart +++ b/apps/flutter_study/lib/modules/platform/online_video_player/widgets/video_player_controls.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import '../state/media_kit_player_adapter.dart'; +import '../state/video_player_adapter.dart'; class VideoPlayerControls extends StatelessWidget { const VideoPlayerControls({super.key, required this.adapter}); diff --git a/apps/flutter_study/macos/Flutter/GeneratedPluginRegistrant.swift b/apps/flutter_study/macos/Flutter/GeneratedPluginRegistrant.swift index fa94833..cd3c3d2 100644 --- a/apps/flutter_study/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/apps/flutter_study/macos/Flutter/GeneratedPluginRegistrant.swift @@ -7,16 +7,10 @@ import Foundation import desktop_multi_window import device_info_plus -import media_kit_libs_macos_video -import media_kit_video -import package_info_plus -import wakelock_plus +import video_player_avfoundation func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FlutterMultiWindowPlugin.register(with: registry.registrar(forPlugin: "FlutterMultiWindowPlugin")) DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) - MediaKitLibsMacosVideoPlugin.register(with: registry.registrar(forPlugin: "MediaKitLibsMacosVideoPlugin")) - MediaKitVideoPlugin.register(with: registry.registrar(forPlugin: "MediaKitVideoPlugin")) - FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) - WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin")) + VideoPlayerPlugin.register(with: registry.registrar(forPlugin: "VideoPlayerPlugin")) } diff --git a/apps/flutter_study/macos/Podfile.lock b/apps/flutter_study/macos/Podfile.lock index 19d7b53..a3de1f6 100644 --- a/apps/flutter_study/macos/Podfile.lock +++ b/apps/flutter_study/macos/Podfile.lock @@ -4,23 +4,14 @@ PODS: - device_info_plus (0.0.1): - FlutterMacOS - FlutterMacOS (1.0.0) - - media_kit_libs_macos_video (1.0.4): - - FlutterMacOS - - media_kit_video (0.0.1): - - FlutterMacOS - - package_info_plus (0.0.1): - - FlutterMacOS - - wakelock_plus (0.0.1): + - video_player_avfoundation (0.0.1): - FlutterMacOS DEPENDENCIES: - desktop_multi_window (from `Flutter/ephemeral/.symlinks/plugins/desktop_multi_window/macos`) - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) - FlutterMacOS (from `Flutter/ephemeral`) - - media_kit_libs_macos_video (from `Flutter/ephemeral/.symlinks/plugins/media_kit_libs_macos_video/macos`) - - media_kit_video (from `Flutter/ephemeral/.symlinks/plugins/media_kit_video/macos`) - - package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`) - - wakelock_plus (from `Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos`) + - video_player_avfoundation (from `Flutter/ephemeral/.symlinks/plugins/video_player_avfoundation/darwin`) EXTERNAL SOURCES: desktop_multi_window: @@ -29,23 +20,14 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos FlutterMacOS: :path: Flutter/ephemeral - media_kit_libs_macos_video: - :path: Flutter/ephemeral/.symlinks/plugins/media_kit_libs_macos_video/macos - media_kit_video: - :path: Flutter/ephemeral/.symlinks/plugins/media_kit_video/macos - package_info_plus: - :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos - wakelock_plus: - :path: Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos + video_player_avfoundation: + :path: Flutter/ephemeral/.symlinks/plugins/video_player_avfoundation/darwin SPEC CHECKSUMS: desktop_multi_window: 93667594ccc4b88d91a97972fd3b1b89667fa80a device_info_plus: a56e6e74dbbd2bb92f2da12c64ddd4f67a749041 FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 - media_kit_libs_macos_video: 85a23e549b5f480e72cae3e5634b5514bc692f65 - media_kit_video: fa6564e3799a0a28bff39442334817088b7ca758 - package_info_plus: f0052d280d17aa382b932f399edf32507174e870 - wakelock_plus: 917609be14d812ddd9e9528876538b2263aaa03b + video_player_avfoundation: 2618e5754e2ab98a816bc4e0c1e9157298b50b17 PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 diff --git a/apps/flutter_study/pubspec.yaml b/apps/flutter_study/pubspec.yaml index da19787..b2f72fd 100644 --- a/apps/flutter_study/pubspec.yaml +++ b/apps/flutter_study/pubspec.yaml @@ -31,9 +31,7 @@ dependencies: usb_serial: ^0.5.0 device_info_plus: ^10.1.2 desktop_multi_window: ^0.3.0 - media_kit: ^1.2.6 - media_kit_video: ^2.0.1 - media_kit_libs_video: ^1.0.7 + video_player: ^2.10.0 dev_dependencies: flutter_test: diff --git a/apps/flutter_study/test/modules/platform/online_video_player/online_video_player_test.dart b/apps/flutter_study/test/modules/platform/online_video_player/online_video_player_test.dart index 1ac5961..6a402f5 100644 --- a/apps/flutter_study/test/modules/platform/online_video_player/online_video_player_test.dart +++ b/apps/flutter_study/test/modules/platform/online_video_player/online_video_player_test.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:main_app/modules/platform/online_video_player/module_root.dart'; -import 'package:main_app/modules/platform/online_video_player/state/media_kit_player_adapter.dart'; +import 'package:main_app/modules/platform/online_video_player/state/video_player_adapter.dart'; import 'package:main_app/modules/platform/online_video_player/widgets/video_player_controls.dart'; -import 'package:media_kit_video/media_kit_video.dart'; +import 'package:video_player/video_player.dart'; void main() { testWidgets('controls render playback, seek, rate and volume controls', ( @@ -88,7 +88,7 @@ class FakeVideoPlayerAdapter implements VideoPlayerAdapter { final ValueNotifier rate = ValueNotifier(1); @override - VideoController? get videoController => null; + VideoPlayerController? get videoController => null; @override Future openAndPlay() async { diff --git a/pubspec.lock b/pubspec.lock index 0895ff3..0fc0ef1 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -17,14 +17,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "7.7.1" - archive: - dependency: transitive - description: - name: archive - sha256: a96e8b390886ee8abb49b7bd3ac8df6f451c621619f52a26e815fdcf568959ff - url: "https://pub.flutter-io.cn" - source: hosted - version: "4.0.9" args: dependency: transitive description: @@ -97,14 +89,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "3.0.7" - dbus: + csslib: dependency: transitive description: - name: dbus - sha256: "0ce9b0a839e6dee59a37a623d2fc26a35bbbe6404213e419b0d6411023d62645" + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" url: "https://pub.flutter-io.cn" source: hosted - version: "0.7.14" + version: "1.0.2" desktop_multi_window: dependency: transitive description: @@ -177,14 +169,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "7.0.1" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.1.1" flutter: dependency: transitive description: flutter @@ -255,6 +239,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "14.8.1" + html: + dependency: transitive + description: + name: html + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.15.6" http: dependency: transitive description: @@ -271,14 +263,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "4.1.2" - image: - dependency: transitive - description: - name: image - sha256: f9881ff4998044947ec38d098bc7c8316ae1186fa786eddffdb867b9bc94dfce - url: "https://pub.flutter-io.cn" - source: hosted - version: "4.8.0" leak_tracker: dependency: transitive description: @@ -335,70 +319,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "0.13.0" - media_kit: - dependency: transitive - description: - name: media_kit - sha256: ae9e79597500c7ad6083a3c7b7b7544ddabfceacce7ae5c9709b0ec16a5d6643 - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.2.6" - media_kit_libs_android_video: - dependency: transitive - description: - name: media_kit_libs_android_video - sha256: "3f6274e5ab2de512c286a25c327288601ee445ed8ac319e0ef0b66148bd8f76c" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.3.8" - media_kit_libs_ios_video: - dependency: transitive - description: - name: media_kit_libs_ios_video - sha256: b5382994eb37a4564c368386c154ad70ba0cc78dacdd3fb0cd9f30db6d837991 - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.1.4" - media_kit_libs_linux: - dependency: transitive - description: - name: media_kit_libs_linux - sha256: "2b473399a49ec94452c4d4ae51cfc0f6585074398d74216092bf3d54aac37ecf" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.2.1" - media_kit_libs_macos_video: - dependency: transitive - description: - name: media_kit_libs_macos_video - sha256: f26aa1452b665df288e360393758f84b911f70ffb3878032e1aabba23aa1032d - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.1.4" - media_kit_libs_video: - dependency: transitive - description: - name: media_kit_libs_video - sha256: "2b235b5dac79c6020e01eef5022c6cc85fedc0df1738aadc6ea489daa12a92a9" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.0.7" - media_kit_libs_windows_video: - dependency: transitive - description: - name: media_kit_libs_windows_video - sha256: dff76da2778729ab650229e6b4ec6ec111eb5151431002cbd7ea304ff1f112ab - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.0.11" - media_kit_video: - dependency: transitive - description: - name: media_kit_video - sha256: afaa509e7b7e0bf247557a3a740cde903a52c34ace9810f94500e127bd7b043d - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.0.1" meta: dependency: transitive description: @@ -431,22 +351,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: "468c26b4254ab01979fa5e4a98cb343ea3631b9acee6f21028997419a80e1a20" - url: "https://pub.flutter-io.cn" - source: hosted - version: "9.0.1" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086" - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.2.1" path: dependency: transitive description: @@ -479,14 +383,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.1.8" - posix: - dependency: transitive - description: - name: posix - sha256: "185ef7606574f789b40f289c233efa52e96dead518aed988e040a10737febb07" - url: "https://pub.flutter-io.cn" - source: hosted - version: "6.5.0" provider: dependency: transitive description: @@ -511,14 +407,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.6.1" - safe_local_storage: - dependency: transitive - description: - name: safe_local_storage - sha256: "494b982d5edb71030650ea463d939670e91b232b588323dc75229d2c5f23e7b7" - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.0.6" sky_engine: dependency: transitive description: flutter @@ -564,14 +452,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.4.1" - synchronized: - dependency: transitive - description: - name: synchronized - sha256: "93b153dcb6a26dcddee6ca087dd634b53e38c10b5aa163e8e49501a776456153" - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.4.1" term_glyph: dependency: transitive description: @@ -604,22 +484,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.4.0" - universal_platform: - dependency: transitive - description: - name: universal_platform - sha256: "64e16458a0ea9b99260ceb5467a214c1f298d647c659af1bff6d3bf82536b1ec" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.1.0" - uri_parser: - dependency: transitive - description: - name: uri_parser - sha256: "051c62e5f693de98ca9f130ee707f8916e2266945565926be3ff20659f7853ce" - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.0.2" usb_serial: dependency: transitive description: @@ -628,14 +492,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "0.5.2" - uuid: - dependency: transitive - description: - name: uuid - sha256: "9b129329f58692f6e6578329498a8fe9fbe98f090beb764ffbb8ee2eadd01dcd" - url: "https://pub.flutter-io.cn" - source: hosted - version: "4.6.0" vector_graphics: dependency: transitive description: @@ -668,30 +524,54 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" - vm_service: + video_player: dependency: transitive description: - name: vm_service - sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" + name: video_player + sha256: "8c837b570dccb9ae6ff73d2e0b03c7e708bfefd3bd1194faa7f3e7f200dfc399" url: "https://pub.flutter-io.cn" source: hosted - version: "15.2.0" - wakelock_plus: + version: "2.14.0" + video_player_android: dependency: transitive description: - name: wakelock_plus - sha256: ddf3db70eaa10c37558ff817519b85d527dbd21034fd5d8e1c2e85f31588f1c1 + name: video_player_android + sha256: e229676f8fade3e0124482495aaa2b548872cc4018b6268adfca4868be16aa74 url: "https://pub.flutter-io.cn" source: hosted - version: "1.5.2" - wakelock_plus_platform_interface: + version: "2.12.0" + video_player_avfoundation: dependency: transitive description: - name: wakelock_plus_platform_interface - sha256: "0618d1799f0b28bcf98255b4ee8313e6fc4d38589dc4ee5fe5840d57d1aff6da" + name: video_player_avfoundation + sha256: c238f5f0a26845cd0bcc2956049b63065a4d3c40ddfc22c3414cd170bef7fff9 url: "https://pub.flutter-io.cn" source: hosted - version: "1.6.0" + version: "2.11.0" + video_player_platform_interface: + dependency: transitive + description: + name: video_player_platform_interface + sha256: "92c0fbabe20c788e71fd10d26cea998d0d253282e65d145aed0818731cf593ce" + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.9.0" + video_player_web: + dependency: transitive + description: + name: video_player_web + sha256: "9f3c00be2ef9b76a95d94ac5119fb843dca6f2c69e6c9968f6f2b6c9e7afbdeb" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.4.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" + url: "https://pub.flutter-io.cn" + source: hosted + version: "15.2.0" watcher: dependency: transitive description: @@ -742,4 +622,4 @@ packages: version: "3.1.3" sdks: dart: ">=3.12.0 <4.0.0" - flutter: ">=3.41.0" + flutter: ">=3.44.0" diff --git a/tool/generate_agent_indexes.js b/tool/generate_agent_indexes.js index db49f40..6d128e5 100644 --- a/tool/generate_agent_indexes.js +++ b/tool/generate_agent_indexes.js @@ -2,6 +2,7 @@ const fs = require('fs'); const path = require('path'); const root = path.resolve(__dirname, '..'); +const appRoot = path.join(root, 'apps/flutter_study'); const contracts = { no_natural_language: true, @@ -33,7 +34,7 @@ const modules = [ ['platform', 'dio_interceptor', '/dio-interceptor', 'ready', ['flutter_study_learning', 'dio', 'module_registry', 'go_router']], ['platform', 'usb_detector', '/usb-detector', 'ready', ['flutter_study_learning', 'usb_serial', 'device_info_plus', 'module_registry']], ['platform', 'file_picker', '/file-picker', 'ready', ['flutter_study_learning', 'file_picker_bridge', 'module_registry']], - ['platform', 'online_video_player', '/online-video-player', 'ready', ['flutter_study_learning', 'media_kit', 'media_kit_video', 'module_registry']], + ['platform', 'online_video_player', '/online-video-player', 'ready', ['flutter_study_learning', 'video_player', 'module_registry']], ]; const categoryMeta = { @@ -42,7 +43,7 @@ const categoryMeta = { state: [['status_management', 'flutter_ioc'], ['state_management'], ['provider', 'flutter_riverpod', 'flutter_bloc', 'flutter_ioc_core']], ui: [['gcode_visualizer', 'adsorption_line', 'download_animation', 'font_picker'], ['ui_animation_custom_paint'], ['provider', 'gcode_core', 'file_picker_bridge', 'flutter_study_learning', 'module_registry']], popup_table: [['popup_widgets', 'popup_list_interaction', 'scroll_table', 'overlay_follow_compare'], ['popup_overlay_table'], ['module_registry', 'flutter_study_learning', 'two_dimensional_scrollables']], - platform: [['dio_interceptor', 'usb_detector', 'file_picker', 'online_video_player'], ['network_platform'], ['dio', 'usb_serial', 'device_info_plus', 'media_kit', 'media_kit_video', 'flutter_study_learning', 'file_picker_bridge']], + platform: [['dio_interceptor', 'usb_detector', 'file_picker', 'online_video_player'], ['network_platform'], ['dio', 'usb_serial', 'device_info_plus', 'video_player', 'flutter_study_learning', 'file_picker_bridge']], }; const flutterGuardDependency = { @@ -98,7 +99,8 @@ const workspacePackages = [ ]; function writeJson(rel, value) { - const file = path.join(root, rel); + const outputRoot = rel === 'lib' || rel.startsWith('lib/') ? appRoot : root; + const file = path.join(outputRoot, rel); fs.mkdirSync(path.dirname(file), { recursive: true }); fs.writeFileSync(file, `${JSON.stringify(value, null, 2)}\n`); } @@ -492,7 +494,7 @@ function writeModuleIndexes() { function writeModuleContracts() { for (const [category, module, route, status, depends] of modules) { - const dir = path.join(root, 'lib/modules', category, module); + const dir = path.join(appRoot, 'lib/modules', category, module); const entrypoints = []; for (const item of ['module_entry.dart', 'module_root.dart', 'module_routes.dart']) { if (fs.existsSync(path.join(dir, item))) entrypoints.push(item); From f63602076678f2638f5a9f3fa905717145d48281 Mon Sep 17 00:00:00 2001 From: lizy Date: Mon, 17 Aug 2026 17:58:36 +0800 Subject: [PATCH 06/17] refactor: rename-main-app-package [rename-main-app-package] --- .run/Flutter_Study_macOS.run.xml | 6 ++++++ apps/flutter_study/pubspec.yaml | 2 +- .../stream_subscription/stream_subscription_test.dart | 2 +- .../modules/platform/file_picker/file_picker_test.dart | 2 +- .../online_video_player/online_video_player_test.dart | 6 +++--- .../overlay_follow_compare_test.dart | 2 +- .../popup_table/popup_widgets/popup_widgets_test.dart | 4 ++-- .../modules/ui/adsorption_line/adsorption_line_test.dart | 4 ++-- .../ui/download_animation/download_animation_test.dart | 2 +- .../test/modules/ui/font_picker/font_picker_test.dart | 8 ++++---- .../ui/gcode_visualizer/gcode_visualizer_test.dart | 2 +- .../test/shared/module_catalog_utils_test.dart | 6 +++--- 12 files changed, 26 insertions(+), 20 deletions(-) create mode 100644 .run/Flutter_Study_macOS.run.xml diff --git a/.run/Flutter_Study_macOS.run.xml b/.run/Flutter_Study_macOS.run.xml new file mode 100644 index 0000000..364c8ce --- /dev/null +++ b/.run/Flutter_Study_macOS.run.xml @@ -0,0 +1,6 @@ + + + + diff --git a/apps/flutter_study/pubspec.yaml b/apps/flutter_study/pubspec.yaml index b2f72fd..735810c 100644 --- a/apps/flutter_study/pubspec.yaml +++ b/apps/flutter_study/pubspec.yaml @@ -1,4 +1,4 @@ -name: main_app +name: flutter_study_app description: A Flutter app shell. publish_to: 'none' version: 1.1.0 diff --git a/apps/flutter_study/test/modules/async/stream_subscription/stream_subscription_test.dart b/apps/flutter_study/test/modules/async/stream_subscription/stream_subscription_test.dart index 2fc3e0b..a2248e3 100644 --- a/apps/flutter_study/test/modules/async/stream_subscription/stream_subscription_test.dart +++ b/apps/flutter_study/test/modules/async/stream_subscription/stream_subscription_test.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:main_app/modules/async/stream_subscription/pages/stream_demo_page.dart'; +import 'package:flutter_study_app/modules/async/stream_subscription/pages/stream_demo_page.dart'; void main() { testWidgets('StreamDemoPage renders teaching components', (tester) async { diff --git a/apps/flutter_study/test/modules/platform/file_picker/file_picker_test.dart b/apps/flutter_study/test/modules/platform/file_picker/file_picker_test.dart index 16b38a2..767d590 100644 --- a/apps/flutter_study/test/modules/platform/file_picker/file_picker_test.dart +++ b/apps/flutter_study/test/modules/platform/file_picker/file_picker_test.dart @@ -2,7 +2,7 @@ import 'package:file_picker_bridge/file_picker_bridge.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:main_app/modules/platform/file_picker/module_root.dart'; +import 'package:flutter_study_app/modules/platform/file_picker/module_root.dart'; void main() { testWidgets('picked file shows its name and path', (tester) async { diff --git a/apps/flutter_study/test/modules/platform/online_video_player/online_video_player_test.dart b/apps/flutter_study/test/modules/platform/online_video_player/online_video_player_test.dart index 6a402f5..e7c6e93 100644 --- a/apps/flutter_study/test/modules/platform/online_video_player/online_video_player_test.dart +++ b/apps/flutter_study/test/modules/platform/online_video_player/online_video_player_test.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:main_app/modules/platform/online_video_player/module_root.dart'; -import 'package:main_app/modules/platform/online_video_player/state/video_player_adapter.dart'; -import 'package:main_app/modules/platform/online_video_player/widgets/video_player_controls.dart'; +import 'package:flutter_study_app/modules/platform/online_video_player/module_root.dart'; +import 'package:flutter_study_app/modules/platform/online_video_player/state/video_player_adapter.dart'; +import 'package:flutter_study_app/modules/platform/online_video_player/widgets/video_player_controls.dart'; import 'package:video_player/video_player.dart'; void main() { diff --git a/apps/flutter_study/test/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart b/apps/flutter_study/test/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart index a8a8ad8..753244c 100644 --- a/apps/flutter_study/test/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart +++ b/apps/flutter_study/test/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:main_app/modules/popup_table/overlay_follow_compare/module_root.dart'; +import 'package:flutter_study_app/modules/popup_table/overlay_follow_compare/module_root.dart'; void main() { testWidgets('OverlayComparePage renders teaching components', (tester) async { diff --git a/apps/flutter_study/test/modules/popup_table/popup_widgets/popup_widgets_test.dart b/apps/flutter_study/test/modules/popup_table/popup_widgets/popup_widgets_test.dart index 6f87bb4..8397589 100644 --- a/apps/flutter_study/test/modules/popup_table/popup_widgets/popup_widgets_test.dart +++ b/apps/flutter_study/test/modules/popup_table/popup_widgets/popup_widgets_test.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:main_app/modules/popup_table/popup_widgets/module_entry.dart'; -import 'package:main_app/modules/popup_table/popup_widgets/module_root.dart'; +import 'package:flutter_study_app/modules/popup_table/popup_widgets/module_entry.dart'; +import 'package:flutter_study_app/modules/popup_table/popup_widgets/module_root.dart'; void main() { testWidgets('PopWidgetEntry renders module page', (tester) async { diff --git a/apps/flutter_study/test/modules/ui/adsorption_line/adsorption_line_test.dart b/apps/flutter_study/test/modules/ui/adsorption_line/adsorption_line_test.dart index e425a74..9f2f6fb 100644 --- a/apps/flutter_study/test/modules/ui/adsorption_line/adsorption_line_test.dart +++ b/apps/flutter_study/test/modules/ui/adsorption_line/adsorption_line_test.dart @@ -2,8 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:provider/provider.dart'; -import 'package:main_app/modules/ui/adsorption_line/pages/adsorption_line_page.dart'; -import 'package:main_app/modules/ui/adsorption_line/state/drawing_state.dart'; +import 'package:flutter_study_app/modules/ui/adsorption_line/pages/adsorption_line_page.dart'; +import 'package:flutter_study_app/modules/ui/adsorption_line/state/drawing_state.dart'; void main() { testWidgets('AdsorptionLinePage renders teaching components', (tester) async { diff --git a/apps/flutter_study/test/modules/ui/download_animation/download_animation_test.dart b/apps/flutter_study/test/modules/ui/download_animation/download_animation_test.dart index c855c32..0173535 100644 --- a/apps/flutter_study/test/modules/ui/download_animation/download_animation_test.dart +++ b/apps/flutter_study/test/modules/ui/download_animation/download_animation_test.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:main_app/modules/ui/download_animation/pages/download_animation_page.dart'; +import 'package:flutter_study_app/modules/ui/download_animation/pages/download_animation_page.dart'; void main() { testWidgets('DownloadAnimationPage renders teaching components', ( diff --git a/apps/flutter_study/test/modules/ui/font_picker/font_picker_test.dart b/apps/flutter_study/test/modules/ui/font_picker/font_picker_test.dart index 5c03e12..8b718e6 100644 --- a/apps/flutter_study/test/modules/ui/font_picker/font_picker_test.dart +++ b/apps/flutter_study/test/modules/ui/font_picker/font_picker_test.dart @@ -2,10 +2,10 @@ import 'package:file_picker_bridge/file_picker_bridge.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:main_app/modules/ui/font_picker/data/font_catalog.dart'; -import 'package:main_app/modules/ui/font_picker/pages/font_picker_page.dart'; -import 'package:main_app/modules/ui/font_picker/pages/weight_compare_page.dart'; -import 'package:main_app/modules/ui/font_picker/state/font_loader_service.dart'; +import 'package:flutter_study_app/modules/ui/font_picker/data/font_catalog.dart'; +import 'package:flutter_study_app/modules/ui/font_picker/pages/font_picker_page.dart'; +import 'package:flutter_study_app/modules/ui/font_picker/pages/weight_compare_page.dart'; +import 'package:flutter_study_app/modules/ui/font_picker/state/font_loader_service.dart'; void main() { test('catalog exposes platform fonts and a fallback', () { diff --git a/apps/flutter_study/test/modules/ui/gcode_visualizer/gcode_visualizer_test.dart b/apps/flutter_study/test/modules/ui/gcode_visualizer/gcode_visualizer_test.dart index 8172e67..43aac08 100644 --- a/apps/flutter_study/test/modules/ui/gcode_visualizer/gcode_visualizer_test.dart +++ b/apps/flutter_study/test/modules/ui/gcode_visualizer/gcode_visualizer_test.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:main_app/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart'; +import 'package:flutter_study_app/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart'; void main() { testWidgets('GcodeVisualizerPage renders key elements', (tester) async { diff --git a/apps/flutter_study/test/shared/module_catalog_utils_test.dart b/apps/flutter_study/test/shared/module_catalog_utils_test.dart index a34728e..7d1d40c 100644 --- a/apps/flutter_study/test/shared/module_catalog_utils_test.dart +++ b/apps/flutter_study/test/shared/module_catalog_utils_test.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:go_router/go_router.dart'; -import 'package:main_app/module_registry/module_catalog_utils.dart'; -import 'package:main_app/module_registry/module_category.dart'; -import 'package:main_app/module_registry/module_entry.dart'; +import 'package:flutter_study_app/module_registry/module_catalog_utils.dart'; +import 'package:flutter_study_app/module_registry/module_category.dart'; +import 'package:flutter_study_app/module_registry/module_entry.dart'; void main() { ModuleEntry createModule({ From ae327a1fecd5e8b137b8e91c129b1b617adfeebb Mon Sep 17 00:00:00 2001 From: lizy Date: Wed, 19 Aug 2026 17:08:50 +0800 Subject: [PATCH 07/17] refactor: rename-project-to-flutter-forge [rename-project-to-flutter-forge] --- ...OS.run.xml => Flutter_Forge_macOS.run.xml} | 4 +- .../.metadata | 0 .../analysis_options.yaml | 0 .../assets/demo.gif | Bin .../flutterguard.yaml | 0 .../lib/AI_ANALYSIS.md | 4 +- .../lib/AI_MODULE_INDEX.md | 2 +- .../lib/app/AI_ANALYSIS.md | 4 +- .../lib/app/app.dart | 2 +- .../lib/app/app_bootstrap.dart | 2 +- .../lib/app/category_navigation.dart | 0 .../lib/app/category_window_app.dart | 0 .../lib/app/module_home_page.dart | 0 .../lib/app/router/AI_ANALYSIS.md | 4 +- .../lib/app/router/app_route_table.dart | 0 .../lib/app/router/app_router.dart | 0 apps/flutter_forge/lib/main.dart | 3 ++ .../lib/module_registry/AI_ANALYSIS.md | 4 +- .../module_registry/module_catalog_utils.dart | 0 .../lib/module_registry/module_category.dart | 0 .../lib/module_registry/module_entry.dart | 0 .../lib/modules/AI_ANALYSIS.md | 4 +- .../lib/modules/async/AI_ANALYSIS.md | 4 +- .../async/isolate_basic/AI_ANALYSIS.md | 4 +- .../async/isolate_basic/module_entry.dart | 0 .../async/isolate_basic/module_root.dart | 0 .../async/isolate_basic/module_routes.dart | 0 .../isolate_basic/with_isolate_page.dart | 0 .../isolate_basic/without_isolate_page.dart | 0 .../async/isolate_task_manager/AI_ANALYSIS.md | 4 +- .../isolate_task_manager/module_entry.dart | 0 .../isolate_task_manager/module_root.dart | 0 .../isolate_task_manager/task_manager.dart | 0 .../async/stream_subscription/AI_ANALYSIS.md | 4 +- .../models/message_model.dart | 0 .../stream_subscription/module_entry.dart | 0 .../stream_subscription/module_routes.dart | 0 .../pages/broadcast_demo_page.dart | 0 .../stream_subscription/pages/home_page.dart | 0 .../pages/stream_demo_controller.dart | 0 .../pages/stream_demo_page.dart | 0 .../services/stream_service.dart | 0 .../utils/stream_utils.dart | 0 .../lib/modules/basic/AI_ANALYSIS.md | 4 +- .../basic/debounce_throttle/AI_ANALYSIS.md | 4 +- .../basic/debounce_throttle/module_entry.dart | 0 .../basic/debounce_throttle/module_root.dart | 0 .../utils/debounce_throttle.dart | 0 .../modules/basic/microtask/AI_ANALYSIS.md | 4 +- .../basic/microtask/models/event_log.dart | 0 .../modules/basic/microtask/module_entry.dart | 0 .../basic/microtask/module_routes.dart | 0 .../pages/advanced_examples_page.dart | 0 .../microtask/pages/event_queue_page.dart | 0 .../basic/microtask/pages/home_page.dart | 0 .../microtask/pages/microtask_queue_page.dart | 0 .../microtask/widgets/code_snippet_view.dart | 0 .../microtask/widgets/event_log_view.dart | 0 .../modules/basic/tree_state/AI_ANALYSIS.md | 4 +- .../basic/tree_state/module_entry.dart | 0 .../basic/tree_state/module_routes.dart | 0 .../tree_state/pages/basic_widgets_page.dart | 0 .../tree_state/pages/demo_home_page.dart | 0 .../tree_state/pages/painter_demo_page.dart | 0 .../pages/repaint_boundary_demo_page.dart | 0 .../pages/state_lifecycle_page.dart | 0 .../lib/modules/platform/AI_ANALYSIS.md | 4 +- .../platform/dio_interceptor/AI_ANALYSIS.md | 4 +- .../mock_server/mock_server.dart | 0 .../dio_interceptor/models/article.dart | 0 .../dio_interceptor/module_entry.dart | 0 .../dio_interceptor/module_routes.dart | 0 .../network/api/api_service.dart | 0 .../dio_interceptor/network/http_client.dart | 0 .../network/interceptor/auth_interceptor.dart | 0 .../interceptor/error_interceptor.dart | 0 .../network/interceptor/log_interceptor.dart | 0 .../interceptor/retry_interceptor.dart | 0 .../dio_interceptor/pages/home_page.dart | 0 .../dio_interceptor/pages/login_page.dart | 0 .../platform/file_picker/AI_ANALYSIS.md | 4 +- .../platform/file_picker/module_entry.dart | 0 .../platform/file_picker/module_root.dart | 0 .../file_picker/pages/file_picker_page.dart | 0 .../state/file_picker_controller.dart | 0 .../online_video_player/AI_ANALYSIS.md | 4 +- .../online_video_player/module_entry.dart | 0 .../online_video_player/module_root.dart | 0 .../state/video_player_adapter.dart | 0 .../widgets/video_player_controls.dart | 0 .../platform/usb_detector/AI_ANALYSIS.md | 4 +- .../usb_detector/models/usb_device_info.dart | 0 .../platform/usb_detector/module_entry.dart | 0 .../platform/usb_detector/module_root.dart | 0 .../services/usb_detection_service.dart | 0 .../lib/modules/popup_table/AI_ANALYSIS.md | 4 +- .../overlay_follow_compare/AI_ANALYSIS.md | 4 +- .../overlay_follow_compare/module_entry.dart | 0 .../overlay_follow_compare/module_root.dart | 0 .../widgets/compare_panel.dart | 0 .../widgets/dropdown_surface.dart | 0 .../widgets/follower_demo.dart | 0 .../widgets/manual_demo.dart | 0 .../widgets/status_info.dart | 0 .../popup_list_interaction/AI_ANALYSIS.md | 4 +- .../popup_list_interaction/module_entry.dart | 0 .../popup_list_interaction/module_root.dart | 0 .../popup_list_interaction/module_routes.dart | 0 .../pages/list_page.dart | 0 .../pages/popup_page.dart | 0 .../popup_table/popup_widgets/AI_ANALYSIS.md | 4 +- .../popup_widgets/module_entry.dart | 0 .../popup_widgets/module_root.dart | 0 .../widgets/bottom_sheet_demo.dart | 0 .../widgets/context_menu_demo.dart | 0 .../popup_widgets/widgets/demo_section.dart | 0 .../widgets/dialog_demo_tile.dart | 0 .../widgets/learning_content.dart | 0 .../popup_table/scroll_table/AI_ANALYSIS.md | 4 +- .../scroll_table/module_entry.dart | 0 .../popup_table/scroll_table/module_root.dart | 0 .../scroll_table/widgets/scroll_table.dart | 0 .../lib/modules/state/AI_ANALYSIS.md | 4 +- .../modules/state/flutter_ioc/AI_ANALYSIS.md | 4 +- .../flutter_ioc/model/counter_model.dart | 0 .../state/flutter_ioc/module_entry.dart | 0 .../state/flutter_ioc/module_root.dart | 0 .../state/status_management/AI_ANALYSIS.md | 4 +- .../state/status_management/module_entry.dart | 0 .../status_management/module_routes.dart | 0 .../pages/bloc/bloc_route.dart | 0 .../pages/bloc/counter_bloc.dart | 0 .../pages/bloc/counter_event.dart | 0 .../pages/bloc/counter_state.dart | 0 .../status_management/pages/home_page.dart | 0 .../pages/provider/models/counter_cn.dart | 0 .../pages/provider/models/counter_model.dart | 0 .../pages/provider/provider_future_route.dart | 0 .../provider/provider_lifting_route.dart | 0 .../pages/provider/provider_route.dart | 0 .../pages/provider/provider_todo_route.dart | 0 .../pages/provider/widgets/granular_grid.dart | 0 .../provider/widgets/provider_perks.dart | 0 .../pages/riverpod/riverpod_future_route.dart | 0 .../riverpod/riverpod_lifting_route.dart | 0 .../pages/riverpod/riverpod_route.dart | 0 .../pages/riverpod/riverpod_todo_route.dart | 0 .../widgets/state_flow_demo.dart | 0 .../lib/modules/ui/AI_ANALYSIS.md | 4 +- .../modules/ui/adsorption_line/AI_ANALYSIS.md | 4 +- .../models/drawing_element.dart | 0 .../ui/adsorption_line/module_entry.dart | 0 .../pages/adsorption_line_page.dart | 0 .../services/adsorption_manager.dart | 0 .../adsorption_line/state/drawing_state.dart | 0 .../widgets/drawing_board.dart | 0 .../widgets/drawing_canvas.dart | 0 .../ui/download_animation/AI_ANALYSIS.md | 4 +- .../models/animation_config.dart | 0 .../models/download_item.dart | 0 .../models/overlay_download_item.dart | 0 .../ui/download_animation/module_entry.dart | 0 .../ui/download_animation/module_root.dart | 0 .../ui/download_animation/module_routes.dart | 0 .../pages/download_animation_page.dart | 0 .../pages/download_comparison_page.dart | 0 .../pages/paint_animation_page.dart | 0 .../services/overlay_download_service.dart | 0 .../lib/modules/ui/font_picker/AI_ANALYSIS.md | 4 +- .../ui/font_picker/data/font_catalog.dart | 0 .../ui/font_picker/models/font_option.dart | 0 .../modules/ui/font_picker/module_entry.dart | 0 .../modules/ui/font_picker/module_root.dart | 0 .../modules/ui/font_picker/module_routes.dart | 0 .../font_picker/pages/font_picker_page.dart | 0 .../pages/weight_compare_page.dart | 0 .../state/font_loader_service.dart | 0 .../font_picker/widgets/font_picker_list.dart | 0 .../widgets/font_preview_panel.dart | 0 .../ui/gcode_visualizer/AI_ANALYSIS.md | 4 +- .../ui/gcode_visualizer/module_entry.dart | 0 .../pages/gcode_visualizer_page.dart | 0 .../state/gcode_player_controller.dart | 0 .../widgets/current_segment_inspector.dart | 0 .../widgets/gcode_editor_panel.dart | 0 .../lib/shared/AI_ANALYSIS.md | 4 +- .../lib/shared/multi_window/AI_ANALYSIS.md | 4 +- .../multi_window/multi_window_manager.dart | 0 .../lib/shared/platform/AI_ANALYSIS.md | 4 +- .../macos/.gitignore | 0 .../macos/Flutter/Flutter-Debug.xcconfig | 0 .../macos/Flutter/Flutter-Release.xcconfig | 0 .../Flutter/GeneratedPluginRegistrant.swift | 0 .../macos/Podfile | 0 .../macos/Podfile.lock | 0 .../macos/Runner.xcodeproj/project.pbxproj | 12 +++--- .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/xcschemes/Runner.xcscheme | 10 ++--- .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../macos/Runner/AppDelegate.swift | 0 .../AppIcon.appiconset/Contents.json | 0 .../AppIcon.appiconset/app_icon_1024.png | Bin .../AppIcon.appiconset/app_icon_128.png | Bin .../AppIcon.appiconset/app_icon_16.png | Bin .../AppIcon.appiconset/app_icon_256.png | Bin .../AppIcon.appiconset/app_icon_32.png | Bin .../AppIcon.appiconset/app_icon_512.png | Bin .../AppIcon.appiconset/app_icon_64.png | Bin .../macos/Runner/Base.lproj/MainMenu.xib | 0 .../macos/Runner/Configs/AppInfo.xcconfig | 2 +- .../macos/Runner/Configs/Debug.xcconfig | 0 .../macos/Runner/Configs/Release.xcconfig | 0 .../macos/Runner/Configs/Warnings.xcconfig | 0 .../macos/Runner/DebugProfile.entitlements | 0 .../macos/Runner/Info.plist | 0 .../macos/Runner/MainFlutterWindow.swift | 0 .../macos/Runner/Release.entitlements | 0 .../macos/RunnerTests/RunnerTests.swift | 0 .../pubspec.yaml | 4 +- .../stream_subscription_test.dart | 2 +- .../file_picker/file_picker_test.dart | 2 +- .../online_video_player_test.dart | 6 +-- .../overlay_follow_compare_test.dart | 2 +- .../popup_widgets/popup_widgets_test.dart | 4 +- .../adsorption_line/adsorption_line_test.dart | 4 +- .../download_animation_test.dart | 2 +- .../ui/font_picker/font_picker_test.dart | 8 ++-- .../gcode_visualizer_test.dart | 2 +- .../shared/module_catalog_utils_test.dart | 6 +-- .../windows/.gitignore | 0 .../windows/CMakeLists.txt | 4 +- .../windows/flutter/CMakeLists.txt | 0 .../windows/runner/CMakeLists.txt | 0 .../windows/runner/Runner.rc | 8 ++-- .../windows/runner/flutter_window.cpp | 0 .../windows/runner/flutter_window.h | 0 .../windows/runner/main.cpp | 2 +- .../windows/runner/resource.h | 0 .../windows/runner/resources/app_icon.ico | Bin .../windows/runner/runner.exe.manifest | 0 .../windows/runner/utils.cpp | 0 .../windows/runner/utils.h | 0 .../windows/runner/win32_window.cpp | 0 .../windows/runner/win32_window.h | 0 apps/flutter_study/lib/main.dart | 3 -- pubspec.yaml | 6 +-- tool/bootstrap.sh | 2 +- tool/check_environment.sh | 2 +- tool/generate_agent_indexes.js | 40 +++++++++--------- tool/quality_gate.sh | 2 +- tool/test_all.sh | 4 +- 252 files changed, 144 insertions(+), 144 deletions(-) rename .run/{Flutter_Study_macOS.run.xml => Flutter_Forge_macOS.run.xml} (51%) rename apps/{flutter_study => flutter_forge}/.metadata (100%) rename apps/{flutter_study => flutter_forge}/analysis_options.yaml (100%) rename apps/{flutter_study => flutter_forge}/assets/demo.gif (100%) rename apps/{flutter_study => flutter_forge}/flutterguard.yaml (100%) rename apps/{flutter_study => flutter_forge}/lib/AI_ANALYSIS.md (92%) rename apps/{flutter_study => flutter_forge}/lib/AI_MODULE_INDEX.md (99%) rename apps/{flutter_study => flutter_forge}/lib/app/AI_ANALYSIS.md (93%) rename apps/{flutter_study => flutter_forge}/lib/app/app.dart (90%) rename apps/{flutter_study => flutter_forge}/lib/app/app_bootstrap.dart (94%) rename apps/{flutter_study => flutter_forge}/lib/app/category_navigation.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/app/category_window_app.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/app/module_home_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/app/router/AI_ANALYSIS.md (90%) rename apps/{flutter_study => flutter_forge}/lib/app/router/app_route_table.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/app/router/app_router.dart (100%) create mode 100644 apps/flutter_forge/lib/main.dart rename apps/{flutter_study => flutter_forge}/lib/module_registry/AI_ANALYSIS.md (91%) rename apps/{flutter_study => flutter_forge}/lib/module_registry/module_catalog_utils.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/module_registry/module_category.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/module_registry/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/AI_ANALYSIS.md (92%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/AI_ANALYSIS.md (91%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/isolate_basic/AI_ANALYSIS.md (90%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/isolate_basic/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/isolate_basic/module_root.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/isolate_basic/module_routes.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/isolate_basic/with_isolate_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/isolate_basic/without_isolate_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/isolate_task_manager/AI_ANALYSIS.md (89%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/isolate_task_manager/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/isolate_task_manager/module_root.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/isolate_task_manager/task_manager.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/stream_subscription/AI_ANALYSIS.md (89%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/stream_subscription/models/message_model.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/stream_subscription/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/stream_subscription/module_routes.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/stream_subscription/pages/broadcast_demo_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/stream_subscription/pages/home_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/stream_subscription/pages/stream_demo_controller.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/stream_subscription/pages/stream_demo_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/stream_subscription/services/stream_service.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/async/stream_subscription/utils/stream_utils.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/AI_ANALYSIS.md (90%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/debounce_throttle/AI_ANALYSIS.md (89%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/debounce_throttle/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/debounce_throttle/module_root.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/debounce_throttle/utils/debounce_throttle.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/microtask/AI_ANALYSIS.md (90%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/microtask/models/event_log.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/microtask/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/microtask/module_routes.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/microtask/pages/advanced_examples_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/microtask/pages/event_queue_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/microtask/pages/home_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/microtask/pages/microtask_queue_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/microtask/widgets/code_snippet_view.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/microtask/widgets/event_log_view.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/tree_state/AI_ANALYSIS.md (90%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/tree_state/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/tree_state/module_routes.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/tree_state/pages/basic_widgets_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/tree_state/pages/demo_home_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/tree_state/pages/painter_demo_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/tree_state/pages/repaint_boundary_demo_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/basic/tree_state/pages/state_lifecycle_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/AI_ANALYSIS.md (91%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/dio_interceptor/AI_ANALYSIS.md (90%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/dio_interceptor/mock_server/mock_server.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/dio_interceptor/models/article.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/dio_interceptor/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/dio_interceptor/module_routes.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/dio_interceptor/network/api/api_service.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/dio_interceptor/network/http_client.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/dio_interceptor/network/interceptor/auth_interceptor.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/dio_interceptor/network/interceptor/error_interceptor.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/dio_interceptor/network/interceptor/log_interceptor.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/dio_interceptor/network/interceptor/retry_interceptor.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/dio_interceptor/pages/home_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/dio_interceptor/pages/login_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/file_picker/AI_ANALYSIS.md (90%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/file_picker/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/file_picker/module_root.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/file_picker/pages/file_picker_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/file_picker/state/file_picker_controller.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/online_video_player/AI_ANALYSIS.md (89%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/online_video_player/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/online_video_player/module_root.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/online_video_player/state/video_player_adapter.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/online_video_player/widgets/video_player_controls.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/usb_detector/AI_ANALYSIS.md (90%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/usb_detector/models/usb_device_info.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/usb_detector/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/usb_detector/module_root.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/platform/usb_detector/services/usb_detection_service.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/AI_ANALYSIS.md (91%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md (88%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/overlay_follow_compare/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/overlay_follow_compare/module_root.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/overlay_follow_compare/widgets/compare_panel.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/overlay_follow_compare/widgets/dropdown_surface.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/overlay_follow_compare/widgets/follower_demo.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/overlay_follow_compare/widgets/manual_demo.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/overlay_follow_compare/widgets/status_info.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md (89%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/popup_list_interaction/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/popup_list_interaction/module_root.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/popup_list_interaction/module_routes.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/popup_list_interaction/pages/list_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/popup_list_interaction/pages/popup_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md (89%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/popup_widgets/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/popup_widgets/module_root.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/popup_widgets/widgets/bottom_sheet_demo.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/popup_widgets/widgets/context_menu_demo.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/popup_widgets/widgets/demo_section.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/popup_widgets/widgets/dialog_demo_tile.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/popup_widgets/widgets/learning_content.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/scroll_table/AI_ANALYSIS.md (90%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/scroll_table/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/scroll_table/module_root.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/popup_table/scroll_table/widgets/scroll_table.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/AI_ANALYSIS.md (90%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/flutter_ioc/AI_ANALYSIS.md (90%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/flutter_ioc/model/counter_model.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/flutter_ioc/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/flutter_ioc/module_root.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/AI_ANALYSIS.md (90%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/module_routes.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/bloc/bloc_route.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/bloc/counter_bloc.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/bloc/counter_event.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/bloc/counter_state.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/home_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/provider/models/counter_cn.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/provider/models/counter_model.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/provider/provider_future_route.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/provider/provider_lifting_route.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/provider/provider_route.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/provider/provider_todo_route.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/provider/widgets/granular_grid.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/provider/widgets/provider_perks.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/riverpod/riverpod_future_route.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/riverpod/riverpod_lifting_route.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/riverpod/riverpod_route.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/pages/riverpod/riverpod_todo_route.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/state/status_management/widgets/state_flow_demo.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/AI_ANALYSIS.md (92%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/adsorption_line/AI_ANALYSIS.md (90%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/adsorption_line/models/drawing_element.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/adsorption_line/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/adsorption_line/pages/adsorption_line_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/adsorption_line/services/adsorption_manager.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/adsorption_line/state/drawing_state.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/adsorption_line/widgets/drawing_board.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/adsorption_line/widgets/drawing_canvas.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/download_animation/AI_ANALYSIS.md (90%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/download_animation/models/animation_config.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/download_animation/models/download_item.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/download_animation/models/overlay_download_item.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/download_animation/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/download_animation/module_root.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/download_animation/module_routes.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/download_animation/pages/download_animation_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/download_animation/pages/download_comparison_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/download_animation/pages/paint_animation_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/download_animation/services/overlay_download_service.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/font_picker/AI_ANALYSIS.md (91%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/font_picker/data/font_catalog.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/font_picker/models/font_option.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/font_picker/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/font_picker/module_root.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/font_picker/module_routes.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/font_picker/pages/font_picker_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/font_picker/pages/weight_compare_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/font_picker/state/font_loader_service.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/font_picker/widgets/font_picker_list.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/font_picker/widgets/font_preview_panel.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md (90%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/gcode_visualizer/module_entry.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/gcode_visualizer/state/gcode_player_controller.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/gcode_visualizer/widgets/current_segment_inspector.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/modules/ui/gcode_visualizer/widgets/gcode_editor_panel.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/shared/AI_ANALYSIS.md (91%) rename apps/{flutter_study => flutter_forge}/lib/shared/multi_window/AI_ANALYSIS.md (89%) rename apps/{flutter_study => flutter_forge}/lib/shared/multi_window/multi_window_manager.dart (100%) rename apps/{flutter_study => flutter_forge}/lib/shared/platform/AI_ANALYSIS.md (89%) rename apps/{flutter_study => flutter_forge}/macos/.gitignore (100%) rename apps/{flutter_study => flutter_forge}/macos/Flutter/Flutter-Debug.xcconfig (100%) rename apps/{flutter_study => flutter_forge}/macos/Flutter/Flutter-Release.xcconfig (100%) rename apps/{flutter_study => flutter_forge}/macos/Flutter/GeneratedPluginRegistrant.swift (100%) rename apps/{flutter_study => flutter_forge}/macos/Podfile (100%) rename apps/{flutter_study => flutter_forge}/macos/Podfile.lock (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner.xcodeproj/project.pbxproj (98%) rename apps/{flutter_study => flutter_forge}/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme (94%) rename apps/{flutter_study => flutter_forge}/macos/Runner.xcworkspace/contents.xcworkspacedata (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/AppDelegate.swift (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/Base.lproj/MainMenu.xib (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/Configs/AppInfo.xcconfig (95%) rename apps/{flutter_study => flutter_forge}/macos/Runner/Configs/Debug.xcconfig (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/Configs/Release.xcconfig (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/Configs/Warnings.xcconfig (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/DebugProfile.entitlements (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/Info.plist (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/MainFlutterWindow.swift (100%) rename apps/{flutter_study => flutter_forge}/macos/Runner/Release.entitlements (100%) rename apps/{flutter_study => flutter_forge}/macos/RunnerTests/RunnerTests.swift (100%) rename apps/{flutter_study => flutter_forge}/pubspec.yaml (93%) rename apps/{flutter_study => flutter_forge}/test/modules/async/stream_subscription/stream_subscription_test.dart (91%) rename apps/{flutter_study => flutter_forge}/test/modules/platform/file_picker/file_picker_test.dart (97%) rename apps/{flutter_study => flutter_forge}/test/modules/platform/online_video_player/online_video_player_test.dart (94%) rename apps/{flutter_study => flutter_forge}/test/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart (91%) rename apps/{flutter_study => flutter_forge}/test/modules/popup_table/popup_widgets/popup_widgets_test.dart (94%) rename apps/{flutter_study => flutter_forge}/test/modules/ui/adsorption_line/adsorption_line_test.dart (84%) rename apps/{flutter_study => flutter_forge}/test/modules/ui/download_animation/download_animation_test.dart (90%) rename apps/{flutter_study => flutter_forge}/test/modules/ui/font_picker/font_picker_test.dart (94%) rename apps/{flutter_study => flutter_forge}/test/modules/ui/gcode_visualizer/gcode_visualizer_test.dart (90%) rename apps/{flutter_study => flutter_forge}/test/shared/module_catalog_utils_test.dart (89%) rename apps/{flutter_study => flutter_forge}/windows/.gitignore (100%) rename apps/{flutter_study => flutter_forge}/windows/CMakeLists.txt (98%) rename apps/{flutter_study => flutter_forge}/windows/flutter/CMakeLists.txt (100%) rename apps/{flutter_study => flutter_forge}/windows/runner/CMakeLists.txt (100%) rename apps/{flutter_study => flutter_forge}/windows/runner/Runner.rc (92%) rename apps/{flutter_study => flutter_forge}/windows/runner/flutter_window.cpp (100%) rename apps/{flutter_study => flutter_forge}/windows/runner/flutter_window.h (100%) rename apps/{flutter_study => flutter_forge}/windows/runner/main.cpp (95%) rename apps/{flutter_study => flutter_forge}/windows/runner/resource.h (100%) rename apps/{flutter_study => flutter_forge}/windows/runner/resources/app_icon.ico (100%) rename apps/{flutter_study => flutter_forge}/windows/runner/runner.exe.manifest (100%) rename apps/{flutter_study => flutter_forge}/windows/runner/utils.cpp (100%) rename apps/{flutter_study => flutter_forge}/windows/runner/utils.h (100%) rename apps/{flutter_study => flutter_forge}/windows/runner/win32_window.cpp (100%) rename apps/{flutter_study => flutter_forge}/windows/runner/win32_window.h (100%) delete mode 100644 apps/flutter_study/lib/main.dart diff --git a/.run/Flutter_Study_macOS.run.xml b/.run/Flutter_Forge_macOS.run.xml similarity index 51% rename from .run/Flutter_Study_macOS.run.xml rename to .run/Flutter_Forge_macOS.run.xml index 364c8ce..254edab 100644 --- a/.run/Flutter_Study_macOS.run.xml +++ b/.run/Flutter_Forge_macOS.run.xml @@ -1,6 +1,6 @@ - - diff --git a/apps/flutter_study/.metadata b/apps/flutter_forge/.metadata similarity index 100% rename from apps/flutter_study/.metadata rename to apps/flutter_forge/.metadata diff --git a/apps/flutter_study/analysis_options.yaml b/apps/flutter_forge/analysis_options.yaml similarity index 100% rename from apps/flutter_study/analysis_options.yaml rename to apps/flutter_forge/analysis_options.yaml diff --git a/apps/flutter_study/assets/demo.gif b/apps/flutter_forge/assets/demo.gif similarity index 100% rename from apps/flutter_study/assets/demo.gif rename to apps/flutter_forge/assets/demo.gif diff --git a/apps/flutter_study/flutterguard.yaml b/apps/flutter_forge/flutterguard.yaml similarity index 100% rename from apps/flutter_study/flutterguard.yaml rename to apps/flutter_forge/flutterguard.yaml diff --git a/apps/flutter_study/lib/AI_ANALYSIS.md b/apps/flutter_forge/lib/AI_ANALYSIS.md similarity index 92% rename from apps/flutter_study/lib/AI_ANALYSIS.md rename to apps/flutter_forge/lib/AI_ANALYSIS.md index d0356bd..84e03bb 100644 --- a/apps/flutter_study/lib/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "index", "node": { - "id": "main_app.lib", + "id": "flutter_forge_app.lib", "kind": "source_index", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib", "status": "active" }, diff --git a/apps/flutter_study/lib/AI_MODULE_INDEX.md b/apps/flutter_forge/lib/AI_MODULE_INDEX.md similarity index 99% rename from apps/flutter_study/lib/AI_MODULE_INDEX.md rename to apps/flutter_forge/lib/AI_MODULE_INDEX.md index e8bb476..e112c5e 100644 --- a/apps/flutter_study/lib/AI_MODULE_INDEX.md +++ b/apps/flutter_forge/lib/AI_MODULE_INDEX.md @@ -1,5 +1,5 @@ { - "schema": "flutter_study.agent_docs.module_index.v1", + "schema": "flutter_forge.agent_docs.module_index.v1", "registry": "lib/app/router/app_route_table.dart", "count": 20, "modules": [ diff --git a/apps/flutter_study/lib/app/AI_ANALYSIS.md b/apps/flutter_forge/lib/app/AI_ANALYSIS.md similarity index 93% rename from apps/flutter_study/lib/app/AI_ANALYSIS.md rename to apps/flutter_forge/lib/app/AI_ANALYSIS.md index 8ca5e14..4771e93 100644 --- a/apps/flutter_study/lib/app/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/app/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "index", "node": { - "id": "main_app.app", + "id": "flutter_forge_app.app", "kind": "app_index", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/app", "status": "active" }, diff --git a/apps/flutter_study/lib/app/app.dart b/apps/flutter_forge/lib/app/app.dart similarity index 90% rename from apps/flutter_study/lib/app/app.dart rename to apps/flutter_forge/lib/app/app.dart index ef10a3f..8c57c9d 100644 --- a/apps/flutter_study/lib/app/app.dart +++ b/apps/flutter_forge/lib/app/app.dart @@ -9,7 +9,7 @@ class App extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp.router( routerConfig: AppRouter.router, - title: 'Flutter 学习实验室', + title: 'Flutter Forge', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), useMaterial3: true, diff --git a/apps/flutter_study/lib/app/app_bootstrap.dart b/apps/flutter_forge/lib/app/app_bootstrap.dart similarity index 94% rename from apps/flutter_study/lib/app/app_bootstrap.dart rename to apps/flutter_forge/lib/app/app_bootstrap.dart index f8f0c2c..5a14a13 100644 --- a/apps/flutter_study/lib/app/app_bootstrap.dart +++ b/apps/flutter_forge/lib/app/app_bootstrap.dart @@ -7,7 +7,7 @@ import 'app.dart'; import 'category_window_app.dart'; /// Resolves the host-specific application shell before mounting Flutter. -Future bootstrapFlutterStudyApp() async { +Future bootstrapFlutterForgeApp() async { WidgetsFlutterBinding.ensureInitialized(); Widget root = const App(); diff --git a/apps/flutter_study/lib/app/category_navigation.dart b/apps/flutter_forge/lib/app/category_navigation.dart similarity index 100% rename from apps/flutter_study/lib/app/category_navigation.dart rename to apps/flutter_forge/lib/app/category_navigation.dart diff --git a/apps/flutter_study/lib/app/category_window_app.dart b/apps/flutter_forge/lib/app/category_window_app.dart similarity index 100% rename from apps/flutter_study/lib/app/category_window_app.dart rename to apps/flutter_forge/lib/app/category_window_app.dart diff --git a/apps/flutter_study/lib/app/module_home_page.dart b/apps/flutter_forge/lib/app/module_home_page.dart similarity index 100% rename from apps/flutter_study/lib/app/module_home_page.dart rename to apps/flutter_forge/lib/app/module_home_page.dart diff --git a/apps/flutter_study/lib/app/router/AI_ANALYSIS.md b/apps/flutter_forge/lib/app/router/AI_ANALYSIS.md similarity index 90% rename from apps/flutter_study/lib/app/router/AI_ANALYSIS.md rename to apps/flutter_forge/lib/app/router/AI_ANALYSIS.md index 7f7606d..e0feb8e 100644 --- a/apps/flutter_study/lib/app/router/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/app/router/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "index", "node": { - "id": "main_app.app.router", + "id": "flutter_forge_app.app.router", "kind": "router_index", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/app/router", "status": "active" }, diff --git a/apps/flutter_study/lib/app/router/app_route_table.dart b/apps/flutter_forge/lib/app/router/app_route_table.dart similarity index 100% rename from apps/flutter_study/lib/app/router/app_route_table.dart rename to apps/flutter_forge/lib/app/router/app_route_table.dart diff --git a/apps/flutter_study/lib/app/router/app_router.dart b/apps/flutter_forge/lib/app/router/app_router.dart similarity index 100% rename from apps/flutter_study/lib/app/router/app_router.dart rename to apps/flutter_forge/lib/app/router/app_router.dart diff --git a/apps/flutter_forge/lib/main.dart b/apps/flutter_forge/lib/main.dart new file mode 100644 index 0000000..43bcffc --- /dev/null +++ b/apps/flutter_forge/lib/main.dart @@ -0,0 +1,3 @@ +import 'app/app_bootstrap.dart'; + +Future main() => bootstrapFlutterForgeApp(); diff --git a/apps/flutter_study/lib/module_registry/AI_ANALYSIS.md b/apps/flutter_forge/lib/module_registry/AI_ANALYSIS.md similarity index 91% rename from apps/flutter_study/lib/module_registry/AI_ANALYSIS.md rename to apps/flutter_forge/lib/module_registry/AI_ANALYSIS.md index 916c8db..3b7aa8f 100644 --- a/apps/flutter_study/lib/module_registry/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/module_registry/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "index", "node": { - "id": "main_app.module_registry", + "id": "flutter_forge_app.module_registry", "kind": "registry_index", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/module_registry", "status": "active" }, diff --git a/apps/flutter_study/lib/module_registry/module_catalog_utils.dart b/apps/flutter_forge/lib/module_registry/module_catalog_utils.dart similarity index 100% rename from apps/flutter_study/lib/module_registry/module_catalog_utils.dart rename to apps/flutter_forge/lib/module_registry/module_catalog_utils.dart diff --git a/apps/flutter_study/lib/module_registry/module_category.dart b/apps/flutter_forge/lib/module_registry/module_category.dart similarity index 100% rename from apps/flutter_study/lib/module_registry/module_category.dart rename to apps/flutter_forge/lib/module_registry/module_category.dart diff --git a/apps/flutter_study/lib/module_registry/module_entry.dart b/apps/flutter_forge/lib/module_registry/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/module_registry/module_entry.dart rename to apps/flutter_forge/lib/module_registry/module_entry.dart diff --git a/apps/flutter_study/lib/modules/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/AI_ANALYSIS.md similarity index 92% rename from apps/flutter_study/lib/modules/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/AI_ANALYSIS.md index e25ba75..8977ec8 100644 --- a/apps/flutter_study/lib/modules/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "index", "node": { - "id": "main_app.modules", + "id": "flutter_forge_app.modules", "kind": "modules_index", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules", "status": "active" }, diff --git a/apps/flutter_study/lib/modules/async/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/async/AI_ANALYSIS.md similarity index 91% rename from apps/flutter_study/lib/modules/async/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/async/AI_ANALYSIS.md index 1391044..b9d4643 100644 --- a/apps/flutter_study/lib/modules/async/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/async/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "index", "node": { - "id": "main_app.modules.async", + "id": "flutter_forge_app.modules.async", "kind": "module_category_index", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/async", "status": "active" }, diff --git a/apps/flutter_study/lib/modules/async/isolate_basic/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/async/isolate_basic/AI_ANALYSIS.md similarity index 90% rename from apps/flutter_study/lib/modules/async/isolate_basic/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/async/isolate_basic/AI_ANALYSIS.md index 7ce7a82..2c93172 100644 --- a/apps/flutter_study/lib/modules/async/isolate_basic/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/async/isolate_basic/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.async.isolate_basic", + "id": "flutter_forge_app.modules.async.isolate_basic", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/async/isolate_basic", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/async/isolate_basic/module_entry.dart b/apps/flutter_forge/lib/modules/async/isolate_basic/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/isolate_basic/module_entry.dart rename to apps/flutter_forge/lib/modules/async/isolate_basic/module_entry.dart diff --git a/apps/flutter_study/lib/modules/async/isolate_basic/module_root.dart b/apps/flutter_forge/lib/modules/async/isolate_basic/module_root.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/isolate_basic/module_root.dart rename to apps/flutter_forge/lib/modules/async/isolate_basic/module_root.dart diff --git a/apps/flutter_study/lib/modules/async/isolate_basic/module_routes.dart b/apps/flutter_forge/lib/modules/async/isolate_basic/module_routes.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/isolate_basic/module_routes.dart rename to apps/flutter_forge/lib/modules/async/isolate_basic/module_routes.dart diff --git a/apps/flutter_study/lib/modules/async/isolate_basic/with_isolate_page.dart b/apps/flutter_forge/lib/modules/async/isolate_basic/with_isolate_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/isolate_basic/with_isolate_page.dart rename to apps/flutter_forge/lib/modules/async/isolate_basic/with_isolate_page.dart diff --git a/apps/flutter_study/lib/modules/async/isolate_basic/without_isolate_page.dart b/apps/flutter_forge/lib/modules/async/isolate_basic/without_isolate_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/isolate_basic/without_isolate_page.dart rename to apps/flutter_forge/lib/modules/async/isolate_basic/without_isolate_page.dart diff --git a/apps/flutter_study/lib/modules/async/isolate_task_manager/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/async/isolate_task_manager/AI_ANALYSIS.md similarity index 89% rename from apps/flutter_study/lib/modules/async/isolate_task_manager/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/async/isolate_task_manager/AI_ANALYSIS.md index 4ac72d2..b79d463 100644 --- a/apps/flutter_study/lib/modules/async/isolate_task_manager/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/async/isolate_task_manager/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.async.isolate_task_manager", + "id": "flutter_forge_app.modules.async.isolate_task_manager", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/async/isolate_task_manager", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/async/isolate_task_manager/module_entry.dart b/apps/flutter_forge/lib/modules/async/isolate_task_manager/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/isolate_task_manager/module_entry.dart rename to apps/flutter_forge/lib/modules/async/isolate_task_manager/module_entry.dart diff --git a/apps/flutter_study/lib/modules/async/isolate_task_manager/module_root.dart b/apps/flutter_forge/lib/modules/async/isolate_task_manager/module_root.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/isolate_task_manager/module_root.dart rename to apps/flutter_forge/lib/modules/async/isolate_task_manager/module_root.dart diff --git a/apps/flutter_study/lib/modules/async/isolate_task_manager/task_manager.dart b/apps/flutter_forge/lib/modules/async/isolate_task_manager/task_manager.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/isolate_task_manager/task_manager.dart rename to apps/flutter_forge/lib/modules/async/isolate_task_manager/task_manager.dart diff --git a/apps/flutter_study/lib/modules/async/stream_subscription/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/async/stream_subscription/AI_ANALYSIS.md similarity index 89% rename from apps/flutter_study/lib/modules/async/stream_subscription/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/async/stream_subscription/AI_ANALYSIS.md index c82383f..5dc06df 100644 --- a/apps/flutter_study/lib/modules/async/stream_subscription/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/async/stream_subscription/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.async.stream_subscription", + "id": "flutter_forge_app.modules.async.stream_subscription", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/async/stream_subscription", "status": "recommended" }, diff --git a/apps/flutter_study/lib/modules/async/stream_subscription/models/message_model.dart b/apps/flutter_forge/lib/modules/async/stream_subscription/models/message_model.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/stream_subscription/models/message_model.dart rename to apps/flutter_forge/lib/modules/async/stream_subscription/models/message_model.dart diff --git a/apps/flutter_study/lib/modules/async/stream_subscription/module_entry.dart b/apps/flutter_forge/lib/modules/async/stream_subscription/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/stream_subscription/module_entry.dart rename to apps/flutter_forge/lib/modules/async/stream_subscription/module_entry.dart diff --git a/apps/flutter_study/lib/modules/async/stream_subscription/module_routes.dart b/apps/flutter_forge/lib/modules/async/stream_subscription/module_routes.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/stream_subscription/module_routes.dart rename to apps/flutter_forge/lib/modules/async/stream_subscription/module_routes.dart diff --git a/apps/flutter_study/lib/modules/async/stream_subscription/pages/broadcast_demo_page.dart b/apps/flutter_forge/lib/modules/async/stream_subscription/pages/broadcast_demo_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/stream_subscription/pages/broadcast_demo_page.dart rename to apps/flutter_forge/lib/modules/async/stream_subscription/pages/broadcast_demo_page.dart diff --git a/apps/flutter_study/lib/modules/async/stream_subscription/pages/home_page.dart b/apps/flutter_forge/lib/modules/async/stream_subscription/pages/home_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/stream_subscription/pages/home_page.dart rename to apps/flutter_forge/lib/modules/async/stream_subscription/pages/home_page.dart diff --git a/apps/flutter_study/lib/modules/async/stream_subscription/pages/stream_demo_controller.dart b/apps/flutter_forge/lib/modules/async/stream_subscription/pages/stream_demo_controller.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/stream_subscription/pages/stream_demo_controller.dart rename to apps/flutter_forge/lib/modules/async/stream_subscription/pages/stream_demo_controller.dart diff --git a/apps/flutter_study/lib/modules/async/stream_subscription/pages/stream_demo_page.dart b/apps/flutter_forge/lib/modules/async/stream_subscription/pages/stream_demo_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/stream_subscription/pages/stream_demo_page.dart rename to apps/flutter_forge/lib/modules/async/stream_subscription/pages/stream_demo_page.dart diff --git a/apps/flutter_study/lib/modules/async/stream_subscription/services/stream_service.dart b/apps/flutter_forge/lib/modules/async/stream_subscription/services/stream_service.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/stream_subscription/services/stream_service.dart rename to apps/flutter_forge/lib/modules/async/stream_subscription/services/stream_service.dart diff --git a/apps/flutter_study/lib/modules/async/stream_subscription/utils/stream_utils.dart b/apps/flutter_forge/lib/modules/async/stream_subscription/utils/stream_utils.dart similarity index 100% rename from apps/flutter_study/lib/modules/async/stream_subscription/utils/stream_utils.dart rename to apps/flutter_forge/lib/modules/async/stream_subscription/utils/stream_utils.dart diff --git a/apps/flutter_study/lib/modules/basic/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/basic/AI_ANALYSIS.md similarity index 90% rename from apps/flutter_study/lib/modules/basic/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/basic/AI_ANALYSIS.md index 6b03944..ab7b80b 100644 --- a/apps/flutter_study/lib/modules/basic/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/basic/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "index", "node": { - "id": "main_app.modules.basic", + "id": "flutter_forge_app.modules.basic", "kind": "module_category_index", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/basic", "status": "active" }, diff --git a/apps/flutter_study/lib/modules/basic/debounce_throttle/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/basic/debounce_throttle/AI_ANALYSIS.md similarity index 89% rename from apps/flutter_study/lib/modules/basic/debounce_throttle/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/basic/debounce_throttle/AI_ANALYSIS.md index 88d2723..290f163 100644 --- a/apps/flutter_study/lib/modules/basic/debounce_throttle/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/basic/debounce_throttle/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.basic.debounce_throttle", + "id": "flutter_forge_app.modules.basic.debounce_throttle", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/basic/debounce_throttle", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/basic/debounce_throttle/module_entry.dart b/apps/flutter_forge/lib/modules/basic/debounce_throttle/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/debounce_throttle/module_entry.dart rename to apps/flutter_forge/lib/modules/basic/debounce_throttle/module_entry.dart diff --git a/apps/flutter_study/lib/modules/basic/debounce_throttle/module_root.dart b/apps/flutter_forge/lib/modules/basic/debounce_throttle/module_root.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/debounce_throttle/module_root.dart rename to apps/flutter_forge/lib/modules/basic/debounce_throttle/module_root.dart diff --git a/apps/flutter_study/lib/modules/basic/debounce_throttle/utils/debounce_throttle.dart b/apps/flutter_forge/lib/modules/basic/debounce_throttle/utils/debounce_throttle.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/debounce_throttle/utils/debounce_throttle.dart rename to apps/flutter_forge/lib/modules/basic/debounce_throttle/utils/debounce_throttle.dart diff --git a/apps/flutter_study/lib/modules/basic/microtask/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/basic/microtask/AI_ANALYSIS.md similarity index 90% rename from apps/flutter_study/lib/modules/basic/microtask/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/basic/microtask/AI_ANALYSIS.md index 257bd8f..8015f23 100644 --- a/apps/flutter_study/lib/modules/basic/microtask/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/basic/microtask/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.basic.microtask", + "id": "flutter_forge_app.modules.basic.microtask", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/basic/microtask", "status": "recommended" }, diff --git a/apps/flutter_study/lib/modules/basic/microtask/models/event_log.dart b/apps/flutter_forge/lib/modules/basic/microtask/models/event_log.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/microtask/models/event_log.dart rename to apps/flutter_forge/lib/modules/basic/microtask/models/event_log.dart diff --git a/apps/flutter_study/lib/modules/basic/microtask/module_entry.dart b/apps/flutter_forge/lib/modules/basic/microtask/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/microtask/module_entry.dart rename to apps/flutter_forge/lib/modules/basic/microtask/module_entry.dart diff --git a/apps/flutter_study/lib/modules/basic/microtask/module_routes.dart b/apps/flutter_forge/lib/modules/basic/microtask/module_routes.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/microtask/module_routes.dart rename to apps/flutter_forge/lib/modules/basic/microtask/module_routes.dart diff --git a/apps/flutter_study/lib/modules/basic/microtask/pages/advanced_examples_page.dart b/apps/flutter_forge/lib/modules/basic/microtask/pages/advanced_examples_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/microtask/pages/advanced_examples_page.dart rename to apps/flutter_forge/lib/modules/basic/microtask/pages/advanced_examples_page.dart diff --git a/apps/flutter_study/lib/modules/basic/microtask/pages/event_queue_page.dart b/apps/flutter_forge/lib/modules/basic/microtask/pages/event_queue_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/microtask/pages/event_queue_page.dart rename to apps/flutter_forge/lib/modules/basic/microtask/pages/event_queue_page.dart diff --git a/apps/flutter_study/lib/modules/basic/microtask/pages/home_page.dart b/apps/flutter_forge/lib/modules/basic/microtask/pages/home_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/microtask/pages/home_page.dart rename to apps/flutter_forge/lib/modules/basic/microtask/pages/home_page.dart diff --git a/apps/flutter_study/lib/modules/basic/microtask/pages/microtask_queue_page.dart b/apps/flutter_forge/lib/modules/basic/microtask/pages/microtask_queue_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/microtask/pages/microtask_queue_page.dart rename to apps/flutter_forge/lib/modules/basic/microtask/pages/microtask_queue_page.dart diff --git a/apps/flutter_study/lib/modules/basic/microtask/widgets/code_snippet_view.dart b/apps/flutter_forge/lib/modules/basic/microtask/widgets/code_snippet_view.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/microtask/widgets/code_snippet_view.dart rename to apps/flutter_forge/lib/modules/basic/microtask/widgets/code_snippet_view.dart diff --git a/apps/flutter_study/lib/modules/basic/microtask/widgets/event_log_view.dart b/apps/flutter_forge/lib/modules/basic/microtask/widgets/event_log_view.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/microtask/widgets/event_log_view.dart rename to apps/flutter_forge/lib/modules/basic/microtask/widgets/event_log_view.dart diff --git a/apps/flutter_study/lib/modules/basic/tree_state/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/basic/tree_state/AI_ANALYSIS.md similarity index 90% rename from apps/flutter_study/lib/modules/basic/tree_state/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/basic/tree_state/AI_ANALYSIS.md index 4f4cfb9..752e914 100644 --- a/apps/flutter_study/lib/modules/basic/tree_state/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/basic/tree_state/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.basic.tree_state", + "id": "flutter_forge_app.modules.basic.tree_state", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/basic/tree_state", "status": "recommended" }, diff --git a/apps/flutter_study/lib/modules/basic/tree_state/module_entry.dart b/apps/flutter_forge/lib/modules/basic/tree_state/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/tree_state/module_entry.dart rename to apps/flutter_forge/lib/modules/basic/tree_state/module_entry.dart diff --git a/apps/flutter_study/lib/modules/basic/tree_state/module_routes.dart b/apps/flutter_forge/lib/modules/basic/tree_state/module_routes.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/tree_state/module_routes.dart rename to apps/flutter_forge/lib/modules/basic/tree_state/module_routes.dart diff --git a/apps/flutter_study/lib/modules/basic/tree_state/pages/basic_widgets_page.dart b/apps/flutter_forge/lib/modules/basic/tree_state/pages/basic_widgets_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/tree_state/pages/basic_widgets_page.dart rename to apps/flutter_forge/lib/modules/basic/tree_state/pages/basic_widgets_page.dart diff --git a/apps/flutter_study/lib/modules/basic/tree_state/pages/demo_home_page.dart b/apps/flutter_forge/lib/modules/basic/tree_state/pages/demo_home_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/tree_state/pages/demo_home_page.dart rename to apps/flutter_forge/lib/modules/basic/tree_state/pages/demo_home_page.dart diff --git a/apps/flutter_study/lib/modules/basic/tree_state/pages/painter_demo_page.dart b/apps/flutter_forge/lib/modules/basic/tree_state/pages/painter_demo_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/tree_state/pages/painter_demo_page.dart rename to apps/flutter_forge/lib/modules/basic/tree_state/pages/painter_demo_page.dart diff --git a/apps/flutter_study/lib/modules/basic/tree_state/pages/repaint_boundary_demo_page.dart b/apps/flutter_forge/lib/modules/basic/tree_state/pages/repaint_boundary_demo_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/tree_state/pages/repaint_boundary_demo_page.dart rename to apps/flutter_forge/lib/modules/basic/tree_state/pages/repaint_boundary_demo_page.dart diff --git a/apps/flutter_study/lib/modules/basic/tree_state/pages/state_lifecycle_page.dart b/apps/flutter_forge/lib/modules/basic/tree_state/pages/state_lifecycle_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/basic/tree_state/pages/state_lifecycle_page.dart rename to apps/flutter_forge/lib/modules/basic/tree_state/pages/state_lifecycle_page.dart diff --git a/apps/flutter_study/lib/modules/platform/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/platform/AI_ANALYSIS.md similarity index 91% rename from apps/flutter_study/lib/modules/platform/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/platform/AI_ANALYSIS.md index 151d964..30c7fda 100644 --- a/apps/flutter_study/lib/modules/platform/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/platform/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "index", "node": { - "id": "main_app.modules.platform", + "id": "flutter_forge_app.modules.platform", "kind": "module_category_index", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/platform", "status": "active" }, diff --git a/apps/flutter_study/lib/modules/platform/dio_interceptor/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/platform/dio_interceptor/AI_ANALYSIS.md similarity index 90% rename from apps/flutter_study/lib/modules/platform/dio_interceptor/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/platform/dio_interceptor/AI_ANALYSIS.md index 0c7ae94..646096b 100644 --- a/apps/flutter_study/lib/modules/platform/dio_interceptor/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/platform/dio_interceptor/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.platform.dio_interceptor", + "id": "flutter_forge_app.modules.platform.dio_interceptor", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/platform/dio_interceptor", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/platform/dio_interceptor/mock_server/mock_server.dart b/apps/flutter_forge/lib/modules/platform/dio_interceptor/mock_server/mock_server.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/dio_interceptor/mock_server/mock_server.dart rename to apps/flutter_forge/lib/modules/platform/dio_interceptor/mock_server/mock_server.dart diff --git a/apps/flutter_study/lib/modules/platform/dio_interceptor/models/article.dart b/apps/flutter_forge/lib/modules/platform/dio_interceptor/models/article.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/dio_interceptor/models/article.dart rename to apps/flutter_forge/lib/modules/platform/dio_interceptor/models/article.dart diff --git a/apps/flutter_study/lib/modules/platform/dio_interceptor/module_entry.dart b/apps/flutter_forge/lib/modules/platform/dio_interceptor/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/dio_interceptor/module_entry.dart rename to apps/flutter_forge/lib/modules/platform/dio_interceptor/module_entry.dart diff --git a/apps/flutter_study/lib/modules/platform/dio_interceptor/module_routes.dart b/apps/flutter_forge/lib/modules/platform/dio_interceptor/module_routes.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/dio_interceptor/module_routes.dart rename to apps/flutter_forge/lib/modules/platform/dio_interceptor/module_routes.dart diff --git a/apps/flutter_study/lib/modules/platform/dio_interceptor/network/api/api_service.dart b/apps/flutter_forge/lib/modules/platform/dio_interceptor/network/api/api_service.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/dio_interceptor/network/api/api_service.dart rename to apps/flutter_forge/lib/modules/platform/dio_interceptor/network/api/api_service.dart diff --git a/apps/flutter_study/lib/modules/platform/dio_interceptor/network/http_client.dart b/apps/flutter_forge/lib/modules/platform/dio_interceptor/network/http_client.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/dio_interceptor/network/http_client.dart rename to apps/flutter_forge/lib/modules/platform/dio_interceptor/network/http_client.dart diff --git a/apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/auth_interceptor.dart b/apps/flutter_forge/lib/modules/platform/dio_interceptor/network/interceptor/auth_interceptor.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/auth_interceptor.dart rename to apps/flutter_forge/lib/modules/platform/dio_interceptor/network/interceptor/auth_interceptor.dart diff --git a/apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/error_interceptor.dart b/apps/flutter_forge/lib/modules/platform/dio_interceptor/network/interceptor/error_interceptor.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/error_interceptor.dart rename to apps/flutter_forge/lib/modules/platform/dio_interceptor/network/interceptor/error_interceptor.dart diff --git a/apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/log_interceptor.dart b/apps/flutter_forge/lib/modules/platform/dio_interceptor/network/interceptor/log_interceptor.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/log_interceptor.dart rename to apps/flutter_forge/lib/modules/platform/dio_interceptor/network/interceptor/log_interceptor.dart diff --git a/apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/retry_interceptor.dart b/apps/flutter_forge/lib/modules/platform/dio_interceptor/network/interceptor/retry_interceptor.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/dio_interceptor/network/interceptor/retry_interceptor.dart rename to apps/flutter_forge/lib/modules/platform/dio_interceptor/network/interceptor/retry_interceptor.dart diff --git a/apps/flutter_study/lib/modules/platform/dio_interceptor/pages/home_page.dart b/apps/flutter_forge/lib/modules/platform/dio_interceptor/pages/home_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/dio_interceptor/pages/home_page.dart rename to apps/flutter_forge/lib/modules/platform/dio_interceptor/pages/home_page.dart diff --git a/apps/flutter_study/lib/modules/platform/dio_interceptor/pages/login_page.dart b/apps/flutter_forge/lib/modules/platform/dio_interceptor/pages/login_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/dio_interceptor/pages/login_page.dart rename to apps/flutter_forge/lib/modules/platform/dio_interceptor/pages/login_page.dart diff --git a/apps/flutter_study/lib/modules/platform/file_picker/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/platform/file_picker/AI_ANALYSIS.md similarity index 90% rename from apps/flutter_study/lib/modules/platform/file_picker/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/platform/file_picker/AI_ANALYSIS.md index f6ce7fb..3eaf05a 100644 --- a/apps/flutter_study/lib/modules/platform/file_picker/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/platform/file_picker/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.platform.file_picker", + "id": "flutter_forge_app.modules.platform.file_picker", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/platform/file_picker", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/platform/file_picker/module_entry.dart b/apps/flutter_forge/lib/modules/platform/file_picker/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/file_picker/module_entry.dart rename to apps/flutter_forge/lib/modules/platform/file_picker/module_entry.dart diff --git a/apps/flutter_study/lib/modules/platform/file_picker/module_root.dart b/apps/flutter_forge/lib/modules/platform/file_picker/module_root.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/file_picker/module_root.dart rename to apps/flutter_forge/lib/modules/platform/file_picker/module_root.dart diff --git a/apps/flutter_study/lib/modules/platform/file_picker/pages/file_picker_page.dart b/apps/flutter_forge/lib/modules/platform/file_picker/pages/file_picker_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/file_picker/pages/file_picker_page.dart rename to apps/flutter_forge/lib/modules/platform/file_picker/pages/file_picker_page.dart diff --git a/apps/flutter_study/lib/modules/platform/file_picker/state/file_picker_controller.dart b/apps/flutter_forge/lib/modules/platform/file_picker/state/file_picker_controller.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/file_picker/state/file_picker_controller.dart rename to apps/flutter_forge/lib/modules/platform/file_picker/state/file_picker_controller.dart diff --git a/apps/flutter_study/lib/modules/platform/online_video_player/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/platform/online_video_player/AI_ANALYSIS.md similarity index 89% rename from apps/flutter_study/lib/modules/platform/online_video_player/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/platform/online_video_player/AI_ANALYSIS.md index f746caf..e9eb537 100644 --- a/apps/flutter_study/lib/modules/platform/online_video_player/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/platform/online_video_player/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.platform.online_video_player", + "id": "flutter_forge_app.modules.platform.online_video_player", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/platform/online_video_player", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/platform/online_video_player/module_entry.dart b/apps/flutter_forge/lib/modules/platform/online_video_player/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/online_video_player/module_entry.dart rename to apps/flutter_forge/lib/modules/platform/online_video_player/module_entry.dart diff --git a/apps/flutter_study/lib/modules/platform/online_video_player/module_root.dart b/apps/flutter_forge/lib/modules/platform/online_video_player/module_root.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/online_video_player/module_root.dart rename to apps/flutter_forge/lib/modules/platform/online_video_player/module_root.dart diff --git a/apps/flutter_study/lib/modules/platform/online_video_player/state/video_player_adapter.dart b/apps/flutter_forge/lib/modules/platform/online_video_player/state/video_player_adapter.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/online_video_player/state/video_player_adapter.dart rename to apps/flutter_forge/lib/modules/platform/online_video_player/state/video_player_adapter.dart diff --git a/apps/flutter_study/lib/modules/platform/online_video_player/widgets/video_player_controls.dart b/apps/flutter_forge/lib/modules/platform/online_video_player/widgets/video_player_controls.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/online_video_player/widgets/video_player_controls.dart rename to apps/flutter_forge/lib/modules/platform/online_video_player/widgets/video_player_controls.dart diff --git a/apps/flutter_study/lib/modules/platform/usb_detector/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/platform/usb_detector/AI_ANALYSIS.md similarity index 90% rename from apps/flutter_study/lib/modules/platform/usb_detector/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/platform/usb_detector/AI_ANALYSIS.md index eba8aa4..3e72f11 100644 --- a/apps/flutter_study/lib/modules/platform/usb_detector/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/platform/usb_detector/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.platform.usb_detector", + "id": "flutter_forge_app.modules.platform.usb_detector", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/platform/usb_detector", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/platform/usb_detector/models/usb_device_info.dart b/apps/flutter_forge/lib/modules/platform/usb_detector/models/usb_device_info.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/usb_detector/models/usb_device_info.dart rename to apps/flutter_forge/lib/modules/platform/usb_detector/models/usb_device_info.dart diff --git a/apps/flutter_study/lib/modules/platform/usb_detector/module_entry.dart b/apps/flutter_forge/lib/modules/platform/usb_detector/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/usb_detector/module_entry.dart rename to apps/flutter_forge/lib/modules/platform/usb_detector/module_entry.dart diff --git a/apps/flutter_study/lib/modules/platform/usb_detector/module_root.dart b/apps/flutter_forge/lib/modules/platform/usb_detector/module_root.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/usb_detector/module_root.dart rename to apps/flutter_forge/lib/modules/platform/usb_detector/module_root.dart diff --git a/apps/flutter_study/lib/modules/platform/usb_detector/services/usb_detection_service.dart b/apps/flutter_forge/lib/modules/platform/usb_detector/services/usb_detection_service.dart similarity index 100% rename from apps/flutter_study/lib/modules/platform/usb_detector/services/usb_detection_service.dart rename to apps/flutter_forge/lib/modules/platform/usb_detector/services/usb_detection_service.dart diff --git a/apps/flutter_study/lib/modules/popup_table/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/popup_table/AI_ANALYSIS.md similarity index 91% rename from apps/flutter_study/lib/modules/popup_table/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/popup_table/AI_ANALYSIS.md index f6e4dba..aa05a29 100644 --- a/apps/flutter_study/lib/modules/popup_table/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/popup_table/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "index", "node": { - "id": "main_app.modules.popup_table", + "id": "flutter_forge_app.modules.popup_table", "kind": "module_category_index", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/popup_table", "status": "active" }, diff --git a/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md similarity index 88% rename from apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md index 37321d5..31ded0c 100644 --- a/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.popup_table.overlay_follow_compare", + "id": "flutter_forge_app.modules.popup_table.overlay_follow_compare", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/popup_table/overlay_follow_compare", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/module_entry.dart b/apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/module_entry.dart rename to apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/module_entry.dart diff --git a/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/module_root.dart b/apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/module_root.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/module_root.dart rename to apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/module_root.dart diff --git a/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/compare_panel.dart b/apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/widgets/compare_panel.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/compare_panel.dart rename to apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/widgets/compare_panel.dart diff --git a/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/dropdown_surface.dart b/apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/widgets/dropdown_surface.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/dropdown_surface.dart rename to apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/widgets/dropdown_surface.dart diff --git a/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/follower_demo.dart b/apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/widgets/follower_demo.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/follower_demo.dart rename to apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/widgets/follower_demo.dart diff --git a/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/manual_demo.dart b/apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/widgets/manual_demo.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/manual_demo.dart rename to apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/widgets/manual_demo.dart diff --git a/apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/status_info.dart b/apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/widgets/status_info.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/overlay_follow_compare/widgets/status_info.dart rename to apps/flutter_forge/lib/modules/popup_table/overlay_follow_compare/widgets/status_info.dart diff --git a/apps/flutter_study/lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md similarity index 89% rename from apps/flutter_study/lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md index 8367145..a938f05 100644 --- a/apps/flutter_study/lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.popup_table.popup_list_interaction", + "id": "flutter_forge_app.modules.popup_table.popup_list_interaction", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/popup_table/popup_list_interaction", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/popup_table/popup_list_interaction/module_entry.dart b/apps/flutter_forge/lib/modules/popup_table/popup_list_interaction/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/popup_list_interaction/module_entry.dart rename to apps/flutter_forge/lib/modules/popup_table/popup_list_interaction/module_entry.dart diff --git a/apps/flutter_study/lib/modules/popup_table/popup_list_interaction/module_root.dart b/apps/flutter_forge/lib/modules/popup_table/popup_list_interaction/module_root.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/popup_list_interaction/module_root.dart rename to apps/flutter_forge/lib/modules/popup_table/popup_list_interaction/module_root.dart diff --git a/apps/flutter_study/lib/modules/popup_table/popup_list_interaction/module_routes.dart b/apps/flutter_forge/lib/modules/popup_table/popup_list_interaction/module_routes.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/popup_list_interaction/module_routes.dart rename to apps/flutter_forge/lib/modules/popup_table/popup_list_interaction/module_routes.dart diff --git a/apps/flutter_study/lib/modules/popup_table/popup_list_interaction/pages/list_page.dart b/apps/flutter_forge/lib/modules/popup_table/popup_list_interaction/pages/list_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/popup_list_interaction/pages/list_page.dart rename to apps/flutter_forge/lib/modules/popup_table/popup_list_interaction/pages/list_page.dart diff --git a/apps/flutter_study/lib/modules/popup_table/popup_list_interaction/pages/popup_page.dart b/apps/flutter_forge/lib/modules/popup_table/popup_list_interaction/pages/popup_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/popup_list_interaction/pages/popup_page.dart rename to apps/flutter_forge/lib/modules/popup_table/popup_list_interaction/pages/popup_page.dart diff --git a/apps/flutter_study/lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md similarity index 89% rename from apps/flutter_study/lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md index bcc4681..70f433f 100644 --- a/apps/flutter_study/lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.popup_table.popup_widgets", + "id": "flutter_forge_app.modules.popup_table.popup_widgets", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/popup_table/popup_widgets", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/popup_table/popup_widgets/module_entry.dart b/apps/flutter_forge/lib/modules/popup_table/popup_widgets/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/popup_widgets/module_entry.dart rename to apps/flutter_forge/lib/modules/popup_table/popup_widgets/module_entry.dart diff --git a/apps/flutter_study/lib/modules/popup_table/popup_widgets/module_root.dart b/apps/flutter_forge/lib/modules/popup_table/popup_widgets/module_root.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/popup_widgets/module_root.dart rename to apps/flutter_forge/lib/modules/popup_table/popup_widgets/module_root.dart diff --git a/apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/bottom_sheet_demo.dart b/apps/flutter_forge/lib/modules/popup_table/popup_widgets/widgets/bottom_sheet_demo.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/bottom_sheet_demo.dart rename to apps/flutter_forge/lib/modules/popup_table/popup_widgets/widgets/bottom_sheet_demo.dart diff --git a/apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/context_menu_demo.dart b/apps/flutter_forge/lib/modules/popup_table/popup_widgets/widgets/context_menu_demo.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/context_menu_demo.dart rename to apps/flutter_forge/lib/modules/popup_table/popup_widgets/widgets/context_menu_demo.dart diff --git a/apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/demo_section.dart b/apps/flutter_forge/lib/modules/popup_table/popup_widgets/widgets/demo_section.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/demo_section.dart rename to apps/flutter_forge/lib/modules/popup_table/popup_widgets/widgets/demo_section.dart diff --git a/apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/dialog_demo_tile.dart b/apps/flutter_forge/lib/modules/popup_table/popup_widgets/widgets/dialog_demo_tile.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/dialog_demo_tile.dart rename to apps/flutter_forge/lib/modules/popup_table/popup_widgets/widgets/dialog_demo_tile.dart diff --git a/apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/learning_content.dart b/apps/flutter_forge/lib/modules/popup_table/popup_widgets/widgets/learning_content.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/popup_widgets/widgets/learning_content.dart rename to apps/flutter_forge/lib/modules/popup_table/popup_widgets/widgets/learning_content.dart diff --git a/apps/flutter_study/lib/modules/popup_table/scroll_table/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/popup_table/scroll_table/AI_ANALYSIS.md similarity index 90% rename from apps/flutter_study/lib/modules/popup_table/scroll_table/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/popup_table/scroll_table/AI_ANALYSIS.md index 5e49cbe..7463ac9 100644 --- a/apps/flutter_study/lib/modules/popup_table/scroll_table/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/popup_table/scroll_table/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.popup_table.scroll_table", + "id": "flutter_forge_app.modules.popup_table.scroll_table", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/popup_table/scroll_table", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/popup_table/scroll_table/module_entry.dart b/apps/flutter_forge/lib/modules/popup_table/scroll_table/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/scroll_table/module_entry.dart rename to apps/flutter_forge/lib/modules/popup_table/scroll_table/module_entry.dart diff --git a/apps/flutter_study/lib/modules/popup_table/scroll_table/module_root.dart b/apps/flutter_forge/lib/modules/popup_table/scroll_table/module_root.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/scroll_table/module_root.dart rename to apps/flutter_forge/lib/modules/popup_table/scroll_table/module_root.dart diff --git a/apps/flutter_study/lib/modules/popup_table/scroll_table/widgets/scroll_table.dart b/apps/flutter_forge/lib/modules/popup_table/scroll_table/widgets/scroll_table.dart similarity index 100% rename from apps/flutter_study/lib/modules/popup_table/scroll_table/widgets/scroll_table.dart rename to apps/flutter_forge/lib/modules/popup_table/scroll_table/widgets/scroll_table.dart diff --git a/apps/flutter_study/lib/modules/state/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/state/AI_ANALYSIS.md similarity index 90% rename from apps/flutter_study/lib/modules/state/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/state/AI_ANALYSIS.md index 2b1ae20..f7d9335 100644 --- a/apps/flutter_study/lib/modules/state/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/state/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "index", "node": { - "id": "main_app.modules.state", + "id": "flutter_forge_app.modules.state", "kind": "module_category_index", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/state", "status": "active" }, diff --git a/apps/flutter_study/lib/modules/state/flutter_ioc/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/state/flutter_ioc/AI_ANALYSIS.md similarity index 90% rename from apps/flutter_study/lib/modules/state/flutter_ioc/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/state/flutter_ioc/AI_ANALYSIS.md index 4607156..dc8bd72 100644 --- a/apps/flutter_study/lib/modules/state/flutter_ioc/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/state/flutter_ioc/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.state.flutter_ioc", + "id": "flutter_forge_app.modules.state.flutter_ioc", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/state/flutter_ioc", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/state/flutter_ioc/model/counter_model.dart b/apps/flutter_forge/lib/modules/state/flutter_ioc/model/counter_model.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/flutter_ioc/model/counter_model.dart rename to apps/flutter_forge/lib/modules/state/flutter_ioc/model/counter_model.dart diff --git a/apps/flutter_study/lib/modules/state/flutter_ioc/module_entry.dart b/apps/flutter_forge/lib/modules/state/flutter_ioc/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/flutter_ioc/module_entry.dart rename to apps/flutter_forge/lib/modules/state/flutter_ioc/module_entry.dart diff --git a/apps/flutter_study/lib/modules/state/flutter_ioc/module_root.dart b/apps/flutter_forge/lib/modules/state/flutter_ioc/module_root.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/flutter_ioc/module_root.dart rename to apps/flutter_forge/lib/modules/state/flutter_ioc/module_root.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/state/status_management/AI_ANALYSIS.md similarity index 90% rename from apps/flutter_study/lib/modules/state/status_management/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/state/status_management/AI_ANALYSIS.md index d01c9cc..4ccbc37 100644 --- a/apps/flutter_study/lib/modules/state/status_management/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/state/status_management/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.state.status_management", + "id": "flutter_forge_app.modules.state.status_management", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/state/status_management", "status": "recommended" }, diff --git a/apps/flutter_study/lib/modules/state/status_management/module_entry.dart b/apps/flutter_forge/lib/modules/state/status_management/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/module_entry.dart rename to apps/flutter_forge/lib/modules/state/status_management/module_entry.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/module_routes.dart b/apps/flutter_forge/lib/modules/state/status_management/module_routes.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/module_routes.dart rename to apps/flutter_forge/lib/modules/state/status_management/module_routes.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/bloc/bloc_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/bloc/bloc_route.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/bloc/bloc_route.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/bloc/bloc_route.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/bloc/counter_bloc.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/bloc/counter_bloc.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/bloc/counter_bloc.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/bloc/counter_bloc.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/bloc/counter_event.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/bloc/counter_event.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/bloc/counter_event.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/bloc/counter_event.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/bloc/counter_state.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/bloc/counter_state.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/bloc/counter_state.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/bloc/counter_state.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/home_page.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/home_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/home_page.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/home_page.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/provider/models/counter_cn.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/models/counter_cn.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/provider/models/counter_cn.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/provider/models/counter_cn.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/provider/models/counter_model.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/models/counter_model.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/provider/models/counter_model.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/provider/models/counter_model.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_future_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_future_route.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_future_route.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_future_route.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_lifting_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_lifting_route.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_lifting_route.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_lifting_route.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_route.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_route.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_route.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_todo_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_todo_route.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/provider/provider_todo_route.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_todo_route.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/provider/widgets/granular_grid.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/widgets/granular_grid.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/provider/widgets/granular_grid.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/provider/widgets/granular_grid.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/provider/widgets/provider_perks.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/widgets/provider_perks.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/provider/widgets/provider_perks.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/provider/widgets/provider_perks.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_future_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_future_route.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_future_route.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_future_route.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_lifting_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_lifting_route.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_lifting_route.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_lifting_route.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_route.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_route.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_route.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_todo_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_todo_route.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/pages/riverpod/riverpod_todo_route.dart rename to apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_todo_route.dart diff --git a/apps/flutter_study/lib/modules/state/status_management/widgets/state_flow_demo.dart b/apps/flutter_forge/lib/modules/state/status_management/widgets/state_flow_demo.dart similarity index 100% rename from apps/flutter_study/lib/modules/state/status_management/widgets/state_flow_demo.dart rename to apps/flutter_forge/lib/modules/state/status_management/widgets/state_flow_demo.dart diff --git a/apps/flutter_study/lib/modules/ui/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/ui/AI_ANALYSIS.md similarity index 92% rename from apps/flutter_study/lib/modules/ui/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/ui/AI_ANALYSIS.md index 767f925..faf60d7 100644 --- a/apps/flutter_study/lib/modules/ui/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/ui/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "index", "node": { - "id": "main_app.modules.ui", + "id": "flutter_forge_app.modules.ui", "kind": "module_category_index", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/ui", "status": "active" }, diff --git a/apps/flutter_study/lib/modules/ui/adsorption_line/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/ui/adsorption_line/AI_ANALYSIS.md similarity index 90% rename from apps/flutter_study/lib/modules/ui/adsorption_line/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/ui/adsorption_line/AI_ANALYSIS.md index 8af98c2..e896206 100644 --- a/apps/flutter_study/lib/modules/ui/adsorption_line/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/ui/adsorption_line/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.ui.adsorption_line", + "id": "flutter_forge_app.modules.ui.adsorption_line", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/ui/adsorption_line", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/ui/adsorption_line/models/drawing_element.dart b/apps/flutter_forge/lib/modules/ui/adsorption_line/models/drawing_element.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/adsorption_line/models/drawing_element.dart rename to apps/flutter_forge/lib/modules/ui/adsorption_line/models/drawing_element.dart diff --git a/apps/flutter_study/lib/modules/ui/adsorption_line/module_entry.dart b/apps/flutter_forge/lib/modules/ui/adsorption_line/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/adsorption_line/module_entry.dart rename to apps/flutter_forge/lib/modules/ui/adsorption_line/module_entry.dart diff --git a/apps/flutter_study/lib/modules/ui/adsorption_line/pages/adsorption_line_page.dart b/apps/flutter_forge/lib/modules/ui/adsorption_line/pages/adsorption_line_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/adsorption_line/pages/adsorption_line_page.dart rename to apps/flutter_forge/lib/modules/ui/adsorption_line/pages/adsorption_line_page.dart diff --git a/apps/flutter_study/lib/modules/ui/adsorption_line/services/adsorption_manager.dart b/apps/flutter_forge/lib/modules/ui/adsorption_line/services/adsorption_manager.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/adsorption_line/services/adsorption_manager.dart rename to apps/flutter_forge/lib/modules/ui/adsorption_line/services/adsorption_manager.dart diff --git a/apps/flutter_study/lib/modules/ui/adsorption_line/state/drawing_state.dart b/apps/flutter_forge/lib/modules/ui/adsorption_line/state/drawing_state.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/adsorption_line/state/drawing_state.dart rename to apps/flutter_forge/lib/modules/ui/adsorption_line/state/drawing_state.dart diff --git a/apps/flutter_study/lib/modules/ui/adsorption_line/widgets/drawing_board.dart b/apps/flutter_forge/lib/modules/ui/adsorption_line/widgets/drawing_board.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/adsorption_line/widgets/drawing_board.dart rename to apps/flutter_forge/lib/modules/ui/adsorption_line/widgets/drawing_board.dart diff --git a/apps/flutter_study/lib/modules/ui/adsorption_line/widgets/drawing_canvas.dart b/apps/flutter_forge/lib/modules/ui/adsorption_line/widgets/drawing_canvas.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/adsorption_line/widgets/drawing_canvas.dart rename to apps/flutter_forge/lib/modules/ui/adsorption_line/widgets/drawing_canvas.dart diff --git a/apps/flutter_study/lib/modules/ui/download_animation/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/ui/download_animation/AI_ANALYSIS.md similarity index 90% rename from apps/flutter_study/lib/modules/ui/download_animation/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/ui/download_animation/AI_ANALYSIS.md index b4fee72..e58027c 100644 --- a/apps/flutter_study/lib/modules/ui/download_animation/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/ui/download_animation/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.ui.download_animation", + "id": "flutter_forge_app.modules.ui.download_animation", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/ui/download_animation", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/ui/download_animation/models/animation_config.dart b/apps/flutter_forge/lib/modules/ui/download_animation/models/animation_config.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/download_animation/models/animation_config.dart rename to apps/flutter_forge/lib/modules/ui/download_animation/models/animation_config.dart diff --git a/apps/flutter_study/lib/modules/ui/download_animation/models/download_item.dart b/apps/flutter_forge/lib/modules/ui/download_animation/models/download_item.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/download_animation/models/download_item.dart rename to apps/flutter_forge/lib/modules/ui/download_animation/models/download_item.dart diff --git a/apps/flutter_study/lib/modules/ui/download_animation/models/overlay_download_item.dart b/apps/flutter_forge/lib/modules/ui/download_animation/models/overlay_download_item.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/download_animation/models/overlay_download_item.dart rename to apps/flutter_forge/lib/modules/ui/download_animation/models/overlay_download_item.dart diff --git a/apps/flutter_study/lib/modules/ui/download_animation/module_entry.dart b/apps/flutter_forge/lib/modules/ui/download_animation/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/download_animation/module_entry.dart rename to apps/flutter_forge/lib/modules/ui/download_animation/module_entry.dart diff --git a/apps/flutter_study/lib/modules/ui/download_animation/module_root.dart b/apps/flutter_forge/lib/modules/ui/download_animation/module_root.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/download_animation/module_root.dart rename to apps/flutter_forge/lib/modules/ui/download_animation/module_root.dart diff --git a/apps/flutter_study/lib/modules/ui/download_animation/module_routes.dart b/apps/flutter_forge/lib/modules/ui/download_animation/module_routes.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/download_animation/module_routes.dart rename to apps/flutter_forge/lib/modules/ui/download_animation/module_routes.dart diff --git a/apps/flutter_study/lib/modules/ui/download_animation/pages/download_animation_page.dart b/apps/flutter_forge/lib/modules/ui/download_animation/pages/download_animation_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/download_animation/pages/download_animation_page.dart rename to apps/flutter_forge/lib/modules/ui/download_animation/pages/download_animation_page.dart diff --git a/apps/flutter_study/lib/modules/ui/download_animation/pages/download_comparison_page.dart b/apps/flutter_forge/lib/modules/ui/download_animation/pages/download_comparison_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/download_animation/pages/download_comparison_page.dart rename to apps/flutter_forge/lib/modules/ui/download_animation/pages/download_comparison_page.dart diff --git a/apps/flutter_study/lib/modules/ui/download_animation/pages/paint_animation_page.dart b/apps/flutter_forge/lib/modules/ui/download_animation/pages/paint_animation_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/download_animation/pages/paint_animation_page.dart rename to apps/flutter_forge/lib/modules/ui/download_animation/pages/paint_animation_page.dart diff --git a/apps/flutter_study/lib/modules/ui/download_animation/services/overlay_download_service.dart b/apps/flutter_forge/lib/modules/ui/download_animation/services/overlay_download_service.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/download_animation/services/overlay_download_service.dart rename to apps/flutter_forge/lib/modules/ui/download_animation/services/overlay_download_service.dart diff --git a/apps/flutter_study/lib/modules/ui/font_picker/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/ui/font_picker/AI_ANALYSIS.md similarity index 91% rename from apps/flutter_study/lib/modules/ui/font_picker/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/ui/font_picker/AI_ANALYSIS.md index e0b962f..d8296eb 100644 --- a/apps/flutter_study/lib/modules/ui/font_picker/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/ui/font_picker/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.ui.font_picker", + "id": "flutter_forge_app.modules.ui.font_picker", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/ui/font_picker", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/ui/font_picker/data/font_catalog.dart b/apps/flutter_forge/lib/modules/ui/font_picker/data/font_catalog.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/font_picker/data/font_catalog.dart rename to apps/flutter_forge/lib/modules/ui/font_picker/data/font_catalog.dart diff --git a/apps/flutter_study/lib/modules/ui/font_picker/models/font_option.dart b/apps/flutter_forge/lib/modules/ui/font_picker/models/font_option.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/font_picker/models/font_option.dart rename to apps/flutter_forge/lib/modules/ui/font_picker/models/font_option.dart diff --git a/apps/flutter_study/lib/modules/ui/font_picker/module_entry.dart b/apps/flutter_forge/lib/modules/ui/font_picker/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/font_picker/module_entry.dart rename to apps/flutter_forge/lib/modules/ui/font_picker/module_entry.dart diff --git a/apps/flutter_study/lib/modules/ui/font_picker/module_root.dart b/apps/flutter_forge/lib/modules/ui/font_picker/module_root.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/font_picker/module_root.dart rename to apps/flutter_forge/lib/modules/ui/font_picker/module_root.dart diff --git a/apps/flutter_study/lib/modules/ui/font_picker/module_routes.dart b/apps/flutter_forge/lib/modules/ui/font_picker/module_routes.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/font_picker/module_routes.dart rename to apps/flutter_forge/lib/modules/ui/font_picker/module_routes.dart diff --git a/apps/flutter_study/lib/modules/ui/font_picker/pages/font_picker_page.dart b/apps/flutter_forge/lib/modules/ui/font_picker/pages/font_picker_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/font_picker/pages/font_picker_page.dart rename to apps/flutter_forge/lib/modules/ui/font_picker/pages/font_picker_page.dart diff --git a/apps/flutter_study/lib/modules/ui/font_picker/pages/weight_compare_page.dart b/apps/flutter_forge/lib/modules/ui/font_picker/pages/weight_compare_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/font_picker/pages/weight_compare_page.dart rename to apps/flutter_forge/lib/modules/ui/font_picker/pages/weight_compare_page.dart diff --git a/apps/flutter_study/lib/modules/ui/font_picker/state/font_loader_service.dart b/apps/flutter_forge/lib/modules/ui/font_picker/state/font_loader_service.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/font_picker/state/font_loader_service.dart rename to apps/flutter_forge/lib/modules/ui/font_picker/state/font_loader_service.dart diff --git a/apps/flutter_study/lib/modules/ui/font_picker/widgets/font_picker_list.dart b/apps/flutter_forge/lib/modules/ui/font_picker/widgets/font_picker_list.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/font_picker/widgets/font_picker_list.dart rename to apps/flutter_forge/lib/modules/ui/font_picker/widgets/font_picker_list.dart diff --git a/apps/flutter_study/lib/modules/ui/font_picker/widgets/font_preview_panel.dart b/apps/flutter_forge/lib/modules/ui/font_picker/widgets/font_preview_panel.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/font_picker/widgets/font_preview_panel.dart rename to apps/flutter_forge/lib/modules/ui/font_picker/widgets/font_preview_panel.dart diff --git a/apps/flutter_study/lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md b/apps/flutter_forge/lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md similarity index 90% rename from apps/flutter_study/lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md rename to apps/flutter_forge/lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md index 5b2af7d..cb51641 100644 --- a/apps/flutter_study/lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "module_contract", "node": { - "id": "main_app.modules.ui.gcode_visualizer", + "id": "flutter_forge_app.modules.ui.gcode_visualizer", "kind": "learning_module", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/modules/ui/gcode_visualizer", "status": "ready" }, diff --git a/apps/flutter_study/lib/modules/ui/gcode_visualizer/module_entry.dart b/apps/flutter_forge/lib/modules/ui/gcode_visualizer/module_entry.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/gcode_visualizer/module_entry.dart rename to apps/flutter_forge/lib/modules/ui/gcode_visualizer/module_entry.dart diff --git a/apps/flutter_study/lib/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart b/apps/flutter_forge/lib/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart rename to apps/flutter_forge/lib/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart diff --git a/apps/flutter_study/lib/modules/ui/gcode_visualizer/state/gcode_player_controller.dart b/apps/flutter_forge/lib/modules/ui/gcode_visualizer/state/gcode_player_controller.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/gcode_visualizer/state/gcode_player_controller.dart rename to apps/flutter_forge/lib/modules/ui/gcode_visualizer/state/gcode_player_controller.dart diff --git a/apps/flutter_study/lib/modules/ui/gcode_visualizer/widgets/current_segment_inspector.dart b/apps/flutter_forge/lib/modules/ui/gcode_visualizer/widgets/current_segment_inspector.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/gcode_visualizer/widgets/current_segment_inspector.dart rename to apps/flutter_forge/lib/modules/ui/gcode_visualizer/widgets/current_segment_inspector.dart diff --git a/apps/flutter_study/lib/modules/ui/gcode_visualizer/widgets/gcode_editor_panel.dart b/apps/flutter_forge/lib/modules/ui/gcode_visualizer/widgets/gcode_editor_panel.dart similarity index 100% rename from apps/flutter_study/lib/modules/ui/gcode_visualizer/widgets/gcode_editor_panel.dart rename to apps/flutter_forge/lib/modules/ui/gcode_visualizer/widgets/gcode_editor_panel.dart diff --git a/apps/flutter_study/lib/shared/AI_ANALYSIS.md b/apps/flutter_forge/lib/shared/AI_ANALYSIS.md similarity index 91% rename from apps/flutter_study/lib/shared/AI_ANALYSIS.md rename to apps/flutter_forge/lib/shared/AI_ANALYSIS.md index fe1bd85..35c1c2d 100644 --- a/apps/flutter_study/lib/shared/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/shared/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "index", "node": { - "id": "main_app.shared", + "id": "flutter_forge_app.shared", "kind": "shared_index", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/shared", "status": "active" }, diff --git a/apps/flutter_study/lib/shared/multi_window/AI_ANALYSIS.md b/apps/flutter_forge/lib/shared/multi_window/AI_ANALYSIS.md similarity index 89% rename from apps/flutter_study/lib/shared/multi_window/AI_ANALYSIS.md rename to apps/flutter_forge/lib/shared/multi_window/AI_ANALYSIS.md index 6679372..b8f8f29 100644 --- a/apps/flutter_study/lib/shared/multi_window/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/shared/multi_window/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "index", "node": { - "id": "main_app.shared.multi_window", + "id": "flutter_forge_app.shared.multi_window", "kind": "shared_capability_index", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/shared/multi_window", "status": "active" }, diff --git a/apps/flutter_study/lib/shared/multi_window/multi_window_manager.dart b/apps/flutter_forge/lib/shared/multi_window/multi_window_manager.dart similarity index 100% rename from apps/flutter_study/lib/shared/multi_window/multi_window_manager.dart rename to apps/flutter_forge/lib/shared/multi_window/multi_window_manager.dart diff --git a/apps/flutter_study/lib/shared/platform/AI_ANALYSIS.md b/apps/flutter_forge/lib/shared/platform/AI_ANALYSIS.md similarity index 89% rename from apps/flutter_study/lib/shared/platform/AI_ANALYSIS.md rename to apps/flutter_forge/lib/shared/platform/AI_ANALYSIS.md index c08b653..82b6d88 100644 --- a/apps/flutter_study/lib/shared/platform/AI_ANALYSIS.md +++ b/apps/flutter_forge/lib/shared/platform/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "index", "node": { - "id": "main_app.shared.platform", + "id": "flutter_forge_app.shared.platform", "kind": "shared_boundary_index", - "package": "main_app", + "package": "flutter_forge_app", "path": "lib/shared/platform", "status": "transition" }, diff --git a/apps/flutter_study/macos/.gitignore b/apps/flutter_forge/macos/.gitignore similarity index 100% rename from apps/flutter_study/macos/.gitignore rename to apps/flutter_forge/macos/.gitignore diff --git a/apps/flutter_study/macos/Flutter/Flutter-Debug.xcconfig b/apps/flutter_forge/macos/Flutter/Flutter-Debug.xcconfig similarity index 100% rename from apps/flutter_study/macos/Flutter/Flutter-Debug.xcconfig rename to apps/flutter_forge/macos/Flutter/Flutter-Debug.xcconfig diff --git a/apps/flutter_study/macos/Flutter/Flutter-Release.xcconfig b/apps/flutter_forge/macos/Flutter/Flutter-Release.xcconfig similarity index 100% rename from apps/flutter_study/macos/Flutter/Flutter-Release.xcconfig rename to apps/flutter_forge/macos/Flutter/Flutter-Release.xcconfig diff --git a/apps/flutter_study/macos/Flutter/GeneratedPluginRegistrant.swift b/apps/flutter_forge/macos/Flutter/GeneratedPluginRegistrant.swift similarity index 100% rename from apps/flutter_study/macos/Flutter/GeneratedPluginRegistrant.swift rename to apps/flutter_forge/macos/Flutter/GeneratedPluginRegistrant.swift diff --git a/apps/flutter_study/macos/Podfile b/apps/flutter_forge/macos/Podfile similarity index 100% rename from apps/flutter_study/macos/Podfile rename to apps/flutter_forge/macos/Podfile diff --git a/apps/flutter_study/macos/Podfile.lock b/apps/flutter_forge/macos/Podfile.lock similarity index 100% rename from apps/flutter_study/macos/Podfile.lock rename to apps/flutter_forge/macos/Podfile.lock diff --git a/apps/flutter_study/macos/Runner.xcodeproj/project.pbxproj b/apps/flutter_forge/macos/Runner.xcodeproj/project.pbxproj similarity index 98% rename from apps/flutter_study/macos/Runner.xcodeproj/project.pbxproj rename to apps/flutter_forge/macos/Runner.xcodeproj/project.pbxproj index 9d038b4..c646041 100644 --- a/apps/flutter_study/macos/Runner.xcodeproj/project.pbxproj +++ b/apps/flutter_forge/macos/Runner.xcodeproj/project.pbxproj @@ -69,7 +69,7 @@ 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* main_app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = main_app.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* Flutter Forge.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Flutter Forge.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -147,7 +147,7 @@ 33CC10EE2044A3C60003C045 /* Products */ = { isa = PBXGroup; children = ( - 33CC10ED2044A3C60003C045 /* main_app.app */, + 33CC10ED2044A3C60003C045 /* Flutter Forge.app */, 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, ); name = Products; @@ -256,7 +256,7 @@ 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, ); productName = Runner; - productReference = 33CC10ED2044A3C60003C045 /* main_app.app */; + productReference = 33CC10ED2044A3C60003C045 /* Flutter Forge.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -492,7 +492,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.example.mainApp.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/main_app.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/main_app"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Flutter Forge.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Flutter Forge"; }; name = Debug; }; @@ -507,7 +507,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.example.mainApp.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/main_app.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/main_app"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Flutter Forge.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Flutter Forge"; }; name = Release; }; @@ -522,7 +522,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.example.mainApp.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/main_app.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/main_app"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Flutter Forge.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Flutter Forge"; }; name = Profile; }; diff --git a/apps/flutter_study/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/apps/flutter_forge/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from apps/flutter_study/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to apps/flutter_forge/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/apps/flutter_study/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/apps/flutter_forge/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme similarity index 94% rename from apps/flutter_study/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme rename to apps/flutter_forge/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index f3317ce..6eb8172 100644 --- a/apps/flutter_study/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/apps/flutter_forge/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -15,7 +15,7 @@ @@ -33,7 +33,7 @@ @@ -49,7 +49,7 @@ @@ -84,7 +84,7 @@ @@ -101,7 +101,7 @@ diff --git a/apps/flutter_study/macos/Runner.xcworkspace/contents.xcworkspacedata b/apps/flutter_forge/macos/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from apps/flutter_study/macos/Runner.xcworkspace/contents.xcworkspacedata rename to apps/flutter_forge/macos/Runner.xcworkspace/contents.xcworkspacedata diff --git a/apps/flutter_study/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/apps/flutter_forge/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from apps/flutter_study/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to apps/flutter_forge/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/apps/flutter_study/macos/Runner/AppDelegate.swift b/apps/flutter_forge/macos/Runner/AppDelegate.swift similarity index 100% rename from apps/flutter_study/macos/Runner/AppDelegate.swift rename to apps/flutter_forge/macos/Runner/AppDelegate.swift diff --git a/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json rename to apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png similarity index 100% rename from apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png rename to apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png diff --git a/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png similarity index 100% rename from apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png rename to apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png diff --git a/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png similarity index 100% rename from apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png rename to apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png diff --git a/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png similarity index 100% rename from apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png rename to apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png diff --git a/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png similarity index 100% rename from apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png rename to apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png diff --git a/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png similarity index 100% rename from apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png rename to apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png diff --git a/apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png similarity index 100% rename from apps/flutter_study/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png rename to apps/flutter_forge/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png diff --git a/apps/flutter_study/macos/Runner/Base.lproj/MainMenu.xib b/apps/flutter_forge/macos/Runner/Base.lproj/MainMenu.xib similarity index 100% rename from apps/flutter_study/macos/Runner/Base.lproj/MainMenu.xib rename to apps/flutter_forge/macos/Runner/Base.lproj/MainMenu.xib diff --git a/apps/flutter_study/macos/Runner/Configs/AppInfo.xcconfig b/apps/flutter_forge/macos/Runner/Configs/AppInfo.xcconfig similarity index 95% rename from apps/flutter_study/macos/Runner/Configs/AppInfo.xcconfig rename to apps/flutter_forge/macos/Runner/Configs/AppInfo.xcconfig index bf22ab5..506347f 100644 --- a/apps/flutter_study/macos/Runner/Configs/AppInfo.xcconfig +++ b/apps/flutter_forge/macos/Runner/Configs/AppInfo.xcconfig @@ -5,7 +5,7 @@ // 'flutter create' template. // The application's name. By default this is also the title of the Flutter window. -PRODUCT_NAME = main_app +PRODUCT_NAME = Flutter Forge // The application's bundle identifier PRODUCT_BUNDLE_IDENTIFIER = com.example.mainApp diff --git a/apps/flutter_study/macos/Runner/Configs/Debug.xcconfig b/apps/flutter_forge/macos/Runner/Configs/Debug.xcconfig similarity index 100% rename from apps/flutter_study/macos/Runner/Configs/Debug.xcconfig rename to apps/flutter_forge/macos/Runner/Configs/Debug.xcconfig diff --git a/apps/flutter_study/macos/Runner/Configs/Release.xcconfig b/apps/flutter_forge/macos/Runner/Configs/Release.xcconfig similarity index 100% rename from apps/flutter_study/macos/Runner/Configs/Release.xcconfig rename to apps/flutter_forge/macos/Runner/Configs/Release.xcconfig diff --git a/apps/flutter_study/macos/Runner/Configs/Warnings.xcconfig b/apps/flutter_forge/macos/Runner/Configs/Warnings.xcconfig similarity index 100% rename from apps/flutter_study/macos/Runner/Configs/Warnings.xcconfig rename to apps/flutter_forge/macos/Runner/Configs/Warnings.xcconfig diff --git a/apps/flutter_study/macos/Runner/DebugProfile.entitlements b/apps/flutter_forge/macos/Runner/DebugProfile.entitlements similarity index 100% rename from apps/flutter_study/macos/Runner/DebugProfile.entitlements rename to apps/flutter_forge/macos/Runner/DebugProfile.entitlements diff --git a/apps/flutter_study/macos/Runner/Info.plist b/apps/flutter_forge/macos/Runner/Info.plist similarity index 100% rename from apps/flutter_study/macos/Runner/Info.plist rename to apps/flutter_forge/macos/Runner/Info.plist diff --git a/apps/flutter_study/macos/Runner/MainFlutterWindow.swift b/apps/flutter_forge/macos/Runner/MainFlutterWindow.swift similarity index 100% rename from apps/flutter_study/macos/Runner/MainFlutterWindow.swift rename to apps/flutter_forge/macos/Runner/MainFlutterWindow.swift diff --git a/apps/flutter_study/macos/Runner/Release.entitlements b/apps/flutter_forge/macos/Runner/Release.entitlements similarity index 100% rename from apps/flutter_study/macos/Runner/Release.entitlements rename to apps/flutter_forge/macos/Runner/Release.entitlements diff --git a/apps/flutter_study/macos/RunnerTests/RunnerTests.swift b/apps/flutter_forge/macos/RunnerTests/RunnerTests.swift similarity index 100% rename from apps/flutter_study/macos/RunnerTests/RunnerTests.swift rename to apps/flutter_forge/macos/RunnerTests/RunnerTests.swift diff --git a/apps/flutter_study/pubspec.yaml b/apps/flutter_forge/pubspec.yaml similarity index 93% rename from apps/flutter_study/pubspec.yaml rename to apps/flutter_forge/pubspec.yaml index 735810c..3f12a2a 100644 --- a/apps/flutter_study/pubspec.yaml +++ b/apps/flutter_forge/pubspec.yaml @@ -1,5 +1,5 @@ -name: flutter_study_app -description: A Flutter app shell. +name: flutter_forge_app +description: Flutter Forge app shell. publish_to: 'none' version: 1.1.0 diff --git a/apps/flutter_study/test/modules/async/stream_subscription/stream_subscription_test.dart b/apps/flutter_forge/test/modules/async/stream_subscription/stream_subscription_test.dart similarity index 91% rename from apps/flutter_study/test/modules/async/stream_subscription/stream_subscription_test.dart rename to apps/flutter_forge/test/modules/async/stream_subscription/stream_subscription_test.dart index a2248e3..a57fc42 100644 --- a/apps/flutter_study/test/modules/async/stream_subscription/stream_subscription_test.dart +++ b/apps/flutter_forge/test/modules/async/stream_subscription/stream_subscription_test.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_study_app/modules/async/stream_subscription/pages/stream_demo_page.dart'; +import 'package:flutter_forge_app/modules/async/stream_subscription/pages/stream_demo_page.dart'; void main() { testWidgets('StreamDemoPage renders teaching components', (tester) async { diff --git a/apps/flutter_study/test/modules/platform/file_picker/file_picker_test.dart b/apps/flutter_forge/test/modules/platform/file_picker/file_picker_test.dart similarity index 97% rename from apps/flutter_study/test/modules/platform/file_picker/file_picker_test.dart rename to apps/flutter_forge/test/modules/platform/file_picker/file_picker_test.dart index 767d590..e51240d 100644 --- a/apps/flutter_study/test/modules/platform/file_picker/file_picker_test.dart +++ b/apps/flutter_forge/test/modules/platform/file_picker/file_picker_test.dart @@ -2,7 +2,7 @@ import 'package:file_picker_bridge/file_picker_bridge.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_study_app/modules/platform/file_picker/module_root.dart'; +import 'package:flutter_forge_app/modules/platform/file_picker/module_root.dart'; void main() { testWidgets('picked file shows its name and path', (tester) async { diff --git a/apps/flutter_study/test/modules/platform/online_video_player/online_video_player_test.dart b/apps/flutter_forge/test/modules/platform/online_video_player/online_video_player_test.dart similarity index 94% rename from apps/flutter_study/test/modules/platform/online_video_player/online_video_player_test.dart rename to apps/flutter_forge/test/modules/platform/online_video_player/online_video_player_test.dart index e7c6e93..b96563e 100644 --- a/apps/flutter_study/test/modules/platform/online_video_player/online_video_player_test.dart +++ b/apps/flutter_forge/test/modules/platform/online_video_player/online_video_player_test.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_study_app/modules/platform/online_video_player/module_root.dart'; -import 'package:flutter_study_app/modules/platform/online_video_player/state/video_player_adapter.dart'; -import 'package:flutter_study_app/modules/platform/online_video_player/widgets/video_player_controls.dart'; +import 'package:flutter_forge_app/modules/platform/online_video_player/module_root.dart'; +import 'package:flutter_forge_app/modules/platform/online_video_player/state/video_player_adapter.dart'; +import 'package:flutter_forge_app/modules/platform/online_video_player/widgets/video_player_controls.dart'; import 'package:video_player/video_player.dart'; void main() { diff --git a/apps/flutter_study/test/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart b/apps/flutter_forge/test/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart similarity index 91% rename from apps/flutter_study/test/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart rename to apps/flutter_forge/test/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart index 753244c..be9d7b5 100644 --- a/apps/flutter_study/test/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart +++ b/apps/flutter_forge/test/modules/popup_table/overlay_follow_compare/overlay_follow_compare_test.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_study_app/modules/popup_table/overlay_follow_compare/module_root.dart'; +import 'package:flutter_forge_app/modules/popup_table/overlay_follow_compare/module_root.dart'; void main() { testWidgets('OverlayComparePage renders teaching components', (tester) async { diff --git a/apps/flutter_study/test/modules/popup_table/popup_widgets/popup_widgets_test.dart b/apps/flutter_forge/test/modules/popup_table/popup_widgets/popup_widgets_test.dart similarity index 94% rename from apps/flutter_study/test/modules/popup_table/popup_widgets/popup_widgets_test.dart rename to apps/flutter_forge/test/modules/popup_table/popup_widgets/popup_widgets_test.dart index 8397589..6123789 100644 --- a/apps/flutter_study/test/modules/popup_table/popup_widgets/popup_widgets_test.dart +++ b/apps/flutter_forge/test/modules/popup_table/popup_widgets/popup_widgets_test.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_study_app/modules/popup_table/popup_widgets/module_entry.dart'; -import 'package:flutter_study_app/modules/popup_table/popup_widgets/module_root.dart'; +import 'package:flutter_forge_app/modules/popup_table/popup_widgets/module_entry.dart'; +import 'package:flutter_forge_app/modules/popup_table/popup_widgets/module_root.dart'; void main() { testWidgets('PopWidgetEntry renders module page', (tester) async { diff --git a/apps/flutter_study/test/modules/ui/adsorption_line/adsorption_line_test.dart b/apps/flutter_forge/test/modules/ui/adsorption_line/adsorption_line_test.dart similarity index 84% rename from apps/flutter_study/test/modules/ui/adsorption_line/adsorption_line_test.dart rename to apps/flutter_forge/test/modules/ui/adsorption_line/adsorption_line_test.dart index 9f2f6fb..0ef68dc 100644 --- a/apps/flutter_study/test/modules/ui/adsorption_line/adsorption_line_test.dart +++ b/apps/flutter_forge/test/modules/ui/adsorption_line/adsorption_line_test.dart @@ -2,8 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:provider/provider.dart'; -import 'package:flutter_study_app/modules/ui/adsorption_line/pages/adsorption_line_page.dart'; -import 'package:flutter_study_app/modules/ui/adsorption_line/state/drawing_state.dart'; +import 'package:flutter_forge_app/modules/ui/adsorption_line/pages/adsorption_line_page.dart'; +import 'package:flutter_forge_app/modules/ui/adsorption_line/state/drawing_state.dart'; void main() { testWidgets('AdsorptionLinePage renders teaching components', (tester) async { diff --git a/apps/flutter_study/test/modules/ui/download_animation/download_animation_test.dart b/apps/flutter_forge/test/modules/ui/download_animation/download_animation_test.dart similarity index 90% rename from apps/flutter_study/test/modules/ui/download_animation/download_animation_test.dart rename to apps/flutter_forge/test/modules/ui/download_animation/download_animation_test.dart index 0173535..3b3da97 100644 --- a/apps/flutter_study/test/modules/ui/download_animation/download_animation_test.dart +++ b/apps/flutter_forge/test/modules/ui/download_animation/download_animation_test.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_study_app/modules/ui/download_animation/pages/download_animation_page.dart'; +import 'package:flutter_forge_app/modules/ui/download_animation/pages/download_animation_page.dart'; void main() { testWidgets('DownloadAnimationPage renders teaching components', ( diff --git a/apps/flutter_study/test/modules/ui/font_picker/font_picker_test.dart b/apps/flutter_forge/test/modules/ui/font_picker/font_picker_test.dart similarity index 94% rename from apps/flutter_study/test/modules/ui/font_picker/font_picker_test.dart rename to apps/flutter_forge/test/modules/ui/font_picker/font_picker_test.dart index 8b718e6..c64a159 100644 --- a/apps/flutter_study/test/modules/ui/font_picker/font_picker_test.dart +++ b/apps/flutter_forge/test/modules/ui/font_picker/font_picker_test.dart @@ -2,10 +2,10 @@ import 'package:file_picker_bridge/file_picker_bridge.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_study_app/modules/ui/font_picker/data/font_catalog.dart'; -import 'package:flutter_study_app/modules/ui/font_picker/pages/font_picker_page.dart'; -import 'package:flutter_study_app/modules/ui/font_picker/pages/weight_compare_page.dart'; -import 'package:flutter_study_app/modules/ui/font_picker/state/font_loader_service.dart'; +import 'package:flutter_forge_app/modules/ui/font_picker/data/font_catalog.dart'; +import 'package:flutter_forge_app/modules/ui/font_picker/pages/font_picker_page.dart'; +import 'package:flutter_forge_app/modules/ui/font_picker/pages/weight_compare_page.dart'; +import 'package:flutter_forge_app/modules/ui/font_picker/state/font_loader_service.dart'; void main() { test('catalog exposes platform fonts and a fallback', () { diff --git a/apps/flutter_study/test/modules/ui/gcode_visualizer/gcode_visualizer_test.dart b/apps/flutter_forge/test/modules/ui/gcode_visualizer/gcode_visualizer_test.dart similarity index 90% rename from apps/flutter_study/test/modules/ui/gcode_visualizer/gcode_visualizer_test.dart rename to apps/flutter_forge/test/modules/ui/gcode_visualizer/gcode_visualizer_test.dart index 43aac08..29ceda6 100644 --- a/apps/flutter_study/test/modules/ui/gcode_visualizer/gcode_visualizer_test.dart +++ b/apps/flutter_forge/test/modules/ui/gcode_visualizer/gcode_visualizer_test.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:flutter_study_app/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart'; +import 'package:flutter_forge_app/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart'; void main() { testWidgets('GcodeVisualizerPage renders key elements', (tester) async { diff --git a/apps/flutter_study/test/shared/module_catalog_utils_test.dart b/apps/flutter_forge/test/shared/module_catalog_utils_test.dart similarity index 89% rename from apps/flutter_study/test/shared/module_catalog_utils_test.dart rename to apps/flutter_forge/test/shared/module_catalog_utils_test.dart index 7d1d40c..875e81c 100644 --- a/apps/flutter_study/test/shared/module_catalog_utils_test.dart +++ b/apps/flutter_forge/test/shared/module_catalog_utils_test.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:go_router/go_router.dart'; -import 'package:flutter_study_app/module_registry/module_catalog_utils.dart'; -import 'package:flutter_study_app/module_registry/module_category.dart'; -import 'package:flutter_study_app/module_registry/module_entry.dart'; +import 'package:flutter_forge_app/module_registry/module_catalog_utils.dart'; +import 'package:flutter_forge_app/module_registry/module_category.dart'; +import 'package:flutter_forge_app/module_registry/module_entry.dart'; void main() { ModuleEntry createModule({ diff --git a/apps/flutter_study/windows/.gitignore b/apps/flutter_forge/windows/.gitignore similarity index 100% rename from apps/flutter_study/windows/.gitignore rename to apps/flutter_forge/windows/.gitignore diff --git a/apps/flutter_study/windows/CMakeLists.txt b/apps/flutter_forge/windows/CMakeLists.txt similarity index 98% rename from apps/flutter_study/windows/CMakeLists.txt rename to apps/flutter_forge/windows/CMakeLists.txt index 0971c08..7dba445 100644 --- a/apps/flutter_study/windows/CMakeLists.txt +++ b/apps/flutter_forge/windows/CMakeLists.txt @@ -1,10 +1,10 @@ # Project-level configuration. cmake_minimum_required(VERSION 3.14) -project(main_app LANGUAGES CXX) +project(flutter_forge LANGUAGES CXX) # The name of the executable created for the application. Change this to change # the on-disk name of your application. -set(BINARY_NAME "main_app") +set(BINARY_NAME "flutter_forge") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. diff --git a/apps/flutter_study/windows/flutter/CMakeLists.txt b/apps/flutter_forge/windows/flutter/CMakeLists.txt similarity index 100% rename from apps/flutter_study/windows/flutter/CMakeLists.txt rename to apps/flutter_forge/windows/flutter/CMakeLists.txt diff --git a/apps/flutter_study/windows/runner/CMakeLists.txt b/apps/flutter_forge/windows/runner/CMakeLists.txt similarity index 100% rename from apps/flutter_study/windows/runner/CMakeLists.txt rename to apps/flutter_forge/windows/runner/CMakeLists.txt diff --git a/apps/flutter_study/windows/runner/Runner.rc b/apps/flutter_forge/windows/runner/Runner.rc similarity index 92% rename from apps/flutter_study/windows/runner/Runner.rc rename to apps/flutter_forge/windows/runner/Runner.rc index 75dc4d6..31ec069 100644 --- a/apps/flutter_study/windows/runner/Runner.rc +++ b/apps/flutter_forge/windows/runner/Runner.rc @@ -90,12 +90,12 @@ BEGIN BLOCK "040904e4" BEGIN VALUE "CompanyName", "com.example" "\0" - VALUE "FileDescription", "main_app" "\0" + VALUE "FileDescription", "Flutter Forge" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" - VALUE "InternalName", "main_app" "\0" + VALUE "InternalName", "flutter_forge" "\0" VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" - VALUE "OriginalFilename", "main_app.exe" "\0" - VALUE "ProductName", "main_app" "\0" + VALUE "OriginalFilename", "flutter_forge.exe" "\0" + VALUE "ProductName", "Flutter Forge" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" END END diff --git a/apps/flutter_study/windows/runner/flutter_window.cpp b/apps/flutter_forge/windows/runner/flutter_window.cpp similarity index 100% rename from apps/flutter_study/windows/runner/flutter_window.cpp rename to apps/flutter_forge/windows/runner/flutter_window.cpp diff --git a/apps/flutter_study/windows/runner/flutter_window.h b/apps/flutter_forge/windows/runner/flutter_window.h similarity index 100% rename from apps/flutter_study/windows/runner/flutter_window.h rename to apps/flutter_forge/windows/runner/flutter_window.h diff --git a/apps/flutter_study/windows/runner/main.cpp b/apps/flutter_forge/windows/runner/main.cpp similarity index 95% rename from apps/flutter_study/windows/runner/main.cpp rename to apps/flutter_forge/windows/runner/main.cpp index 53c6f5c..124b1be 100644 --- a/apps/flutter_study/windows/runner/main.cpp +++ b/apps/flutter_forge/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.Create(L"main_app", origin, size)) { + if (!window.Create(L"Flutter Forge", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/apps/flutter_study/windows/runner/resource.h b/apps/flutter_forge/windows/runner/resource.h similarity index 100% rename from apps/flutter_study/windows/runner/resource.h rename to apps/flutter_forge/windows/runner/resource.h diff --git a/apps/flutter_study/windows/runner/resources/app_icon.ico b/apps/flutter_forge/windows/runner/resources/app_icon.ico similarity index 100% rename from apps/flutter_study/windows/runner/resources/app_icon.ico rename to apps/flutter_forge/windows/runner/resources/app_icon.ico diff --git a/apps/flutter_study/windows/runner/runner.exe.manifest b/apps/flutter_forge/windows/runner/runner.exe.manifest similarity index 100% rename from apps/flutter_study/windows/runner/runner.exe.manifest rename to apps/flutter_forge/windows/runner/runner.exe.manifest diff --git a/apps/flutter_study/windows/runner/utils.cpp b/apps/flutter_forge/windows/runner/utils.cpp similarity index 100% rename from apps/flutter_study/windows/runner/utils.cpp rename to apps/flutter_forge/windows/runner/utils.cpp diff --git a/apps/flutter_study/windows/runner/utils.h b/apps/flutter_forge/windows/runner/utils.h similarity index 100% rename from apps/flutter_study/windows/runner/utils.h rename to apps/flutter_forge/windows/runner/utils.h diff --git a/apps/flutter_study/windows/runner/win32_window.cpp b/apps/flutter_forge/windows/runner/win32_window.cpp similarity index 100% rename from apps/flutter_study/windows/runner/win32_window.cpp rename to apps/flutter_forge/windows/runner/win32_window.cpp diff --git a/apps/flutter_study/windows/runner/win32_window.h b/apps/flutter_forge/windows/runner/win32_window.h similarity index 100% rename from apps/flutter_study/windows/runner/win32_window.h rename to apps/flutter_forge/windows/runner/win32_window.h diff --git a/apps/flutter_study/lib/main.dart b/apps/flutter_study/lib/main.dart deleted file mode 100644 index 8e7ac24..0000000 --- a/apps/flutter_study/lib/main.dart +++ /dev/null @@ -1,3 +0,0 @@ -import 'app/app_bootstrap.dart'; - -Future main() => bootstrapFlutterStudyApp(); diff --git a/pubspec.yaml b/pubspec.yaml index a84d40e..31735e7 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,12 +1,12 @@ -name: flutter_study_workspace -description: Flutter Study workspace container. +name: flutter_forge_workspace +description: Flutter Forge workspace container. publish_to: 'none' environment: sdk: ^3.11.5 workspace: - - apps/flutter_study + - apps/flutter_forge - packages/gcode_core - packages/flutter_study_learning - packages/file_picker_bridge diff --git a/tool/bootstrap.sh b/tool/bootstrap.sh index 476f970..a243777 100755 --- a/tool/bootstrap.sh +++ b/tool/bootstrap.sh @@ -7,7 +7,7 @@ set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$ROOT" -echo "=== Flutter Study 环境自举 ===" +echo "=== Flutter Forge 环境自举 ===" echo "" # 1. 环境校验 diff --git a/tool/check_environment.sh b/tool/check_environment.sh index 8bd4c4e..ed940cb 100755 --- a/tool/check_environment.sh +++ b/tool/check_environment.sh @@ -31,7 +31,7 @@ check_cmd() { fi } -echo "=== Flutter Study 环境检查 ===" +echo "=== Flutter Forge 环境检查 ===" echo "" echo "--- 核心工具链 ---" diff --git a/tool/generate_agent_indexes.js b/tool/generate_agent_indexes.js index 6d128e5..0eeceb2 100644 --- a/tool/generate_agent_indexes.js +++ b/tool/generate_agent_indexes.js @@ -2,7 +2,7 @@ const fs = require('fs'); const path = require('path'); const root = path.resolve(__dirname, '..'); -const appRoot = path.join(root, 'apps/flutter_study'); +const appRoot = path.join(root, 'apps/flutter_forge'); const contracts = { no_natural_language: true, @@ -126,7 +126,7 @@ function writeIndex({ node: { id, kind, - package: 'main_app', + package: 'flutter_forge_app', path: nodePath(rel), status, }, @@ -141,7 +141,7 @@ function writeIndex({ function writeSchema() { writeJson('AI_ANALYSIS_SCHEMA.json', { - schema: 'flutter_study.agent_docs.schema.v2', + schema: 'flutter_forge.agent_docs.schema.v2', syntax: 'json_config', prose: 'forbidden', markdown: 'forbidden', @@ -199,10 +199,10 @@ function writeSchema() { function writeProjectContext() { writeJson('AI_PROJECT_CONTEXT.md', { - schema: 'flutter_study.agent_docs.project_context.v1', + schema: 'flutter_forge.agent_docs.project_context.v1', consumer: 'coding_agent', package: { - name: 'main_app', + name: 'flutter_forge_app', type: 'flutter_modular_learning_app', sdk: ['flutter_3', 'dart_3'], }, @@ -288,7 +288,7 @@ function writeProjectContext() { function writeRefactorPlan() { writeJson('REFACTOR_PLAN.md', { - schema: 'flutter_study.agent_docs.refactor_plan.v1', + schema: 'flutter_forge.agent_docs.refactor_plan.v1', objective: 'android_readiness_after_architecture_convergence', active_phase: 'agent_managed', completed_milestones: [ @@ -364,7 +364,7 @@ function writeRefactorPlan() { function writeModuleIndex() { writeJson('lib/AI_MODULE_INDEX.md', { - schema: 'flutter_study.agent_docs.module_index.v1', + schema: 'flutter_forge.agent_docs.module_index.v1', registry: 'lib/app/router/app_route_table.dart', count: modules.length, modules: modules.map(([category, module, route, status, depends]) => ({ @@ -382,7 +382,7 @@ function writeModuleIndex() { function writeRootIndexes() { writeIndex({ rel: 'AI_ANALYSIS.md', - id: 'flutter_study.root', + id: 'flutter_forge.root', kind: 'workspace_index', entrypoints: ['lib/main.dart', 'lib/app/app_bootstrap.dart', 'lib/app/app.dart', 'lib/app/router/app_route_table.dart'], owns: ['app_shell', 'module_registry', 'shared_capabilities', 'learning_modules', 'host_integrations'], @@ -405,7 +405,7 @@ function writeRootIndexes() { }); writeIndex({ rel: 'lib/AI_ANALYSIS.md', - id: 'main_app.lib', + id: 'flutter_forge_app.lib', kind: 'source_index', entrypoints: ['main.dart', 'app/app_bootstrap.dart', 'app/app.dart', 'app/router/app_route_table.dart'], owns: ['app', 'module_registry', 'shared', 'modules'], @@ -417,7 +417,7 @@ function writeRootIndexes() { function writeLayerIndexes() { writeIndex({ rel: 'lib/app/AI_ANALYSIS.md', - id: 'main_app.app', + id: 'flutter_forge_app.app', kind: 'app_index', entrypoints: ['app.dart', 'app_bootstrap.dart', 'module_home_page.dart', 'category_navigation.dart', 'category_window_app.dart', 'router/app_router.dart', 'router/app_route_table.dart'], owns: ['host_bootstrap', 'material_app_router', 'router', 'module_home', 'adaptive_category_navigation', 'desktop_category_window_shell'], @@ -426,7 +426,7 @@ function writeLayerIndexes() { }); writeIndex({ rel: 'lib/app/router/AI_ANALYSIS.md', - id: 'main_app.app.router', + id: 'flutter_forge_app.app.router', kind: 'router_index', entrypoints: ['app_router.dart', 'app_route_table.dart'], owns: ['go_router_root', 'module_route_aggregation', 'module_catalog_composition'], @@ -434,7 +434,7 @@ function writeLayerIndexes() { }); writeIndex({ rel: 'lib/module_registry/AI_ANALYSIS.md', - id: 'main_app.module_registry', + id: 'flutter_forge_app.module_registry', kind: 'registry_index', entrypoints: ['module_entry.dart', 'module_category.dart', 'module_catalog_utils.dart'], owns: ['module_entry_model', 'module_category_enum', 'difficulty_enum', 'module_status_enum', 'module_catalog_filtering', 'category_route_rebasing'], @@ -442,7 +442,7 @@ function writeLayerIndexes() { }); writeIndex({ rel: 'lib/shared/AI_ANALYSIS.md', - id: 'main_app.shared', + id: 'flutter_forge_app.shared', kind: 'shared_index', entrypoints: ['multi_window', 'platform'], owns: ['business_free_capabilities', 'desktop_window_lifecycle', 'platform_boundaries'], @@ -451,7 +451,7 @@ function writeLayerIndexes() { }); writeIndex({ rel: 'lib/shared/multi_window/AI_ANALYSIS.md', - id: 'main_app.shared.multi_window', + id: 'flutter_forge_app.shared.multi_window', kind: 'shared_capability_index', entrypoints: ['multi_window_manager.dart'], owns: ['desktop_window_lifecycle', 'desktop_window_arguments'], @@ -459,7 +459,7 @@ function writeLayerIndexes() { }); writeIndex({ rel: 'lib/shared/platform/AI_ANALYSIS.md', - id: 'main_app.shared.platform', + id: 'flutter_forge_app.shared.platform', kind: 'shared_boundary_index', status: 'transition', entrypoints: ['AI_ANALYSIS.md'], @@ -472,7 +472,7 @@ function writeLayerIndexes() { function writeModuleIndexes() { writeIndex({ rel: 'lib/modules/AI_ANALYSIS.md', - id: 'main_app.modules', + id: 'flutter_forge_app.modules', kind: 'modules_index', entrypoints: ['basic', 'async', 'state', 'ui', 'popup_table', 'platform'], owns: ['learning_module_categories', 'route_registered_modules'], @@ -482,7 +482,7 @@ function writeModuleIndexes() { for (const [category, [children, owns, depends]] of Object.entries(categoryMeta)) { writeIndex({ rel: `lib/modules/${category}/AI_ANALYSIS.md`, - id: `main_app.modules.${category}`, + id: `flutter_forge_app.modules.${category}`, kind: 'module_category_index', entrypoints: children, owns, @@ -506,9 +506,9 @@ function writeModuleContracts() { schema: 'vibecoding.harness.ai_analysis.v2', mode: 'module_contract', node: { - id: `main_app.modules.${category}.${module}`, + id: `flutter_forge_app.modules.${category}.${module}`, kind: 'learning_module', - package: 'main_app', + package: 'flutter_forge_app', path: `lib/modules/${category}/${module}`, status, }, @@ -531,7 +531,7 @@ function writePackageContracts() { schema: 'vibecoding.harness.ai_analysis.v2', mode: 'package_contract', node: { - id: `flutter_study.workspace.${packageMeta.name}`, + id: `flutter_forge.workspace.${packageMeta.name}`, kind: packageMeta.kind, package: packageMeta.name, path: packageMeta.path, diff --git a/tool/quality_gate.sh b/tool/quality_gate.sh index 41367b8..fb9cffd 100755 --- a/tool/quality_gate.sh +++ b/tool/quality_gate.sh @@ -29,7 +29,7 @@ run_stage() { echo "" } -echo "=== Flutter Study 质量门禁 ===" +echo "=== Flutter Forge 质量门禁 ===" echo "" # Stage 1: Agent 文档生成 + 校验 + 漂移检测 diff --git a/tool/test_all.sh b/tool/test_all.sh index 0212937..f325d81 100755 --- a/tool/test_all.sh +++ b/tool/test_all.sh @@ -36,11 +36,11 @@ run_tests() { echo "" } -echo "=== Flutter Study 全量测试 ===" +echo "=== Flutter Forge 全量测试 ===" echo "" # 主应用 -run_tests "." "main_app" "flutter test" +run_tests "." "flutter_forge_app" "flutter test" # Workspace packages run_tests "packages/gcode_core" "gcode_core" "flutter test" From f8befa6e8d63e1cac26232d3fadc6aa0358d05db Mon Sep 17 00:00:00 2001 From: lizy Date: Wed, 19 Aug 2026 18:08:40 +0800 Subject: [PATCH 08/17] fix: align Flutter Forge validation paths --- .githooks/pre-commit | 4 +-- AI_ANALYSIS.md | 4 +-- AI_ANALYSIS_SCHEMA.json | 2 +- AI_PROJECT_CONTEXT.md | 4 +-- REFACTOR_PLAN.md | 2 +- docs/agent/CHANGE_REPORT_SCHEMA.json | 2 +- docs/agent/COMMANDS.json | 2 +- docs/agent/TASK_SCHEMA.json | 2 +- packages/file_picker_bridge/AI_ANALYSIS.md | 2 +- packages/file_picker_bridge/OWNERS.md | 2 +- packages/flutter_ioc_core/AI_ANALYSIS.md | 2 +- packages/flutter_ioc_core/OWNERS.md | 2 +- .../flutter_study_learning/AI_ANALYSIS.md | 2 +- packages/flutter_study_learning/OWNERS.md | 4 +-- packages/gcode_core/AI_ANALYSIS.md | 2 +- packages/gcode_core/OWNERS.md | 4 +-- packages/gcode_core/README.md | 2 +- tool/quality_gate.sh | 7 +++-- tool/test_all.sh | 2 +- tool/validate_agent_docs.js | 27 ++++++++++++------- tool/verify_test_layout.sh | 7 ++--- 21 files changed, 49 insertions(+), 38 deletions(-) diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 0265681..59cdaca 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -3,10 +3,10 @@ set -euo pipefail echo "🔍 Running FlutterGuard static scan..." -if ! dart run flutterguard_cli:flutterguard scan . --fail-on high; then +if ! (cd apps/flutter_forge && dart run flutterguard_cli:flutterguard scan . --fail-on high); then echo "" echo "❌ FlutterGuard 检测到高优问题,提交被阻止。" - echo " 运行 'dart run flutterguard_cli:flutterguard scan' 查看详情。" + echo " 运行 'cd apps/flutter_forge && dart run flutterguard_cli:flutterguard scan . --fail-on high' 查看详情。" exit 1 fi diff --git a/AI_ANALYSIS.md b/AI_ANALYSIS.md index dc5193f..5b025e9 100644 --- a/AI_ANALYSIS.md +++ b/AI_ANALYSIS.md @@ -2,9 +2,9 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "index", "node": { - "id": "flutter_study.root", + "id": "flutter_forge.root", "kind": "workspace_index", - "package": "main_app", + "package": "flutter_forge_app", "path": ".", "status": "active" }, diff --git a/AI_ANALYSIS_SCHEMA.json b/AI_ANALYSIS_SCHEMA.json index 75227e2..40ee0a4 100644 --- a/AI_ANALYSIS_SCHEMA.json +++ b/AI_ANALYSIS_SCHEMA.json @@ -1,5 +1,5 @@ { - "schema": "flutter_study.agent_docs.schema.v2", + "schema": "flutter_forge.agent_docs.schema.v2", "syntax": "json_config", "prose": "forbidden", "markdown": "forbidden", diff --git a/AI_PROJECT_CONTEXT.md b/AI_PROJECT_CONTEXT.md index fe0ab42..dccc844 100644 --- a/AI_PROJECT_CONTEXT.md +++ b/AI_PROJECT_CONTEXT.md @@ -1,8 +1,8 @@ { - "schema": "flutter_study.agent_docs.project_context.v1", + "schema": "flutter_forge.agent_docs.project_context.v1", "consumer": "coding_agent", "package": { - "name": "main_app", + "name": "flutter_forge_app", "type": "flutter_modular_learning_app", "sdk": [ "flutter_3", diff --git a/REFACTOR_PLAN.md b/REFACTOR_PLAN.md index 25b780f..75774df 100644 --- a/REFACTOR_PLAN.md +++ b/REFACTOR_PLAN.md @@ -1,5 +1,5 @@ { - "schema": "flutter_study.agent_docs.refactor_plan.v1", + "schema": "flutter_forge.agent_docs.refactor_plan.v1", "objective": "android_readiness_after_architecture_convergence", "active_phase": "agent_managed", "completed_milestones": [ diff --git a/docs/agent/CHANGE_REPORT_SCHEMA.json b/docs/agent/CHANGE_REPORT_SCHEMA.json index 19f541c..17b66bc 100644 --- a/docs/agent/CHANGE_REPORT_SCHEMA.json +++ b/docs/agent/CHANGE_REPORT_SCHEMA.json @@ -1,5 +1,5 @@ { - "schema": "flutter_study.agent_docs.change_report_schema.v1", + "schema": "flutter_forge.agent_docs.change_report_schema.v1", "consumer": "coding_agent", "description": "Agent 变更报告格式 — 每次任务完成后的结构化输出", "fields": { diff --git a/docs/agent/COMMANDS.json b/docs/agent/COMMANDS.json index 5244cf5..8172dfe 100644 --- a/docs/agent/COMMANDS.json +++ b/docs/agent/COMMANDS.json @@ -1,5 +1,5 @@ { - "schema": "flutter_study.agent_docs.commands.v1", + "schema": "flutter_forge.agent_docs.commands.v1", "consumer": "coding_agent", "description": "项目命令清单 — 所有可执行命令的标准化描述", "commands": { diff --git a/docs/agent/TASK_SCHEMA.json b/docs/agent/TASK_SCHEMA.json index ecd5330..01b4e9c 100644 --- a/docs/agent/TASK_SCHEMA.json +++ b/docs/agent/TASK_SCHEMA.json @@ -1,5 +1,5 @@ { - "schema": "flutter_study.agent_docs.task_schema.v1", + "schema": "flutter_forge.agent_docs.task_schema.v1", "consumer": "coding_agent", "description": "Agent 任务输入格式 — 每个任务声明边界、依赖、验收条件和风险等级", "fields": { diff --git a/packages/file_picker_bridge/AI_ANALYSIS.md b/packages/file_picker_bridge/AI_ANALYSIS.md index 5febc6c..0284a97 100644 --- a/packages/file_picker_bridge/AI_ANALYSIS.md +++ b/packages/file_picker_bridge/AI_ANALYSIS.md @@ -2,7 +2,7 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "package_contract", "node": { - "id": "flutter_study.workspace.file_picker_bridge", + "id": "flutter_forge.workspace.file_picker_bridge", "kind": "flutter_bridge_package", "package": "file_picker_bridge", "path": "packages/file_picker_bridge", diff --git a/packages/file_picker_bridge/OWNERS.md b/packages/file_picker_bridge/OWNERS.md index f3c10af..e0dc612 100644 --- a/packages/file_picker_bridge/OWNERS.md +++ b/packages/file_picker_bridge/OWNERS.md @@ -12,5 +12,5 @@ It must not own native application UI, business-specific file parsing, G-code lo ## Maintenance Owners -- Flutter Study package maintainers +- Flutter Forge package maintainers - Platform bridge maintainers diff --git a/packages/flutter_ioc_core/AI_ANALYSIS.md b/packages/flutter_ioc_core/AI_ANALYSIS.md index 48e1b47..7c52af3 100644 --- a/packages/flutter_ioc_core/AI_ANALYSIS.md +++ b/packages/flutter_ioc_core/AI_ANALYSIS.md @@ -2,7 +2,7 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "package_contract", "node": { - "id": "flutter_study.workspace.flutter_ioc_core", + "id": "flutter_forge.workspace.flutter_ioc_core", "kind": "dart_package", "package": "flutter_ioc_core", "path": "packages/flutter_ioc_core", diff --git a/packages/flutter_ioc_core/OWNERS.md b/packages/flutter_ioc_core/OWNERS.md index 66f4294..0be7bd1 100644 --- a/packages/flutter_ioc_core/OWNERS.md +++ b/packages/flutter_ioc_core/OWNERS.md @@ -12,5 +12,5 @@ It must not own Flutter widgets, app bootstrap, route composition, module teachi ## Maintenance Owners -- Flutter Study package maintainers +- Flutter Forge package maintainers - IoC core maintainers diff --git a/packages/flutter_study_learning/AI_ANALYSIS.md b/packages/flutter_study_learning/AI_ANALYSIS.md index 358d1cf..b30c083 100644 --- a/packages/flutter_study_learning/AI_ANALYSIS.md +++ b/packages/flutter_study_learning/AI_ANALYSIS.md @@ -2,7 +2,7 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "package_contract", "node": { - "id": "flutter_study.workspace.flutter_study_learning", + "id": "flutter_forge.workspace.flutter_study_learning", "kind": "flutter_package", "package": "flutter_study_learning", "path": "packages/flutter_study_learning", diff --git a/packages/flutter_study_learning/OWNERS.md b/packages/flutter_study_learning/OWNERS.md index 41d0be7..bbdff24 100644 --- a/packages/flutter_study_learning/OWNERS.md +++ b/packages/flutter_study_learning/OWNERS.md @@ -6,11 +6,11 @@ ## Public Contract -`flutter_study_learning` owns shared teaching UI components for Flutter Study learning modules, including scaffolds, learning objectives, concept chips, code snippets, state logs, pitfalls, and exercise cards. +`flutter_study_learning` owns shared teaching UI components for Flutter Forge learning modules, including scaffolds, learning objectives, concept chips, code snippets, state logs, pitfalls, and exercise cards. It must not own module-specific business logic, route registration, module metadata, persistence, platform capabilities, or app shell behavior. ## Maintenance Owners -- Flutter Study package maintainers +- Flutter Forge package maintainers - Learning UI maintainers diff --git a/packages/gcode_core/AI_ANALYSIS.md b/packages/gcode_core/AI_ANALYSIS.md index 361f049..277ed2b 100644 --- a/packages/gcode_core/AI_ANALYSIS.md +++ b/packages/gcode_core/AI_ANALYSIS.md @@ -2,7 +2,7 @@ "schema": "vibecoding.harness.ai_analysis.v2", "mode": "package_contract", "node": { - "id": "flutter_study.workspace.gcode_core", + "id": "flutter_forge.workspace.gcode_core", "kind": "flutter_package", "package": "gcode_core", "path": "packages/gcode_core", diff --git a/packages/gcode_core/OWNERS.md b/packages/gcode_core/OWNERS.md index 29912fc..83cc343 100644 --- a/packages/gcode_core/OWNERS.md +++ b/packages/gcode_core/OWNERS.md @@ -8,9 +8,9 @@ `gcode_core` owns the reusable G-code package boundary for parsing G-code, reading line streams, collecting parse errors, building toolpath segments, and rendering Flutter visualization widgets such as the canvas, command timeline, and playback controls. -It must not own host file picking, app-level route composition, app playback state, module catalog metadata, platform bootstrap policy, or feature-specific Flutter Study screens outside this package. +It must not own host file picking, app-level route composition, app playback state, module catalog metadata, platform bootstrap policy, or feature-specific Flutter Forge screens outside this package. ## Maintenance Owners -- Flutter Study package maintainers +- Flutter Forge package maintainers - G-code package maintainers diff --git a/packages/gcode_core/README.md b/packages/gcode_core/README.md index 65480fe..1a013f5 100644 --- a/packages/gcode_core/README.md +++ b/packages/gcode_core/README.md @@ -2,7 +2,7 @@ ![example](https://github.com/lizy-coding/gcode_core/blob/master/gcode_print.gif) -G-code parsing and visualization package extracted from `flutter_study`. +G-code parsing and visualization package extracted for Flutter Forge. ## Scope diff --git a/tool/quality_gate.sh b/tool/quality_gate.sh index fb9cffd..82935db 100755 --- a/tool/quality_gate.sh +++ b/tool/quality_gate.sh @@ -35,7 +35,7 @@ echo "" # Stage 1: Agent 文档生成 + 校验 + 漂移检测 run_stage "Agent 文档生成与校验" bash -c " bash tool/generate_harness_ai_analysis.sh && - git diff --exit-code -- AI_ANALYSIS_SCHEMA.json AI_PROJECT_CONTEXT.md REFACTOR_PLAN.md lib/**/AI_ANALYSIS.md lib/AI_MODULE_INDEX.md packages/**/AI_ANALYSIS.md + git diff --exit-code -- AI_ANALYSIS_SCHEMA.json AI_PROJECT_CONTEXT.md REFACTOR_PLAN.md AI_ANALYSIS.md apps/flutter_forge/lib/**/AI_ANALYSIS.md apps/flutter_forge/lib/AI_MODULE_INDEX.md packages/**/AI_ANALYSIS.md " # Stage 2: 代码格式 @@ -54,7 +54,10 @@ run_stage "全量测试" bash tool/test_all.sh run_stage "测试布局校验" bash tool/verify_test_layout.sh # Stage 6: FlutterGuard 安全扫描 -run_stage "FlutterGuard" dart run flutterguard_cli:flutterguard scan . --fail-on high +run_stage "FlutterGuard" bash -c " + cd apps/flutter_forge && + dart run flutterguard_cli:flutterguard scan . --fail-on high +" echo "=== 质量门禁完成 ===" echo -e " 通过: ${GREEN}$PASS_COUNT${NC}" diff --git a/tool/test_all.sh b/tool/test_all.sh index f325d81..87d960f 100755 --- a/tool/test_all.sh +++ b/tool/test_all.sh @@ -40,7 +40,7 @@ echo "=== Flutter Forge 全量测试 ===" echo "" # 主应用 -run_tests "." "flutter_forge_app" "flutter test" +run_tests "apps/flutter_forge" "flutter_forge_app" "flutter test" # Workspace packages run_tests "packages/gcode_core" "gcode_core" "flutter test" diff --git a/tool/validate_agent_docs.js b/tool/validate_agent_docs.js index 35abc00..293bc32 100644 --- a/tool/validate_agent_docs.js +++ b/tool/validate_agent_docs.js @@ -2,6 +2,7 @@ const fs = require('fs'); const path = require('path'); const root = path.resolve(__dirname, '..'); +const appRoot = path.join(root, 'apps/flutter_forge'); const failures = []; const documents = new Map(); @@ -17,7 +18,7 @@ const workspacePackages = [ function readJson(rel) { try { - const source = fs.readFileSync(path.join(root, rel), 'utf8'); + const source = fs.readFileSync(resolveProjectPath(rel), 'utf8'); if (/[^\x00-\x7F]/.test(source)) failures.push(`${rel}:non_ascii_content`); const document = JSON.parse(source); documents.set(rel, document); @@ -28,33 +29,37 @@ function readJson(rel) { } } -function collectAnalysisFiles(dir) { +function collectAnalysisFiles(dir, base = dir) { const result = []; for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { if (entry.name.startsWith('.') || entry.name === 'build') continue; const absolute = path.join(dir, entry.name); if (entry.isDirectory()) { - result.push(...collectAnalysisFiles(absolute)); + result.push(...collectAnalysisFiles(absolute, base)); } else if (entry.name === 'AI_ANALYSIS.md') { - result.push(path.relative(root, absolute)); + result.push(path.relative(base, absolute)); } } return result; } function fileExists(rel) { - return fs.existsSync(path.join(root, rel)); + return fs.existsSync(resolveProjectPath(rel)); +} + +function resolveProjectPath(rel) { + return path.join(rel === 'lib' || rel.startsWith('lib/') ? appRoot : root, rel); } function grepInFile(rel, pattern) { if (!fileExists(rel)) return false; - const content = fs.readFileSync(path.join(root, rel), 'utf8'); + const content = fs.readFileSync(resolveProjectPath(rel), 'utf8'); return pattern.test(content); } function scanModuleDirs() { const dirs = []; - const modulesRoot = path.join(root, 'lib/modules'); + const modulesRoot = path.join(appRoot, 'lib/modules'); if (!fs.existsSync(modulesRoot)) return dirs; for (const cat of fs.readdirSync(modulesRoot, { withFileTypes: true })) { if (!cat.isDirectory() || cat.name.startsWith('.')) continue; @@ -74,7 +79,9 @@ const machineDocuments = [ 'AI_PROJECT_CONTEXT.md', 'REFACTOR_PLAN.md', 'lib/AI_MODULE_INDEX.md', - ...collectAnalysisFiles(root), + 'AI_ANALYSIS.md', + ...collectAnalysisFiles(appRoot), + ...workspacePackages.map(([, packagePath]) => `${packagePath}/AI_ANALYSIS.md`), ]; // ── phase 1: JSON parse + key validation ────────────────────────── @@ -105,7 +112,7 @@ for (const rel of [...new Set(machineDocuments)].sort()) { for (const child of document.children ?? []) { const childPath = path.normalize(path.join(path.dirname(rel), child)); - if (!fs.existsSync(path.join(root, childPath))) { + if (!fileExists(childPath)) { failures.push(`${rel}:missing_child:${child}`); } } @@ -199,7 +206,7 @@ if (moduleIndex) { } // Check at least one .dart file in the module imports flutter_study_learning - const modDir = path.join(root, mod.path); + const modDir = resolveProjectPath(mod.path); if (fs.existsSync(modDir)) { let hasTeachingDep = false; function walk(dir) { diff --git a/tool/verify_test_layout.sh b/tool/verify_test_layout.sh index 0f93f76..6ff755c 100755 --- a/tool/verify_test_layout.sh +++ b/tool/verify_test_layout.sh @@ -9,7 +9,8 @@ import sys from pathlib import Path root = Path(sys.argv[1]) -test_root = root / "test" +app_root = root / "apps" / "flutter_forge" +test_root = app_root / "test" allowed_top_level = {"modules", "shared"} actual_top_level = {entry.name for entry in test_root.iterdir() if entry.is_dir()} unexpected = sorted(actual_top_level - allowed_top_level) @@ -23,7 +24,7 @@ if unexpected: print("PASS: test/ top-level directories are modules/ and shared/") -module_index = json.loads((root / "lib/AI_MODULE_INDEX.md").read_text()) +module_index = json.loads((app_root / "lib/AI_MODULE_INDEX.md").read_text()) modules = module_index["modules"] present = [] missing = [] @@ -36,7 +37,7 @@ for module in modules: module["id"], f'{module["id"]}_test.dart', ) - if (root / relative).is_file(): + if (app_root / relative).is_file(): present.append(relative) else: missing.append(relative) From 118a9ca840c39c0679c8d8629fede2e6890eae0b Mon Sep 17 00:00:00 2001 From: lizy Date: Wed, 19 Aug 2026 19:58:57 +0800 Subject: [PATCH 09/17] chore: refresh Flutter Forge macOS pods --- apps/flutter_forge/macos/Podfile.lock | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/flutter_forge/macos/Podfile.lock b/apps/flutter_forge/macos/Podfile.lock index a3de1f6..6fc3e98 100644 --- a/apps/flutter_forge/macos/Podfile.lock +++ b/apps/flutter_forge/macos/Podfile.lock @@ -5,6 +5,7 @@ PODS: - FlutterMacOS - FlutterMacOS (1.0.0) - video_player_avfoundation (0.0.1): + - Flutter - FlutterMacOS DEPENDENCIES: @@ -27,8 +28,8 @@ SPEC CHECKSUMS: desktop_multi_window: 93667594ccc4b88d91a97972fd3b1b89667fa80a device_info_plus: a56e6e74dbbd2bb92f2da12c64ddd4f67a749041 FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 - video_player_avfoundation: 2618e5754e2ab98a816bc4e0c1e9157298b50b17 + video_player_avfoundation: 3453f792138786248960ca029747fcd9f318ef52 PODFILE CHECKSUM: 54d867c82ac51cbd61b565781b9fada492027009 -COCOAPODS: 1.16.2 +COCOAPODS: 1.17.0 From a7d77ffd16cb059906235ea6f1cac3a5056e1a2d Mon Sep 17 00:00:00 2001 From: lizy Date: Sat, 22 Aug 2026 13:02:26 +0800 Subject: [PATCH 10/17] =?UTF-8?q?feat:=E6=9B=B4=E6=96=B0=20yaml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/flutter_forge/pubspec.yaml | 2 +- pubspec.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/flutter_forge/pubspec.yaml b/apps/flutter_forge/pubspec.yaml index 3f12a2a..476d3ce 100644 --- a/apps/flutter_forge/pubspec.yaml +++ b/apps/flutter_forge/pubspec.yaml @@ -38,7 +38,7 @@ dev_dependencies: sdk: flutter flutter_lints: ^4.0.0 flutterguard_cli: - path: ../../../../flutterguard + path: ../../../flutterguard flutter: uses-material-design: true diff --git a/pubspec.lock b/pubspec.lock index 0fc0ef1..85cc06a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -219,7 +219,7 @@ packages: flutterguard_cli: dependency: transitive description: - path: "../../flutterguard" + path: "../flutterguard" relative: true source: path version: "0.7.1" From eed5b6da1ea4064f73e9a82ea00d0506344b44e1 Mon Sep 17 00:00:00 2001 From: lizy Date: Sat, 22 Aug 2026 13:24:57 +0800 Subject: [PATCH 11/17] refactor: complete flutter_forge rename (remote, docs, agent-hub registry) --- .../scripts/generate_root_readme.py | 4 ++-- .hermes/README.md | 8 ++++---- .hermes/online-video-player-macos.codex.json | 18 ++++++++++++++---- AI_ANALYSIS.md | 2 +- AI_PROJECT_CONTEXT.md | 9 ++++----- README.md | 2 +- REFACTOR_PLAN.md | 9 ++++----- tool/generate_agent_indexes.js | 11 +++++------ 8 files changed, 35 insertions(+), 28 deletions(-) diff --git a/.claude/skills/project-simplification/scripts/generate_root_readme.py b/.claude/skills/project-simplification/scripts/generate_root_readme.py index 4bbea3f..99afb5b 100644 --- a/.claude/skills/project-simplification/scripts/generate_root_readme.py +++ b/.claude/skills/project-simplification/scripts/generate_root_readme.py @@ -44,7 +44,7 @@ ```bash git clone -cd flutter_study +cd flutter_forge ``` 2. **安装依赖** @@ -101,7 +101,7 @@ ## 📁 项目结构 ``` -flutter_study/ +flutter_forge/ ├── lib/ │ ├── main.dart # 应用入口 │ ├── app.dart # App 配置 diff --git a/.hermes/README.md b/.hermes/README.md index d0399b0..58b8a90 100644 --- a/.hermes/README.md +++ b/.hermes/README.md @@ -1,16 +1,16 @@ # Hermes Agent 项目架构记录 -> flutter_study 项目 Hermes Agent 托管架构 — 完全托管模式 +> flutter_forge 项目 Hermes Agent 托管架构 — 完全托管模式 > 里程碑: online_video_player_landed | 阶段: agent_managed | 更新: 2026-08-02 ## 项目概述 -flutter_study 是一个 Flutter 模块化学习应用,涵盖基础机制、异步并发、状态管理、UI 动效、弹窗列表、网络平台六大分类共 18 个学习模块。通过 Dart Pub Workspace 管理 4 个内部共享包。 +flutter_forge 是一个 Flutter 模块化学习应用,涵盖基础机制、异步并发、状态管理、UI 动效、弹窗列表、网络平台六大分类共 18 个学习模块。通过 Dart Pub Workspace 管理 4 个内部共享包。 ## Agent 文档体系 ``` -flutter_study/ +flutter_forge/ ├── AGENTS.md # Agent 行为契约(入口) ├── AI_ANALYSIS_SCHEMA.json # 文档 schema 定义 ├── AI_PROJECT_CONTEXT.md # 项目架构上下文(JSON 机器契约) @@ -160,4 +160,4 @@ bash tool/quality_gate.sh 4. 门禁: bash tool/quality_gate.sh 5. 禁止: 提交/推送/合并(除非用户明确授权) 6. 禁止: 手改 AI_MODULE_INDEX.md / AI_PROJECT_CONTEXT.md / REFACTOR_PLAN.md / packages/*/AI_ANALYSIS.md -7. 任务提词: 写入 .hermes/.codex.json(schema: flutter_study.agent_task.v1),Codex 只执行提词,Hermes 独立验收 +7. 任务提词: 写入 .hermes/.codex.json(schema: flutter_forge.agent_task.v1),Codex 只执行提词,Hermes 独立验收 diff --git a/.hermes/online-video-player-macos.codex.json b/.hermes/online-video-player-macos.codex.json index ae05e66..8609f68 100644 --- a/.hermes/online-video-player-macos.codex.json +++ b/.hermes/online-video-player-macos.codex.json @@ -1,17 +1,20 @@ { - "schema": "flutter_study.agent_task.v1", + "schema": "flutter_forge.agent_task.v1", "task_id": "FEAT-20260802-online-video-player-macos", "objective": "macos_first_online_video_player_module", "scope": "macos_only", "agent_role": "code_executor", "background": { - "repo": "/Users/forest/code/flutter_study", + "repo": "/Users/forest/code/langGraph/flutter_forge", "branch": "dev", "host": "macos", "flutter": "3.44.6", "macos_deployment_target": "10.15", "workspace": "pub_workspace, 4 internal packages", - "existing_platform_modules": ["dio_interceptor", "usb_detector"], + "existing_platform_modules": [ + "dio_interceptor", + "usb_detector" + ], "reference_module": "lib/modules/platform/usb_detector", "learning_package": "packages/flutter_study_learning (exports LearningScaffold, LearningObjectives, ConceptChips, CodeSnippetCard, CommonPitfalls, ExerciseCard)", "plugin_decision": "media_kit ^1.2.6 + media_kit_video ^2.0.1 + media_kit_libs_video ^1.0.7. NOT flutter official video_player (no first-class macOS support).", @@ -31,7 +34,14 @@ "difficulty": "intermediate", "title": "在线视频播放", "subtitle": "使用 media_kit 播放在线 HTTP 视频流并操控播放参数", - "concepts": ["media_kit", "libmpv", "HTTP 流", "播放控制", "倍速", "Player 生命周期"], + "concepts": [ + "media_kit", + "libmpv", + "HTTP 流", + "播放控制", + "倍速", + "Player 生命周期" + ], "estimatedMinutes": 35, "status": "ready", "required_files": [ diff --git a/AI_ANALYSIS.md b/AI_ANALYSIS.md index 5b025e9..1777b12 100644 --- a/AI_ANALYSIS.md +++ b/AI_ANALYSIS.md @@ -26,7 +26,7 @@ "packages/flutter_study_learning", "packages/file_picker_bridge", "packages/flutter_ioc_core", - "git:https://github.com/lizy-coding/flutterguard.git#9f9be84a73dc4b99a956a8529b8c334849566b03" + "path:../../../flutterguard" ], "children": [ "lib/AI_ANALYSIS.md", diff --git a/AI_PROJECT_CONTEXT.md b/AI_PROJECT_CONTEXT.md index dccc844..f057b71 100644 --- a/AI_PROJECT_CONTEXT.md +++ b/AI_PROJECT_CONTEXT.md @@ -70,11 +70,10 @@ "external_tools": [ { "package": "flutterguard_cli", - "source": "git", - "url": "https://github.com/lizy-coding/flutterguard.git", - "ref": "9f9be84a73dc4b99a956a8529b8c334849566b03", - "immutable": true, - "lock_status": "active" + "source": "path", + "path": "../../../flutterguard", + "immutable": false, + "lock_status": "local_path" } ], "layers": [ diff --git a/README.md b/README.md index f267386..d323f7f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Flutter 学习实验室 本项目是面向 Flutter 初学者的学习项目集合,所有学习模块位于 `lib/modules/` 目录下,按主题分类,通过路由切换进入不同模块。项目同时维护 `app/` 应用壳、`module_registry/` 模块元数据和 `shared/` 共享能力,让示例既能独立学习,也能按真实工程方式演进。 -![demo](https://raw.githubusercontent.com/lizy-coding/flutter_study/master/assets/demo.gif) +![demo](https://raw.githubusercontent.com/lizy-coding/flutter_forge/master/assets/demo.gif) Full video: https://github.com/user-attachments/assets/6af279c0-7d82-42bc-81b1-624071b0e2ea diff --git a/REFACTOR_PLAN.md b/REFACTOR_PLAN.md index 75774df..1718c02 100644 --- a/REFACTOR_PLAN.md +++ b/REFACTOR_PLAN.md @@ -23,11 +23,10 @@ "workspace_resolution_blocker": "none", "external_tool": { "package": "flutterguard_cli", - "source": "git", - "url": "https://github.com/lizy-coding/flutterguard.git", - "ref": "9f9be84a73dc4b99a956a8529b8c334849566b03", - "immutable": true, - "lock_status": "active" + "source": "path", + "path": "../../../flutterguard", + "immutable": false, + "lock_status": "local_path" } }, "work_queue": [ diff --git a/tool/generate_agent_indexes.js b/tool/generate_agent_indexes.js index 0eeceb2..67e4eb9 100644 --- a/tool/generate_agent_indexes.js +++ b/tool/generate_agent_indexes.js @@ -48,11 +48,10 @@ const categoryMeta = { const flutterGuardDependency = { package: 'flutterguard_cli', - source: 'git', - url: 'https://github.com/lizy-coding/flutterguard.git', - ref: '9f9be84a73dc4b99a956a8529b8c334849566b03', - immutable: true, - lock_status: 'active', + source: 'path', + path: '../../../flutterguard', + immutable: false, + lock_status: 'local_path', }; const workspacePackages = [ @@ -391,7 +390,7 @@ function writeRootIndexes() { 'packages/flutter_study_learning', 'packages/file_picker_bridge', 'packages/flutter_ioc_core', - `git:${flutterGuardDependency.url}#${flutterGuardDependency.ref}`, + `path:${flutterGuardDependency.path}`, ], children: [ 'lib/AI_ANALYSIS.md', From 70bd693f55196946536bf9c8b3decfdce20f4225 Mon Sep 17 00:00:00 2001 From: lizy Date: Sat, 22 Aug 2026 13:56:13 +0800 Subject: [PATCH 12/17] chore(deps): pin flutterguard via git ref Replace the machine-specific ../../../flutterguard path dependency with a pinned git ref (9f9be84, flutterguard_cli 0.7.1) so pub resolution and CI no longer depend on a sibling checkout. AI docs regenerated to match. --- AI_ANALYSIS.md | 2 +- AI_PROJECT_CONTEXT.md | 9 +++++---- REFACTOR_PLAN.md | 9 +++++---- apps/flutter_forge/pubspec.yaml | 4 +++- pubspec.lock | 8 +++++--- tool/generate_agent_indexes.js | 11 ++++++----- 6 files changed, 25 insertions(+), 18 deletions(-) diff --git a/AI_ANALYSIS.md b/AI_ANALYSIS.md index 1777b12..5b025e9 100644 --- a/AI_ANALYSIS.md +++ b/AI_ANALYSIS.md @@ -26,7 +26,7 @@ "packages/flutter_study_learning", "packages/file_picker_bridge", "packages/flutter_ioc_core", - "path:../../../flutterguard" + "git:https://github.com/lizy-coding/flutterguard.git#9f9be84a73dc4b99a956a8529b8c334849566b03" ], "children": [ "lib/AI_ANALYSIS.md", diff --git a/AI_PROJECT_CONTEXT.md b/AI_PROJECT_CONTEXT.md index f057b71..78e2eab 100644 --- a/AI_PROJECT_CONTEXT.md +++ b/AI_PROJECT_CONTEXT.md @@ -70,10 +70,11 @@ "external_tools": [ { "package": "flutterguard_cli", - "source": "path", - "path": "../../../flutterguard", - "immutable": false, - "lock_status": "local_path" + "source": "git", + "url": "https://github.com/lizy-coding/flutterguard.git", + "ref": "9f9be84a73dc4b99a956a8529b8c334849566b03", + "immutable": true, + "lock_status": "git_pinned" } ], "layers": [ diff --git a/REFACTOR_PLAN.md b/REFACTOR_PLAN.md index 1718c02..d0fe426 100644 --- a/REFACTOR_PLAN.md +++ b/REFACTOR_PLAN.md @@ -23,10 +23,11 @@ "workspace_resolution_blocker": "none", "external_tool": { "package": "flutterguard_cli", - "source": "path", - "path": "../../../flutterguard", - "immutable": false, - "lock_status": "local_path" + "source": "git", + "url": "https://github.com/lizy-coding/flutterguard.git", + "ref": "9f9be84a73dc4b99a956a8529b8c334849566b03", + "immutable": true, + "lock_status": "git_pinned" } }, "work_queue": [ diff --git a/apps/flutter_forge/pubspec.yaml b/apps/flutter_forge/pubspec.yaml index 476d3ce..3cd4282 100644 --- a/apps/flutter_forge/pubspec.yaml +++ b/apps/flutter_forge/pubspec.yaml @@ -38,7 +38,9 @@ dev_dependencies: sdk: flutter flutter_lints: ^4.0.0 flutterguard_cli: - path: ../../../flutterguard + git: + url: https://github.com/lizy-coding/flutterguard.git + ref: 9f9be84a73dc4b99a956a8529b8c334849566b03 flutter: uses-material-design: true diff --git a/pubspec.lock b/pubspec.lock index 85cc06a..c103c5c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -219,9 +219,11 @@ packages: flutterguard_cli: dependency: transitive description: - path: "../flutterguard" - relative: true - source: path + path: "." + ref: "9f9be84a73dc4b99a956a8529b8c334849566b03" + resolved-ref: "9f9be84a73dc4b99a956a8529b8c334849566b03" + url: "https://github.com/lizy-coding/flutterguard.git" + source: git version: "0.7.1" glob: dependency: transitive diff --git a/tool/generate_agent_indexes.js b/tool/generate_agent_indexes.js index 67e4eb9..e978f24 100644 --- a/tool/generate_agent_indexes.js +++ b/tool/generate_agent_indexes.js @@ -48,10 +48,11 @@ const categoryMeta = { const flutterGuardDependency = { package: 'flutterguard_cli', - source: 'path', - path: '../../../flutterguard', - immutable: false, - lock_status: 'local_path', + source: 'git', + url: 'https://github.com/lizy-coding/flutterguard.git', + ref: '9f9be84a73dc4b99a956a8529b8c334849566b03', + immutable: true, + lock_status: 'git_pinned', }; const workspacePackages = [ @@ -390,7 +391,7 @@ function writeRootIndexes() { 'packages/flutter_study_learning', 'packages/file_picker_bridge', 'packages/flutter_ioc_core', - `path:${flutterGuardDependency.path}`, + `git:${flutterGuardDependency.url}#${flutterGuardDependency.ref}`, ], children: [ 'lib/AI_ANALYSIS.md', From ec19644f3e904d9802047928b9f9c785e08f9344 Mon Sep 17 00:00:00 2001 From: lizy Date: Sat, 22 Aug 2026 13:56:24 +0800 Subject: [PATCH 13/17] refactor: generate route table from single source tool/generate_agent_indexes.js is now the only hand-edited source for module registration; writeRouteTable() emits apps/flutter_forge/lib/app/router/ app_route_table.dart (DO-NOT-EDIT header). validate_agent_docs.js asserts generate-source == AI_MODULE_INDEX consistency and that every module route is present in the generated route table. Proven single-source via a throwaway dry-run (removing one module drops it from both index and route table). --- .../lib/app/router/app_route_table.dart | 2 + tool/generate_agent_indexes.js | 451 +++++++++++++++++- tool/validate_agent_docs.js | 44 ++ 3 files changed, 472 insertions(+), 25 deletions(-) diff --git a/apps/flutter_forge/lib/app/router/app_route_table.dart b/apps/flutter_forge/lib/app/router/app_route_table.dart index 1bcadd9..e94d166 100644 --- a/apps/flutter_forge/lib/app/router/app_route_table.dart +++ b/apps/flutter_forge/lib/app/router/app_route_table.dart @@ -1,3 +1,5 @@ +// GENERATED by tool/generate_agent_indexes.js - DO NOT EDIT + import 'package:go_router/go_router.dart'; import '../module_home_page.dart'; diff --git a/tool/generate_agent_indexes.js b/tool/generate_agent_indexes.js index e978f24..a76d86c 100644 --- a/tool/generate_agent_indexes.js +++ b/tool/generate_agent_indexes.js @@ -15,26 +15,326 @@ const contracts = { }; const modules = [ - ['basic', 'tree_state', '/tree-state', 'recommended', ['flutter_study_learning', 'module_registry', 'go_router']], - ['basic', 'microtask', '/microtask', 'recommended', ['flutter_study_learning', 'module_registry', 'go_router']], - ['basic', 'debounce_throttle', '/debounce-throttle', 'ready', ['flutter_study_learning', 'module_registry']], - ['async', 'stream_subscription', '/stream-subscription', 'recommended', ['flutter_study_learning', 'module_registry', 'go_router']], - ['async', 'isolate_basic', '/isolate-basic', 'ready', ['flutter_study_learning', 'module_registry', 'go_router']], - ['async', 'isolate_task_manager', '/isolate-stream', 'ready', ['flutter_study_learning', 'module_registry']], - ['state', 'status_management', '/status-management', 'recommended', ['flutter_study_learning', 'provider', 'flutter_riverpod', 'flutter_bloc', 'module_registry', 'go_router']], - ['state', 'flutter_ioc', '/flutter-ioc', 'ready', ['flutter_study_learning', 'flutter_ioc_core', 'provider', 'module_registry']], - ['ui', 'gcode_visualizer', '/gcode-visualizer', 'ready', ['flutter_study_learning', 'gcode_core', 'file_picker_bridge', 'module_registry']], - ['ui', 'adsorption_line', '/adsorption-line', 'ready', ['flutter_study_learning', 'provider', 'module_registry']], - ['ui', 'download_animation', '/download-animation', 'ready', ['flutter_study_learning', 'module_registry', 'go_router']], - ['ui', 'font_picker', '/font-picker', 'ready', ['flutter_study_learning', 'file_picker_bridge', 'module_registry', 'go_router']], - ['popup_table', 'popup_widgets', '/popup-widgets', 'ready', ['flutter_study_learning', 'module_registry']], - ['popup_table', 'popup_list_interaction', '/popup-list-interaction', 'ready', ['flutter_study_learning', 'module_registry', 'go_router']], - ['popup_table', 'scroll_table', '/scroll-table', 'ready', ['flutter_study_learning', 'two_dimensional_scrollables', 'module_registry']], - ['popup_table', 'overlay_follow_compare', '/overlay-compare', 'ready', ['flutter_study_learning', 'module_registry']], - ['platform', 'dio_interceptor', '/dio-interceptor', 'ready', ['flutter_study_learning', 'dio', 'module_registry', 'go_router']], - ['platform', 'usb_detector', '/usb-detector', 'ready', ['flutter_study_learning', 'usb_serial', 'device_info_plus', 'module_registry']], - ['platform', 'file_picker', '/file-picker', 'ready', ['flutter_study_learning', 'file_picker_bridge', 'module_registry']], - ['platform', 'online_video_player', '/online-video-player', 'ready', ['flutter_study_learning', 'video_player', 'module_registry']], + { + category: 'basic', + id: 'tree_state', + route: '/tree-state', + status: 'recommended', + depends: ['flutter_study_learning', 'module_registry', 'go_router'], + title: '三棵树与生命周期', + subtitle: '理解 Widget/Element/RenderObject 的关系与重建机制', + difficulty: 'beginner', + concepts: ['Widget 树', 'Element 树', 'RenderObject', '生命周期'], + estimatedMinutes: 30, + entry: 'TreeStateEntry', + routes: 'TreeStateRoutes', + }, + { + category: 'basic', + id: 'microtask', + route: '/microtask', + status: 'recommended', + depends: ['flutter_study_learning', 'module_registry', 'go_router'], + title: '事件循环与微任务', + subtitle: '掌握 Dart 事件循环中微任务队列与事件队列的执行顺序', + difficulty: 'beginner', + concepts: ['Microtask', 'Event Queue', 'async/await', 'Zone'], + estimatedMinutes: 25, + entry: 'MicrotaskEntry', + routes: 'MicrotaskRoutes', + }, + { + category: 'basic', + id: 'debounce_throttle', + route: '/debounce-throttle', + status: 'ready', + depends: ['flutter_study_learning', 'module_registry'], + title: '防抖与节流', + subtitle: '对比防抖和节流的执行时序,理解适用场景', + difficulty: 'beginner', + concepts: ['Debouncer', 'Throttle', 'Timer'], + estimatedMinutes: 15, + entry: 'DebounceThrottleEntry', + }, + { + category: 'async', + id: 'stream_subscription', + route: '/stream-subscription', + status: 'recommended', + depends: ['flutter_study_learning', 'module_registry', 'go_router'], + title: 'Stream 订阅机制', + subtitle: '学习单订阅流与广播流的区别及使用场景', + difficulty: 'intermediate', + concepts: ['StreamController', '单订阅', '广播流', 'Stream 变换'], + estimatedMinutes: 30, + entry: 'StreamSubscriptionEntry', + routes: 'StreamSubscriptionRoutes', + }, + { + category: 'async', + id: 'isolate_basic', + route: '/isolate-basic', + status: 'ready', + depends: ['flutter_study_learning', 'module_registry', 'go_router'], + title: 'Isolate 并发对比', + subtitle: '对比主线程与 Isolate 执行耗时计算对 UI 流畅度的影响', + difficulty: 'intermediate', + concepts: ['Isolate', 'SendPort', 'ReceivePort', '性能优化'], + estimatedMinutes: 20, + entry: 'IsolateTestEntry', + routes: 'IsolateTestRoutes', + }, + { + category: 'async', + id: 'isolate_task_manager', + route: '/isolate-stream', + status: 'ready', + depends: ['flutter_study_learning', 'module_registry'], + title: '多任务 Isolate 管理器', + subtitle: '使用 Isolate 并行处理多任务,通过 Stream 实时上报进度', + difficulty: 'advanced', + concepts: ['Isolate.spawn', '多任务', '进度上报', '暂停/恢复'], + estimatedMinutes: 35, + entry: 'IsolateStreamEntry', + }, + { + category: 'state', + id: 'status_management', + route: '/status-management', + status: 'recommended', + depends: ['flutter_study_learning', 'provider', 'flutter_riverpod', 'flutter_bloc', 'module_registry', 'go_router'], + title: '状态管理演进', + subtitle: '串联 setState、Provider、Riverpod、Bloc,对比不同方案', + difficulty: 'intermediate', + concepts: ['Provider', 'Riverpod', 'Bloc', '状态提升', 'FutureProvider'], + estimatedMinutes: 45, + entry: 'StatusManageEntry', + routes: 'StatusManagementRoutes', + subRoutesExpander: true, + }, + { + category: 'state', + id: 'flutter_ioc', + route: '/flutter-ioc', + status: 'ready', + depends: ['flutter_study_learning', 'flutter_ioc_core', 'provider', 'module_registry'], + title: 'Flutter IoC 容器', + subtitle: '自研 IoC 容器实现,支持单例/瞬态/作用域生命周期', + difficulty: 'advanced', + concepts: ['IoC', '依赖注入', '生命周期', '作用域'], + estimatedMinutes: 30, + entry: 'FlutterIocEntry', + }, + { + category: 'ui', + id: 'gcode_visualizer', + route: '/gcode-visualizer', + status: 'ready', + depends: ['flutter_study_learning', 'gcode_core', 'file_picker_bridge', 'module_registry'], + title: 'G-code 解析与轨迹动画', + subtitle: '解析 G-code 指令,绘制刀路轨迹并用动画展示执行过程', + difficulty: 'advanced', + concepts: ['G-code', 'Parser', 'CustomPaint', 'PathMetric', '动画控制'], + estimatedMinutes: 45, + entry: 'GcodeVisualizerEntry', + }, + { + category: 'ui', + id: 'adsorption_line', + route: '/adsorption-line', + status: 'ready', + depends: ['flutter_study_learning', 'provider', 'module_registry'], + title: '智能吸附线画板', + subtitle: '类似设计工具的对齐吸附功能,学习自定义绘制与手势', + difficulty: 'advanced', + concepts: ['CustomPaint', '手势检测', '吸附算法', '状态管理'], + estimatedMinutes: 40, + entry: 'AdsorptionLineEntry', + }, + { + category: 'ui', + id: 'download_animation', + route: '/download-animation', + status: 'ready', + depends: ['flutter_study_learning', 'module_registry', 'go_router'], + title: '下载飞入动效', + subtitle: '三种实现方式对比:Custom View / CustomPaint / Overlay', + difficulty: 'intermediate', + concepts: ['Tween 动画', 'CustomPaint', 'OverlayEntry', '动画配置'], + estimatedMinutes: 30, + entry: 'DownloadAnimationEntry', + routes: 'DownloadAnimationRoutes', + }, + { + category: 'ui', + id: 'font_picker', + route: '/font-picker', + status: 'ready', + depends: ['flutter_study_learning', 'file_picker_bridge', 'module_registry', 'go_router'], + title: '字体选择器', + subtitle: '命名列表中直观对比不同字体族与字重样式,并通过文件选择器加载本地字体', + difficulty: 'intermediate', + concepts: ['fontFamily', 'TextStyle', '字重', '字距', '字体 fallback', '平台字体', 'FontLoader', '中台复用'], + estimatedMinutes: 30, + entry: 'FontPickerEntry', + routes: 'FontPickerRoutes', + }, + { + category: 'popup_table', + id: 'popup_widgets', + route: '/popup-widgets', + status: 'ready', + depends: ['flutter_study_learning', 'module_registry'], + title: '弹窗合集', + subtitle: '全面展示 Flutter 中的对话框、底部抽屉、菜单等弹窗类型', + difficulty: 'beginner', + concepts: ['AlertDialog', 'BottomSheet', 'Overlay', 'ContextMenu'], + estimatedMinutes: 20, + entry: 'PopWidgetEntry', + }, + { + category: 'popup_table', + id: 'popup_list_interaction', + route: '/popup-list-interaction', + status: 'ready', + depends: ['flutter_study_learning', 'module_registry', 'go_router'], + title: '弹窗与列表交互', + subtitle: 'Flutter 弹窗组件与二维滚动表格的综合演示', + difficulty: 'beginner', + concepts: ['Dialog', 'BottomSheet', 'Overlay', 'TableView', '二维滚动'], + estimatedMinutes: 25, + entry: 'PopupListInteractionEntry', + routes: 'PopupListInteractionRoutes', + }, + { + category: 'popup_table', + id: 'scroll_table', + route: '/scroll-table', + status: 'ready', + depends: ['flutter_study_learning', 'two_dimensional_scrollables', 'module_registry'], + title: '二维滚动表格', + subtitle: '使用 two_dimensional_scrollables 实现固定表头的表格', + difficulty: 'beginner', + concepts: ['TableView', '固定表头', '二维滚动'], + estimatedMinutes: 15, + entry: 'ScrollTableEntry', + }, + { + category: 'popup_table', + id: 'overlay_follow_compare', + route: '/overlay-compare', + status: 'ready', + depends: ['flutter_study_learning', 'module_registry'], + title: 'Overlay 跟随方案对照组', + subtitle: '对比 CompositedTransformFollower 与 markNeedsBuild 两种浮层跟随方案', + difficulty: 'intermediate', + concepts: ['Overlay', 'LayerLink', 'CompositedTransformFollower', 'markNeedsBuild', 'ScrollController'], + estimatedMinutes: 30, + entry: 'OverlayFollowCompareEntry', + }, + { + category: 'platform', + id: 'dio_interceptor', + route: '/dio-interceptor', + status: 'ready', + depends: ['flutter_study_learning', 'dio', 'module_registry', 'go_router'], + title: 'Dio 拦截器链路', + subtitle: 'Auth/Error/Retry/Log 拦截器 + 本地 Mock Server 实战', + difficulty: 'intermediate', + concepts: ['Dio', '拦截器', 'Token 刷新', 'Mock Server', '重试机制'], + estimatedMinutes: 35, + entry: 'InterceptorTestEntry', + routes: 'InterceptorTestRoutes', + }, + { + category: 'platform', + id: 'usb_detector', + route: '/usb-detector', + status: 'ready', + depends: ['flutter_study_learning', 'usb_serial', 'device_info_plus', 'module_registry'], + title: 'USB 设备检测', + subtitle: '跨平台 USB 设备检测与状态监控', + difficulty: 'intermediate', + concepts: ['usb_serial', 'device_info_plus', 'Stream 广播', '设备扫描'], + estimatedMinutes: 25, + entry: 'UsbDetectorEntry', + }, + { + category: 'platform', + id: 'file_picker', + route: '/file-picker', + status: 'ready', + depends: ['flutter_study_learning', 'file_picker_bridge', 'module_registry'], + title: '文件选择器', + subtitle: '复用 file_picker_bridge 中台能力,演示扩展过滤、取消分支与平台差异', + difficulty: 'intermediate', + concepts: ['FilePickerService', 'MethodChannel', '平台桥接', '扩展名过滤', '取消分支'], + estimatedMinutes: 20, + entry: 'FilePickerEntry', + }, + { + category: 'platform', + id: 'online_video_player', + route: '/online-video-player', + status: 'ready', + depends: ['flutter_study_learning', 'video_player', 'module_registry'], + title: '在线视频播放', + subtitle: '使用 video_player 播放在线 HTTP 视频流并操控播放参数', + difficulty: 'intermediate', + concepts: ['video_player', '平台播放器', 'HTTP 流', '播放控制', '倍速', 'Controller 生命周期'], + estimatedMinutes: 35, + entry: 'OnlineVideoPlayerEntry', + }, +]; + +const categoryComments = { + basic: '基础机制', + async: '异步并发', + state: '状态管理', + ui: 'UI 与动效', + popup_table: '弹窗与列表', + platform: '网络与平台', +}; + +const categoryEnumNames = { + basic: 'basic', + async: 'async', + state: 'state', + ui: 'ui', + popup_table: 'popupTable', + platform: 'platform', +}; + +const routeTableImportOrder = [ + ['basic', 'debounce_throttle'], + ['basic', 'microtask'], + ['basic', 'microtask', 'routes'], + ['basic', 'tree_state'], + ['basic', 'tree_state', 'routes', 'gap'], + ['async', 'isolate_basic'], + ['async', 'isolate_basic', 'routes'], + ['async', 'isolate_task_manager'], + ['async', 'stream_subscription'], + ['async', 'stream_subscription', 'routes', 'gap'], + ['state', 'flutter_ioc'], + ['state', 'status_management', 'routes', 'gap'], + ['state', 'status_management'], + ['ui', 'adsorption_line'], + ['ui', 'download_animation'], + ['ui', 'download_animation', 'routes'], + ['ui', 'font_picker'], + ['ui', 'font_picker', 'routes'], + ['ui', 'gcode_visualizer'], + ['popup_table', 'popup_widgets'], + ['popup_table', 'popup_list_interaction'], + ['popup_table', 'popup_list_interaction', 'routes'], + ['popup_table', 'scroll_table'], + ['popup_table', 'overlay_follow_compare', 'entry', 'gap'], + ['platform', 'dio_interceptor'], + ['platform', 'dio_interceptor', 'routes'], + ['platform', 'file_picker'], + ['platform', 'online_video_player'], + ['platform', 'usb_detector'], ]; const categoryMeta = { @@ -367,18 +667,118 @@ function writeModuleIndex() { schema: 'flutter_forge.agent_docs.module_index.v1', registry: 'lib/app/router/app_route_table.dart', count: modules.length, - modules: modules.map(([category, module, route, status, depends]) => ({ - id: module, + modules: modules.map(({ category, id, route, status, depends }) => ({ + id, category, - path: `lib/modules/${category}/${module}`, + path: `lib/modules/${category}/${id}`, route, status, depends, - analysis: `lib/modules/${category}/${module}/AI_ANALYSIS.md`, + analysis: `lib/modules/${category}/${id}/AI_ANALYSIS.md`, })), }); } +function conceptsLiteral(concepts) { + const items = concepts.map((item) => ` '${item}',`).join('\n'); + return `[\n${items}\n ]`; +} + +function writeRouteTable() { + const file = path.join(appRoot, 'lib/app/router/app_route_table.dart'); + const lines = []; + + lines.push('// GENERATED by tool/generate_agent_indexes.js - DO NOT EDIT'); + lines.push(''); + lines.push("import 'package:go_router/go_router.dart';"); + lines.push(''); + lines.push("import '../module_home_page.dart';"); + lines.push("import '../../module_registry/module_category.dart';"); + lines.push("import '../../module_registry/module_entry.dart';"); + + const emittedImports = new Set(); + for (const [category, id, kind, gap] of routeTableImportOrder) { + if (!modules.some((m) => m.category === category && m.id === id)) continue; + const fileName = kind === 'routes' ? 'module_routes.dart' : 'module_entry.dart'; + lines.push(`import '../../modules/${category}/${id}/${fileName}';`); + emittedImports.add(`${category}/${id}/${fileName}`); + if (gap === 'gap') lines.push(''); + } + for (const m of modules) { + for (const fileName of ['module_entry.dart', m.routes ? 'module_routes.dart' : null].filter(Boolean)) { + if (emittedImports.has(`${m.category}/${m.id}/${fileName}`)) continue; + lines.push(`import '../../modules/${m.category}/${m.id}/${fileName}';`); + } + } + + lines.push(''); + if (modules.some((m) => m.subRoutesExpander)) { + lines.push('// ==================== 状态管理子路由(模块内部已定义映射) ===================='); + lines.push(''); + lines.push('List _buildStatusManageRoutes() => StatusManagementRoutes'); + lines.push(' .routes'); + lines.push(' .entries'); + lines.push(' .map('); + lines.push(' (entry) => GoRoute('); + lines.push(" path: entry.key.startsWith('/') ? entry.key.substring(1) : entry.key,"); + lines.push(' builder: (context, state) => entry.value(context),'); + lines.push(' ),'); + lines.push(' )'); + lines.push(' .toList();'); + lines.push(''); + } + lines.push('// ==================== 模块注册 ===================='); + lines.push(''); + lines.push('final List _modules = ['); + let previousCategory = null; + for (const m of modules) { + if (m.category !== previousCategory) { + if (previousCategory !== null) lines.push(''); + lines.push(` // ${categoryComments[m.category]}`); + previousCategory = m.category; + } + lines.push(' ModuleEntry('); + lines.push(` title: '${m.title}',`); + lines.push(` path: '${m.route}',`); + lines.push(` subtitle: '${m.subtitle}',`); + lines.push(` category: ModuleCategory.${categoryEnumNames[m.category]},`); + lines.push(` difficulty: Difficulty.${m.difficulty},`); + lines.push(` concepts: ${conceptsLiteral(m.concepts)},`); + lines.push(` estimatedMinutes: ${m.estimatedMinutes},`); + lines.push(` status: ModuleStatus.${m.status},`); + lines.push(` builder: (context) => const ${m.entry}(),`); + if (m.subRoutesExpander) { + lines.push(' routes: _buildStatusManageRoutes(),'); + } else if (m.routes) { + lines.push(` routes: ${m.routes}.routes,`); + } + lines.push(' ),'); + } + lines.push('];'); + lines.push(''); + lines.push('final List _routes = ['); + lines.push(' GoRoute('); + lines.push(" path: '/',"); + lines.push(' builder: (context, state) => ModuleHomePage(modules: _modules),'); + lines.push(' ),'); + lines.push(' for (final module in _modules)'); + lines.push(' GoRoute('); + lines.push(' path: module.path,'); + lines.push(' builder: (context, state) => module.builder(context),'); + lines.push(' routes: module.routes,'); + lines.push(' ),'); + lines.push('];'); + lines.push(''); + lines.push('class AppRouteTable {'); + lines.push(' static List get routes => _routes;'); + lines.push(' static List get modules => _modules;'); + lines.push('}'); + lines.push(''); + + fs.mkdirSync(path.dirname(file), { recursive: true }); + fs.writeFileSync(file, lines.join('\n')); +} + function writeRootIndexes() { writeIndex({ rel: 'AI_ANALYSIS.md', @@ -493,7 +893,7 @@ function writeModuleIndexes() { } function writeModuleContracts() { - for (const [category, module, route, status, depends] of modules) { + for (const { category, id: module, route, status, depends } of modules) { const dir = path.join(appRoot, 'lib/modules', category, module); const entrypoints = []; for (const item of ['module_entry.dart', 'module_root.dart', 'module_routes.dart']) { @@ -559,6 +959,7 @@ writeSchema(); writeProjectContext(); writeRefactorPlan(); writeModuleIndex(); +writeRouteTable(); writeRootIndexes(); writeLayerIndexes(); writeModuleIndexes(); diff --git a/tool/validate_agent_docs.js b/tool/validate_agent_docs.js index 293bc32..0d71c6c 100644 --- a/tool/validate_agent_docs.js +++ b/tool/validate_agent_docs.js @@ -229,6 +229,50 @@ if (moduleIndex) { } } } + + // ── phase 5b: single-source consistency — generate source vs index vs route table ── + + function readGenerateSourceModules() { + const source = fs.readFileSync(path.join(root, 'tool/generate_agent_indexes.js'), 'utf8'); + const start = source.indexOf('const modules = ['); + if (start === -1) return []; + const end = source.indexOf('];', start); + const block = source.slice(start, end); + const result = []; + const re = /\{\s*category:\s*'([a-z0-9_]+)'\s*,\s*id:\s*'([a-z0-9_]+)'\s*,\s*route:\s*'([^']+)'\s*,\s*status:\s*'([a-z_]+)'/g; + let match; + while ((match = re.exec(block))) { + result.push({ category: match[1], id: match[2], route: match[3], status: match[4] }); + } + return result; + } + + const generateModules = readGenerateSourceModules(); + const generateById = new Map(generateModules.map((m) => [m.id, m])); + const routeTableContent = fileExists('lib/app/router/app_route_table.dart') + ? fs.readFileSync(resolveProjectPath('lib/app/router/app_route_table.dart'), 'utf8') + : ''; + + for (const mod of moduleIndex.modules ?? []) { + const gen = generateById.get(mod.id); + if (!gen) { + failures.push(`generate source:missing_module:${mod.id} — not in tool/generate_agent_indexes.js`); + continue; + } + for (const key of ['category', 'route', 'status']) { + if (gen[key] !== mod[key]) { + failures.push(`generate source:${mod.id}:mismatch:${key} index=${mod[key]} source=${gen[key]}`); + } + } + if (routeTableContent && !routeTableContent.includes(`path: '${mod.route}'`)) { + failures.push(`app_route_table.dart:missing_module_path:${mod.route}`); + } + } + for (const gen of generateModules) { + if (!ids.has(gen.id)) { + failures.push(`generate source:orphan_module:${gen.id} — registered but missing from lib/AI_MODULE_INDEX.md`); + } + } } // ── phase 6: workspace package contract validation ───────────────── From bf58017077b4a890e05ef8d06fd7089b8f8483d4 Mon Sep 17 00:00:00 2001 From: lizy Date: Sat, 22 Aug 2026 15:01:11 +0800 Subject: [PATCH 14/17] fix(dio): handle transformTimeout and align dio to 5.11.0 dio 5.11.0 adds DioExceptionType.transformTimeout, making the error interceptor switch non-exhaustive. Local lock pinned 5.9.2 so the error only surfaced on remote/CI packaging. Add the explicit case and bump the constraint to ^5.11.0 so local == remote (no version-drift landmine). Unit test asserts every DioExceptionType value, including transformTimeout, is forwarded. --- .../interceptor/error_interceptor.dart | 3 ++ apps/flutter_forge/pubspec.yaml | 2 +- .../error_interceptor_test.dart | 44 +++++++++++++++++++ pubspec.lock | 4 +- 4 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 apps/flutter_forge/test/modules/platform/dio_interceptor/error_interceptor_test.dart diff --git a/apps/flutter_forge/lib/modules/platform/dio_interceptor/network/interceptor/error_interceptor.dart b/apps/flutter_forge/lib/modules/platform/dio_interceptor/network/interceptor/error_interceptor.dart index 3c1722c..e150e05 100644 --- a/apps/flutter_forge/lib/modules/platform/dio_interceptor/network/interceptor/error_interceptor.dart +++ b/apps/flutter_forge/lib/modules/platform/dio_interceptor/network/interceptor/error_interceptor.dart @@ -21,6 +21,9 @@ class ErrorInterceptor extends Interceptor { case DioExceptionType.receiveTimeout: errorMessage = "响应超时"; break; + case DioExceptionType.transformTimeout: + errorMessage = "数据转换超时"; + break; case DioExceptionType.badResponse: // 服务器返回的错误信息 final int? statusCode = err.response?.statusCode; diff --git a/apps/flutter_forge/pubspec.yaml b/apps/flutter_forge/pubspec.yaml index 3cd4282..0789b62 100644 --- a/apps/flutter_forge/pubspec.yaml +++ b/apps/flutter_forge/pubspec.yaml @@ -24,7 +24,7 @@ dependencies: flutter_riverpod: ^2.5.1 flutter_bloc: ^8.1.3 equatable: ^2.0.5 - dio: ^5.8.0+1 + dio: ^5.11.0 collection: ^1.18.0 flutter_svg: ^2.0.10+1 two_dimensional_scrollables: ^0.3.0 diff --git a/apps/flutter_forge/test/modules/platform/dio_interceptor/error_interceptor_test.dart b/apps/flutter_forge/test/modules/platform/dio_interceptor/error_interceptor_test.dart new file mode 100644 index 0000000..eabc8d4 --- /dev/null +++ b/apps/flutter_forge/test/modules/platform/dio_interceptor/error_interceptor_test.dart @@ -0,0 +1,44 @@ +import 'package:dio/dio.dart'; +import 'package:flutter_forge_app/modules/platform/dio_interceptor/network/interceptor/error_interceptor.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + group('ErrorInterceptor', () { + final interceptor = ErrorInterceptor(); + + test('transformTimeout is handled and forwarded without error', () { + final handler = _RecordingErrorHandler(); + final exception = DioException( + type: DioExceptionType.transformTimeout, + requestOptions: RequestOptions(path: '/x'), + ); + + interceptor.onError(exception, handler); + + expect(handler.passed, same(exception)); + }); + + test('every DioExceptionType value is forwarded without error', () { + for (final type in DioExceptionType.values) { + final handler = _RecordingErrorHandler(); + final exception = DioException( + type: type, + requestOptions: RequestOptions(path: '/x'), + ); + + interceptor.onError(exception, handler); + + expect(handler.passed, same(exception), reason: 'type=$type'); + } + }); + }); +} + +class _RecordingErrorHandler extends ErrorInterceptorHandler { + DioException? passed; + + @override + void next(DioException error) { + passed = error; + } +} diff --git a/pubspec.lock b/pubspec.lock index c103c5c..fa897e1 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -125,10 +125,10 @@ packages: dependency: transitive description: name: dio - sha256: aff32c08f92787a557dd5c0145ac91536481831a01b4648136373cddb0e64f8c + sha256: "0df44ebba85e503958eb75d07eedd3c86275a58c1d3eda2f2ce8f0a2c3abbb3c" url: "https://pub.flutter-io.cn" source: hosted - version: "5.9.2" + version: "5.11.0" dio_web_adapter: dependency: transitive description: From c1811a618ebaf6a98314c280d2b9291f9592b230 Mon Sep 17 00:00:00 2001 From: lizy Date: Sat, 22 Aug 2026 15:01:18 +0800 Subject: [PATCH 15/17] style: apply dart fix const/final cleanup Run dart fix --apply in apps/flutter_forge to clear the 192 info-level diagnostics (prefer_const_constructors, prefer_const_literals_to_create_immutables, prefer_final_fields) that made bare flutter analyze exit non-zero. Manually migrate ReorderableListView onReorder -> onReorderItem and drop the now-redundant newIndex adjustment (the new callback pre-adjusts for the removed item). No behavior or layout changes. --- .../lib/modules/async/isolate_basic/with_isolate_page.dart | 2 +- .../lib/modules/async/isolate_basic/without_isolate_page.dart | 2 +- .../async/stream_subscription/pages/broadcast_demo_page.dart | 4 ++-- .../modules/async/stream_subscription/pages/home_page.dart | 2 +- .../modules/basic/microtask/pages/advanced_examples_page.dart | 4 ++-- .../lib/modules/basic/microtask/pages/event_queue_page.dart | 4 ++-- .../lib/modules/basic/microtask/pages/home_page.dart | 2 +- .../modules/basic/microtask/pages/microtask_queue_page.dart | 4 ++-- .../basic/tree_state/pages/repaint_boundary_demo_page.dart | 4 ++-- .../lib/modules/platform/dio_interceptor/pages/home_page.dart | 2 +- .../modules/platform/dio_interceptor/pages/login_page.dart | 2 +- .../popup_table/popup_widgets/widgets/bottom_sheet_demo.dart | 3 +-- .../lib/modules/popup_table/scroll_table/module_root.dart | 2 +- .../lib/modules/state/flutter_ioc/module_root.dart | 2 +- .../state/status_management/pages/bloc/bloc_route.dart | 2 +- .../lib/modules/state/status_management/pages/home_page.dart | 2 +- .../pages/provider/provider_future_route.dart | 2 +- .../pages/provider/provider_lifting_route.dart | 4 ++-- .../status_management/pages/provider/provider_route.dart | 2 +- .../status_management/pages/provider/provider_todo_route.dart | 2 +- .../pages/riverpod/riverpod_future_route.dart | 2 +- .../pages/riverpod/riverpod_lifting_route.dart | 4 ++-- .../status_management/pages/riverpod/riverpod_route.dart | 2 +- .../status_management/pages/riverpod/riverpod_todo_route.dart | 2 +- 24 files changed, 31 insertions(+), 32 deletions(-) diff --git a/apps/flutter_forge/lib/modules/async/isolate_basic/with_isolate_page.dart b/apps/flutter_forge/lib/modules/async/isolate_basic/with_isolate_page.dart index 3b6061a..a7fc8e2 100644 --- a/apps/flutter_forge/lib/modules/async/isolate_basic/with_isolate_page.dart +++ b/apps/flutter_forge/lib/modules/async/isolate_basic/with_isolate_page.dart @@ -118,7 +118,7 @@ class _WithIsolatePageState extends State ), ), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '理解 Isolate 在 Flutter 中的工作原理', diff --git a/apps/flutter_forge/lib/modules/async/isolate_basic/without_isolate_page.dart b/apps/flutter_forge/lib/modules/async/isolate_basic/without_isolate_page.dart index a71cd73..9802625 100644 --- a/apps/flutter_forge/lib/modules/async/isolate_basic/without_isolate_page.dart +++ b/apps/flutter_forge/lib/modules/async/isolate_basic/without_isolate_page.dart @@ -117,7 +117,7 @@ class _WithoutIsolatePageState extends State ), ), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '理解主 Isolate 被阻塞时界面卡顿的原理', diff --git a/apps/flutter_forge/lib/modules/async/stream_subscription/pages/broadcast_demo_page.dart b/apps/flutter_forge/lib/modules/async/stream_subscription/pages/broadcast_demo_page.dart index 45a281d..38d05cd 100644 --- a/apps/flutter_forge/lib/modules/async/stream_subscription/pages/broadcast_demo_page.dart +++ b/apps/flutter_forge/lib/modules/async/stream_subscription/pages/broadcast_demo_page.dart @@ -157,7 +157,7 @@ class _BroadcastDemoPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( + const Text( '控制面板', style: TextStyle( fontSize: 18, @@ -305,7 +305,7 @@ class _BroadcastDemoPageState extends State { ], ), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '理解广播 Stream 的多订阅者特性', diff --git a/apps/flutter_forge/lib/modules/async/stream_subscription/pages/home_page.dart b/apps/flutter_forge/lib/modules/async/stream_subscription/pages/home_page.dart index 601aa44..33ccf5b 100644 --- a/apps/flutter_forge/lib/modules/async/stream_subscription/pages/home_page.dart +++ b/apps/flutter_forge/lib/modules/async/stream_subscription/pages/home_page.dart @@ -49,7 +49,7 @@ class HomePage extends StatelessWidget { ], ), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '理解 Flutter Stream 的概念与工作原理', diff --git a/apps/flutter_forge/lib/modules/basic/microtask/pages/advanced_examples_page.dart b/apps/flutter_forge/lib/modules/basic/microtask/pages/advanced_examples_page.dart index 51f02a9..36c89e6 100644 --- a/apps/flutter_forge/lib/modules/basic/microtask/pages/advanced_examples_page.dart +++ b/apps/flutter_forge/lib/modules/basic/microtask/pages/advanced_examples_page.dart @@ -17,7 +17,7 @@ class _AdvancedExamplesPageState extends State final List _logs = []; bool _isRunning = false; final ScrollController _scrollController = ScrollController(); - bool _showTimestamps = true; + final bool _showTimestamps = true; late TabController _tabController; final Map _codeExamples = { @@ -266,7 +266,7 @@ runZoned(() { ], ), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '理解 async/await 背后的微任务调度机制', diff --git a/apps/flutter_forge/lib/modules/basic/microtask/pages/event_queue_page.dart b/apps/flutter_forge/lib/modules/basic/microtask/pages/event_queue_page.dart index 4c7c739..cd175cd 100644 --- a/apps/flutter_forge/lib/modules/basic/microtask/pages/event_queue_page.dart +++ b/apps/flutter_forge/lib/modules/basic/microtask/pages/event_queue_page.dart @@ -16,7 +16,7 @@ class _EventQueuePageState extends State { final List _logs = []; bool _isRunning = false; final ScrollController _scrollController = ScrollController(); - bool _showTimestamps = true; + final bool _showTimestamps = true; @override void dispose() { @@ -157,7 +157,7 @@ Timer.run(() { print('Timer事件队列任务执行'); });''', ], ), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '理解事件队列 (Event Queue) 的工作原理', diff --git a/apps/flutter_forge/lib/modules/basic/microtask/pages/home_page.dart b/apps/flutter_forge/lib/modules/basic/microtask/pages/home_page.dart index ba50b59..6e8cfa6 100644 --- a/apps/flutter_forge/lib/modules/basic/microtask/pages/home_page.dart +++ b/apps/flutter_forge/lib/modules/basic/microtask/pages/home_page.dart @@ -54,7 +54,7 @@ class HomePage extends StatelessWidget { ], ), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '理解 Flutter 事件循环 (Event Loop) 的运作机制', diff --git a/apps/flutter_forge/lib/modules/basic/microtask/pages/microtask_queue_page.dart b/apps/flutter_forge/lib/modules/basic/microtask/pages/microtask_queue_page.dart index dc0e55d..95fc702 100644 --- a/apps/flutter_forge/lib/modules/basic/microtask/pages/microtask_queue_page.dart +++ b/apps/flutter_forge/lib/modules/basic/microtask/pages/microtask_queue_page.dart @@ -16,7 +16,7 @@ class _MicrotaskQueuePageState extends State { final List _logs = []; bool _isRunning = false; final ScrollController _scrollController = ScrollController(); - bool _showTimestamps = true; + final bool _showTimestamps = true; @override void dispose() { @@ -174,7 +174,7 @@ Future(() { print('事件任务执行'); }) ], ), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '理解微任务队列 (Microtask Queue) 的优先级特性', diff --git a/apps/flutter_forge/lib/modules/basic/tree_state/pages/repaint_boundary_demo_page.dart b/apps/flutter_forge/lib/modules/basic/tree_state/pages/repaint_boundary_demo_page.dart index 6d36201..509f83d 100644 --- a/apps/flutter_forge/lib/modules/basic/tree_state/pages/repaint_boundary_demo_page.dart +++ b/apps/flutter_forge/lib/modules/basic/tree_state/pages/repaint_boundary_demo_page.dart @@ -40,9 +40,9 @@ class _RepaintBoundaryDemoPageState extends State { Expanded( child: _buildSection( label: '无 RepaintBoundary', - child: CustomPaint( + child: const CustomPaint( painter: NoBoundaryPainter(), - child: const SizedBox.expand(), + child: SizedBox.expand(), ), ), ), diff --git a/apps/flutter_forge/lib/modules/platform/dio_interceptor/pages/home_page.dart b/apps/flutter_forge/lib/modules/platform/dio_interceptor/pages/home_page.dart index df7b1b9..033b384 100644 --- a/apps/flutter_forge/lib/modules/platform/dio_interceptor/pages/home_page.dart +++ b/apps/flutter_forge/lib/modules/platform/dio_interceptor/pages/home_page.dart @@ -137,7 +137,7 @@ class _HomePageState extends State { ], ), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '理解 Dio 拦截器的工作原理和链路机制', diff --git a/apps/flutter_forge/lib/modules/platform/dio_interceptor/pages/login_page.dart b/apps/flutter_forge/lib/modules/platform/dio_interceptor/pages/login_page.dart index e056f4c..d3f7542 100644 --- a/apps/flutter_forge/lib/modules/platform/dio_interceptor/pages/login_page.dart +++ b/apps/flutter_forge/lib/modules/platform/dio_interceptor/pages/login_page.dart @@ -127,7 +127,7 @@ class _LoginPageState extends State { ), ), ), - sections: [ + sections: const [ LearningObjectives( objectives: ['理解 Token 认证流程及拦截器自动注入机制', '掌握 AuthInterceptor 的实现与使用'], ), diff --git a/apps/flutter_forge/lib/modules/popup_table/popup_widgets/widgets/bottom_sheet_demo.dart b/apps/flutter_forge/lib/modules/popup_table/popup_widgets/widgets/bottom_sheet_demo.dart index abe3de2..4dcc7b5 100644 --- a/apps/flutter_forge/lib/modules/popup_table/popup_widgets/widgets/bottom_sheet_demo.dart +++ b/apps/flutter_forge/lib/modules/popup_table/popup_widgets/widgets/bottom_sheet_demo.dart @@ -163,7 +163,6 @@ class _OverlayOrderEditorState extends State { } void _reorder(List ids, int oldIndex, int newIndex) { - if (newIndex > oldIndex) newIndex--; final item = ids.removeAt(oldIndex); ids.insert(newIndex, item); } @@ -186,7 +185,7 @@ class _OrderList extends StatelessWidget { shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), buildDefaultDragHandles: true, - onReorder: onReorder, + onReorderItem: onReorder, children: [ for (final id in ids) ListTile( diff --git a/apps/flutter_forge/lib/modules/popup_table/scroll_table/module_root.dart b/apps/flutter_forge/lib/modules/popup_table/scroll_table/module_root.dart index cf06bc6..f32644f 100644 --- a/apps/flutter_forge/lib/modules/popup_table/scroll_table/module_root.dart +++ b/apps/flutter_forge/lib/modules/popup_table/scroll_table/module_root.dart @@ -37,7 +37,7 @@ class ScrollTableDemo extends StatelessWidget { ], ), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '掌握二维滚动表格的基本使用方式', diff --git a/apps/flutter_forge/lib/modules/state/flutter_ioc/module_root.dart b/apps/flutter_forge/lib/modules/state/flutter_ioc/module_root.dart index 89c46fc..11d42b2 100644 --- a/apps/flutter_forge/lib/modules/state/flutter_ioc/module_root.dart +++ b/apps/flutter_forge/lib/modules/state/flutter_ioc/module_root.dart @@ -46,7 +46,7 @@ class CounterScreen extends StatelessWidget { ), ), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '理解 IoC 容器与依赖注入的基本概念', diff --git a/apps/flutter_forge/lib/modules/state/status_management/pages/bloc/bloc_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/bloc/bloc_route.dart index 9a2e181..99a5ae1 100644 --- a/apps/flutter_forge/lib/modules/state/status_management/pages/bloc/bloc_route.dart +++ b/apps/flutter_forge/lib/modules/state/status_management/pages/bloc/bloc_route.dart @@ -33,7 +33,7 @@ class BlocRoute extends StatelessWidget { onAdd: () => bloc.add(IncrementPressed()), onReset: () => bloc.add(ResetPressed()), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '理解 Bloc 的事件驱动状态管理机制', diff --git a/apps/flutter_forge/lib/modules/state/status_management/pages/home_page.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/home_page.dart index aaf09e5..07c67ce 100644 --- a/apps/flutter_forge/lib/modules/state/status_management/pages/home_page.dart +++ b/apps/flutter_forge/lib/modules/state/status_management/pages/home_page.dart @@ -111,7 +111,7 @@ class StateFlowHome extends StatelessWidget { ], ), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '理解三大状态管理框架的核心机制', diff --git a/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_future_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_future_route.dart index 023449e..5523362 100644 --- a/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_future_route.dart +++ b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_future_route.dart @@ -41,7 +41,7 @@ class _FutureContent extends StatelessWidget { ), ), ), - sections: [ + sections: const [ LearningObjectives( objectives: ['掌握 Provider 中异步数据获取的模式', '理解 ChangeNotifier 中的状态缓存机制'], ), diff --git a/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_lifting_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_lifting_route.dart index 12abf99..f1991dc 100644 --- a/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_lifting_route.dart +++ b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_lifting_route.dart @@ -30,13 +30,13 @@ class _LiftingCN extends ChangeNotifier { class _LiftingContent extends StatelessWidget { @override Widget build(BuildContext context) { - return LearningScaffold( + return const LearningScaffold( title: 'Provider 状态提升', interactiveDemo: SizedBox( height: 200, child: Column( mainAxisSize: MainAxisSize.min, - children: [_LDisplay(), const SizedBox(height: 16), _LControls()], + children: [_LDisplay(), SizedBox(height: 16), _LControls()], ), ), sections: [ diff --git a/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_route.dart index 045c899..baf7719 100644 --- a/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_route.dart +++ b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_route.dart @@ -39,7 +39,7 @@ class ProviderRoute extends StatelessWidget { onReset: counter.reset, extra: const ProviderPerks(), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '理解 Provider + ChangeNotifier 的状态刷新链路', diff --git a/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_todo_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_todo_route.dart index 6aba64c..717f18e 100644 --- a/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_todo_route.dart +++ b/apps/flutter_forge/lib/modules/state/status_management/pages/provider/provider_todo_route.dart @@ -67,7 +67,7 @@ class _TodoContent extends StatelessWidget { ), ), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '掌握 Provider 管理全局列表状态', diff --git a/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_future_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_future_route.dart index 25c8aef..b16fce0 100644 --- a/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_future_route.dart +++ b/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_future_route.dart @@ -21,7 +21,7 @@ class RiverpodFutureRoute extends ConsumerWidget { ), ), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '掌握 Riverpod FutureProvider 的异步数据管理', diff --git a/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_lifting_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_lifting_route.dart index e570a83..86d9c63 100644 --- a/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_lifting_route.dart +++ b/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_lifting_route.dart @@ -7,13 +7,13 @@ class RiverpodLiftingRoute extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - return LearningScaffold( + return const LearningScaffold( title: 'Riverpod 状态提升', interactiveDemo: SizedBox( height: 200, child: Column( mainAxisSize: MainAxisSize.min, - children: [_LDisplay(), const SizedBox(height: 16), _LControls()], + children: [_LDisplay(), SizedBox(height: 16), _LControls()], ), ), sections: [ diff --git a/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_route.dart index 85cfcff..b8e1e77 100644 --- a/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_route.dart +++ b/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_route.dart @@ -27,7 +27,7 @@ class RiverpodRoute extends ConsumerWidget { onAdd: () => ref.read(counterProvider.notifier).increment(), onReset: () => ref.read(counterProvider.notifier).reset(), ), - sections: [ + sections: const [ LearningObjectives( objectives: [ '理解 Riverpod StateNotifier 的状态管理机制', diff --git a/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_todo_route.dart b/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_todo_route.dart index 7fa4286..303e031 100644 --- a/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_todo_route.dart +++ b/apps/flutter_forge/lib/modules/state/status_management/pages/riverpod/riverpod_todo_route.dart @@ -74,7 +74,7 @@ class _TodoContent extends ConsumerWidget { }, ), ), - sections: [ + sections: const [ LearningObjectives( objectives: ['掌握 Riverpod 管理全局列表状态', '理解 StateNotifier 不可变状态更新模式'], ), From 05f177d8efa4070c416341a2b0f25301d3bf7878 Mon Sep 17 00:00:00 2001 From: lizy Date: Sat, 22 Aug 2026 15:01:21 +0800 Subject: [PATCH 16/17] chore(gate): enforce bare flutter analyze Remove --no-fatal-infos --no-fatal-warnings so info/warning diagnostics fail the gate exactly like remote packaging would. Now that the 192-info backlog is cleared, local acceptance matches remote packaging behavior permanently. --- tool/quality_gate.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tool/quality_gate.sh b/tool/quality_gate.sh index 82935db..a7a1fdf 100755 --- a/tool/quality_gate.sh +++ b/tool/quality_gate.sh @@ -44,8 +44,8 @@ run_stage "Dart 格式" bash -c " git diff --exit-code -- '*.dart' " -# Stage 3: 静态分析 -run_stage "Flutter 静态分析" flutter analyze --no-fatal-infos --no-fatal-warnings +# Stage 3: 静态分析(bare analyze:info/warning 同样视为失败,对齐远端打包行为) +run_stage "Flutter 静态分析" flutter analyze # Stage 4: 测试 run_stage "全量测试" bash tool/test_all.sh From 7ea5cb6e832b640918065098d193504d930f70d3 Mon Sep 17 00:00:00 2001 From: lizy Date: Sat, 22 Aug 2026 15:09:28 +0800 Subject: [PATCH 17/17] ci: drop flutterguard scan from quality-gate Remove the FlutterGuard scan step (it ran from the repo root where no lib/ exists and always failed with an empty match) along with the now-dead pinned checkout + sibling-mv steps. flutterguard_cli remains a pinned git dev dependency and is still enforced by the local quality_gate.sh. --- .github/workflows/ci.yml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9e65e81..6985f74 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,16 +12,6 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Checkout pinned FlutterGuard - uses: actions/checkout@v4 - with: - repository: lizy-coding/flutterguard - ref: 9f9be84a73dc4b99a956a8529b8c334849566b03 - path: flutterguard - - - name: Prepare sibling FlutterGuard dependency - run: mv flutterguard ../flutterguard - - name: Setup Flutter uses: subosito/flutter-action@v2 with: @@ -59,6 +49,3 @@ jobs: - name: Tests run: bash tool/test_all.sh - - - name: FlutterGuard scan - run: dart run flutterguard_cli:flutterguard scan . --fail-on high