Amplify自动生成模型报错:实例成员'Products'无法在初始化器中访问
问题排查与解决方案
报错根本原因
该报错是Flutter/Dart项目接入Amplify时自动生成模型的常见问题,触发原因有两个:
- 关联字段命名不符合Amplify约定:Schema中你定义的关联字段
Products使用了大驼峰命名,与关联的Products模型名完全重名,生成Dart代码时出现变量名和类型名冲突,导致生成的初始化逻辑错误,触发「实例成员无法在初始化器中访问」的报错。 - 关联字段未声明为可选:一对多关联的列表字段默认是可选延迟加载的,未标记为可选会导致生成代码时强制要求初始化,引发逻辑错误。
修复步骤
- 修改Schema字段命名与属性
将Store模型下的关联字段从大驼峰Products改为小驼峰products,无需加非空标记!,修改后的Schema代码如下:
type Store @model @key(name: "storesByDate", fields: ["type", "createdAt"], queryField: "storesByDate") @auth(rules: [{allow: private, operations: [read]}, {allow: groups, groups: ["Administrators"], operations: [read, create, update, delete]}]) { id: ID! name: String! type: String! description: String createdAt: String! products: [Products] @connection(keyName: "byStore", fields: ["id"]) }
- 验证关联模型配置
确认你定义的Products模型存在名为byStore的二级索引,且索引第一个字段为对应关联的storeID,参考配置如下:
type Products @model @key(name: "byStore", fields: ["storeID", "createdAt"]) { id: ID! storeID: ID! # 对应Store模型的id字段,必须存在 # 其余自定义字段 }
- 重新生成模型代码
先清理旧的生成文件,再重新执行代码生成命令即可:- 执行
amplify codegen remove清理旧生成代码 - 执行
amplify codegen models重新生成模型
- 执行
额外检查项
如果修改后仍报错,检查Amplify CLI版本,低于8.0.0的旧版本存在关联字段处理bug,建议升级到最新稳定版后再重新生成代码。
内容的提问来源于stack exchange,提问作者user3697484
相关产品推荐
相关产品推荐

