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

Flutter未发布fork包集成问题:freezed生成及类型转换异常求助

问题解决指南

一、Fork包后Freezed代码的正确集成方式

build_runner默认仅处理当前项目代码,不会扫描依赖包,正确做法是在fork的仓库内预先生成好Freezed代码再引入主项目:

  • 克隆自己fork的flutter_google_places_sdk仓库到本地
  • 在fork仓库的pubspec.yaml中,确保dev_dependencies包含freezed、freezed_annotation、build_runner(版本尽量与原仓库保持一致)
  • 在fork仓库根目录执行命令:flutter pub run build_runner build --delete-conflicting-outputs,生成所有Freezed相关的.g.dart和.freezed.dart文件
  • 将生成的代码文件提交并推送到自己的GitHub仓库
  • 在主项目的pubspec.yaml中,依赖自己fork的远程仓库即可,主项目无需再处理依赖包的代码生成

二、解决fetchPlace的类型转换异常

你遇到的_Map<Object?, Object?>无法转换为Map<String, dynamic>的问题,本质是Freezed生成的反序列化代码与原仓库逻辑不一致,解决步骤:

  1. 对齐版本:确保fork仓库的Dart、Flutter版本,以及freezed、freezed_annotation的版本与原仓库完全一致,版本差异是生成代码逻辑变化的核心原因
  2. 强制重新生成代码:在fork仓库执行flutter pub run build_runner clean,再重新执行flutter pub run build_runner build --delete-conflicting-outputs,彻底清理旧的生成文件
  3. 手动修正转换逻辑(可选):若上述步骤无效,打开place.g.dart文件,找到报错的转换位置,把强制类型转换as Map<String, dynamic>改为Map<String, dynamic>.from(e),通过显式转换确保键为String类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:37:33