diff --git a/lib/pages/bangumi/introduction/view.dart b/lib/pages/bangumi/introduction/view.dart index 62842075..63c66515 100644 --- a/lib/pages/bangumi/introduction/view.dart +++ b/lib/pages/bangumi/introduction/view.dart @@ -121,7 +121,14 @@ class _BangumiInfoState extends State { late final BangumiInfoModel? bangumiItem; late double sheetHeight; int? cid; - + bool isProcessing = false; + void Function()? handleState(Future Function() action) { + return isProcessing ? null : () async { + setState(() => isProcessing = true); + await action(); + setState(() => isProcessing = false); + }; + } @override void initState() { super.initState(); @@ -395,7 +402,7 @@ class _BangumiInfoState extends State { () => ActionItem( icon: const Icon(FontAwesomeIcons.thumbsUp), selectIcon: const Icon(FontAwesomeIcons.solidThumbsUp), - onTap: () => bangumiIntroController.actionLikeVideo(), + onTap: handleState(bangumiIntroController.actionLikeVideo), selectStatus: bangumiIntroController.hasLike.value, loadingStatus: false, text: !widget.loadingStatus @@ -406,7 +413,7 @@ class _BangumiInfoState extends State { () => ActionItem( icon: const Icon(FontAwesomeIcons.b), selectIcon: const Icon(FontAwesomeIcons.b), - onTap: () => bangumiIntroController.actionCoinVideo(), + onTap: handleState(bangumiIntroController.actionCoinVideo), selectStatus: bangumiIntroController.hasCoin.value, loadingStatus: false, text: !widget.loadingStatus @@ -455,7 +462,7 @@ class _BangumiInfoState extends State { Obx( () => ActionRowItem( icon: const Icon(FontAwesomeIcons.thumbsUp), - onTap: () => videoIntroController.actionLikeVideo(), + onTap: handleState(videoIntroController.actionLikeVideo), selectStatus: videoIntroController.hasLike.value, loadingStatus: widget.loadingStatus, text: !widget.loadingStatus @@ -467,7 +474,7 @@ class _BangumiInfoState extends State { Obx( () => ActionRowItem( icon: const Icon(FontAwesomeIcons.b), - onTap: () => videoIntroController.actionCoinVideo(), + onTap: handleState(videoIntroController.actionCoinVideo), selectStatus: videoIntroController.hasCoin.value, loadingStatus: widget.loadingStatus, text: !widget.loadingStatus diff --git a/lib/pages/dynamics/widgets/action_panel.dart b/lib/pages/dynamics/widgets/action_panel.dart index 53c9e497..0ca09b8c 100644 --- a/lib/pages/dynamics/widgets/action_panel.dart +++ b/lib/pages/dynamics/widgets/action_panel.dart @@ -23,7 +23,14 @@ class ActionPanel extends StatefulWidget { class _ActionPanelState extends State { final DynamicsController _dynamicsController = Get.put(DynamicsController()); late ModuleStatModel stat; - + bool isProcessing = false; + void Function()? handleState(Future Function() action) { + return isProcessing ? null : () async { + setState(() => isProcessing = true); + await action(); + setState(() => isProcessing = false); + }; + } @override void initState() { super.initState(); @@ -31,7 +38,7 @@ class _ActionPanelState extends State { } // 动态点赞 - onLikeDynamic() async { + Future onLikeDynamic() async { feedBack(); var item = widget.item!; String dynamicId = item.idStr!; @@ -101,7 +108,7 @@ class _ActionPanelState extends State { Expanded( flex: 1, child: TextButton.icon( - onPressed: () => onLikeDynamic(), + onPressed: handleState(onLikeDynamic), icon: Icon( stat.like!.status! ? FontAwesomeIcons.solidThumbsUp diff --git a/lib/pages/video/detail/introduction/view.dart b/lib/pages/video/detail/introduction/view.dart index 98ce9ba8..a0d4adde 100644 --- a/lib/pages/video/detail/introduction/view.dart +++ b/lib/pages/video/detail/introduction/view.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:get/get.dart'; @@ -134,7 +136,14 @@ class _VideoInfoState extends State with TickerProviderStateMixin { late int mid; late String memberHeroTag; late bool enableAi; - + bool isProcessing = false; + void Function()? handleState(Future Function() action) { + return isProcessing ? null : () async { + setState(() => isProcessing = true); + await action(); + setState(() => isProcessing = false); + }; + } @override void initState() { super.initState(); @@ -477,7 +486,7 @@ class _VideoInfoState extends State with TickerProviderStateMixin { () => ActionItem( icon: const Icon(FontAwesomeIcons.thumbsUp), selectIcon: const Icon(FontAwesomeIcons.solidThumbsUp), - onTap: () => videoIntroController.actionLikeVideo(), + onTap: handleState(videoIntroController.actionLikeVideo), selectStatus: videoIntroController.hasLike.value, loadingStatus: loadingStatus, text: !loadingStatus @@ -494,7 +503,7 @@ class _VideoInfoState extends State with TickerProviderStateMixin { () => ActionItem( icon: const Icon(FontAwesomeIcons.b), selectIcon: const Icon(FontAwesomeIcons.b), - onTap: () => videoIntroController.actionCoinVideo(), + onTap: handleState(videoIntroController.actionCoinVideo), selectStatus: videoIntroController.hasCoin.value, loadingStatus: loadingStatus, text: !loadingStatus @@ -538,7 +547,7 @@ class _VideoInfoState extends State with TickerProviderStateMixin { Obx( () => ActionRowItem( icon: const Icon(FontAwesomeIcons.thumbsUp), - onTap: () => videoIntroController.actionLikeVideo(), + onTap: handleState(videoIntroController.actionLikeVideo), selectStatus: videoIntroController.hasLike.value, loadingStatus: loadingStatus, text: @@ -549,7 +558,7 @@ class _VideoInfoState extends State with TickerProviderStateMixin { Obx( () => ActionRowItem( icon: const Icon(FontAwesomeIcons.b), - onTap: () => videoIntroController.actionCoinVideo(), + onTap: handleState(videoIntroController.actionCoinVideo), selectStatus: videoIntroController.hasCoin.value, loadingStatus: loadingStatus, text: diff --git a/lib/pages/video/detail/reply/widgets/zan.dart b/lib/pages/video/detail/reply/widgets/zan.dart index da0c1378..b9ead14e 100644 --- a/lib/pages/video/detail/reply/widgets/zan.dart +++ b/lib/pages/video/detail/reply/widgets/zan.dart @@ -22,9 +22,9 @@ class ZanButton extends StatefulWidget { class _ZanButtonState extends State { // 评论点赞 - onLikeReply() async { + Future onLikeReply() async { feedBack(); - SmartDialog.showLoading(msg: 'pilipala ...'); + // SmartDialog.showLoading(msg: 'pilipala ...'); ReplyItemModel replyItem = widget.replyItem!; int oid = replyItem.oid!; int rpid = replyItem.rpid!; @@ -32,7 +32,7 @@ class _ZanButtonState extends State { int action = replyItem.action == 0 ? 1 : 0; var res = await ReplyHttp.likeReply( type: widget.replyType!.index, oid: oid, rpid: rpid, action: action); - SmartDialog.dismiss(); + // SmartDialog.dismiss(); if (res['status']) { SmartDialog.showToast(replyItem.action == 0 ? '点赞成功 👍' : '取消赞 💔'); if (action == 1) { @@ -47,6 +47,14 @@ class _ZanButtonState extends State { SmartDialog.showToast(res['msg']); } } + bool isProcessing = false; + void Function()? handleState(Future Function() action) { + return isProcessing ? null : () async { + setState(() => isProcessing = true); + await action(); + setState(() => isProcessing = false); + }; + } @override Widget build(BuildContext context) { @@ -55,6 +63,7 @@ class _ZanButtonState extends State { return SizedBox( height: 32, child: TextButton( + onPressed: handleState(onLikeReply), child: Row( children: [ Icon( @@ -79,7 +88,6 @@ class _ZanButtonState extends State { ), ], ), - onPressed: () => onLikeReply(), ), ); }