用途:在 Flutter/Dart 中通过 Firebase AI Logic 调用 Gemini 图像模型生成或编辑图片。Gemini 图像模型一次调用返回交错的文本与图像分片,响应是需要遍历的序列,而非可直接读取的字符串。
主要能力与用法:最小调用使用 FirebaseAI.googleAI().generativeModel,指定模型如 gemini-3.1-flash-image,并在 GenerationConfig 中同时设置 responseModalities 为 text 与 image,否则模型不会返回图像。可用 ImageConfig 指定 aspectRatio 与 imageSize。文本生图时省略 InlineDataPart,图生图时传入图片字节。读取响应需遍历 candidate.content.parts,按类型匹配 InlineDataPart 与 TextPart,不要依赖 .text 便捷访问器。
首次调用失败通常源于三点:图像生成无免费额度,Spark 项目配额为 0,需升级 Blaze;项目开启 App Check 时 Firebase AI Logic 会强制校验;未设置 responseModalities。可用 gcloud services quota list --service=generativelanguage.googleapis.com --consumer=projects/YOUR_PROJECT_ID 核对配额。
上传用户照片前应先缩放,因为 InlineDataPart.toJson() 会在主 isolate 同步进行 base64 编码,大图会卡住 UI;可在 pickImage 时设置 maxWidth、maxHeight 与 imageQuality。需要枚举不支持的宽高比时,可测量返回图片尺寸再布局。
限制:无图像返回时需依次检查 promptFeedback.blockReason、candidates 是否为空、finishReason 等;仅返回文本或仅返回图像的情况会间歇出现,应做降级处理。提示词层面的问题(占位词被画入、服装未替换、文字拼写不一致等)无法通过单元测试覆盖。具体模型 ID、枚举值与测试分层需查阅其 references 文件,本资料未展开。