|
1 | 1 | // lib/features/workspace/pages/workspace_desktop.dart (Fully Modified) |
| 2 | +import 'package:cookethflow/core/helpers/responsive_layout.helper.dart' as rh; |
2 | 3 | import 'package:cookethflow/core/providers/supabase_provider.dart'; |
3 | 4 | import 'package:cookethflow/core/utils/enums.dart'; |
4 | 5 | import 'package:cookethflow/features/workspace/pages/canvas_page.dart'; |
5 | 6 | import 'package:cookethflow/features/workspace/providers/canvas_provider.dart'; |
6 | 7 | import 'package:cookethflow/features/workspace/providers/workspace_provider.dart'; |
7 | 8 | import 'package:cookethflow/features/workspace/widgets/export_project_button.dart'; |
8 | 9 | import 'package:cookethflow/features/workspace/widgets/node_editing_toolbox.dart'; |
| 10 | +import 'package:cookethflow/features/workspace/widgets/sticky_notes.dart'; |
9 | 11 | import 'package:cookethflow/features/workspace/widgets/toolbar.dart'; |
10 | 12 | import 'package:cookethflow/features/workspace/widgets/undo_redo_button.dart'; |
11 | 13 | import 'package:cookethflow/features/workspace/widgets/workspace_drawer.dart'; |
@@ -75,6 +77,44 @@ class _WorkspaceDesktopState extends State<WorkspaceDesktop> { |
75 | 77 | return null; |
76 | 78 | }, |
77 | 79 | ), |
| 80 | + StickyNoteIntent: CallbackAction<StickyNoteIntent>( |
| 81 | + onInvoke: (intent) { |
| 82 | + final provider = Provider.of<SupabaseService>(context, listen: false); |
| 83 | + final device = rh.DeviceType.desktop; |
| 84 | + _showStickyNote(context, device, provider); |
| 85 | + return null; |
| 86 | + }, |
| 87 | + ), |
| 88 | + ResetIntent: CallbackAction<ResetIntent>( |
| 89 | + onInvoke: (intent) { |
| 90 | + final canvasProvider = Provider.of<CanvasProvider>( |
| 91 | + context, |
| 92 | + listen: false, |
| 93 | + ); |
| 94 | + canvasProvider.resetZoom(); |
| 95 | + return null; |
| 96 | + }, |
| 97 | + ), |
| 98 | + ZoomInIntent: CallbackAction<ZoomInIntent>( |
| 99 | + onInvoke: (intent) { |
| 100 | + final canvasProvider = Provider.of<CanvasProvider>( |
| 101 | + context, |
| 102 | + listen: false, |
| 103 | + ); |
| 104 | + canvasProvider.zoomIn(); |
| 105 | + return null; |
| 106 | + }, |
| 107 | + ), |
| 108 | + ZoomOutIntent: CallbackAction<ZoomOutIntent>( |
| 109 | + onInvoke: (intent) { |
| 110 | + final canvasProvider = Provider.of<CanvasProvider>( |
| 111 | + context, |
| 112 | + listen: false, |
| 113 | + ); |
| 114 | + canvasProvider.zoomOut(); |
| 115 | + return null; |
| 116 | + }, |
| 117 | + ), |
78 | 118 | }; |
79 | 119 |
|
80 | 120 | return Consumer2<WorkspaceProvider, SupabaseService>( |
@@ -182,4 +222,43 @@ class _WorkspaceDesktopState extends State<WorkspaceDesktop> { |
182 | 222 | }, |
183 | 223 | ); |
184 | 224 | } |
| 225 | + |
| 226 | + void _showStickyNote( |
| 227 | + BuildContext context, |
| 228 | + rh.DeviceType device, |
| 229 | + SupabaseService su, |
| 230 | + ) { |
| 231 | + final RenderBox? renderBox = context.findRenderObject() as RenderBox?; |
| 232 | + if (renderBox != null) { |
| 233 | + final position = renderBox.localToGlobal(Offset.zero); |
| 234 | + showDialog( |
| 235 | + context: context, |
| 236 | + barrierColor: Colors.transparent, |
| 237 | + builder: |
| 238 | + (context) => Stack( |
| 239 | + children: [ |
| 240 | + Positioned.fill( |
| 241 | + child: GestureDetector( |
| 242 | + onTap: () => Navigator.pop(context), |
| 243 | + child: Container(color: Colors.transparent), |
| 244 | + ), |
| 245 | + ), |
| 246 | + Positioned( |
| 247 | + right: device == rh.DeviceType.mobile ? position.dx : 150.w, |
| 248 | + top: |
| 249 | + device == rh.DeviceType.desktop |
| 250 | + ? 500.h |
| 251 | + : device == rh.DeviceType.tab |
| 252 | + ? 500.h |
| 253 | + : position.dy - 390.h, |
| 254 | + child: Material( |
| 255 | + color: Colors.transparent, |
| 256 | + child: StickyNotesWidget(su: su), |
| 257 | + ), |
| 258 | + ), |
| 259 | + ], |
| 260 | + ), |
| 261 | + ); |
| 262 | + } |
| 263 | + } |
185 | 264 | } |
0 commit comments