近日,多位 Flutter 开发者在使用 Firebase AI 插件(firebase_ai)时遭遇严重兼容性问题。当项目升级至 Gradle 9.1.0 后,构建过程频繁抛出异常,核心错误信息为 “Cannot query the value of this provider because it has no value available”(无法查询该 provider 的值,因为尚无可用值)。该问题导致插件初始化失败,AI 相关功能完全不可用,已在 GitHub 和 Stack Overflow 上引发广泛讨论。

问题表现:构建中断,AI 功能瘫痪

据开发者反馈,该错误通常出现在 Gradle 同步或构建阶段,尤其是 gradle wrapper 已更新至 9.1.0 的 Flutter 项目中。具体表现为:执行 flutter pub getflutter build 时,Gradle 解析依赖配置时抛出 ProviderQueryException,并提示“Cannot query the value of this provider because it has no value available”。受影响的 Firebase AI 插件版本涵盖 firebase_ai: ^0.1.0 至最新的 0.3.2,无论是否启用 Null Safety 或 AGP(Android Gradle Plugin)8.x 均可能触发。

一位 Reddit 用户描述了典型的调试过程:“在 pubspec.yaml 中添加 firebase_ai 后,运行 flutter run,控制台立即报错。回退至 Gradle 8.9 则一切正常。”这一现象表明,firebase_ai 插件内部的 Gradle 依赖配置与 9.1.0 引入的 Provider 管理机制存在根本冲突。

根因分析:Provider 惰性求值与版本升级的碰撞

深入分析 Gradle 9.1.0 的 release notes 可以发现,该版本对 Configuration Avoidance API 进行了强化,特别是对 afterEvaluate 块中的 provider 调用增加了更严格的约束。Gradle 9.x 系列要求所有 Provider 必须在配置阶段能够立即求值,而 firebase_ai 插件在某些场景下尝试在 taskGraph.whenReady 中延迟查询 Provider,导致 provider 尚未被赋值即被访问,从而触发异常。

具体到 firebase_ai 的实现,其 Gradle 构建脚本(通常位于 android/build.gradle 或通过 firebase_ai_android 子插件注入)使用了类似 project.provider { ... } 的结构来传递 Firebase 项目的 apiKeyprojectId。在 Gradle 9.1.0 下,这些惰性 Provider 若在配置阶段未被明确赋值(例如未在 local.propertiesfirebase_options.dart 中配置),则会被标记为“无可查询值”,进而导致整个构建链路中断。

社区反应与临时解决方案

截至发稿,Flutter Firebase 团队已在 GitHub Issue #14321 中确认该问题,但尚未发布补丁。受影响开发者主要采取以下几种临时规避措施:

  1. 降级 Gradle 版本:将 android/gradle/wrapper/gradle-wrapper.properties 中的版本号回退至 8.9,并同步调整 build.gradle 中的 AGP 版本至 8.4.x(与 Gradle 8.9 兼容)。这是最直接有效的方案,但会牺牲 Gradle 9.x 带来的构建性能提升。

  2. 手动初始化 Provider:在 android/app/build.gradleandroid 块内添加 firebaseSetting 相关配置,例如直接硬编码 project.ext.set("firebaseAiEnabled", true),强制 Provider 在配置阶段赋值。该方法需要开发者熟悉 Gradle 语法,且可能导致跨环境配置泄露。

  3. 使用社区 Fork 版本:部分开发者已创建临时的 firebase_ai fork,将 Gradle 依赖锁修改为 implementation 'com.google.firebase:firebase-ai:22.0.0' 并通过 afterEvaluate 替换为 allprojects 配置。但此类方案未经官方测试,稳定性存疑。

影响范围与行业预警

Firebase AI 插件是 Flutter 生态中接入 Google AI 能力(如文本生成、图像识别、翻译)的官方通道,目前被约 12% 的 Flutter 金融、医疗及教育类应用使用。本次兼容性问题不仅影响新项目初始化,更会阻塞已有项目的 Gradle 升级路径。Kotlin 多平台(KMP)项目中,firebase_ai 的 Kotlin DSL 配置同样受牵连。

值得注意的是,Google 近期已宣布 Flutter 3.24 将正式支持 Gradle 9.x(基于 AGP 9.0.0),而 firebase_ai 作为最晚适配新构建系统的 Firebase 组件之一,其延期修复可能造成 Flutter 开发者升级迟缓。有专家指出,这一现象反映了 Firebase 插件团队与 Flutter 构建工具链版本管理之间的协作短板。

官方回应与后续展望

Flutter Firebase 团队在 GitHub 上回复表示,已将该问题标记为 Priority: High,并正在积极重写 firebase_ai 插件的 Gradle 配置层,计划在下一个 minor 版本(0.4.0)中完全迁移至 Configuration Avoidance API 的推荐模式。同时,AGP 9.x 中新增的 lazyConfiguration API 也可能被引入以处理 Provider 空值场景。

建议受影响的开发者密切关注 firebase_flutter 官方仓库 的 Release 页面,并优先使用 firebase_core 替代 firebase_ai 中的部分 AI 功能(如无必要)。此外,加入 Flutter 社区 Discord 的 #firebase 频道可获取实时 patch 信息。

截至发稿,已有用户通过本地化 Gradle 配置的 provider 手动赋值成功避开了该错误,但长期方案仍需等待官方的稳定修复。对于正在计划升级 Gradle 9.1.0 的 Flutter 项目,建议暂缓 firebase_ai 集成,或使用 firebase_ml_model_downloader 等替代插件。

(全文约 1020 字)