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

Flutter iOS构建成功但Android release报flutter_paystack编译错误

问题现象
  • 项目未升级至Flutter v3版本,构建时携带--no-sound-null-safety参数,无明显业务代码改动的前提下iOS端可正常构建,Android端突发构建异常,仅移除flutter_paystack: ^1.0.5+1、qr_code_scanner: ^0.6.1两个依赖包后可恢复正常构建
  • 执行fvm flutter build apk --release --no-sound-null-safety命令构建release包时,Gradle任务assembleRelease执行阶段输出大量空安全相关警告:another_flushbar、pinput、qr_code_scanner、printing、syncfusion_flutter_datepicker、syncfusion_flutter_charts、searchfield等第三方依赖均提示空感知操作符(!、?.)被作用于非空的SchedulerBinding/WidgetsBinding类型
  • 构建最终失败,核心报错为flutter_paystack:compileReleaseKotlin任务执行异常,存在2处Kotlin类型不匹配错误:
    • FlutterPaystackPlugin.kt第48行推断类型为Activity?,但上下文要求传入非空Activity类型
    • MethodCallHandlerImpl.kt第19行推断类型为BinaryMessenger?,但上下文要求传入非空BinaryMessenger类型
  • 已尝试flutter clean、IDE缓存失效重建、删除Podfile等操作均无法解决问题,flutter doctor检测结果仅存在Android Studio无法找到内置Java版本的异常
根因

该问题由Flutter 2.10及后续小版本的引擎API空安全标记变更导致:原本标记为可空的SchedulerBinding.instance/WidgetsBinding.instance、插件注册时传入的Activity、BinaryMessenger等API被调整为非空类型。

  • iOS端插件使用Objective-C/Swift编写,空安全校验为弱校验,未适配的老版本插件不会触发编译错误
  • Android端Kotlin空安全为编译期强校验,未适配的老版本插件会直接触发类型不匹配报错
    出现的大量空感知操作符警告、flutter_paystack的Kotlin编译报错,本质都是插件版本和当前Flutter版本API不匹配导致,和业务代码改动无关。flutter doctor提示的Android Studio找不到内置Java的问题,会导致Gradle的Kotlin编译器类型推断异常,进一步提升编译报错概率。
解决方案

按以下顺序操作即可修复:

  • 先修复JDK配置问题
    打开项目根目录下的android/gradle.properties文件,添加配置指定Gradle编译使用的JDK路径,必须使用JDK 11版本(不要用JDK17及以上版本):

    • Windows系统添加:org.gradle.java.home=C:\\Program Files\\Java\\jdk-11(路径替换为你本机JDK11的实际安装路径)
    • Mac系统添加:org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home(路径替换为你本机JDK11的实际安装路径)
      配置完成后重新执行flutter doctor,确认Java相关报错消失。
  • 修复flutter_paystack的Kotlin类型报错
    进入本机Pub缓存目录找到对应插件包:

    • Windows默认路径:C:\Users\你的用户名\AppData\Local\Pub\Cache\hosted\pub.dev\flutter_paystack-1.0.5+1
    • Mac默认路径:~/.pub-cache/hosted/pub.dev/flutter_paystack-1.0.5+1
      修改两个文件的代码:
    • 打开android/src/main/kotlin/co/paystack/flutterpaystack/FlutterPaystackPlugin.kt,定位到第48行,给传入的activity参数加非空强转,修改为this.activity = activity!!
    • 打开同目录下的MethodCallHandlerImpl.kt,定位到第19行,给传入的binaryMessenger参数加非空强转,修改为private val messenger: BinaryMessenger = binaryMessenger!!
  • 降级不兼容的依赖版本消除警告
    这些空感知操作符警告不会直接阻断构建,但如果要彻底消除,直接将pubspec.yaml中对应依赖锁到适配当前Flutter版本的旧版本即可:

    • qr_code_scanner: 0.5.2
    • another_flushbar: 1.10.28
    • pinput: 2.2.12
    • syncfusion_flutter_datepicker: 20.1.47
    • syncfusion_flutter_charts: 20.1.47
    • printing: 5.9.3
    • searchfield: 0.7.4
      修改完成后执行flutter pub get重新拉取依赖。
  • 清理缓存重新构建
    依次执行以下命令完成清理和构建:

flutter clean
cd android && ./gradlew clean && cd ..
flutter build apk --release --no-sound-null-safety

后续如果升级到Flutter v3,直接将上述锁版本的依赖放开到适配Flutter3的版本,再把之前修改的Pub缓存中flutter_paystack的代码还原即可,也可以直接替换为维护更活跃的Paystack相关插件。

内容的提问来源于stack exchange,提问作者Lilvinco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:46:03