Flutter集成AWS DataStore在线同步遇类型转换错误求助
排查Flutter Amplify DataStore同步时的类型转换错误
针对你遇到的Unhandled Exception: type 'Null' is not a subtype of type 'Map<dynamic, dynamic>' in type cast错误,给你几个针对性的排查方向:
1. 检查Schema与云端数据的空值一致性
- 确认Schema中标记为**非空(带
!)**的字段,在AWS AppSync的云端数据中没有Null值。比如Schema定义String! username,但云端存在username为Null的记录,DataStore同步解析时就会触发类型转换错误。 - 解决:要么修正云端的无效数据,要么调整Schema去掉字段后的
!允许空值,同时确保本地代码处理对应字段的空值逻辑。
2. 重新生成Amplify模型文件
Schema修改后如果没重新生成模型,会导致本地解析逻辑与云端数据结构不匹配:
- 执行以下命令重新生成模型并清理项目:
amplify codegen models flutter clean flutter pub get - 重启项目后再测试同步功能。
3. 确认DataStore初始化顺序
检查ConfigureAmplify函数中,DataStore的启动必须在Amplify配置完成之后:
- 正确示例:
Future<void> configureAmplify() async { try { await Amplify.addPlugins([AmplifyDataStore(modelProvider: ModelProvider.instance)]); await Amplify.configure(amplifyconfig); // 确保配置完成后启动同步 await DataStore.start(); } catch (e) { print('Amplify配置失败: $e'); } }
4. 验证版本兼容性
Amplify Flutter 2.1.0与Flutter 3.22.2可能存在兼容性问题:
- 尝试降级Amplify到2.0.0或升级到最新稳定版(如2.2.0),修改
pubspec.yaml中的依赖后执行flutter pub get测试。
5. 定位错误具体字段
从错误堆栈中找到触发类型转换的具体模型或字段:
- 在本地自动生成的模型文件(如
lib/models/*.dart)中,找到对应fromJson方法,临时添加打印日志输出原始数据,确认哪个字段返回了Null,再针对性修复。
内容的提问来源于stack exchange,提问作者B.lieve144
相关产品推荐
相关产品推荐

