Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AI_ANALYSIS.md

Large diffs are not rendered by default.

45 changes: 39 additions & 6 deletions lib/app/router/app_route_table.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ import 'package:go_router/go_router.dart';

import '../../module_registry/module_category.dart';
import '../../module_registry/module_entry.dart';
import '../../shared/multi_window/category_window_app.dart';
import '../../shared/multi_window/multi_window_manager.dart';
import '../../shared/multi_window/multi_window_route_filter.dart';
import '../../modules/basic/debounce_throttle/module_entry.dart';
import '../../modules/basic/microtask/module_entry.dart';
import '../../modules/basic/microtask/module_routes.dart';
Expand Down Expand Up @@ -229,6 +232,22 @@ final List<ModuleEntry> _modules = [

// ==================== 路由聚合 ====================

Future<void> _openCategoryWindow(
BuildContext context,
ModuleCategory category,
) async {
final filtered = filterModulesByCategory(_modules, category);
if (MultiWindowManager.isSupported) {
await MultiWindowManager.instance.createCategoryWindow(category);
} else {
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => CategoryHomePage(category: category, modules: filtered),
),
);
}
}

final List<GoRoute> _routes = [
GoRoute(
path: '/',
Expand Down Expand Up @@ -276,13 +295,27 @@ class ModuleHomePage extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.fromLTRB(16, 16, 16, 8),
child: Text(
category.label,
style: Theme.of(context).textTheme.titleMedium?.copyWith(
fontWeight: FontWeight.bold,
color: Theme.of(context).colorScheme.primary,
padding: const EdgeInsets.fromLTRB(16, 16, 8, 8),
child: Row(
children: [
Expanded(
child: Text(
category.label,
style:
Theme.of(context).textTheme.titleMedium?.copyWith(
fontWeight: FontWeight.bold,
color: Theme.of(context).colorScheme.primary,
),
),
),
IconButton(
icon: const Icon(Icons.open_in_new, size: 20),
tooltip: '在新窗口打开',
onPressed: () {
_openCategoryWindow(context, category);
},
),
],
),
),
...categoryModules.map((module) => ModuleCard(module: module)),
Expand Down
21 changes: 20 additions & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,28 @@
import 'package:desktop_multi_window/desktop_multi_window.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

import 'app/app.dart';
import 'shared/multi_window/category_window_app.dart';
import 'shared/multi_window/multi_window_manager.dart';

void main(List<String> args) async {
WidgetsFlutterBinding.ensureInitialized();

if (MultiWindowManager.isSupported) {
final wc = await WindowController.fromCurrentEngine();
final windowArgs = MultiWindowManager.parseArguments(wc.arguments);

if (windowArgs.type == WindowType.category && windowArgs.category != null) {
runApp(
ProviderScope(
child: CategoryWindowApp(category: windowArgs.category!),
),
);
return;
}
}

void main() {
runApp(const ProviderScope(child: MainApp()));
}

Expand Down
8 changes: 4 additions & 4 deletions lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@
"path": "lib/modules/ui/gcode_visualizer",
"status": "active"
},
"entrypoints": ["module_entry.dart","module_routes.dart","module_root.dart","pages","widgets","state"],
"owns": ["module_entry","module_ui","module_state","module_docs"],
"entrypoints": ["module_entry.dart","pages","widgets","state"],
"owns": ["module_entry","module_page","module_state","module_docs"],
"depends": ["gcode_core","flutter_study_learning","file_picker_bridge","module_registry"],
"mutates": ["AI_ANALYSIS.md","**/*.dart"],
"files": ["gcode_readline.dart","module_entry.dart","pages/gcode_visualizer_page.dart","state/gcode_player_controller.dart","widgets/command_timeline.dart","widgets/gcode_canvas.dart","widgets/gcode_editor_panel.dart","widgets/playback_controls.dart"],
"files": ["module_entry.dart","pages/gcode_visualizer_page.dart","state/gcode_player_controller.dart","widgets/gcode_editor_panel.dart"],
"contracts": {
"no_natural_language": true,
"doc_consumer": "vibecoding",
"doc_mode": "harness",
"update_required_on_file_change": true,
"import_direction_enforced": true
},
"validation": ["flutter analyze","flutter test"]
"validation": ["dart format .","flutter analyze","dart run flutterguard_cli:flutterguard scan --path . --fail-on high"]
}
1 change: 0 additions & 1 deletion lib/modules/ui/gcode_visualizer/gcode_readline.dart

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,8 @@ import 'package:flutter/material.dart';
import 'package:flutter_study_learning/flutter_study_learning.dart';
import 'package:gcode_core/gcode_core.dart';

import '../state/gcode_player_controller.dart';
import '../widgets/command_timeline.dart';
import '../widgets/gcode_canvas.dart';
import '../widgets/gcode_editor_panel.dart';
import '../widgets/playback_controls.dart';
import '../state/gcode_player_controller.dart';

class GcodeVisualizerPage extends StatefulWidget {
const GcodeVisualizerPage({super.key});
Expand Down
213 changes: 0 additions & 213 deletions lib/modules/ui/gcode_visualizer/widgets/command_timeline.dart

This file was deleted.

Loading