feat: thumbsdown reply

This commit is contained in:
bggRGjQaUbCoE
2024-10-09 09:41:54 +08:00
parent 03b2a3ced3
commit 0c8ac833a2
5 changed files with 129 additions and 36 deletions

View File

@@ -364,11 +364,19 @@ class ReplyItem extends StatelessWidget {
),
const SizedBox(width: 2),
if (replyItem!.upAction!.like!) ...[
Text(
'UP主觉得很赞',
style: TextStyle(
color: Theme.of(context).colorScheme.primary,
fontSize: Theme.of(context).textTheme.labelMedium!.fontSize),
SizedBox(
height: 32,
child: TextButton(
onPressed: null,
child: Text(
'UP主觉得很赞',
style: TextStyle(
color: Theme.of(context).colorScheme.primary,
fontSize: Theme.of(context).textTheme.labelMedium!.fontSize,
fontWeight: FontWeight.normal,
),
),
),
),
const SizedBox(width: 2),
],

View File

@@ -21,6 +21,38 @@ class ZanButton extends StatefulWidget {
}
class _ZanButtonState extends State<ZanButton> {
Future onHateReply() async {
feedBack();
// SmartDialog.showLoading(msg: 'pilipala ...');
final ReplyItemModel replyItem = widget.replyItem!;
final int oid = replyItem.oid!;
final int rpid = replyItem.rpid!;
// 1 已点赞 2 不喜欢 0 未操作
final int action = replyItem.action != 2 ? 2 : 0;
final res = await ReplyHttp.hateReply(
type: widget.replyType!.index,
action: action == 2 ? 1 : 0,
oid: oid,
rpid: rpid,
);
// SmartDialog.dismiss();
if (res['status']) {
SmartDialog.showToast(replyItem.action != 2 ? '点踩成功' : '取消踩');
if (action == 2) {
if (replyItem.action == 1) {
replyItem.like = replyItem.like! - 1;
}
replyItem.action = 2;
} else {
// replyItem.like = replyItem.like! - 1;
replyItem.action = 0;
}
setState(() {});
} else {
SmartDialog.showToast(res['msg']);
}
}
// 评论点赞
Future onLikeReply() async {
feedBack();
@@ -29,12 +61,12 @@ class _ZanButtonState extends State<ZanButton> {
final int oid = replyItem.oid!;
final int rpid = replyItem.rpid!;
// 1 已点赞 2 不喜欢 0 未操作
final int action = replyItem.action == 0 ? 1 : 0;
final int action = replyItem.action != 1 ? 1 : 0;
final res = await ReplyHttp.likeReply(
type: widget.replyType!.index, oid: oid, rpid: rpid, action: action);
// SmartDialog.dismiss();
if (res['status']) {
SmartDialog.showToast(replyItem.action == 0 ? '点赞成功' : '取消赞');
SmartDialog.showToast(replyItem.action != 1 ? '点赞成功' : '取消赞');
if (action == 1) {
replyItem.like = replyItem.like! + 1;
replyItem.action = 1;
@@ -64,38 +96,58 @@ class _ZanButtonState extends State<ZanButton> {
final ThemeData t = Theme.of(context);
final Color color = t.colorScheme.outline;
final Color primary = t.colorScheme.primary;
return SizedBox(
height: 32,
child: TextButton(
onPressed: handleState(onLikeReply),
child: Row(
children: [
Icon(
widget.replyItem!.action == 1
? FontAwesomeIcons.solidThumbsUp
: FontAwesomeIcons.thumbsUp,
return Row(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(
height: 32,
child: TextButton(
onPressed: handleState(onHateReply),
child: Icon(
widget.replyItem!.action == 2
? FontAwesomeIcons.solidThumbsDown
: FontAwesomeIcons.thumbsDown,
size: 16,
color: widget.replyItem!.action == 1 ? primary : color,
semanticLabel: widget.replyItem!.action == 1 ? '' : '',
color: widget.replyItem!.action == 2 ? primary : color,
semanticLabel: widget.replyItem!.action == 2 ? '' : '',
),
const SizedBox(width: 4),
AnimatedSwitcher(
duration: const Duration(milliseconds: 400),
transitionBuilder: (Widget child, Animation<double> animation) {
return ScaleTransition(scale: animation, child: child);
},
child: Text(
widget.replyItem!.like.toString(),
key: ValueKey<int>(widget.replyItem!.like!),
style: TextStyle(
color: widget.replyItem!.action == 1 ? primary : color,
fontSize: t.textTheme.labelSmall!.fontSize,
),
),
),
],
),
),
),
SizedBox(
height: 32,
child: TextButton(
onPressed: handleState(onLikeReply),
child: Row(
children: [
Icon(
widget.replyItem!.action == 1
? FontAwesomeIcons.solidThumbsUp
: FontAwesomeIcons.thumbsUp,
size: 16,
color: widget.replyItem!.action == 1 ? primary : color,
semanticLabel: widget.replyItem!.action == 1 ? '已赞' : '点赞',
),
const SizedBox(width: 4),
AnimatedSwitcher(
duration: const Duration(milliseconds: 400),
transitionBuilder:
(Widget child, Animation<double> animation) {
return ScaleTransition(scale: animation, child: child);
},
child: Text(
widget.replyItem!.like.toString(),
key: ValueKey<int>(widget.replyItem!.like!),
style: TextStyle(
color: widget.replyItem!.action == 1 ? primary : color,
fontSize: t.textTheme.labelSmall!.fontSize,
),
),
),
],
),
),
),
],
);
}
}