Skip to content

Commit d1fe593

Browse files
committed
feat: workspace color alteration, name alteration
1 parent e578631 commit d1fe593

7 files changed

Lines changed: 223 additions & 151 deletions

File tree

lib/features/dashboard/providers/dashboard_provider.dart

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:uuid/uuid.dart';
99
class DashboardProvider extends StateHandler {
1010
late SupabaseClient? supabase;
1111
late SupabaseService supabaseService;
12+
late String currentWorkspaceId;
1213
DashboardProvider(this.supabase, this.supabaseService) : super() {
1314
initialize();
1415
}
@@ -85,7 +86,10 @@ class DashboardProvider extends StateHandler {
8586
name: workspace["name"],
8687
editorIdList: workspace["editorId"] ?? [],
8788
viewerIdList: workspace["viewerId"] ?? [],
88-
lastEdited: workspace["last edited"] != null ? DateTime.parse(workspace["last edited"]) : DateTime.now(),
89+
lastEdited:
90+
workspace["last edited"] != null
91+
? DateTime.parse(workspace["last edited"])
92+
: DateTime.now(),
8993
);
9094
// print(workspace);
9195
_workspaceList.add(newWorkspace);
@@ -110,17 +114,18 @@ class DashboardProvider extends StateHandler {
110114
print("User not found");
111115
notifyListeners();
112116
}
113-
Map<dynamic,dynamic> newWorkspace = {
114-
"id" : Uuid().v4(),
117+
Map<dynamic, dynamic> newWorkspace = {
118+
"id": Uuid().v4(),
115119
"owner": res!.id,
116120
"name": "New Project",
117121
"editorId": null,
118-
"viewerId":null,
122+
"viewerId": null,
119123
};
120124

121125
await supabase!.from('workspace').insert(newWorkspace);
122126

123127
refreshDashboard();
128+
currentWorkspaceId = newWorkspace["id"];
124129
} catch (e) {
125130
print("Error creating new project: $e");
126131
} finally {

lib/features/workspace/pages/canvas_page.dart

Lines changed: 14 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import 'package:cookethflow/core/utils/enums.dart';
21
import 'package:cookethflow/features/models/canvas_models/canvas_painter.dart';
32
import 'package:cookethflow/features/workspace/providers/workspace_provider.dart';
43
import 'package:flutter/material.dart';
@@ -12,48 +11,25 @@ class CanvasPage extends StatelessWidget {
1211
return Consumer<WorkspaceProvider>(
1312
builder: (context, provider, child) {
1413
return Scaffold(
14+
backgroundColor: provider.currentWorkspaceColor,
1515
body: MouseRegion(
1616
onHover: (event) {
1717
provider.syncCanvasObject(event.position);
1818
},
19-
child: Stack(
20-
children: [
21-
GestureDetector(
22-
onPanDown: provider.onPanDown,
23-
onPanUpdate: provider.onPanUpdate,
24-
onPanEnd: provider.onPanEnd,
25-
child: CustomPaint(
26-
size: MediaQuery.of(context).size,
27-
painter: CanvasPainter(
28-
userCursors: provider.userCursors,
29-
canvasObjects: provider.canvasObjects,
30-
currentlySelectedObjectId:
31-
provider.currentlySelectedObjectId,
32-
handleRadius: provider.handleRadius,
33-
),
34-
),
19+
child: GestureDetector(
20+
onPanDown: provider.onPanDown,
21+
onPanUpdate: provider.onPanUpdate,
22+
onPanEnd: provider.onPanEnd,
23+
child: CustomPaint(
24+
size: MediaQuery.of(context).size,
25+
painter: CanvasPainter(
26+
userCursors: provider.userCursors,
27+
canvasObjects: provider.canvasObjects,
28+
currentlySelectedObjectId:
29+
provider.currentlySelectedObjectId,
30+
handleRadius: provider.handleRadius,
3531
),
36-
// Positioned(
37-
// top: 500,
38-
// left: 0,
39-
// child: Row(
40-
// children:
41-
// DrawMode.values
42-
// .map(
43-
// (mode) => IconButton(
44-
// iconSize: 48,
45-
// onPressed: () {
46-
// provider.changeDrawMode(mode);
47-
// },
48-
// icon: Icon(mode.iconData),
49-
// color:
50-
// provider.currentMode == mode ? Colors.green : null,
51-
// ),
52-
// )
53-
// .toList(),
54-
// ),
55-
// ),
56-
],
32+
),
5733
),
5834
),
5935
);

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

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import 'package:cookethflow/core/helpers/responsive_layout.helper.dart' as rh;
22
import 'package:cookethflow/core/theme/colors.dart';
33
import 'package:cookethflow/features/workspace/pages/canvas_page.dart';
4+
import 'package:cookethflow/features/workspace/providers/workspace_provider.dart';
45
import 'package:cookethflow/features/workspace/widgets/export_project_button.dart';
56
import 'package:cookethflow/features/workspace/widgets/toolbar.dart'; // Assuming this might be used later
67
import 'package:cookethflow/features/workspace/widgets/undo_redo_button.dart';
78
import 'package:cookethflow/features/workspace/widgets/workspace_drawer.dart';
89
import 'package:cookethflow/features/workspace/widgets/zoom_control_button.dart';
910
import 'package:flutter/material.dart';
11+
import 'package:provider/provider.dart';
1012
import 'package:flutter_screenutil/flutter_screenutil.dart';
1113
import 'package:phosphor_flutter/phosphor_flutter.dart';
1214

@@ -20,33 +22,37 @@ class WorkspaceDesktop extends StatelessWidget {
2022
rh.ResponsiveLayoutHelper.getDeviceType(context) ==
2123
rh.DeviceType.desktop;
2224

23-
return Scaffold(
24-
backgroundColor: const Color(0xFFFF8F8F8),
25-
body: Padding(
26-
padding: EdgeInsets.symmetric(horizontal: 40.w, vertical: 40.h),
27-
child: Stack(
28-
children: [
29-
// 1. CanvasPage - This should be the base layer, filling the entire available space
30-
const CanvasPage(),
31-
32-
const WorkspaceDrawer(),
33-
SizedBox(width: 20.w),
34-
// Undo/Redo Controls Container
35-
Positioned(top: 0,left: 0.21.sw,child: UndoRedoButton()),
36-
// Export project button
37-
Positioned(top: 0,right: 0.02.sw,child: ExportProjectButton()),
38-
39-
Positioned(right: 0,top: 0.15.sh,child: ToolBar()),
40-
41-
// 3. Zoom Control - Positioned at the bottom right of the Stack
42-
Positioned(
43-
bottom: 0.h, // Aligns to the bottom edge of the Stack
44-
right: 0.w, // Aligns to the right edge of the Stack
45-
child: ZoomControlButton(),
25+
return Consumer<WorkspaceProvider>(
26+
builder: (context,provider,child) {
27+
return Scaffold(
28+
backgroundColor: provider.currentWorkspaceColor,
29+
body: Padding(
30+
padding: EdgeInsets.symmetric(horizontal: 40.w, vertical: 40.h),
31+
child: Stack(
32+
children: [
33+
// 1. CanvasPage - This should be the base layer, filling the entire available space
34+
const CanvasPage(),
35+
36+
const WorkspaceDrawer(),
37+
SizedBox(width: 20.w),
38+
// Undo/Redo Controls Container
39+
Positioned(top: 0,left: 0.21.sw,child: UndoRedoButton()),
40+
// Export project button
41+
Positioned(top: 0,right: 0.02.sw,child: ExportProjectButton()),
42+
43+
Positioned(right: 0,top: 0.15.sh,child: ToolBar()),
44+
45+
// 3. Zoom Control - Positioned at the bottom right of the Stack
46+
Positioned(
47+
bottom: 0.h, // Aligns to the bottom edge of the Stack
48+
right: 0.w, // Aligns to the right edge of the Stack
49+
child: ZoomControlButton(),
50+
),
51+
],
4652
),
47-
],
48-
),
49-
),
53+
),
54+
);
55+
}
5056
);
5157
}
5258
}

lib/features/workspace/providers/workspace_provider.dart

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import 'dart:ui';
22

33
import 'package:cookethflow/core/providers/supabase_provider.dart';
4+
import 'package:cookethflow/core/theme/colors.dart';
45
import 'package:cookethflow/core/utils/consts.dart';
56
import 'package:cookethflow/core/utils/enums.dart';
67
import 'package:cookethflow/core/utils/state_handler.dart';
8+
import 'package:cookethflow/features/dashboard/providers/dashboard_provider.dart';
79
import 'package:cookethflow/features/models/canvas_models/canvas_object.dart';
810
import 'package:cookethflow/features/models/canvas_models/objects/circle_object.dart';
911
import 'package:cookethflow/features/models/canvas_models/objects/cylinder_object.dart';
@@ -21,7 +23,8 @@ import 'package:uuid/uuid.dart';
2123

2224
class WorkspaceProvider extends StateHandler {
2325
late SupabaseService _supabaseService;
24-
WorkspaceProvider(this._supabaseService) : super() {
26+
late DashboardProvider _dashboardProvider;
27+
WorkspaceProvider(this._supabaseService, this._dashboardProvider) : super() {
2528
_initialize();
2629
}
2730

@@ -37,9 +40,11 @@ class WorkspaceProvider extends StateHandler {
3740
InteractionMode _interactionMode = InteractionMode.none;
3841
Offset? _panStartPoint;
3942
Offset _cursorPosition = const Offset(0, 0);
40-
4143
static const double _defaultShapeSize = 100.0;
4244
static const double _handleRadius = 8.0;
45+
Color _currentWorkspaceColor = scaffoldColor;
46+
String _currentworkspaceId = "";
47+
TextEditingController _workspaceNameController = TextEditingController(text: 'Workspace Name');
4348

4449
bool get isLoading => _isLoading;
4550
bool get isDrawerOpen => _isDrawerOpen;
@@ -56,6 +61,9 @@ class WorkspaceProvider extends StateHandler {
5661
Offset get cursorPosition => _cursorPosition;
5762
double get defaultShapeSize => _defaultShapeSize;
5863
double get handleRadius => _handleRadius;
64+
Color get currentWorkspaceColor => _currentWorkspaceColor;
65+
String get currentworkspaceId => _currentworkspaceId;
66+
TextEditingController get workspaceNameController => _workspaceNameController;
5967

6068
// New getter to easily check if any tile is selected for the drawer's border
6169
bool get hasSelectedTile => _selectedTileIndex != null;
@@ -86,6 +94,21 @@ class WorkspaceProvider extends StateHandler {
8694
notifyListeners();
8795
}
8896

97+
void changeWorkspaceColor(Color newColor) {
98+
_currentWorkspaceColor = newColor;
99+
notifyListeners();
100+
}
101+
102+
void setWorkspaceId() {
103+
_currentworkspaceId = _dashboardProvider.currentWorkspaceId;
104+
notifyListeners();
105+
}
106+
107+
void changeWorkspaceName(String newName) {
108+
workspaceNameController.text = newName;
109+
notifyListeners();
110+
}
111+
89112
IconData getIconForObjectType(String objectType) {
90113
switch (objectType) {
91114
case Circle.type:

0 commit comments

Comments
 (0)