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

Flutter集成flutter_stripe遇Failed to find sync for id错误及支付失败求助

问题分析与解决方案

一、SurfaceSyncer错误的含义

/SurfaceSyncer(12958): Failed to find sync for id=N 是Android系统SurfaceFlinger服务的非致命警告,源于视图销毁时同步标记未及时清理,不是支付功能失败的直接原因,可暂时忽略,重点排查支付流程本身的问题。

二、支付功能异常(WebView闪退后无响应)的解决步骤

结合你的环境配置(Flutter 3.0.5、flutter_stripe 4.0.0、stripe-android 20.8.0),按以下方向逐一排查:

1. 确认版本兼容性

flutter_stripe 4.0.0与原生Stripe Android SDK 20.8.0的版本匹配,这部分配置无问题。

2. 检查AndroidManifest配置

确保AndroidManifest.xml中添加了必要配置:

  • 网络权限:
<uses-permission android:name="android.permission.INTERNET" />
  • 3DS验证所需的Activity配置(flutter_stripe通常自动配置,手动确认更稳妥):
<activity
    android:name="com.stripe.android.view.AuthActivity"
    android:exported="true" />

3. 排查支付流程代码逻辑

WebView闪退大概率是支付确认的回调处理异常,或PaymentIntent状态处理有误:

  • 确认后端返回的client_secret有效;
  • 确保confirmPayment的回调逻辑完整:
final paymentIntent = await Stripe.instance.confirmPayment(
  paymentIntentClientSecret: clientSecret,
  data: PaymentMethodParams.card(
    billingDetails: BillingDetails(email: 'test@example.com'),
  ),
);

switch (paymentIntent.status) {
  case PaymentIntentsStatus.Succeeded:
    // 支付成功逻辑
    break;
  case PaymentIntentsStatus.RequiresPaymentMethod:
    // 支付失败,重新选择支付方式
    break;
  case PaymentIntentsStatus.RequiresConfirmation:
    // 需再次确认支付
    break;
  default:
    // 其他状态处理
}
  • 避免在WebView启动后意外触发页面销毁或路由跳转。

4. 修正Gradle配置细节

从你提供的配置中发现两处问题:

  • 项目级build.gradle中allprojects块位置错误,应放在buildscript块之外,正确结构:
buildscript {
    ext.kotlin_version = '1.6.10'
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:7.2.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
  • 应用级build.gradle中,将kotlin-stdlib-jdk7替换为kotlin-stdlib-jdk8,与jvmTarget 1.8匹配:
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

5. 清理缓存并重新构建

执行以下命令清除旧构建文件,避免缓存异常:

flutter clean
flutter pub get
cd android && ./gradlew clean && cd ..
flutter run

三、总结

SurfaceSyncer日志无需过度关注,重点解决支付流程中的配置错误与代码逻辑问题,按上述步骤排查后即可恢复支付功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:24:20