diff --git a/lib/common/widgets/gesture/tap_gesture_recognizer.dart b/lib/common/widgets/gesture/tap_gesture_recognizer.dart new file mode 100644 index 000000000..683330535 --- /dev/null +++ b/lib/common/widgets/gesture/tap_gesture_recognizer.dart @@ -0,0 +1,14 @@ +import 'package:flutter/gestures.dart' show TapGestureRecognizer; + +class NoDeadlineTapGestureRecognizer extends TapGestureRecognizer { + NoDeadlineTapGestureRecognizer({ + super.debugOwner, + super.supportedDevices, + super.allowedButtonsFilter, + super.preAcceptSlopTolerance, + super.postAcceptSlopTolerance, + }); + + @override + Duration? get deadline => null; +} diff --git a/lib/pages/article/widgets/opus_content.dart b/lib/pages/article/widgets/opus_content.dart index 5975b5973..69ef55858 100644 --- a/lib/pages/article/widgets/opus_content.dart +++ b/lib/pages/article/widgets/opus_content.dart @@ -1,5 +1,6 @@ import 'dart:math' as math; +import 'package:PiliPlus/common/widgets/gesture/tap_gesture_recognizer.dart'; import 'package:PiliPlus/common/widgets/image/cached_network_svg_image.dart'; import 'package:PiliPlus/common/widgets/image/custom_grid_view.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; @@ -18,7 +19,6 @@ import 'package:PiliPlus/utils/image_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/foundation.dart' show kDebugMode; -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:get/get_core/src/get_main.dart'; import 'package:get/get_navigation/src/extension_navigation.dart'; @@ -69,7 +69,7 @@ class OpusContent extends StatelessWidget { ? null : colorScheme.primary, ), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () { switch (rich.type) { case 'RICH_TEXT_NODE_TYPE_AT': @@ -293,7 +293,7 @@ class OpusContent extends StatelessWidget { return TextSpan( text: '${hasUrl ? '\u{1F517}' : ''}$text', recognizer: hasUrl - ? (TapGestureRecognizer() + ? (NoDeadlineTapGestureRecognizer() ..onTap = () => PiliScheme.routePushFromUrl(jumpUrl)) : null, diff --git a/lib/pages/audio/view.dart b/lib/pages/audio/view.dart index 13f4a00d5..daab83514 100644 --- a/lib/pages/audio/view.dart +++ b/lib/pages/audio/view.dart @@ -3,6 +3,7 @@ import 'dart:math' show min; import 'package:PiliPlus/common/constants.dart'; import 'package:PiliPlus/common/widgets/button/icon_button.dart'; import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart'; +import 'package:PiliPlus/common/widgets/gesture/tap_gesture_recognizer.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/common/widgets/progress_bar/audio_video_progress_bar.dart'; import 'package:PiliPlus/grpc/bilibili/app/listener/v1.pb.dart'; @@ -24,7 +25,6 @@ import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/storage.dart'; import 'package:PiliPlus/utils/storage_key.dart'; import 'package:PiliPlus/utils/utils.dart'; -import 'package:flutter/gestures.dart' show TapGestureRecognizer; import 'package:flutter/material.dart' hide DraggableScrollableSheet; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:get/get.dart'; @@ -920,7 +920,7 @@ class _AudioPageState extends State { TextSpan( text: audioItem.arc.displayedOid, style: TextStyle(color: colorScheme.secondary), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () => Utils.copyText( audioItem.arc.displayedOid, ), diff --git a/lib/pages/dynamics/widgets/additional_panel.dart b/lib/pages/dynamics/widgets/additional_panel.dart index 83f8aff68..139817c8d 100644 --- a/lib/pages/dynamics/widgets/additional_panel.dart +++ b/lib/pages/dynamics/widgets/additional_panel.dart @@ -1,5 +1,6 @@ import 'package:PiliPlus/common/constants.dart'; import 'package:PiliPlus/common/widgets/flutter/dyn/ink_well.dart'; +import 'package:PiliPlus/common/widgets/gesture/tap_gesture_recognizer.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/http/dynamics.dart'; import 'package:PiliPlus/http/loading_state.dart'; @@ -8,7 +9,6 @@ import 'package:PiliPlus/pages/dynamics/widgets/vote.dart'; import 'package:PiliPlus/utils/app_scheme.dart'; import 'package:PiliPlus/utils/num_utils.dart'; import 'package:flutter/foundation.dart' show kDebugMode; -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart' hide InkWell; import 'package:get/get.dart'; @@ -125,7 +125,7 @@ Widget addWidget( ), recognizer: reserve.desc3!.jumpUrl == null ? null - : (TapGestureRecognizer() + : (NoDeadlineTapGestureRecognizer() ..onTap = () { Get.toNamed( '/webview', @@ -261,7 +261,7 @@ Widget addWidget( ), recognizer: content.desc!.jumpUrl == null ? null - : (TapGestureRecognizer() + : (NoDeadlineTapGestureRecognizer() ..onTap = () { Get.toNamed( '/webview', diff --git a/lib/pages/dynamics/widgets/interaction.dart b/lib/pages/dynamics/widgets/interaction.dart index 26c5f2af1..cf34ff42f 100644 --- a/lib/pages/dynamics/widgets/interaction.dart +++ b/lib/pages/dynamics/widgets/interaction.dart @@ -1,6 +1,6 @@ +import 'package:PiliPlus/common/widgets/gesture/tap_gesture_recognizer.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; import 'package:flutter/foundation.dart' show kDebugMode; -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:get/get_core/src/get_main.dart'; @@ -78,7 +78,7 @@ Widget _item( ? null : TextStyle(color: theme.colorScheme.onSurfaceVariant), recognizer: isAt - ? (TapGestureRecognizer() + ? (NoDeadlineTapGestureRecognizer() ..onTap = () => Get.toNamed('/member?mid=${e.rid}')) : null, ); diff --git a/lib/pages/dynamics/widgets/rich_node_panel.dart b/lib/pages/dynamics/widgets/rich_node_panel.dart index 307f053cf..b298aa304 100644 --- a/lib/pages/dynamics/widgets/rich_node_panel.dart +++ b/lib/pages/dynamics/widgets/rich_node_panel.dart @@ -1,5 +1,6 @@ import 'dart:io' show Platform; +import 'package:PiliPlus/common/widgets/gesture/tap_gesture_recognizer.dart'; import 'package:PiliPlus/common/widgets/image/custom_grid_view.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/http/dynamics.dart'; @@ -12,7 +13,6 @@ import 'package:PiliPlus/models/dynamics/result.dart'; import 'package:PiliPlus/pages/dynamics/widgets/vote.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:flutter/foundation.dart' show kDebugMode; -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -70,7 +70,7 @@ TextSpan? richNode( TextSpan( text: ' ${i.text}', style: style, - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () => Get.toNamed('/member?mid=${i.rid}'), ), ); @@ -81,7 +81,7 @@ TextSpan? richNode( TextSpan( text: i.origText, style: style, - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () => Get.toNamed( '/searchResult', parameters: { @@ -113,7 +113,7 @@ TextSpan? richNode( style: style, recognizer: i.origText == null ? null - : (TapGestureRecognizer() + : (NoDeadlineTapGestureRecognizer() ..onTap = () => PageUtils.handleWebview(i.origText!)), ), ); @@ -135,7 +135,7 @@ TextSpan? richNode( TextSpan( text: '投票:${i.text}', style: style, - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () { final dynIdStr = item.basic?.commentIdStr; final dynId = dynIdStr != null @@ -177,7 +177,7 @@ TextSpan? richNode( TextSpan( text: '${i.origText} ', style: style, - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () => Get.toNamed( '/webview', parameters: { @@ -207,7 +207,7 @@ TextSpan? richNode( style: style, recognizer: i.jumpUrl == null ? null - : (TapGestureRecognizer() + : (NoDeadlineTapGestureRecognizer() ..onTap = () => PageUtils.handleWebview(i.jumpUrl!)), ), ); @@ -229,7 +229,7 @@ TextSpan? richNode( TextSpan( text: '${i.text} ', style: style, - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () async { try { int? cid = await SearchHttp.ab2c(bvid: i.rid); @@ -272,7 +272,7 @@ TextSpan? richNode( TextSpan( text: i.text, style: style, - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () { void onView(List list) { PageUtils.imageView( @@ -328,7 +328,7 @@ TextSpan? richNode( style: style, recognizer: i.jumpUrl == null ? null - : (TapGestureRecognizer() + : (NoDeadlineTapGestureRecognizer() ..onTap = () => PageUtils.handleWebview(i.jumpUrl!)), ), ); @@ -340,7 +340,7 @@ TextSpan? richNode( style: style, recognizer: i.jumpUrl == null ? null - : (TapGestureRecognizer() + : (NoDeadlineTapGestureRecognizer() ..onTap = () => PageUtils.handleWebview(i.jumpUrl!)), ), ); diff --git a/lib/pages/live_room/widgets/chat_panel.dart b/lib/pages/live_room/widgets/chat_panel.dart index c4706f373..d833f3a58 100644 --- a/lib/pages/live_room/widgets/chat_panel.dart +++ b/lib/pages/live_room/widgets/chat_panel.dart @@ -1,4 +1,5 @@ import 'package:PiliPlus/common/widgets/flutter/popup_menu.dart'; +import 'package:PiliPlus/common/widgets/gesture/tap_gesture_recognizer.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/http/live.dart'; import 'package:PiliPlus/models/common/image_type.dart'; @@ -11,7 +12,6 @@ import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/foundation.dart' show kDebugMode; -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -84,7 +84,7 @@ class LiveRoomChatPanel extends StatelessWidget { ), recognizer: item.uid == 0 ? null - : (TapGestureRecognizer() + : (NoDeadlineTapGestureRecognizer() ..onTapUp = (e) => _showMsgMenu( context, itemContext, @@ -99,7 +99,7 @@ class LiveRoomChatPanel extends StatelessWidget { color: primary, fontSize: 14, ), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () => Get.toNamed('/member?mid=${reply.mid}'), ), diff --git a/lib/pages/msg_feed_top/sys_msg/view.dart b/lib/pages/msg_feed_top/sys_msg/view.dart index 850514a4a..0108df03a 100644 --- a/lib/pages/msg_feed_top/sys_msg/view.dart +++ b/lib/pages/msg_feed_top/sys_msg/view.dart @@ -2,6 +2,7 @@ import 'package:PiliPlus/common/skeleton/msg_feed_sys_msg_.dart'; import 'package:PiliPlus/common/widgets/dialog/dialog.dart'; import 'package:PiliPlus/common/widgets/flutter/list_tile.dart'; import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart'; +import 'package:PiliPlus/common/widgets/gesture/tap_gesture_recognizer.dart'; import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/msg/msg_sys/data.dart'; @@ -10,7 +11,6 @@ import 'package:PiliPlus/utils/app_scheme.dart'; import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart' hide ListTile; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -145,7 +145,7 @@ class _SysMsgPageState extends State { TextSpan( text: match[1], style: TextStyle(color: theme.colorScheme.primary), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () { try { PiliScheme.routePushFromUrl(url); @@ -176,7 +176,7 @@ class _SysMsgPageState extends State { TextSpan( text: match[3], style: TextStyle(color: theme.colorScheme.primary), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () { PiliScheme.videoPush(validAv, validBv); }, @@ -195,7 +195,7 @@ class _SysMsgPageState extends State { TextSpan( text: '查看动态', style: TextStyle(color: theme.colorScheme.primary), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () { PageUtils.pushDynFromId(id: dynId).catchError( (err) => SmartDialog.showToast(err.toString()), @@ -212,7 +212,7 @@ class _SysMsgPageState extends State { TextSpan( text: '\u{1F517}网页链接', style: TextStyle(color: theme.colorScheme.primary), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () { PiliScheme.routePushFromUrl(matchStr); }, diff --git a/lib/pages/video/ai_conclusion/view.dart b/lib/pages/video/ai_conclusion/view.dart index 5eb918a7b..3ed1fddc4 100644 --- a/lib/pages/video/ai_conclusion/view.dart +++ b/lib/pages/video/ai_conclusion/view.dart @@ -1,10 +1,10 @@ +import 'package:PiliPlus/common/widgets/gesture/tap_gesture_recognizer.dart'; import 'package:PiliPlus/models_new/video/video_ai_conclusion/model_result.dart'; import 'package:PiliPlus/pages/common/slide/common_slide_page.dart'; import 'package:PiliPlus/pages/video/controller.dart'; import 'package:PiliPlus/pages/video/introduction/ugc/widgets/selectable_text.dart'; import 'package:PiliPlus/utils/duration_utils.dart'; import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart'; -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -99,7 +99,7 @@ class AiConclusionPanel extends CommonSlidePage { ) : null, recognizer: tap - ? (TapGestureRecognizer() + ? (NoDeadlineTapGestureRecognizer() ..onTap = () { try { Get.find( diff --git a/lib/pages/video/introduction/ugc/view.dart b/lib/pages/video/introduction/ugc/view.dart index 773756c3b..5c6c2a2c1 100644 --- a/lib/pages/video/introduction/ugc/view.dart +++ b/lib/pages/video/introduction/ugc/view.dart @@ -1,5 +1,6 @@ import 'package:PiliPlus/common/constants.dart'; import 'package:PiliPlus/common/widgets/dialog/dialog.dart'; +import 'package:PiliPlus/common/widgets/gesture/tap_gesture_recognizer.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/common/widgets/pendant_avatar.dart'; import 'package:PiliPlus/common/widgets/scroll_physics.dart'; @@ -35,7 +36,6 @@ import 'package:PiliPlus/utils/platform_utils.dart'; import 'package:PiliPlus/utils/request_utils.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:expandable/expandable.dart'; -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; @@ -639,7 +639,7 @@ class _UgcIntroPanelState extends State { TextSpan( text: matchStr, style: TextStyle(color: theme.colorScheme.primary), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () async { if (videoDetailCtr .plPlayerController @@ -702,7 +702,7 @@ class _UgcIntroPanelState extends State { TextSpan( text: matchStr, style: TextStyle(color: theme.colorScheme.primary), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () => PiliScheme.videoPush(aid, null), ), ); @@ -716,7 +716,7 @@ class _UgcIntroPanelState extends State { TextSpan( text: matchStr, style: TextStyle(color: theme.colorScheme.primary), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () => PiliScheme.videoPush(null, matchStr), ), ); @@ -728,7 +728,7 @@ class _UgcIntroPanelState extends State { TextSpan( text: matchStr, style: TextStyle(color: theme.colorScheme.primary), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () { try { Get.find( @@ -757,7 +757,7 @@ class _UgcIntroPanelState extends State { return TextSpan( text: '@${currentDesc.rawText}', style: TextStyle(color: colorSchemePrimary), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () => Get.toNamed('/member?mid=${currentDesc.bizId}'), ); default: diff --git a/lib/pages/video/reply/widgets/reply_item_grpc.dart b/lib/pages/video/reply/widgets/reply_item_grpc.dart index 8cdd098ec..34c970112 100644 --- a/lib/pages/video/reply/widgets/reply_item_grpc.dart +++ b/lib/pages/video/reply/widgets/reply_item_grpc.dart @@ -4,6 +4,7 @@ import 'package:PiliPlus/common/constants.dart'; import 'package:PiliPlus/common/widgets/badge.dart'; import 'package:PiliPlus/common/widgets/dialog/report.dart'; import 'package:PiliPlus/common/widgets/flutter/text/text.dart' as custom_text; +import 'package:PiliPlus/common/widgets/gesture/tap_gesture_recognizer.dart'; import 'package:PiliPlus/common/widgets/image/custom_grid_view.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/common/widgets/pendant_avatar.dart'; @@ -33,7 +34,6 @@ import 'package:PiliPlus/utils/utils.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:fixnum/fixnum.dart'; import 'package:flutter/foundation.dart' show kDebugMode; -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -483,7 +483,7 @@ class ReplyItemGrpc extends StatelessWidget { style: TextStyle( color: theme.colorScheme.primary, ), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () { feedBack(); Get.toNamed( @@ -616,7 +616,7 @@ class ReplyItemGrpc extends StatelessWidget { style: TextStyle( color: theme.colorScheme.primary, ), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () { if (url.appUrlSchema.isEmpty) { if (RegExp( @@ -695,7 +695,7 @@ class ReplyItemGrpc extends StatelessWidget { TextSpan( text: matchStr, style: TextStyle(color: theme.colorScheme.primary), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () => Get.toNamed('/member?mid=${content.atNameToMid[name]}'), ), @@ -705,7 +705,7 @@ class ReplyItemGrpc extends StatelessWidget { TextSpan( text: '投票: ${content.vote.title}', style: TextStyle(color: theme.colorScheme.primary), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () => showVoteDialog(context, content.vote.id.toInt()), ), @@ -730,7 +730,7 @@ class ReplyItemGrpc extends StatelessWidget { ? TextStyle(color: theme.colorScheme.primary) : null, recognizer: isValid - ? (TapGestureRecognizer() + ? (NoDeadlineTapGestureRecognizer() ..onTap = () { // 跳转到指定位置 try { @@ -761,7 +761,7 @@ class ReplyItemGrpc extends StatelessWidget { TextSpan( text: matchStr, style: TextStyle(color: theme.colorScheme.primary), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () { Get.toNamed( '/searchResult', @@ -775,7 +775,7 @@ class ReplyItemGrpc extends StatelessWidget { TextSpan( text: matchStr, style: TextStyle(color: theme.colorScheme.primary), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () => PageUtils.handleWebview(matchStr), ), ); @@ -816,7 +816,7 @@ class ReplyItemGrpc extends StatelessWidget { : theme.colorScheme.secondary, ), recognizer: hasClickUrl - ? (TapGestureRecognizer() + ? (NoDeadlineTapGestureRecognizer() ..onTap = () => PageUtils.handleWebview(content.richText.note.clickUrl)) : null, diff --git a/lib/pages/whisper_detail/widget/chat_item.dart b/lib/pages/whisper_detail/widget/chat_item.dart index 7bd33b15f..bfa75055e 100644 --- a/lib/pages/whisper_detail/widget/chat_item.dart +++ b/lib/pages/whisper_detail/widget/chat_item.dart @@ -3,6 +3,7 @@ import 'dart:math'; import 'package:PiliPlus/common/constants.dart'; import 'package:PiliPlus/common/widgets/badge.dart'; +import 'package:PiliPlus/common/widgets/gesture/tap_gesture_recognizer.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/grpc/bilibili/im/interfaces/v1.pb.dart' show EmotionInfo; @@ -19,7 +20,6 @@ import 'package:PiliPlus/utils/id_utils.dart'; import 'package:PiliPlus/utils/image_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:cached_network_image/cached_network_image.dart'; -import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -663,7 +663,7 @@ class ChatItem extends StatelessWidget { TextSpan( text: matchStr, style: style.copyWith(color: theme.colorScheme.primary), - recognizer: TapGestureRecognizer() + recognizer: NoDeadlineTapGestureRecognizer() ..onTap = () => PiliScheme.routePushFromUrl(matchStr), ), );