opt: 为所有点赞、投币添加禁用状态

This commit is contained in:
orz12
2023-12-22 11:03:06 +08:00
parent 6fa4f69af5
commit 0cf707b4c5
4 changed files with 52 additions and 15 deletions

View File

@ -121,7 +121,16 @@ class _BangumiInfoState extends State<BangumiInfo> {
late final BangumiInfoModel? bangumiItem; late final BangumiInfoModel? bangumiItem;
late double sheetHeight; late double sheetHeight;
int? cid; int? cid;
bool isProcessing = false;
VoidCallback handleState(Future Function() action) {
return () async {
if (!isProcessing) {
setState(() => isProcessing = true);
await action();
setState(() => isProcessing = false);
}
};
}
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -395,7 +404,7 @@ class _BangumiInfoState extends State<BangumiInfo> {
() => ActionItem( () => ActionItem(
icon: const Icon(FontAwesomeIcons.thumbsUp), icon: const Icon(FontAwesomeIcons.thumbsUp),
selectIcon: const Icon(FontAwesomeIcons.solidThumbsUp), selectIcon: const Icon(FontAwesomeIcons.solidThumbsUp),
onTap: () => bangumiIntroController.actionLikeVideo(), onTap: handleState(bangumiIntroController.actionLikeVideo),
selectStatus: bangumiIntroController.hasLike.value, selectStatus: bangumiIntroController.hasLike.value,
loadingStatus: false, loadingStatus: false,
text: !widget.loadingStatus text: !widget.loadingStatus
@ -406,7 +415,7 @@ class _BangumiInfoState extends State<BangumiInfo> {
() => ActionItem( () => ActionItem(
icon: const Icon(FontAwesomeIcons.b), icon: const Icon(FontAwesomeIcons.b),
selectIcon: const Icon(FontAwesomeIcons.b), selectIcon: const Icon(FontAwesomeIcons.b),
onTap: () => bangumiIntroController.actionCoinVideo(), onTap: handleState(bangumiIntroController.actionCoinVideo),
selectStatus: bangumiIntroController.hasCoin.value, selectStatus: bangumiIntroController.hasCoin.value,
loadingStatus: false, loadingStatus: false,
text: !widget.loadingStatus text: !widget.loadingStatus
@ -455,7 +464,7 @@ class _BangumiInfoState extends State<BangumiInfo> {
Obx( Obx(
() => ActionRowItem( () => ActionRowItem(
icon: const Icon(FontAwesomeIcons.thumbsUp), icon: const Icon(FontAwesomeIcons.thumbsUp),
onTap: () => videoIntroController.actionLikeVideo(), onTap: handleState(videoIntroController.actionLikeVideo),
selectStatus: videoIntroController.hasLike.value, selectStatus: videoIntroController.hasLike.value,
loadingStatus: widget.loadingStatus, loadingStatus: widget.loadingStatus,
text: !widget.loadingStatus text: !widget.loadingStatus
@ -467,7 +476,7 @@ class _BangumiInfoState extends State<BangumiInfo> {
Obx( Obx(
() => ActionRowItem( () => ActionRowItem(
icon: const Icon(FontAwesomeIcons.b), icon: const Icon(FontAwesomeIcons.b),
onTap: () => videoIntroController.actionCoinVideo(), onTap: handleState(videoIntroController.actionCoinVideo),
selectStatus: videoIntroController.hasCoin.value, selectStatus: videoIntroController.hasCoin.value,
loadingStatus: widget.loadingStatus, loadingStatus: widget.loadingStatus,
text: !widget.loadingStatus text: !widget.loadingStatus

View File

@ -23,7 +23,16 @@ class ActionPanel extends StatefulWidget {
class _ActionPanelState extends State<ActionPanel> { class _ActionPanelState extends State<ActionPanel> {
final DynamicsController _dynamicsController = Get.put(DynamicsController()); final DynamicsController _dynamicsController = Get.put(DynamicsController());
late ModuleStatModel stat; late ModuleStatModel stat;
bool isProcessing = false;
VoidCallback handleState(Future Function() action) {
return () async {
if (!isProcessing) {
setState(() => isProcessing = true);
await action();
setState(() => isProcessing = false);
}
};
}
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -31,7 +40,7 @@ class _ActionPanelState extends State<ActionPanel> {
} }
// 动态点赞 // 动态点赞
onLikeDynamic() async { Future onLikeDynamic() async {
feedBack(); feedBack();
var item = widget.item!; var item = widget.item!;
String dynamicId = item.idStr!; String dynamicId = item.idStr!;
@ -101,7 +110,7 @@ class _ActionPanelState extends State<ActionPanel> {
Expanded( Expanded(
flex: 1, flex: 1,
child: TextButton.icon( child: TextButton.icon(
onPressed: () => onLikeDynamic(), onPressed: handleState(onLikeDynamic),
icon: Icon( icon: Icon(
stat.like!.status! stat.like!.status!
? FontAwesomeIcons.solidThumbsUp ? FontAwesomeIcons.solidThumbsUp

View File

@ -134,7 +134,16 @@ class _VideoInfoState extends State<VideoInfo> with TickerProviderStateMixin {
late int mid; late int mid;
late String memberHeroTag; late String memberHeroTag;
late bool enableAi; late bool enableAi;
bool isProcessing = false;
VoidCallback handleState(Future Function() action) {
return () async {
if (!isProcessing) {
setState(() => isProcessing = true);
await action();
setState(() => isProcessing = false);
}
};
}
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -477,7 +486,7 @@ class _VideoInfoState extends State<VideoInfo> with TickerProviderStateMixin {
() => ActionItem( () => ActionItem(
icon: const Icon(FontAwesomeIcons.thumbsUp), icon: const Icon(FontAwesomeIcons.thumbsUp),
selectIcon: const Icon(FontAwesomeIcons.solidThumbsUp), selectIcon: const Icon(FontAwesomeIcons.solidThumbsUp),
onTap: () => videoIntroController.actionLikeVideo(), onTap: handleState(videoIntroController.actionLikeVideo),
selectStatus: videoIntroController.hasLike.value, selectStatus: videoIntroController.hasLike.value,
loadingStatus: loadingStatus, loadingStatus: loadingStatus,
text: !loadingStatus text: !loadingStatus
@ -494,7 +503,7 @@ class _VideoInfoState extends State<VideoInfo> with TickerProviderStateMixin {
() => ActionItem( () => ActionItem(
icon: const Icon(FontAwesomeIcons.b), icon: const Icon(FontAwesomeIcons.b),
selectIcon: const Icon(FontAwesomeIcons.b), selectIcon: const Icon(FontAwesomeIcons.b),
onTap: () => videoIntroController.actionCoinVideo(), onTap: handleState(videoIntroController.actionCoinVideo),
selectStatus: videoIntroController.hasCoin.value, selectStatus: videoIntroController.hasCoin.value,
loadingStatus: loadingStatus, loadingStatus: loadingStatus,
text: !loadingStatus text: !loadingStatus
@ -538,7 +547,7 @@ class _VideoInfoState extends State<VideoInfo> with TickerProviderStateMixin {
Obx( Obx(
() => ActionRowItem( () => ActionRowItem(
icon: const Icon(FontAwesomeIcons.thumbsUp), icon: const Icon(FontAwesomeIcons.thumbsUp),
onTap: () => videoIntroController.actionLikeVideo(), onTap: handleState(videoIntroController.actionLikeVideo),
selectStatus: videoIntroController.hasLike.value, selectStatus: videoIntroController.hasLike.value,
loadingStatus: loadingStatus, loadingStatus: loadingStatus,
text: text:
@ -549,7 +558,7 @@ class _VideoInfoState extends State<VideoInfo> with TickerProviderStateMixin {
Obx( Obx(
() => ActionRowItem( () => ActionRowItem(
icon: const Icon(FontAwesomeIcons.b), icon: const Icon(FontAwesomeIcons.b),
onTap: () => videoIntroController.actionCoinVideo(), onTap: handleState(videoIntroController.actionCoinVideo),
selectStatus: videoIntroController.hasCoin.value, selectStatus: videoIntroController.hasCoin.value,
loadingStatus: loadingStatus, loadingStatus: loadingStatus,
text: text:

View File

@ -22,7 +22,7 @@ class ZanButton extends StatefulWidget {
class _ZanButtonState extends State<ZanButton> { class _ZanButtonState extends State<ZanButton> {
// 评论点赞 // 评论点赞
onLikeReply() async { Future onLikeReply() async {
feedBack(); feedBack();
// SmartDialog.showLoading(msg: 'pilipala ...'); // SmartDialog.showLoading(msg: 'pilipala ...');
ReplyItemModel replyItem = widget.replyItem!; ReplyItemModel replyItem = widget.replyItem!;
@ -47,6 +47,16 @@ class _ZanButtonState extends State<ZanButton> {
SmartDialog.showToast(res['msg']); SmartDialog.showToast(res['msg']);
} }
} }
bool isProcessing = false;
VoidCallback handleState(Future Function() action) {
return () async {
if (!isProcessing) {
setState(() => isProcessing = true);
await action();
setState(() => isProcessing = false);
}
};
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -55,6 +65,7 @@ class _ZanButtonState extends State<ZanButton> {
return SizedBox( return SizedBox(
height: 32, height: 32,
child: TextButton( child: TextButton(
onPressed: handleState(onLikeReply),
child: Row( child: Row(
children: [ children: [
Icon( Icon(
@ -79,7 +90,6 @@ class _ZanButtonState extends State<ZanButton> {
), ),
], ],
), ),
onPressed: () => onLikeReply(),
), ),
); );
} }