diff --git a/lib/pages/common/publish/common_publish_page.dart b/lib/pages/common/publish/common_publish_page.dart index d585ad24d..6399af8f0 100644 --- a/lib/pages/common/publish/common_publish_page.dart +++ b/lib/pages/common/publish/common_publish_page.dart @@ -34,6 +34,8 @@ abstract class CommonPublishPageState late final RxBool readOnly = false.obs; late final RxBool enablePublish = false.obs; + bool isPublishing = false; + bool hasPub = false; void initPubState(); @@ -205,10 +207,16 @@ abstract class CommonPublishPageState void onSubmitted(String value) { if (enablePublish.value) { - onPublish(); + onPublishThrottle(); } } + void onPublishThrottle() { + if (isPublishing) return; + isPublishing = true; + onPublish().whenComplete(() => isPublishing = false); + } + Future onPublish(); Future onCustomPublish({List? pictures}); diff --git a/lib/pages/common/publish/common_rich_text_pub_page.dart b/lib/pages/common/publish/common_rich_text_pub_page.dart index 939452e08..ce478a36c 100644 --- a/lib/pages/common/publish/common_rich_text_pub_page.dart +++ b/lib/pages/common/publish/common_rich_text_pub_page.dart @@ -548,6 +548,6 @@ abstract class CommonRichTextPubPageState return; } } - onCustomPublish(pictures: pictures); + return onCustomPublish(pictures: pictures); } } diff --git a/lib/pages/dynamics_create/view.dart b/lib/pages/dynamics_create/view.dart index 44120c8aa..8839b319e 100644 --- a/lib/pages/dynamics_create/view.dart +++ b/lib/pages/dynamics_create/view.dart @@ -361,7 +361,7 @@ class _CreateDynPanelState extends CommonRichTextPubPageState { alignment: Alignment.centerRight, child: Obx( () => FilledButton.tonal( - onPressed: enablePublish.value ? onPublish : null, + onPressed: enablePublish.value ? onPublishThrottle : null, style: FilledButton.styleFrom( tapTargetSize: MaterialTapTargetSize.shrinkWrap, padding: const EdgeInsets.symmetric( diff --git a/lib/pages/dynamics_repost/view.dart b/lib/pages/dynamics_repost/view.dart index d5e58c306..cc8be2dab 100644 --- a/lib/pages/dynamics_repost/view.dart +++ b/lib/pages/dynamics_repost/view.dart @@ -267,7 +267,7 @@ class _RepostPanelState extends CommonRichTextPubPageState { ), const Spacer(), TextButton( - onPressed: onPublish, + onPressed: onPublishThrottle, style: TextButton.styleFrom( padding: const EdgeInsets.symmetric( horizontal: 20, @@ -320,7 +320,7 @@ class _RepostPanelState extends CommonRichTextPubPageState { Align( alignment: Alignment.centerRight, child: FilledButton.tonal( - onPressed: onPublish, + onPressed: onPublishThrottle, style: FilledButton.styleFrom( tapTargetSize: MaterialTapTargetSize.shrinkWrap, padding: const EdgeInsets.symmetric( diff --git a/lib/pages/live_room/send_danmaku/view.dart b/lib/pages/live_room/send_danmaku/view.dart index fa9148562..958c48b99 100644 --- a/lib/pages/live_room/send_danmaku/view.dart +++ b/lib/pages/live_room/send_danmaku/view.dart @@ -135,7 +135,7 @@ class _ReplyPageState extends CommonRichTextPubPageState { emojiBtn, Obx( () => FilledButton.tonal( - onPressed: enablePublish.value ? onPublish : null, + onPressed: enablePublish.value ? onPublishThrottle : null, style: FilledButton.styleFrom( visualDensity: .compact, padding: const .symmetric(horizontal: 20, vertical: 10), diff --git a/lib/pages/video/reply_new/view.dart b/lib/pages/video/reply_new/view.dart index 999cfeb72..3be3dd2ac 100644 --- a/lib/pages/video/reply_new/view.dart +++ b/lib/pages/video/reply_new/view.dart @@ -205,7 +205,7 @@ class _ReplyPageState extends CommonRichTextPubPageState { const Spacer(), Obx( () => FilledButton.tonal( - onPressed: enablePublish.value ? onPublish : null, + onPressed: enablePublish.value ? onPublishThrottle : null, style: FilledButton.styleFrom( tapTargetSize: MaterialTapTargetSize.shrinkWrap, padding: const EdgeInsets.symmetric( diff --git a/lib/pages/video/send_danmaku/view.dart b/lib/pages/video/send_danmaku/view.dart index 5ed854bba..afabf45e8 100644 --- a/lib/pages/video/send_danmaku/view.dart +++ b/lib/pages/video/send_danmaku/view.dart @@ -413,7 +413,7 @@ class _SendDanmakuPanelState extends CommonTextPubPageState { iconColor: enablePublish.value ? themeData.colorScheme.primary : themeData.colorScheme.outline, - onPressed: enablePublish.value ? onPublish : null, + onPressed: enablePublish.value ? onPublishThrottle : null, icon: const Icon(Icons.send), ), ),