From 66f15f532f610756b6f5bb4e5ae7516f9b6ceecb Mon Sep 17 00:00:00 2001 From: dom Date: Tue, 19 May 2026 21:51:47 +0800 Subject: [PATCH] add publish throttle Closes #2152 Signed-off-by: dom --- lib/pages/common/publish/common_publish_page.dart | 10 +++++++++- .../common/publish/common_rich_text_pub_page.dart | 2 +- lib/pages/dynamics_create/view.dart | 2 +- lib/pages/dynamics_repost/view.dart | 4 ++-- lib/pages/live_room/send_danmaku/view.dart | 2 +- lib/pages/video/reply_new/view.dart | 2 +- lib/pages/video/send_danmaku/view.dart | 2 +- 7 files changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/pages/common/publish/common_publish_page.dart b/lib/pages/common/publish/common_publish_page.dart index 54995ecd8..b870d8722 100644 --- a/lib/pages/common/publish/common_publish_page.dart +++ b/lib/pages/common/publish/common_publish_page.dart @@ -37,6 +37,8 @@ abstract class CommonPublishPageState late final RxBool readOnly = false.obs; late final RxBool enablePublish = false.obs; + bool isPublishing = false; + bool hasPub = false; void initPubState(); @@ -208,10 +210,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 a58ba271f..7e5e89784 100644 --- a/lib/pages/common/publish/common_rich_text_pub_page.dart +++ b/lib/pages/common/publish/common_rich_text_pub_page.dart @@ -550,6 +550,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 5b3372c7f..e582153cd 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 0d1bc46ac..123b9344f 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 2960b8a28..80820db2e 100644 --- a/lib/pages/video/reply_new/view.dart +++ b/lib/pages/video/reply_new/view.dart @@ -210,7 +210,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 d987bfe82..a19c0326d 100644 --- a/lib/pages/video/send_danmaku/view.dart +++ b/lib/pages/video/send_danmaku/view.dart @@ -419,7 +419,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), ), ),