如何解决Flutter中Stripe创建银行账户Token时空指针异常的问题
解决方案
- 检查Stripe SDK初始化配置
该报错由安卓端SDK内部空指针触发,90%的场景是未正确执行StripePayment.setOptions初始化配置,需确保在调用创建Token方法前,已经完成初始化并传入正确的Stripe公钥(测试环境用pk_test开头的测试公钥,生产环境用pk_live开头的公钥),初始化示例代码如下:StripePayment.setOptions( StripeOptions( publishableKey: "替换为你的Stripe公钥", androidPayMode: 'test', // 测试环境填test,生产填production ) ); - 锁定依赖版本
stripe_payment为第三方非官方维护包,已停止更新多年,浮动版本号拉取的最新版本可能和你的项目Flutter、安卓编译环境不兼容。可在pubspec.yaml中锁定该包为之前正常运行的历史版本,避免版本自动升级带来的兼容问题,示例:
修改后执行dependencies: stripe_payment: 1.0.9 # 替换为你之前功能正常时使用的版本号flutter clean清理缓存,再执行flutter pub get重新拉取依赖即可。 - 检查安卓端配置
确认安卓项目的minSdkVersion不低于21,同时AndroidManifest.xml中已经配置网络权限:
若近期修改过安卓编译配置、升级过compileSdkVersion,可回退到之前正常的配置版本测试。<uses-permission android:name="android.permission.INTERNET" /> - 校验运行环境与参数匹配性
若你近期切换了Stripe的运行模式(从测试切到生产),需要对应更换公钥,同时不能再使用测试环境的银行账号、路由号参数,否则Stripe服务会返回空结果触发SDK空指针异常。 - 兼容优化
可在调用创建Token的逻辑外层加try-catch捕获异常,避免未处理异常直接导致应用崩溃:try { var newBank = await StripePayment.createTokenWithBankAccount( BankAccount( accountHolderName: 'Jenney Rogers', routingNumber: '110000000', accountNumber: '000123456789', countryCode: "US", currency: "usd", ), ); print(newBank.tokenId); } catch (e) { print("创建银行账户Token失败:$e"); }
如果以上方案都无法解决,建议替换为Stripe官方维护的flutter_stripe包,该包适配最新的Flutter版本与Stripe接口规则,兼容性更好。
内容的提问来源于stack exchange,提问作者Shammah
相关产品推荐
相关产品推荐

