Commit 389191f0 authored by Michal Cikatricis's avatar Michal Cikatricis
Browse files

Feat (home page): added logic for save button

parent b1ce13e3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -43,6 +43,6 @@ class PostcardEntity {
  }

  static dynamic _timestampToJson(Timestamp timestamp) {
    return {'seconds': timestamp.seconds, 'nanoseconds': timestamp.nanoseconds};
    return timestamp.toDate();
  }
}
+42 −10
Original line number Diff line number Diff line
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:stamped/common/service/ioc_container.dart';
import 'package:stamped/common/widget/cached_image_builder.dart';
import 'package:stamped/common/widget/page_template.dart';
import 'package:stamped/data/entities/postcard_entity.dart';
import 'package:stamped/data/models/postcard.dart';
import 'package:stamped/pages/collections/postcard_detial_back.dart';
import 'package:stamped/service/auth_service.dart';
import 'package:stamped/service/postcard_service.dart';

class PostcardDetail extends StatelessWidget {
  final Postcard postcard;
  final _postcardService = get<PostcardService>();
  final _authService = get<AuthService>();

  const PostcardDetail({super.key, required this.postcard});
  PostcardDetail({super.key, required this.postcard});

  @override
  Widget build(BuildContext context) {
@@ -45,14 +52,39 @@ class PostcardDetail extends StatelessWidget {
  }

  List<Widget> _getActions(BuildContext context) {
    return postcard.receiver == null ?
    [IconButton(
      icon: const Icon(Icons.save),
      tooltip: 'Save Postcard',
      onPressed: () {
        ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(content: Text('Postcard successfully saved')));
      },
    )] : [];
    return postcard.receiver == null
        ? [
            IconButton(
              icon: const Icon(Icons.save),
              tooltip: 'Save Postcard',
              onPressed: () async {
                final updatedEntity = _createUpdatedEntity();
                try {
                  await _postcardService.updatePostcardReceiver(updatedEntity);
                  ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
                      content: Text('Postcard successfully saved')));
                } catch (e) {
                  ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
                      content: Text('Postcard save failed')));
                }

              },
            )
          ]
        : [];
  }

  PostcardEntity _createUpdatedEntity() {
    return PostcardEntity(
      id: postcard.id,
      imagePath: postcard.imagePath,
      stampPath: postcard.stampPath,
      originLocation: postcard.originLocation,
      destinationLocation: postcard.destinationLocation,
      text: postcard.text,
      senderId: postcard.sender.id,
      receiverId: _authService.currentUser.id,
      timestamp: Timestamp.fromDate(postcard.timestamp),
    );
  }
}
+12 −1
Original line number Diff line number Diff line
@@ -74,6 +74,15 @@ class PostcardService {
    return _stampStreamWrapper(snapshots);
  }

  Future<void> updatePostcardReceiver(PostcardEntity entity) async {
    try {
      await _postcardCollection.doc(entity.id).set(entity);
    } catch (e) {
      print('Error updating postcard: $e');
      rethrow;
    }
  }

  Future<void> create(PostcardEntity postcardEntity) {
    return _postcardCollection.add(postcardEntity);
  }
@@ -106,7 +115,9 @@ class PostcardService {
      postcardStream,
      (users, postcards) => postcards.map((p) {
        final sender = users.where((u) => u.id == p.senderId).first;
        final receiver = p.receiverId == '' ? null : users.where((u) => u.id == p.receiverId).first;
        final receiver = p.receiverId == ''
            ? null
            : users.where((u) => u.id == p.receiverId).first;
        return Postcard(
          id: p.id,
          imagePath: p.imagePath,