如何永久解决Payu Money Flutter不支持Sound Null Safety的错误
永久解决Sound Null Safety兼容问题(依赖未适配场景)
问题根源
你遇到的错误是因为payu_money_flutter: ^0.0.3未适配Sound Null Safety,但项目配置强制启用了空安全模式,导致编译冲突。
方案一:替换为兼容空安全的支付依赖(推荐)
payu_checkoutpro_flutter: ^1.0.2是你已引入的官方支付SDK,该版本已适配Sound Null Safety,可直接用它替代payu_money_flutter的功能:
- 在
pubspec.yaml中移除payu_money_flutter: ^0.0.3依赖 - 重构代码,使用
payu_checkoutpro_flutter的API实现支付逻辑 - 执行
flutter pub get更新依赖
此方案能让项目保持Sound Null Safety,从根源上解决兼容问题。
方案二:切换项目为非空安全模式(保留旧依赖时使用)
如果必须继续使用payu_money_flutter旧版本,需修改项目配置关闭强制空安全:
1. 修改pubspec.yaml配置
调整SDK约束并移除空安全强制参数:
version: 1.0.0+1 configurations: - name: "Flutter" request: "launch" type: "dart" program: "lib/fill_detail.dart" # 移除--sound-null-safety参数,关闭强制空安全 environment: sdk: '>=2.12.0 <3.0.0' # 放宽SDK版本约束,允许非空安全模式 dependencies: flutter: sdk: flutter payu_checkoutpro_flutter: ^1.0.2 payu_money_flutter: ^0.0.3
2. 修复代码中的空值处理问题
原代码直接从Map取值会触发空安全警告,需添加空值处理:
@override void initState() { super.initState(); fetchCountries(); fetchPlans(); setupPayment(); } String txnToken = "your_transaction_token"; String orderId = "your_order_id"; double amount1 = 10.0; PayuMoneyFlutter payuMoneyFlutter = PayuMoneyFlutter(); Future<void> setupPayment() async { bool? response = await payuMoneyFlutter.setupPaymentKeys( merchantKey: "nxpvv9VZ", merchantID: "3oFxUMtWG2", isProduction: true, activityTitle: "Payumoney", disableExitConfirmation: false, ); print("response --> $response"); } void handlePaymentResponse(Map<String, dynamic> paymentResponse) { String? responseCode = paymentResponse['responseCode']; String? status = paymentResponse['status']; String? message = paymentResponse['message']; String? transactionId = paymentResponse['transactionId']; if (responseCode == "01" && status == "success") { print("Payment successful. Transaction ID: ${transactionId ?? 'N/A'}"); } else if (responseCode == "141" && status == "userCancelled") { print("Payment cancelled by user"); } else { print("Payment failed. Response Code: ${responseCode ?? 'Unknown'}. Message: ${message ?? 'No message'}"); } } @override void dispose() { super.dispose(); // 移除setupPayment()调用:dispose中执行异步操作会导致内存泄漏,且无业务意义 }
3. 验证修复
执行flutter clean清除缓存,再运行项目,空安全报错将不再出现。
内容的提问来源于stack exchange,提问作者Harsh luhar
相关产品推荐
相关产品推荐

