From d24731412fa4032636daaed8ce132204a4ad3fd0 Mon Sep 17 00:00:00 2001 From: Freek van de Ven Date: Mon, 20 Nov 2023 07:52:47 +0100 Subject: [PATCH] feat: add methods in timeline service interface --- packages/flutter_timeline_firebase/pubspec.yaml | 5 +++++ .../lib/src/model/timeline_reaction.dart | 10 +++++++--- .../lib/src/services/timeline_service.dart | 17 +++++++++++++++++ .../lib/src/services/user_service.dart | 5 +++++ .../lib/src/screens/timeline_post_screen.dart | 3 ++- 5 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 packages/flutter_timeline_interface/lib/src/services/timeline_service.dart create mode 100644 packages/flutter_timeline_interface/lib/src/services/user_service.dart diff --git a/packages/flutter_timeline_firebase/pubspec.yaml b/packages/flutter_timeline_firebase/pubspec.yaml index 5bca45a..e352092 100644 --- a/packages/flutter_timeline_firebase/pubspec.yaml +++ b/packages/flutter_timeline_firebase/pubspec.yaml @@ -14,6 +14,11 @@ environment: dependencies: flutter: sdk: flutter + cloud_firestore: ^4.13.1 + firebase_core: ^2.22.0 + firebase_storage: ^11.5.1 + uuid: ^4.2.1 + flutter_timeline_interface: git: url: https://github.com/Iconica-Development/flutter_timeline.git diff --git a/packages/flutter_timeline_interface/lib/src/model/timeline_reaction.dart b/packages/flutter_timeline_interface/lib/src/model/timeline_reaction.dart index 868e8d6..a97951e 100644 --- a/packages/flutter_timeline_interface/lib/src/model/timeline_reaction.dart +++ b/packages/flutter_timeline_interface/lib/src/model/timeline_reaction.dart @@ -11,8 +11,9 @@ class TimelinePostReaction { required this.id, required this.postId, required this.creatorId, - required this.reaction, required this.createdAt, + this.reaction, + this.imageUrl, this.creator, }); @@ -28,8 +29,11 @@ class TimelinePostReaction { /// The creator of the post. If null it isn't loaded yet. final TimelinePosterUserModel? creator; - /// The reactiontext - final String reaction; + /// The reaction text if the creator sent one + final String? reaction; + + /// The url of the image if the creator sent one + final String? imageUrl; /// Reaction creation date. final DateTime createdAt; diff --git a/packages/flutter_timeline_interface/lib/src/services/timeline_service.dart b/packages/flutter_timeline_interface/lib/src/services/timeline_service.dart new file mode 100644 index 0000000..f8cfdca --- /dev/null +++ b/packages/flutter_timeline_interface/lib/src/services/timeline_service.dart @@ -0,0 +1,17 @@ +import 'dart:typed_data'; + +import 'package:flutter_timeline_interface/src/model/timeline_post.dart'; +import 'package:flutter_timeline_interface/src/model/timeline_reaction.dart'; + +abstract class TimelineService { + Future deletePost(TimelinePost post); + Future createPost(TimelinePost post); + Future> fetchPosts(String? category); + Future fetchPostDetails(TimelinePost post); + Future reactToPost( + TimelinePost post, + TimelinePostReaction reaction, { + Uint8List image, + }); + Future likePost(TimelinePost post); +} diff --git a/packages/flutter_timeline_interface/lib/src/services/user_service.dart b/packages/flutter_timeline_interface/lib/src/services/user_service.dart new file mode 100644 index 0000000..d2cd20b --- /dev/null +++ b/packages/flutter_timeline_interface/lib/src/services/user_service.dart @@ -0,0 +1,5 @@ +import 'package:flutter_timeline_interface/src/model/timeline_poster.dart'; + +mixin TimelineUserService { + Future getUser(String userId); +} diff --git a/packages/flutter_timeline_view/lib/src/screens/timeline_post_screen.dart b/packages/flutter_timeline_view/lib/src/screens/timeline_post_screen.dart index cf4a953..8c5effe 100644 --- a/packages/flutter_timeline_view/lib/src/screens/timeline_post_screen.dart +++ b/packages/flutter_timeline_view/lib/src/screens/timeline_post_screen.dart @@ -155,9 +155,10 @@ class TimelinePostScreen extends StatelessWidget { ), ], const SizedBox(width: 10), + // TODO(anyone): show image if the user send one Expanded( child: Text( - reaction.reaction, + reaction.reaction ?? '', style: theme.textTheme.bodyMedium, // text should go to new line softWrap: true,