You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android设备Flutter Stripe支付Sheet点击粉色删除图标崩溃求助

问题描述

在Android设备上使用Flutter Stripe的PaymentSheet组件时,点击输入框的粉色删除图标会导致应用立即崩溃。该问题已被官方记录,说明10.0.0版本已修复此问题,但当前使用9.6.0版本,尝试升级到10.0.0时应用构建失败。

崩溃堆栈信息:

E/AndroidRuntime( 1596): FATAL EXCEPTION: main
E/AndroidRuntime( 1596): Process: com.inspark.annuaire_entreprise, PID: 1596
E/AndroidRuntime( 1596): java.lang.NoSuchMethodError: No virtual method getEmojiStart(Ljava/lang/CharSequence;I)I in class Landroidx/emoji2/text/EmojiCompat; or its super classes (declaration of 'androidx.emoji2.text.EmojiCompat' appears in /data/app/~~10DiFKQl9tb4z5ybPgq0-g==/com.inspark.annuaire_entreprise-1moyKcUoju89JThTUqhVxg==/base.apk!classes19.dex)
E/AndroidRuntime( 1596):    at androidx.compose.foundation.text.StringHelpers_androidKt.findPrecedingBreak(StringHelpers.android.kt:24)
E/AndroidRuntime( 1596):    at androidx.compose.foundation.text.selection.BaseTextPreparedSelection.getPrecedingCharacterIndex(TextPreparedSelection.kt:150)
E/AndroidRuntime( 1596):    at androidx.compose.foundation.text.TextFieldKeyInput$process$2$3.invoke(TextFieldKeyInput.kt:131)
E/AndroidRuntime( 1596):    at androidx.compose.foundation.text.TextFieldKeyInput$process$2$3.invoke(TextFieldKeyInput.kt:129)
E/AndroidRuntime( 1596):    at androidx.compose.foundation.text.selection.TextFieldPreparedSelection.deleteIfSelectedOr(TextPreparedSelection.kt:397)
E/AndroidRuntime( 1596):    at androidx.compose.foundation.text.TextFieldKeyInput$process$2.invoke(TextFieldKeyInput.kt:129)
E/AndroidRuntime( 1596):    at androidx.compose.foundation.text.TextFieldKeyInput$process$2.invoke(TextFieldKeyInput.kt:106)
E/AndroidRuntime( 1596):    at androidx.compose.foundation.text.TextFieldKeyInput.commandExecutionContext(TextFieldKeyInput.kt:226)
E/AndroidRuntime( 1596):    at androidx.compose.foundation.text.TextFieldKeyInput.process-ZmokQxo(TextFieldKeyInput.kt:106)
E/AndroidRuntime( 1596):    at androidx.compose.foundation.text.TextFieldKeyInputKt$textFieldKeyInput$2$1.invoke-ZmokQxo(TextFieldKeyInput.kt:261)
E/AndroidRuntime( 1596):    at androidx.compose.foundation.text.TextFieldKeyInputKt$textFieldKeyInput$2$1.invoke(TextFieldKeyInput.kt:261)
E/AndroidRuntime( 1596):    at androidx.compose.ui.input.key.KeyInputNode.onKeyEvent-ZmokQxo(KeyInputModifier.kt:80)
E/AndroidRuntime( 1596):    at androidx.compose.ui.focus.FocusOwnerImpl.dispatchKeyEvent-ZmokQxo(FocusOwnerImpl.kt:193)
E/AndroidRuntime( 1596):    at androidx.compose.ui.platform.AndroidComposeView.dispatchKeyEvent(AndroidComposeView.android.kt:647)
E/AndroidRuntime( 1596):    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1993)
E/AndroidRuntime( 1596):    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1993)
E/AndroidRuntime( 1596):    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1993)
E/AndroidRuntime( 1596):    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1993)
E/AndroidRuntime( 1596):    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1993)
E/AndroidRuntime( 1596):    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1993)
E/AndroidRuntime( 1596):    at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:561)
E/AndroidRuntime( 1596):    at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1901)
E/AndroidRuntime( 1596):    at android.app.Activity.dispatchKeyEvent(Activity.java:4219)
E/AndroidRuntime( 1596):    at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.java:126)
E/AndroidRuntime( 1596):    at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:86)
E/AndroidRuntime( 1596):    at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:144)
E/AndroidRuntime( 1596):    at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:604)
E/AndroidRuntime( 1596):    at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:60)
E/AndroidRuntime( 1596):    at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:3413)
E/AndroidRuntime( 1596):    at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:448)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6592)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6449)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5922)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5984)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5945)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6119)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5953)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:6176)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5926)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5984)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5945)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5953)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5926)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8942)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8893)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:8854)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl$ViewRootHandler.handleMessageImpl(ViewRootImpl.java:5682)
E/AndroidRuntime( 1596):    at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:5554)
E/AndroidRuntime( 1596):    at android.os.Handler.dispatchMessage(Handler.java:106)
E/AndroidRuntime( 1596):    at android.os.Looper.loopOnce(Looper.java:233)
E/AndroidRuntime( 1596):    at android.os.Looper.loop(Looper.java:344)
E/AndroidRuntime( 1596):    at android.app.ActivityThread.main(ActivityThread.java:8191)
E/AndroidRuntime( 1596):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 1596):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
E/AndroidRuntime( 1596):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)
I/Process ( 1596): Sending signal. PID: 1596 SIG: 9
Lost connection to device.
解决方案

方案1:强制统一emoji2依赖版本(解决升级Stripe 10.0.0后的构建失败)

从堆栈信息看,崩溃根源是androidx.emoji2.text.EmojiCompat缺少getEmojiStart方法,属于依赖版本不兼容问题。升级Stripe 10.0.0后,其依赖的Compose库要求更高版本的emoji2,而项目中存在低版本emoji2导致冲突。

在Android模块的build.gradle文件中添加以下代码,强制指定emoji2的统一版本:

configurations.all {
    resolutionStrategy {
        force 'androidx.emoji2:emoji2:1.2.0'
        force 'androidx.emoji2:emoji2-views:1.2.0'
        force 'androidx.emoji2:emoji2-views-helper:1.2.0'
    }
}

版本号可根据当前项目Compose版本匹配,建议使用与Compose兼容的最新稳定版。

方案2:临时修复9.6.0版本的崩溃问题(若无法升级到10.0.0)

如果暂时无法解决Stripe 10.0.0的构建问题,可尝试以下临时方案避免崩溃:

  • 通过Stripe的自定义配置,禁用PaymentSheet输入框删除图标的默认点击事件
  • 在Android层面拦截删除按键事件,绕过触发崩溃的代码路径

注:此方案局限性较大,优先推荐解决版本升级问题。

方案3:排查Stripe 10.0.0升级的构建失败原因

若升级时存在具体构建错误,可按以下步骤排查:

  1. 执行flutter pub outdated查看所有依赖的版本状态
  2. 执行flutter pub upgrade --major-versions升级所有可升级的依赖
  3. 检查Android项目的minSdkVersion是否符合Stripe 10.0.0的要求(Stripe 10.x通常要求minSdk≥21)

内容的提问来源于stack exchange,提问作者Selim Sayeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:25:55