From dde909457dd471ea0b796e9481c47eb0098b8b4f Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Wed, 15 Apr 2020 19:17:29 +0200 Subject: [PATCH] Simplify use of like widget --- lib/models/comment.dart | 4 ++++ lib/models/like_element.dart | 7 ++++-- lib/models/post.dart | 4 ++++ lib/ui/tiles/comment_tile.dart | 11 +-------- lib/ui/tiles/post_tile.dart | 13 ++--------- lib/ui/widgets/like_widget.dart | 40 ++++++++++++--------------------- 6 files changed, 30 insertions(+), 49 deletions(-) diff --git a/lib/models/comment.dart b/lib/models/comment.dart index 40b7146..a706509 100644 --- a/lib/models/comment.dart +++ b/lib/models/comment.dart @@ -1,3 +1,4 @@ +import 'package:comunic/enums/likes_type.dart'; import 'package:comunic/models/like_element.dart'; import 'package:meta/meta.dart'; import 'package:comunic/utils/account_utils.dart' as account; @@ -40,4 +41,7 @@ class Comment implements LikeElement { bool get hasImage => imageURL != null; bool get isOwner => userID == account.userID(); + + @override + LikesType get likeType => LikesType.COMMENT; } diff --git a/lib/models/like_element.dart b/lib/models/like_element.dart index 2db9f7b..adfb38e 100644 --- a/lib/models/like_element.dart +++ b/lib/models/like_element.dart @@ -1,11 +1,14 @@ +import 'package:comunic/enums/likes_type.dart'; + /// Element that can be liked by the user /// /// @author Pierre HUBERT abstract class LikeElement { + LikesType get likeType; int get id; + bool userLike; int likes; - -} \ No newline at end of file +} diff --git a/lib/models/post.dart b/lib/models/post.dart index 7cfc324..ff0baea 100644 --- a/lib/models/post.dart +++ b/lib/models/post.dart @@ -1,3 +1,4 @@ +import 'package:comunic/enums/likes_type.dart'; import 'package:comunic/enums/post_kind.dart'; import 'package:comunic/enums/post_visibility_level.dart'; import 'package:comunic/enums/user_access_levels.dart'; @@ -83,4 +84,7 @@ class Post implements LikeElement { bool get canDelete => access == UserAccessLevels.FULL || access == UserAccessLevels.INTERMEDIATE; + + @override + LikesType get likeType => LikesType.POST; } diff --git a/lib/ui/tiles/comment_tile.dart b/lib/ui/tiles/comment_tile.dart index 3546581..154dbe6 100644 --- a/lib/ui/tiles/comment_tile.dart +++ b/lib/ui/tiles/comment_tile.dart @@ -1,4 +1,3 @@ -import 'package:comunic/enums/likes_type.dart'; import 'package:comunic/models/comment.dart'; import 'package:comunic/models/user.dart'; import 'package:comunic/ui/widgets/account_image_widget.dart'; @@ -100,15 +99,7 @@ class CommentTile extends StatelessWidget { ), // Comment likes - LikeWidget( - likeType: LikesType.COMMENT, - likeID: comment.id, - likesCount: comment.likes, - isLiking: comment.userLike, - onUpdatedLikings: (count, isLiking) { - comment.likes = count; - comment.userLike = isLiking; - }), + LikeWidget(likeElement: comment), ], ); } diff --git a/lib/ui/tiles/post_tile.dart b/lib/ui/tiles/post_tile.dart index 67841c1..a3837a5 100644 --- a/lib/ui/tiles/post_tile.dart +++ b/lib/ui/tiles/post_tile.dart @@ -1,10 +1,8 @@ import 'dart:io'; -import 'package:comunic/enums/likes_type.dart'; import 'package:comunic/enums/post_kind.dart'; import 'package:comunic/enums/post_visibility_level.dart'; import 'package:comunic/helpers/comments_helper.dart'; -import 'package:comunic/helpers/likes_helper.dart'; import 'package:comunic/helpers/posts_helper.dart'; import 'package:comunic/lists/groups_list.dart'; import 'package:comunic/lists/users_list.dart'; @@ -211,15 +209,8 @@ class _PostTileState extends State { children: [ // Like button Center( - child: LikeWidget( - likeType: LikesType.POST, - likeID: widget.post.id, - likesCount: widget.post.likes, - isLiking: widget.post.userLike, - onUpdatedLikings: (num, userLike) { - widget.post.likes = num; - widget.post.userLike = userLike; - })), + child: LikeWidget(likeElement: widget.post), + ), ], ), ); diff --git a/lib/ui/widgets/like_widget.dart b/lib/ui/widgets/like_widget.dart index a634100..e3c4d50 100644 --- a/lib/ui/widgets/like_widget.dart +++ b/lib/ui/widgets/like_widget.dart @@ -1,5 +1,5 @@ -import 'package:comunic/enums/likes_type.dart'; import 'package:comunic/helpers/likes_helper.dart'; +import 'package:comunic/models/like_element.dart'; import 'package:comunic/ui/widgets/safe_state.dart'; import 'package:comunic/utils/intl_utils.dart'; import 'package:flutter/material.dart'; @@ -14,24 +14,12 @@ import 'package:flutter/material.dart'; typedef UpdatedLikingCallBack = Function(int, bool); class LikeWidget extends StatefulWidget { - final LikesType likeType; - final int likeID; - int likesCount; - bool isLiking; - final UpdatedLikingCallBack onUpdatedLikings; + final LikeElement likeElement; - LikeWidget({ + const LikeWidget({ Key key, - @required this.likeType, - @required this.likeID, - @required this.likesCount, - @required this.isLiking, - @required this.onUpdatedLikings, - }) : assert(likeType != null), - assert(likeID != null), - assert(likesCount != null), - assert(isLiking != null), - assert(onUpdatedLikings != null), + @required this.likeElement, + }) : assert(likeElement != null), super(key: key); @override @@ -39,8 +27,10 @@ class LikeWidget extends StatefulWidget { } class _LikeWidgetState extends SafeState { + LikeElement get elem => widget.likeElement; + String get _likeString { - switch (widget.likesCount) { + switch (elem.likes) { case 0: return tr("Like"); @@ -48,7 +38,7 @@ class _LikeWidgetState extends SafeState { return tr("1 Like"); default: - return tr("%num% likes", args: {"num": widget.likesCount.toString()}); + return tr("%num% likes", args: {"num": elem.likes.toString()}); } } @@ -62,7 +52,7 @@ class _LikeWidgetState extends SafeState { children: [ Icon( Icons.thumb_up, - color: widget.isLiking ? Colors.blue : null, + color: elem.userLike ? Colors.blue : null, size: 15.0, ), SizedBox( @@ -79,14 +69,12 @@ class _LikeWidgetState extends SafeState { /// Toggle like status void _toggleLike() async { // As like are not really important, we ignore failures - if (await LikesHelper().setLiking( - type: widget.likeType, like: !widget.isLiking, id: widget.likeID)) { + if (await LikesHelper() + .setLiking(type: elem.likeType, like: !elem.userLike, id: elem.id)) { setState(() { - widget.isLiking = !widget.isLiking; + elem.userLike = !elem.userLike; - widget.likesCount += widget.isLiking ? 1 : -1; - - widget.onUpdatedLikings(widget.likesCount, widget.isLiking); + elem.likes += elem.userLike ? 1 : -1; }); } }