Loading lib/data/entities/postcard_entity.dart +1 −1 Original line number Diff line number Diff line Loading @@ -43,6 +43,6 @@ class PostcardEntity { } static dynamic _timestampToJson(Timestamp timestamp) { return {'seconds': timestamp.seconds, 'nanoseconds': timestamp.nanoseconds}; return timestamp.toDate(); } } lib/pages/collections/postcard_detail.dart +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) { Loading Loading @@ -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), ); } } lib/service/postcard_service.dart +12 −1 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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, Loading Loading
lib/data/entities/postcard_entity.dart +1 −1 Original line number Diff line number Diff line Loading @@ -43,6 +43,6 @@ class PostcardEntity { } static dynamic _timestampToJson(Timestamp timestamp) { return {'seconds': timestamp.seconds, 'nanoseconds': timestamp.nanoseconds}; return timestamp.toDate(); } }
lib/pages/collections/postcard_detail.dart +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) { Loading Loading @@ -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), ); } }
lib/service/postcard_service.dart +12 −1 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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, Loading