comments delete and report + bug fixes

This commit is contained in:
MohammadTaha Basiri 2022-04-20 23:00:30 +04:30
parent a52ac7cdae
commit 257e4b6a59
5 changed files with 92 additions and 3 deletions

View File

@ -145,6 +145,8 @@ class RequestHelper {
baseUrl + '/$type/$id/comments/$commentId/feedback'; baseUrl + '/$type/$id/comments/$commentId/feedback';
static String addComment(int id, String type) => static String addComment(int id, String type) =>
baseUrl + '/$type/$id/comments/add'; baseUrl + '/$type/$id/comments/add';
static String deleteComment(int id) => baseUrl + '/comment/$id';
static String reportComment(int id) => baseUrl + '/comment/$id/report';
static String _urlConcatGenerator(List<MapEntry<String, dynamic>> additions) { static String _urlConcatGenerator(List<MapEntry<String, dynamic>> additions) {
String result = ''; String result = '';

View File

@ -4,7 +4,7 @@ import 'package:didvan/constants/app_icons.dart';
import 'package:didvan/constants/assets.dart'; import 'package:didvan/constants/assets.dart';
import 'package:didvan/models/view/app_bar_data.dart'; import 'package:didvan/models/view/app_bar_data.dart';
import 'package:didvan/views/home/comments/comments_state.dart'; import 'package:didvan/views/home/comments/comments_state.dart';
import 'package:didvan/views/home/comments/widgets/comment_item.dart'; import 'package:didvan/views/home/comments/widgets/comment.dart';
import 'package:didvan/views/widgets/animated_visibility.dart'; import 'package:didvan/views/widgets/animated_visibility.dart';
import 'package:didvan/views/widgets/didvan/icon_button.dart'; import 'package:didvan/views/widgets/didvan/icon_button.dart';
import 'package:didvan/views/widgets/didvan/scaffold.dart'; import 'package:didvan/views/widgets/didvan/scaffold.dart';

View File

@ -4,10 +4,12 @@ import 'package:didvan/models/comment/feedback.dart';
import 'package:didvan/models/comment/reply.dart'; import 'package:didvan/models/comment/reply.dart';
import 'package:didvan/models/comment/user.dart'; import 'package:didvan/models/comment/user.dart';
import 'package:didvan/models/enums.dart'; import 'package:didvan/models/enums.dart';
import 'package:didvan/models/view/alert_data.dart';
import 'package:didvan/providers/core.dart'; import 'package:didvan/providers/core.dart';
import 'package:didvan/providers/user.dart'; import 'package:didvan/providers/user.dart';
import 'package:didvan/services/network/request.dart'; import 'package:didvan/services/network/request.dart';
import 'package:didvan/services/network/request_helper.dart'; import 'package:didvan/services/network/request_helper.dart';
import 'package:didvan/utils/action_sheet.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class CommentsState extends CoreProvier { class CommentsState extends CoreProvier {
@ -158,4 +160,42 @@ class CommentsState extends CoreProvier {
replyingTo = null; replyingTo = null;
} }
} }
void reportComment(int id) {
final service = RequestService(RequestHelper.reportComment(id));
service.post();
ActionSheetUtils.showAlert(
AlertData(
message: 'گزارش شما با موفقیت ثبت شد و به زودی بررسی میگردد.',
aLertType: ALertType.success,
),
);
}
void deleteComment(int id, int? rootId) {
final service = RequestService(RequestHelper.deleteComment(id));
service.delete();
if (rootId == null) {
final comment = comments.firstWhere((element) => element.id == id);
if (comment.replies.isNotEmpty) {
comments.insertAll(
comments.indexOf(comment),
comment.replies.map(
(rep) => CommentData(
id: rep.id,
text: rep.text,
createdAt: rep.createdAt,
liked: rep.liked,
disliked: rep.disliked,
feedback: rep.feedback,
user: rep.user,
replies: [],
),
),
);
}
comments.remove(comment);
}
notifyListeners();
}
} }

View File

@ -2,8 +2,13 @@ import 'package:didvan/config/design_config.dart';
import 'package:didvan/config/theme_data.dart'; import 'package:didvan/config/theme_data.dart';
import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/constants/app_icons.dart';
import 'package:didvan/models/comment/comment.dart'; import 'package:didvan/models/comment/comment.dart';
import 'package:didvan/models/comment/reply.dart';
import 'package:didvan/models/view/action_sheet_data.dart';
import 'package:didvan/providers/user.dart';
import 'package:didvan/utils/action_sheet.dart';
import 'package:didvan/utils/date_time.dart'; import 'package:didvan/utils/date_time.dart';
import 'package:didvan/views/home/comments/comments_state.dart'; import 'package:didvan/views/home/comments/comments_state.dart';
import 'package:didvan/views/home/widgets/menu_item.dart';
import 'package:didvan/views/widgets/animated_visibility.dart'; import 'package:didvan/views/widgets/animated_visibility.dart';
import 'package:didvan/views/widgets/didvan/icon_button.dart'; import 'package:didvan/views/widgets/didvan/icon_button.dart';
import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:didvan/views/widgets/didvan/text.dart';
@ -84,17 +89,24 @@ class CommentState extends State<Comment> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
DidvanText( DidvanText(
comment.user.fullName, comment.user.fullName,
style: Theme.of(context).textTheme.bodyText1, style: Theme.of(context).textTheme.bodyText1,
), ),
const Spacer(),
DidvanText( DidvanText(
DateTimeUtils.momentGenerator(comment.createdAt), DateTimeUtils.momentGenerator(comment.createdAt),
style: Theme.of(context).textTheme.caption, style: Theme.of(context).textTheme.caption,
color: Theme.of(context).colorScheme.caption, color: Theme.of(context).colorScheme.caption,
), ),
const SizedBox(width: 4),
DidvanIconButton(
size: 18,
gestureSize: 24,
icon: DidvanIcons.menu_light,
onPressed: () => _showCommentActions(comment),
),
], ],
), ),
const SizedBox(height: 8), const SizedBox(height: 8),
@ -171,6 +183,42 @@ class CommentState extends State<Comment> {
], ],
), ),
); );
Future<void> _showCommentActions(comment) async {
ActionSheetUtils.showBottomSheet(
data: ActionSheetData(
title: 'گزینه‌های نظر',
content: Column(
children: [
if (comment.user.id != context.read<UserProvider>().user.id)
MenuItem(
title: 'گزارش محتوای نامناسب',
onTap: () {
state.reportComment(comment.id);
ActionSheetUtils.pop();
},
icon: DidvanIcons.alert_regular,
),
if (comment.user.id == context.read<UserProvider>().user.id)
MenuItem(
title: 'حذف نظر',
color: Theme.of(context).colorScheme.secondary,
onTap: () {
state.deleteComment(
comment.id,
comment.runtimeType == Reply ? _comment.id : null,
);
ActionSheetUtils.pop();
},
icon: DidvanIcons.trash_solid,
),
],
),
hasConfirmButton: false,
hasDismissButton: false,
),
);
}
} }
class _FeedbackButtons extends StatefulWidget { class _FeedbackButtons extends StatefulWidget {

View File

@ -88,7 +88,6 @@ class _StudioDetailsState extends State<StudioDetails> {
), ),
), ),
body: SingleChildScrollView( body: SingleChildScrollView(
physics: const NeverScrollableScrollPhysics(),
child: SizedBox( child: SizedBox(
height: d.size.height - d.padding.top - 56, height: d.size.height - d.padding.top - 56,
child: Column( child: Column(