Description
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
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!
}