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

Flutter Stripe支付Sheet在iOS未初始化报错问题求助

iOS端Stripe支付Sheet初始化报错问题

代码实现

main.dart初始化代码

WidgetsFlutterBinding.ensureInitialized();
Stripe.publishableKey = stripePublishableKey;
Stripe.merchantIdentifier = 'emailID';
await Stripe.instance.applySettings();

支付Sheet初始化与确认逻辑

/// 初始化支付Sheet
Future<void> initPaymentSheet({
  required String? price,
}) async {
  try {
   await Stripe.instance.initPaymentSheet(
      paymentSheetParameters: SetupPaymentSheetParameters(
        // 主要参数
        paymentIntentClientSecret: clientSecret,
        customerId: customerId,
        customerEphemeralKeySecret: ephemeralKey,
        // 商家名称
        merchantDisplayName: 'TEST',
        // 额外参数
        applePay: const PaymentSheetApplePay(
          merchantCountryCode: 'US',
        ),
        googlePay: const PaymentSheetGooglePay(
          merchantCountryCode: 'US',
          testEnv: true,
        ),
        style: ThemeMode.system,
      ),
    );
  } catch (e) {
    rethrow;
  }
}

/// 展示支付Sheet并完成支付
Future<void> confirmPayment({required String price}) async {
  try {
    await initPaymentSheet(price: price);
    // 向用户展示支付Sheet以完成支付
    await Stripe.instance.presentPaymentSheet();

    // 提交预约请求
    bookingRequest();
  } on Exception catch (e) {
    if (e is StripeException) {
      log('Stripe错误:${e.error.localizedMessage}');
      print('Stripe错误:${e.error.localizedMessage}');
      displaySnackBar('错误!', '出现问题,请重试。');
    } else {
      log('Stripe错误:$e');
      displaySnackBar('错误!', '出现问题,请重试。');
    }
  }
}

执行流程

  • 点击按钮触发confirmPayment()方法
  • 方法会等待支付Sheet初始化完成
  • 初始化完成后调用presentPaymentSheet展示支付Sheet

问题现象

Android端运行正常,但iOS端出现报错:No payment sheet has been initialized yet

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:36:59