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

如何永久解决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的功能:

  1. 在pubspec.yaml中移除payu_money_flutter: ^0.0.3依赖
  2. 重构代码,使用payu_checkoutpro_flutter的API实现支付逻辑
  3. 执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:43:11