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

Flutter AWS Amplify GraphQL:User模型无法访问关联的SubscriptionType模型

问题描述

使用Amplify GraphQL结合DynamoDB创建数据模型,包含User和SubscriptionType,二者为一对多关联:

  • 每个User仅对应一个SubscriptionType
  • 一个SubscriptionType可关联多个User

执行amplify pull拉取模型后,发现User模型类无法访问SubscriptionType模型,但SubscriptionType模型能正常访问User模型。

相关代码

ModelProvider.dart

import 'package:amplify_core/amplify_core.dart' as amplify_core;
import 'SubscriptionType.dart';
import 'User.dart';

export 'SubscriptionType.dart';
export 'User.dart';

class ModelProvider implements amplify_core.ModelProviderInterface {
  @override
  String version = "4826e6c1ddaab534f826f93cee0d7763";
  @override
  List<amplify_core.ModelSchema> modelSchemas = [SubscriptionType.schema, User.schema];
  @override
  List<amplify_core.ModelSchema> customTypeSchemas = [];
  static final ModelProvider _instance = ModelProvider();

  static ModelProvider get instance => _instance;
  
  amplify_core.ModelType getModelTypeByModelName(String modelName) {
    switch(modelName) {
      case "SubscriptionType":
        return SubscriptionType.classType;
      case "User":
        return User.classType;
      default:
        throw Exception("Failed to find model in model provider for model name: " + modelName);
    }
  }
}


class ModelFieldValue<T> {
  const ModelFieldValue.value(this.value);

  final T value;
}

相关截图

  • 报错截图:报错截图
  • Amplify数据建模截图:数据建模截图
解决方法

1. 校验GraphQL Schema关联定义

从建模截图确认User模型是否正确配置了指向SubscriptionType的@belongsTo关联。正确的Schema示例如下:

type User @model {
  id: ID!
  # 其他业务字段
  subscriptionTypeID: ID!
  subscriptionType: SubscriptionType @belongsTo(fields: ["subscriptionTypeID"])
}

type SubscriptionType @model {
  id: ID!
  # 其他业务字段
  users: [User] @hasMany(indexName: "bySubscriptionType", fields: ["id"])
}

若User模型缺少@belongsTo关联配置,Amplify生成本地模型时不会生成对应的关联属性,导致无法访问SubscriptionType。

2. 重新推送并拉取模型

  1. 修改Schema后,执行amplify push更新云端模型配置
  2. 执行amplify pull重新拉取本地模型文件
  3. 检查自动生成的User.dart,确认是否包含subscriptionType关联属性及对应的读写方法

3. 检查本地生成的User模型

打开自动生成的User.dart,确认是否存在类似以下的代码片段:

SubscriptionType? get subscriptionType {
  return _subscriptionType;
}

set subscriptionType(SubscriptionType? value) {
  _subscriptionType = value;
  _subscriptionTypeID = value?.id;
}

若缺失该代码,说明模型生成不完整,需重新执行推送和拉取操作。

4. 清理项目缓存并重建

  • 执行flutter clean清理Flutter项目缓存
  • 执行flutter pub get重新获取依赖
  • 执行flutter run重新构建项目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:23:31