comments bug fixed
This commit is contained in:
parent
3f31e76108
commit
c8d40adec3
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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'],
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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],
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue