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
相关产品推荐
相关产品推荐

