Skip to content

Amplify Codegen for Flutter generating invalid ModelProvider.dart #5187

Open
@felixeriksson

Description

@felixeriksson

Description

Hello!
I have an existing AppSync API that I want to generate models for in a Flutter app, for use with the Amplify AppSync client. The schema of the API is attached.

It seems that if the schema does not contain any @model directive on any type (which is the situation I'm in, as all the backend resources for my API are defined outside of the Flutter app project), the generated ModelProvider.dart is invalid, as it has no implementation of getModelTypeByModelName.

Missing concrete implementation of 'ModelProviderInterface.getModelTypeByModelName'.
Try implementing the missing method, or make the class abstract.

I have a fresh installation of @aws-amplify/[email protected]
Output of npm list -g --depth=1:

+-- @aws-amplify/[email protected]
| +--  error: ENOENT: no such file or directory, open 'C:\Users\felix\AppData\Roaming\npm\node_modules\@aws-amplify\cli\node_modules\@octokit\endpoint\package.json
| +--  error: ENOENT: no such file or directory, open 'C:\Users\felix\AppData\Roaming\npm\node_modules\@aws-amplify\cli\node_modules\@octokit\request\package.json
| +-- [email protected]
| +--  error: ENOENT: no such file or directory, open 'C:\Users\felix\AppData\Roaming\npm\node_modules\@aws-amplify\cli\node_modules\esm\package.json
| +-- [email protected]
| `-- [email protected]
+-- [email protected]
| `-- UNMET OPTIONAL DEPENDENCY [email protected]
+-- [email protected]
| +-- @google-cloud/[email protected]
| +-- @google-cloud/[email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| `-- [email protected]
`-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  +-- [email protected]
  `-- [email protected]

A similar issue can be found here:
#1455

Categories

  • Analytics
  • API (REST)
  • API (GraphQL)
  • Auth
  • Authenticator
  • DataStore
  • Notifications (Push)
  • Storage

Steps to Reproduce

For an existing AppSync API, run (using aws-cli/2.1.22):
aws appsync get-introspection-schema --api-id <API-ID> --region <REGION> --format SDL schema.graphql
Then
amplify codegen models --model-schema schema.graphql --target flutter --output-dir ./api-models

Screenshots

bild

Platforms

  • iOS
  • Android
  • Web
  • macOS
  • Windows
  • Linux

Flutter Version

3.22.2

Amplify Flutter Version

2.3.0 (amplify_flutter, amplify_api and amplify_auth_cognito)

Deployment Method

Amplify CLI

Schema

schema {
  query: Query
  mutation: Mutation
}

type AddToTenantResponse {
  success: Boolean
}

type ColtivaDevice {
  device_id: String!
  device_name: String!
  plant_species: String
  pumps: [Pump!]!
  sensors: [Sensor!]!
}

#  To be deprecated, use Tenant and ColtivaDevice instead
type GreenwatchDeviceData {
  device_ids: [String!]
  device_names: [String!]
  plant_species: [String]
  pumps: [[Pump]]
  sensors: [[Sensor]]
  tenant_name: String!
}

type GreenwatchSensorData {
  EC: Float
  air_temperature: Float
  humidity: Float
  pH: Float
  timestamp: Int!
  water_level: Float
  water_temperature: Float
}

type Mutation {
  addToTenant(device_id: ID!, tenant_id: ID!): AddToTenantResponse
  removeFromTenant(device_id: ID!, tenant_id: ID!): RemoveFromTenantResponse
  #  volume_to_pump is in milliliters
  runRefillPump(device_id: ID!, pump_no: Int!, tenant_id: ID!, volume_to_pump: Int!): RunPumpResponse
  #  Note: setDeviceProperties behaves in a PUT-like manner; any pump or sensor omitted in the EditableDeviceProperties payload are removed.
  setDeviceProperties(input: SetDevicePropertiesInput!): SetDevicePropertiesResponse
  storeFirebaseCloudMessagingToken(fcm_token: String!, tenant_id: ID!): StoreFirebaseCloudMessagingTokenResponse
}

type Pump {
  pump_id: Int!
  pump_name: String!
}

type Query {
  #  To be deprecated, use "tenant" instead
  getDevices(tenant_id: ID!): GreenwatchDeviceData
  getRecentSensorData(device_id: ID!, newer_than: Int!, tenant_id: ID!): [GreenwatchSensorData]
  tenant(tenant_id: ID!): Tenant
}

type RemoveFromTenantResponse {
  success: Boolean
}

# # Mutation responses
type RunPumpResponse {
  command_sent: Boolean
}

type Sensor {
  lower_threshold: Float!
  lower_threshold_alarms: Boolean
  sensor_friendly_name: String!
  sensor_name: String!
  units: String!
  upper_threshold: Float!
  upper_threshold_alarms: Boolean
}

type SetDevicePropertiesResponse {
  device: ColtivaDevice
}

type StoreFirebaseCloudMessagingTokenResponse {
  success: Boolean
}

type Tenant {
  devices: [ColtivaDevice!]
  tenant_id: ID!
  tenant_name: String!
  users: [User!]
}

type User {
  #  AWS Cognito ID
  user_email: String!
  user_id: ID!
}

input EditableDeviceProperties {
  device_name: String!
  pumps: EditablePumps!
  sensors: EditableSensors!
}

# # Mutation inputs
input EditableLiquidProperties {
  concentration: Float
  type: String
}

input EditablePumpProperties {
  liquid: EditableLiquidProperties
  model: String
  name: String!
}

input EditablePumps {
  pump_1: EditablePumpProperties!
  pump_2: EditablePumpProperties!
  pump_3: EditablePumpProperties!
  pump_4: EditablePumpProperties!
  pump_5: EditablePumpProperties!
  pump_6: EditablePumpProperties!
  pump_7: EditablePumpProperties!
}

input EditableSensorProperties {
  lower_threshold: Float!
  lower_threshold_alarms: Boolean!
  upper_threshold: Float!
  upper_threshold_alarms: Boolean!
}

input EditableSensors {
  EC: EditableSensorProperties!
  air_temperature: EditableSensorProperties!
  humidity: EditableSensorProperties!
  pH: EditableSensorProperties!
  water_level: EditableSensorProperties!
  water_temperature: EditableSensorProperties!
}

input SetDevicePropertiesInput {
  device_id: ID!
  properties: EditableDeviceProperties!
  tenant_id: ID!
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    CodegenIssues related to Amplify code generationGraphQL APIIssues related to the API (GraphQL) CategoryquestionA question about the Amplify Flutter libraries

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions