Skip to content

Commit a38ca99

Browse files
committed
worksapce complete
1 parent 0cef90d commit a38ca99

File tree

12 files changed

+638
-323
lines changed

12 files changed

+638
-323
lines changed
Lines changed: 65 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import 'package:cookethflow/core/providers/supabase_provider.dart';
12
import 'package:cookethflow/core/utils/enums.dart';
23
import 'package:cookethflow/features/models/canvas_models/canvas_painter.dart';
4+
import 'package:cookethflow/features/models/workspace_model.dart';
35
import 'package:cookethflow/features/workspace/providers/canvas_provider.dart';
46
import 'package:cookethflow/features/workspace/providers/workspace_provider.dart';
57
import '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+
}

lib/features/workspace/pages/desktop/workspace_desktop.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:cookethflow/core/helpers/responsive_layout.helper.dart' as rh;
2+
import 'package:cookethflow/core/providers/supabase_provider.dart';
23
import 'package:cookethflow/features/workspace/pages/canvas_page.dart';
34
import 'package:cookethflow/features/workspace/providers/canvas_provider.dart';
45
import 'package:cookethflow/features/workspace/providers/workspace_provider.dart';
@@ -23,7 +24,7 @@ class WorkspaceDesktop extends StatelessWidget {
2324
rh.ResponsiveLayoutHelper.getDeviceType(context) ==
2425
rh.DeviceType.desktop;
2526

26-
return Consumer<WorkspaceProvider>(builder: (context, provider, child) {
27+
return Consumer2<WorkspaceProvider,SupabaseService>(builder: (context, provider,suprovider, child) {
2728
return Scaffold(
2829
backgroundColor: provider.currentWorkspaceColor,
2930
body: Padding(
@@ -35,7 +36,7 @@ class WorkspaceDesktop extends StatelessWidget {
3536

3637
const WorkspaceDrawer(),
3738
SizedBox(width: 20.w),
38-
Positioned(top: 0, left: 0.21.sw, child: UndoRedoButton()),
39+
Positioned(top: 0, left: 0.21.sw, child: UndoRedoButton(su: suprovider,)),
3940
Positioned(top: 0, right: 0.001.sw, child: ExportProjectButton()),
4041

4142
Positioned(right: 0, top: 0.10.sh, child: ToolBar()),

lib/features/workspace/pages/mobile/workspace_mobile.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:cookethflow/core/helpers/responsive_layout.helper.dart' as rh;
2+
import 'package:cookethflow/core/providers/supabase_provider.dart';
23
import 'package:cookethflow/core/theme/colors.dart';
34
import 'package:cookethflow/features/models/canvas_models/canvas_object.dart';
45
import 'package:cookethflow/features/workspace/pages/canvas_page.dart';
@@ -25,8 +26,8 @@ class WorkspaceMobile extends StatelessWidget {
2526
Widget build(BuildContext context) {
2627
rh.DeviceType device = rh.ResponsiveLayoutHelper.getDeviceType(context);
2728

28-
return Consumer<WorkspaceProvider>(
29-
builder: (context, provider, child) {
29+
return Consumer2<WorkspaceProvider,SupabaseService>(
30+
builder: (context, provider,suprovider, child) {
3031
return Scaffold(
3132
backgroundColor: provider.currentWorkspaceColor,
3233
body: Padding(
@@ -36,7 +37,7 @@ class WorkspaceMobile extends StatelessWidget {
3637
children: [
3738
const CanvasPage(),
3839
workspaceDrawerMob(device),
39-
Positioned(top: 120.h, right: 0.h, child: UndoRedoButton()),
40+
Positioned(top: 120.h, right: 0.h, child: UndoRedoButton(su: suprovider,)),
4041
Padding(
4142
padding: EdgeInsets.only(bottom: 40.h),
4243
child: Align(

0 commit comments

Comments
 (0)