flutter_stripe presentPaymentSheet parameters弃用问题如何修复
报错根因
flutter_stripe ^3.3.0 版本重构了Payment Sheet的调用流程:
- 原
presentPaymentSheet方法的parameters入参、PresentPaymentSheetParameters类全部标记为弃用 - 所有支付页配置参数统一前移到
initPaymentSheet方法中初始化,presentPaymentSheet仅负责唤起已经初始化完成的支付页,不再接收任何配置参数 - 旧版中手动传入的
confirmPayment: true为新版默认行为,无需额外配置
修复步骤
- 移除
presentPaymentSheet方法的所有入参,删除PresentPaymentSheetParameters相关代码 - 在调用
presentPaymentSheet前新增initPaymentSheet调用,将原PresentPaymentSheetParameters中的配置迁移到SetupPaymentSheetParameters中 - 原有支付成功、失败的回调逻辑不需要改动,直接保留即可
修复后可直接运行的代码
displayPaymentSheet(OrderProvider orderProvider) async { try { // 初始化支付Sheet,所有配置统一在这里传入 await Stripe.instance.initPaymentSheet( paymentSheetParameters: SetupPaymentSheetParameters( paymentIntentClientSecret: paymentIntentData!['client_secret'], merchantDisplayName: '你的电商店铺名称', // 替换为实际商户名 // 可按需扩展配置:支付页主题、默认支付方式、苹果/谷歌支付参数等 ), ); // 直接唤起支付页,无需传参 await Stripe.instance .presentPaymentSheet() .then((newValue) { print('payment intent ${paymentIntentData!['id']}'); print('payment intent ${paymentIntentData!['client_secret']}'); print('payment intent ${paymentIntentData!['amount']}'); print('payment intent $paymentIntentData'); //orderPlaceApi(paymentIntentData!['id'].toString()); ScaffoldMessenger.of(context) .showSnackBar(const SnackBar(content: Text("支付成功"))); orderProvider.success = true; Navigator.pop(context); setState(() { paymentIntentData = null; }); }).onError((error, stackTrace) { print('支付页唤起异常==> $error $stackTrace'); }); } on StripeException catch (e) { print('Stripe支付异常==> $e'); showDialog( context: context, builder: (_) => const AlertDialog( content: Text("支付已取消"), )); } catch (e) { print('通用异常: $e'); } }
补充说明
- 迁移完成后所有弃用警告会直接消失,不影响原有支付流程
SetupPaymentSheetParameters支持更多自定义配置,可根据业务需求自行添加,比如设置支付页主色、是否允许默认保存支付方式、开启Apple Pay/Google Pay等- 必须保证
initPaymentSheet在presentPaymentSheet之前调用,否则会抛出未初始化的运行时错误
内容的提问来源于stack exchange,提问作者Rudransh Singh Mahra
相关产品推荐
相关产品推荐

