1+ import 'package:cookethflow/core/providers/supabase_provider.dart' ;
12import 'package:cookethflow/core/utils/enums.dart' ;
23import 'package:cookethflow/features/models/canvas_models/canvas_painter.dart' ;
4+ import 'package:cookethflow/features/models/workspace_model.dart' ;
35import 'package:cookethflow/features/workspace/providers/canvas_provider.dart' ;
46import 'package:cookethflow/features/workspace/providers/workspace_provider.dart' ;
57import 'package:flutter/gestures.dart' ;
@@ -12,70 +14,105 @@ class CanvasPage extends StatelessWidget {
1214
1315 @override
1416 Widget build (BuildContext context) {
15- return Consumer2 <WorkspaceProvider , CanvasProvider >(
16- builder: (context, workspaceProvider, canvasProvider, child) {
17+ return Consumer3 <WorkspaceProvider , CanvasProvider , SupabaseService >(
18+ builder: (context, workspaceProvider, canvasProvider, suprovider, child) {
1719 final isHandToolActive = workspaceProvider.currentMode == DrawMode .hand;
18-
1920 return Scaffold (
2021 backgroundColor: workspaceProvider.currentWorkspaceColor,
2122 body: Listener (
2223 onPointerDown: (event) {
23- if (event.kind == PointerDeviceKind .mouse && event.buttons == kPrimaryMouseButton && event.down) {
24- // You could implement double-click logic here if needed
24+ if (event.kind == PointerDeviceKind .mouse &&
25+ event.buttons == kPrimaryMouseButton &&
26+ event.down) {
27+ // You could implement double-click logic here if needed
2528 }
2629 },
2730 child: MouseRegion (
2831 // Change cursor based on the active tool
29- cursor: isHandToolActive ? SystemMouseCursors .grab : SystemMouseCursors .basic,
32+ cursor:
33+ isHandToolActive
34+ ? SystemMouseCursors .grab
35+ : SystemMouseCursors .basic,
3036 onHover: (event) {
31- final Matrix4 transform = canvasProvider.transformationController.value;
37+ final Matrix4 transform =
38+ canvasProvider.transformationController.value;
3239 final Matrix4 ? inverseTransform = Matrix4 .tryInvert (transform);
3340
3441 if (inverseTransform == null ) return ;
3542
36- final vector_math.Vector3 transformed = inverseTransform.transform3 (
37- vector_math.Vector3 (event.localPosition.dx, event.localPosition.dy, 0 ));
38- final Offset canvasCoordinates = Offset (transformed.x, transformed.y);
43+ final vector_math.Vector3 transformed = inverseTransform
44+ .transform3 (
45+ vector_math.Vector3 (
46+ event.localPosition.dx,
47+ event.localPosition.dy,
48+ 0 ,
49+ ),
50+ );
51+ final Offset canvasCoordinates = Offset (
52+ transformed.x,
53+ transformed.y,
54+ );
3955
40- if (workspaceProvider.interactionMode != InteractionMode .editingText) {
56+ if (workspaceProvider.interactionMode !=
57+ InteractionMode .editingText) {
4158 workspaceProvider.syncCanvasObject (canvasCoordinates);
4259 }
4360 },
4461 child: InteractiveViewer (
45- transformationController: canvasProvider.transformationController,
62+ transformationController:
63+ canvasProvider.transformationController,
4664 minScale: 0.1 ,
4765 maxScale: 4.0 ,
4866 boundaryMargin: const EdgeInsets .all (double .infinity),
4967 constrained: false ,
5068 // Enable panning only when Hand Tool is active
5169 panEnabled: isHandToolActive,
52- scaleEnabled: workspaceProvider.interactionMode != InteractionMode .editingText,
70+ scaleEnabled:
71+ workspaceProvider.interactionMode !=
72+ InteractionMode .editingText,
5373 child: Container (
5474 color: workspaceProvider.currentWorkspaceColor,
5575 child: GestureDetector (
5676 // Disable GestureDetector's pan events when Hand Tool is active
57- onPanDown: isHandToolActive ? null : (details) {
58- workspaceProvider.onPanDown (DragDownDetails (globalPosition: details.localPosition));
59- },
60- onPanUpdate: isHandToolActive ? null : (details) {
61- workspaceProvider.onPanUpdate (DragUpdateDetails (
62- globalPosition: details.localPosition,
63- delta: details.delta,
64- ));
65- },
66- onPanEnd: isHandToolActive ? null : workspaceProvider.onPanEnd,
77+ onPanDown:
78+ isHandToolActive
79+ ? null
80+ : (details) {
81+ workspaceProvider.onPanDown (
82+ DragDownDetails (
83+ globalPosition: details.localPosition,
84+ ),
85+ );
86+ },
87+ onPanUpdate:
88+ isHandToolActive
89+ ? null
90+ : (details) {
91+ workspaceProvider.onPanUpdate (
92+ DragUpdateDetails (
93+ globalPosition: details.localPosition,
94+ delta: details.delta,
95+ ),
96+ );
97+ },
98+ onPanEnd:
99+ isHandToolActive ? null : workspaceProvider.onPanEnd,
67100 child: CustomPaint (
68101 size: const Size (20000 , 20000 ),
69102 painter: CanvasPainter (
70103 userCursors: workspaceProvider.userCursors,
71104 canvasObjects: workspaceProvider.canvasObjects,
72- currentlySelectedObjectId: workspaceProvider.currentlySelectedObjectId,
105+ currentlySelectedObjectId:
106+ workspaceProvider.currentlySelectedObjectId,
73107 handleRadius: workspaceProvider.handleRadius,
74108 interactionMode: workspaceProvider.interactionMode,
75- connectionPointRadius: workspaceProvider.connectionPointRadius,
109+ connectionPointRadius:
110+ workspaceProvider.connectionPointRadius,
76111 connectorSourceId: workspaceProvider.connectorSourceId,
77- connectorSourceAlignment: workspaceProvider.connectorSourceAlignment,
78- connectorDragPosition: workspaceProvider.connectorDragPosition,
112+ connectorSourceAlignment:
113+ workspaceProvider.connectorSourceAlignment,
114+ connectorDragPosition:
115+ workspaceProvider.connectorDragPosition,
79116 ),
80117 ),
81118 ),
@@ -87,4 +124,4 @@ class CanvasPage extends StatelessWidget {
87124 },
88125 );
89126 }
90- }
127+ }
0 commit comments