creek

The AI Image Editor of 2030

share_to_moodboard_page.dart (3024B)


import 'dart:io';
import 'package:flutter/material.dart';
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
import 'package:creekui/services/project_service.dart';
import 'package:creekui/ui/styles/variables.dart';
import 'package:creekui/ui/widgets/project_selector.dart';
import 'package:creekui/ui/widgets/app_bar.dart';
import 'package:creekui/ui/widgets/dialog.dart';
import 'package:creekui/ui/widgets/text_field.dart';
import 'image_save_page.dart';

class ShareToMoodboardPage extends StatefulWidget {
  final List<File> imageFiles;
  const ShareToMoodboardPage({super.key, required this.imageFiles});

  @override
  State<ShareToMoodboardPage> createState() => _ShareToMoodboardPageState();
}

class _ShareToMoodboardPageState extends State<ShareToMoodboardPage> {
  final ProjectService _projectService = ProjectService();
  Key _selectorKey = UniqueKey(); // Used to refresh list after creation

  Future<void> _createNewProject() async {
    final controller = TextEditingController();
    await ShowDialog.show(
      context,
      title: "New Project",
      primaryButtonText: "Create",
      content: CommonTextField(
        hintText: "Project Title",
        controller: controller,
        autoFocus: true,
      ),
      onPrimaryPressed: () async {
        final title = controller.text.trim();
        if (title.isNotEmpty) {
          Navigator.pop(context); // Close dialog
          final newId = await _projectService.createProject(title);
          setState(() {
            _selectorKey = UniqueKey();
          });
          _navigateToSavePage(newId, title);
        }
      },
    );
  }

  void _navigateToSavePage(
    int projectId,
    String projectName, {
    String? parentProjectName,
  }) {
    _projectService.openProject(projectId);
    ReceiveSharingIntent.instance.reset();
    Navigator.push(
      context,
      MaterialPageRoute(
        builder:
            (_) => ImageSavePage(
              imagePaths: widget.imageFiles.map((f) => f.path).toList(),
              projectId: projectId,
              projectName: projectName,
              isFromShare: true,
              parentProjectName: parentProjectName,
            ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Variables.surfaceBackground,
      appBar: CommonAppBar(
        title: "MoodBoards",
        leading: IconButton(
          icon: const Icon(Icons.arrow_back, color: Variables.textPrimary),
          onPressed: () => Navigator.pop(context),
        ),
        actions: [
          IconButton(
            icon: const Icon(Icons.add, color: Variables.textPrimary, size: 28),
            onPressed: _createNewProject,
            tooltip: "Create New Project",
          ),
        ],
      ),
      body: ProjectSelector(
        key: _selectorKey,
        onProjectSelected: (id, title, parentTitle) {
          _navigateToSavePage(id, title, parentProjectName: parentTitle);
        },
      ),
    );
  }
}