creek
The AI Image Editor of 2030git clone https://github.com/maydayv7/creek
lib/ui/pages/share_to_moodboard_page.dart (3024B)
1import 'dart:io';
2import 'package:flutter/material.dart';
3import 'package:receive_sharing_intent/receive_sharing_intent.dart';
4import 'package:creekui/services/project_service.dart';
5import 'package:creekui/ui/styles/variables.dart';
6import 'package:creekui/ui/widgets/project_selector.dart';
7import 'package:creekui/ui/widgets/app_bar.dart';
8import 'package:creekui/ui/widgets/dialog.dart';
9import 'package:creekui/ui/widgets/text_field.dart';
10import 'image_save_page.dart';
11
12class ShareToMoodboardPage extends StatefulWidget {
13 final List<File> imageFiles;
14 const ShareToMoodboardPage({super.key, required this.imageFiles});
15
16 @override
17 State<ShareToMoodboardPage> createState() => _ShareToMoodboardPageState();
18}
19
20class _ShareToMoodboardPageState extends State<ShareToMoodboardPage> {
21 final ProjectService _projectService = ProjectService();
22 Key _selectorKey = UniqueKey(); // Used to refresh list after creation
23
24 Future<void> _createNewProject() async {
25 final controller = TextEditingController();
26 await ShowDialog.show(
27 context,
28 title: "New Project",
29 primaryButtonText: "Create",
30 content: CommonTextField(
31 hintText: "Project Title",
32 controller: controller,
33 autoFocus: true,
34 ),
35 onPrimaryPressed: () async {
36 final title = controller.text.trim();
37 if (title.isNotEmpty) {
38 Navigator.pop(context); // Close dialog
39 final newId = await _projectService.createProject(title);
40 setState(() {
41 _selectorKey = UniqueKey();
42 });
43 _navigateToSavePage(newId, title);
44 }
45 },
46 );
47 }
48
49 void _navigateToSavePage(
50 int projectId,
51 String projectName, {
52 String? parentProjectName,
53 }) {
54 _projectService.openProject(projectId);
55 ReceiveSharingIntent.instance.reset();
56 Navigator.push(
57 context,
58 MaterialPageRoute(
59 builder:
60 (_) => ImageSavePage(
61 imagePaths: widget.imageFiles.map((f) => f.path).toList(),
62 projectId: projectId,
63 projectName: projectName,
64 isFromShare: true,
65 parentProjectName: parentProjectName,
66 ),
67 ),
68 );
69 }
70
71 @override
72 Widget build(BuildContext context) {
73 return Scaffold(
74 backgroundColor: Variables.surfaceBackground,
75 appBar: CommonAppBar(
76 title: "MoodBoards",
77 leading: IconButton(
78 icon: const Icon(Icons.arrow_back, color: Variables.textPrimary),
79 onPressed: () => Navigator.pop(context),
80 ),
81 actions: [
82 IconButton(
83 icon: const Icon(Icons.add, color: Variables.textPrimary, size: 28),
84 onPressed: _createNewProject,
85 tooltip: "Create New Project",
86 ),
87 ],
88 ),
89 body: ProjectSelector(
90 key: _selectorKey,
91 onProjectSelected: (id, title, parentTitle) {
92 _navigateToSavePage(id, title, parentProjectName: parentTitle);
93 },
94 ),
95 );
96 }
97}