comments bug fixed

This commit is contained in:
MohammadTaha Basiri 2022-03-31 00:55:36 +04:30
parent 3f31e76108
commit c8d40adec3
6 changed files with 59 additions and 24 deletions

View File

@ -6,9 +6,9 @@ class CommentData {
int id; int id;
final String text; final String text;
final String createdAt; final String createdAt;
final bool liked; bool liked;
final bool disliked; bool disliked;
FeedbackData feedback; final FeedbackData feedback;
final UserOverview user; final UserOverview user;
final List<Reply> replies; final List<Reply> replies;

View File

@ -1,8 +1,8 @@
class FeedbackData { class FeedbackData {
final int like; int like;
final int dislike; int dislike;
const FeedbackData({required this.like, required this.dislike}); FeedbackData({required this.like, required this.dislike});
factory FeedbackData.fromJson(Map<String, dynamic> json) => FeedbackData( factory FeedbackData.fromJson(Map<String, dynamic> json) => FeedbackData(
like: json['like'], like: json['like'],

View File

@ -44,9 +44,8 @@ class UserProvider extends CoreProvier {
Future<void> _registerFirebaseToken() async { Future<void> _registerFirebaseToken() async {
final service = RequestService(RequestHelper.firebaseToken, body: { final service = RequestService(RequestHelper.firebaseToken, body: {
'firebaseToken': AppInitializer.fcmToken, 'token': AppInitializer.fcmToken,
}); });
await service.put(); await service.put();
} }

View File

@ -85,6 +85,10 @@ class _CommentsState extends State<Comments> {
title: 'اولین نظر را بنویسید...', title: 'اولین نظر را بنویسید...',
), ),
builder: (context, state, index) => Comment( builder: (context, state, index) => Comment(
key: ValueKey(
state.comments[index].id.toString() +
state.comments[index].text,
),
focusNode: _focusNode, focusNode: _focusNode,
comment: state.comments[index], comment: state.comments[index],
), ),

View File

@ -44,8 +44,31 @@ class CommentsState extends CoreProvier {
appState = AppState.failed; appState = AppState.failed;
} }
Future<void> feedback(int id, bool like, bool dislike) async { Future<void> feedback({
required int id,
required bool like,
required bool dislike,
required int likeCount,
required int dislikeCount,
int? replyId,
}) async {
_feedbackQueue.addAll({id: MapEntry(like, dislike)}); _feedbackQueue.addAll({id: MapEntry(like, dislike)});
dynamic comment;
if (replyId == null) {
comment = comments.firstWhere((comment) => comment.id == id);
} else {
comment = comments
.firstWhere((comment) => comment.id == id)
.replies
.firstWhere((element) => element.id == replyId);
}
if (comment != null) {
comment.feedback.like = likeCount;
comment.feedback.dislike = dislikeCount;
comment.disliked = dislike;
comment.liked = like;
}
Future.delayed(const Duration(milliseconds: 500), () async { Future.delayed(const Duration(milliseconds: 500), () async {
if (!_feedbackQueue.containsKey(id)) return; if (!_feedbackQueue.containsKey(id)) return;
final service = RequestService( final service = RequestService(
@ -70,7 +93,7 @@ class CommentsState extends CoreProvier {
createdAt: DateTime.now().toString(), createdAt: DateTime.now().toString(),
liked: false, liked: false,
disliked: false, disliked: false,
feedback: const FeedbackData(like: 0, dislike: 0), feedback: FeedbackData(like: 0, dislike: 0),
toUser: replyingTo!, toUser: replyingTo!,
user: UserOverview( user: UserOverview(
id: user.id, id: user.id,
@ -88,7 +111,7 @@ class CommentsState extends CoreProvier {
createdAt: DateTime.now().toString(), createdAt: DateTime.now().toString(),
liked: false, liked: false,
disliked: false, disliked: false,
feedback: const FeedbackData(like: 0, dislike: 0), feedback: FeedbackData(like: 0, dislike: 0),
user: UserOverview( user: UserOverview(
id: user.id, id: user.id,
fullName: user.fullName, fullName: user.fullName,

View File

@ -49,7 +49,7 @@ class CommentState extends State<Comment> {
duration: DesignConfig.lowAnimationDuration, duration: DesignConfig.lowAnimationDuration,
isVisible: _showSubComments, isVisible: _showSubComments,
child: _commentBuilder( child: _commentBuilder(
isSubComment: true, isReply: true,
comment: _comment.replies[i], comment: _comment.replies[i],
), ),
), ),
@ -57,11 +57,10 @@ class CommentState extends State<Comment> {
); );
} }
Widget _commentBuilder({required comment, bool isSubComment = false}) => Widget _commentBuilder({required comment, bool isReply = false}) => Container(
Container(
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border( border: Border(
right: isSubComment right: isReply
? BorderSide(color: Theme.of(context).colorScheme.caption) ? BorderSide(color: Theme.of(context).colorScheme.caption)
: BorderSide.none, : BorderSide.none,
), ),
@ -69,7 +68,7 @@ class CommentState extends State<Comment> {
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
if (isSubComment) const SizedBox(width: 12), if (isReply) const SizedBox(width: 12),
if (comment.user.photo == null) if (comment.user.photo == null)
const Icon(DidvanIcons.avatar_light), const Icon(DidvanIcons.avatar_light),
if (comment.user.photo != null) if (comment.user.photo != null)
@ -99,7 +98,7 @@ class CommentState extends State<Comment> {
], ],
), ),
const SizedBox(height: 8), const SizedBox(height: 8),
if (isSubComment) if (isReply)
DidvanText( DidvanText(
'پاسخ به ${comment.toUser.fullName}', 'پاسخ به ${comment.toUser.fullName}',
style: Theme.of(context).textTheme.caption, style: Theme.of(context).textTheme.caption,
@ -124,8 +123,8 @@ class CommentState extends State<Comment> {
color: Theme.of(context).colorScheme.primary, color: Theme.of(context).colorScheme.primary,
), ),
), ),
if (!isSubComment) const SizedBox(width: 20), if (!isReply) const SizedBox(width: 20),
if (!isSubComment && comment.replies.isNotEmpty) if (!isReply && comment.replies.isNotEmpty)
InkWrapper( InkWrapper(
onPressed: () => setState( onPressed: () => setState(
() => _showSubComments = !_showSubComments, () => _showSubComments = !_showSubComments,
@ -154,8 +153,15 @@ class CommentState extends State<Comment> {
dislikeCount: comment.feedback.dislike, dislikeCount: comment.feedback.dislike,
likeValue: comment.liked, likeValue: comment.liked,
dislikeValue: comment.disliked, dislikeValue: comment.disliked,
onFeedback: (like, dislike) => onFeedback: (like, dislike, likeCount, dislikeCount) =>
state.feedback(comment.id, like, dislike), state.feedback(
id: _comment.id,
like: like,
dislike: dislike,
likeCount: likeCount,
dislikeCount: dislikeCount,
replyId: isReply ? comment.id : null,
),
), ),
], ],
), ),
@ -172,7 +178,8 @@ class _FeedbackButtons extends StatefulWidget {
final int dislikeCount; final int dislikeCount;
final bool likeValue; final bool likeValue;
final bool dislikeValue; final bool dislikeValue;
final void Function(bool like, bool dislike) onFeedback; final void Function(bool like, bool dislike, int likeCount, int dislikeCount)
onFeedback;
const _FeedbackButtons({ const _FeedbackButtons({
Key? key, Key? key,
required this.onFeedback, required this.onFeedback,
@ -228,7 +235,8 @@ class _FeedbackButtonsState extends State<_FeedbackButtons> {
} }
_likeValue = !_likeValue; _likeValue = !_likeValue;
}); });
widget.onFeedback(_likeValue, _dislikeValue); widget.onFeedback(
_likeValue, _dislikeValue, _likeCount, _dislikeCount);
}, },
), ),
const SizedBox(width: 16), const SizedBox(width: 16),
@ -257,7 +265,8 @@ class _FeedbackButtonsState extends State<_FeedbackButtons> {
} }
_dislikeValue = !_dislikeValue; _dislikeValue = !_dislikeValue;
}); });
widget.onFeedback(_likeValue, _dislikeValue); widget.onFeedback(
_likeValue, _dislikeValue, _likeCount, _dislikeCount);
}, },
), ),
], ],