diff --git a/.gitignore b/.gitignore index 24476c5..81995e1 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,25 @@ app.*.map.json /android/app/debug /android/app/profile /android/app/release + +#amplify-do-not-edit-begin +amplify/\#current-cloud-backend +amplify/.config/local-* +amplify/logs +amplify/mock-data +amplify/mock-api-resources +amplify/backend/amplify-meta.json +amplify/backend/.temp +build/ +dist/ +node_modules/ +aws-exports.js +awsconfiguration.json +amplifyconfiguration.json +amplifyconfiguration.dart +amplify-build-config.json +amplify-gradle-config.json +amplifytools.xcconfig +.secret-* +**.sample +#amplify-do-not-edit-end diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c87b85e --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "files.exclude": { + "amplify/.config": true, + "amplify/**/*-parameters.json": true, + "amplify/**/amplify.state": true, + "amplify/**/transform.conf.json": true, + "amplify/#current-cloud-backend": true, + "amplify/backend/amplify-meta.json": true, + "amplify/backend/awscloudformation": true + } +} \ No newline at end of file diff --git a/AWSCLIV2.pkg b/AWSCLIV2.pkg new file mode 100644 index 0000000..0484a67 Binary files /dev/null and b/AWSCLIV2.pkg differ diff --git a/amplify/.config/project-config.json b/amplify/.config/project-config.json new file mode 100644 index 0000000..1775f93 --- /dev/null +++ b/amplify/.config/project-config.json @@ -0,0 +1,13 @@ +{ + "providers": [ + "awscloudformation" + ], + "projectName": "psycl2", + "version": "3.1", + "frontend": "flutter", + "flutter": { + "config": { + "ResDir": "./lib/" + } + } +} \ No newline at end of file diff --git a/amplify/README.md b/amplify/README.md new file mode 100644 index 0000000..7c0a9e2 --- /dev/null +++ b/amplify/README.md @@ -0,0 +1,8 @@ +# Getting Started with Amplify CLI +This directory was generated by [Amplify CLI](https://docs.amplify.aws/cli). + +Helpful resources: +- Amplify documentation: https://docs.amplify.aws +- Amplify CLI documentation: https://docs.amplify.aws/cli +- More details on this folder & generated files: https://docs.amplify.aws/cli/reference/files +- Join Amplify's community: https://amplify.aws/community/ diff --git a/amplify/backend/api/psycl2/cli-inputs.json b/amplify/backend/api/psycl2/cli-inputs.json new file mode 100644 index 0000000..ff0969b --- /dev/null +++ b/amplify/backend/api/psycl2/cli-inputs.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "serviceConfiguration": { + "apiName": "psycl2", + "serviceName": "AppSync", + "defaultAuthType": { + "mode": "API_KEY", + "keyDescription": "This is an api key", + "expirationTime": 30 + }, + "additionalAuthTypes": [ + { + "mode": "AWS_IAM" + } + ], + "conflictResolution": { + "defaultResolutionStrategy": { + "type": "AUTOMERGE" + } + } + } +} \ No newline at end of file diff --git a/amplify/backend/api/psycl2/parameters.json b/amplify/backend/api/psycl2/parameters.json new file mode 100644 index 0000000..df5945c --- /dev/null +++ b/amplify/backend/api/psycl2/parameters.json @@ -0,0 +1,5 @@ +{ + "AppSyncApiName": "psycl2", + "DynamoDBBillingMode": "PAY_PER_REQUEST", + "DynamoDBEnableServerSideEncryption": false +} \ No newline at end of file diff --git a/amplify/backend/api/psycl2/resolvers/README.md b/amplify/backend/api/psycl2/resolvers/README.md new file mode 100644 index 0000000..89e564c --- /dev/null +++ b/amplify/backend/api/psycl2/resolvers/README.md @@ -0,0 +1,2 @@ +Any resolvers that you add in this directory will override the ones automatically generated by Amplify CLI and will be directly copied to the cloud. +For more information, visit [https://docs.amplify.aws/cli/graphql-transformer/resolvers](https://docs.amplify.aws/cli/graphql-transformer/resolvers) \ No newline at end of file diff --git a/amplify/backend/api/psycl2/schema.graphql b/amplify/backend/api/psycl2/schema.graphql new file mode 100644 index 0000000..6d4aee9 --- /dev/null +++ b/amplify/backend/api/psycl2/schema.graphql @@ -0,0 +1,6 @@ +type Todo @model @auth(rules: [{allow: public}]) { + id: ID! + name: String! + description: String + isComplete: Boolean +} diff --git a/amplify/backend/api/psycl2/stacks/CustomResources.json b/amplify/backend/api/psycl2/stacks/CustomResources.json new file mode 100644 index 0000000..f95feea --- /dev/null +++ b/amplify/backend/api/psycl2/stacks/CustomResources.json @@ -0,0 +1,58 @@ +{ + "AWSTemplateFormatVersion": "2010-09-09", + "Description": "An auto-generated nested stack.", + "Metadata": {}, + "Parameters": { + "AppSyncApiId": { + "Type": "String", + "Description": "The id of the AppSync API associated with this project." + }, + "AppSyncApiName": { + "Type": "String", + "Description": "The name of the AppSync API", + "Default": "AppSyncSimpleTransform" + }, + "env": { + "Type": "String", + "Description": "The environment name. e.g. Dev, Test, or Production", + "Default": "NONE" + }, + "S3DeploymentBucket": { + "Type": "String", + "Description": "The S3 bucket containing all deployment assets for the project." + }, + "S3DeploymentRootKey": { + "Type": "String", + "Description": "An S3 key relative to the S3DeploymentBucket that points to the root\nof the deployment directory." + } + }, + "Resources": { + "EmptyResource": { + "Type": "Custom::EmptyResource", + "Condition": "AlwaysFalse" + } + }, + "Conditions": { + "HasEnvironmentParameter": { + "Fn::Not": [ + { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + ] + }, + "AlwaysFalse": { + "Fn::Equals": ["true", "false"] + } + }, + "Outputs": { + "EmptyOutput": { + "Description": "An empty output. You may delete this if you have at least one resource above.", + "Value": "" + } + } +} diff --git a/amplify/backend/api/psycl2/transform.conf.json b/amplify/backend/api/psycl2/transform.conf.json new file mode 100644 index 0000000..1a748d4 --- /dev/null +++ b/amplify/backend/api/psycl2/transform.conf.json @@ -0,0 +1,10 @@ +{ + "Version": 5, + "ElasticsearchWarning": true, + "ResolverConfig": { + "project": { + "ConflictHandler": "AUTOMERGE", + "ConflictDetection": "VERSION" + } + } +} \ No newline at end of file diff --git a/amplify/backend/auth/psycl2/cli-inputs.json b/amplify/backend/auth/psycl2/cli-inputs.json new file mode 100644 index 0000000..f631e44 --- /dev/null +++ b/amplify/backend/auth/psycl2/cli-inputs.json @@ -0,0 +1,51 @@ +{ + "version": "1", + "cognitoConfig": { + "identityPoolName": "testAuthIdentityPool", + "allowUnauthenticatedIdentities": false, + "resourceNameTruncated": "psycl2b3414d93", + "userPoolName": "psycl2", + "autoVerifiedAttributes": [ + "email" + ], + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS Text Message" + ], + "smsAuthenticationMessage": "Your authentication code is {####}", + "smsVerificationMessage": "Your verification code is {####}", + "emailVerificationSubject": "Verification code: {####}", + "emailVerificationMessage": "Verification code: {####}", + "defaultPasswordPolicy": false, + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": [ + "Requires Lowercase", + "Requires Numbers", + "Requires Symbols", + "Requires Uppercase" + ], + "requiredAttributes": [], + "aliasAttributes": [], + "userpoolClientGenerateSecret": false, + "userpoolClientRefreshTokenValidity": 30, + "userpoolClientWriteAttributes": [], + "userpoolClientReadAttributes": [], + "userpoolClientLambdaRole": "psycl2b3414d93_userpoolclient_lambda_role", + "userpoolClientSetAttributes": false, + "sharedId": "b3414d93", + "resourceName": "psycl2", + "authSelections": "identityPoolAndUserPool", + "serviceName": "Cognito", + "usernameAttributes": [ + "email" + ], + "useDefault": "manual", + "userPoolGroups": false, + "userPoolGroupList": [], + "adminQueries": false, + "thirdPartyAuth": false, + "authProviders": [], + "usernameCaseSensitive": false, + "useEnabledMfas": true + } +} \ No newline at end of file diff --git a/amplify/backend/backend-config.json b/amplify/backend/backend-config.json new file mode 100644 index 0000000..610a104 --- /dev/null +++ b/amplify/backend/backend-config.json @@ -0,0 +1,56 @@ +{ + "api": { + "psycl2": { + "dependsOn": [], + "output": { + "authConfig": { + "additionalAuthenticationProviders": [ + { + "authenticationType": "AWS_IAM" + } + ], + "defaultAuthentication": { + "apiKeyConfig": { + "apiKeyExpirationDays": 30, + "description": "This is an api key" + }, + "authenticationType": "API_KEY" + } + } + }, + "providerPlugin": "awscloudformation", + "service": "AppSync" + } + }, + "auth": { + "psycl2": { + "customAuth": false, + "dependsOn": [], + "frontendAuthConfig": { + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS" + ], + "passwordProtectionSettings": { + "passwordPolicyCharacters": [ + "REQUIRES_LOWERCASE", + "REQUIRES_NUMBERS", + "REQUIRES_SYMBOLS", + "REQUIRES_UPPERCASE" + ], + "passwordPolicyMinLength": 8 + }, + "signupAttributes": [], + "socialProviders": [], + "usernameAttributes": [ + "EMAIL" + ], + "verificationMechanisms": [ + "EMAIL" + ] + }, + "providerPlugin": "awscloudformation", + "service": "Cognito" + } + } +} \ No newline at end of file diff --git a/amplify/backend/tags.json b/amplify/backend/tags.json new file mode 100644 index 0000000..b9321d7 --- /dev/null +++ b/amplify/backend/tags.json @@ -0,0 +1,10 @@ +[ + { + "Key": "user:Stack", + "Value": "{project-env}" + }, + { + "Key": "user:Application", + "Value": "{project-name}" + } +] \ No newline at end of file diff --git a/amplify/backend/types/amplify-dependent-resources-ref.d.ts b/amplify/backend/types/amplify-dependent-resources-ref.d.ts new file mode 100644 index 0000000..074b15b --- /dev/null +++ b/amplify/backend/types/amplify-dependent-resources-ref.d.ts @@ -0,0 +1 @@ +export type AmplifyDependentResourcesAttributes = {} \ No newline at end of file diff --git a/amplify/cli.json b/amplify/cli.json new file mode 100644 index 0000000..1058d7b --- /dev/null +++ b/amplify/cli.json @@ -0,0 +1,63 @@ +{ + "features": { + "graphqltransformer": { + "addmissingownerfields": true, + "improvepluralization": false, + "validatetypenamereservedwords": true, + "useexperimentalpipelinedtransformer": true, + "enableiterativegsiupdates": true, + "secondarykeyasgsi": true, + "skipoverridemutationinputtypes": true, + "transformerversion": 2, + "suppressschemamigrationprompt": true, + "securityenhancementnotification": false, + "showfieldauthnotification": false, + "usesubusernamefordefaultidentityclaim": true, + "usefieldnameforprimarykeyconnectionfield": false, + "enableautoindexquerynames": true, + "respectprimarykeyattributesonconnectionfield": true, + "shoulddeepmergedirectiveconfigdefaults": false, + "populateownerfieldforstaticgroupauth": true + }, + "frontend-ios": { + "enablexcodeintegration": true + }, + "auth": { + "enablecaseinsensitivity": true, + "useinclusiveterminology": true, + "breakcirculardependency": true, + "forcealiasattributes": false, + "useenabledmfas": true + }, + "codegen": { + "useappsyncmodelgenplugin": true, + "usedocsgeneratorplugin": true, + "usetypesgeneratorplugin": true, + "cleangeneratedmodelsdirectory": true, + "retaincasestyle": true, + "addtimestampfields": true, + "handlelistnullabilitytransparently": true, + "emitauthprovider": true, + "generateindexrules": true, + "enabledartnullsafety": true, + "generatemodelsforlazyloadandcustomselectionset": false + }, + "appsync": { + "generategraphqlpermissions": true + }, + "latestregionsupport": { + "pinpoint": 1, + "translate": 1, + "transcribe": 1, + "rekognition": 1, + "textract": 1, + "comprehend": 1 + }, + "project": { + "overrides": true + } + }, + "debug": { + "shareProjectConfig": false + } +} \ No newline at end of file diff --git a/amplify/hooks/README.md b/amplify/hooks/README.md new file mode 100644 index 0000000..8fb601e --- /dev/null +++ b/amplify/hooks/README.md @@ -0,0 +1,7 @@ +# Command Hooks + +Command hooks can be used to run custom scripts upon Amplify CLI lifecycle events like pre-push, post-add-function, etc. + +To get started, add your script files based on the expected naming convention in this directory. + +Learn more about the script file naming convention, hook parameters, third party dependencies, and advanced configurations at https://docs.amplify.aws/cli/usage/command-hooks diff --git a/amplify/team-provider-info.json b/amplify/team-provider-info.json new file mode 100644 index 0000000..244c5dd --- /dev/null +++ b/amplify/team-provider-info.json @@ -0,0 +1,38 @@ +{ + "staging": { + "awscloudformation": { + "AuthRoleName": "amplify-psycl2-staging-205335-authRole", + "UnauthRoleArn": "arn:aws:iam::630480412109:role/amplify-psycl2-staging-205335-unauthRole", + "AuthRoleArn": "arn:aws:iam::630480412109:role/amplify-psycl2-staging-205335-authRole", + "Region": "us-east-2", + "DeploymentBucketName": "amplify-psycl2-staging-205335-deployment", + "UnauthRoleName": "amplify-psycl2-staging-205335-unauthRole", + "StackName": "amplify-psycl2-staging-205335", + "StackId": "arn:aws:cloudformation:us-east-2:630480412109:stack/amplify-psycl2-staging-205335/d5047250-9f4d-11ed-afbc-02a310660386", + "AmplifyAppId": "d6qdlr7v12o0x" + }, + "categories": { + "auth": { + "psycl2": {} + } + } + }, + "mana": { + "awscloudformation": { + "AuthRoleName": "amplify-psycl2-mana-145147-authRole", + "UnauthRoleArn": "arn:aws:iam::059784805544:role/amplify-psycl2-mana-145147-unauthRole", + "AuthRoleArn": "arn:aws:iam::059784805544:role/amplify-psycl2-mana-145147-authRole", + "Region": "us-east-1", + "DeploymentBucketName": "amplify-psycl2-mana-145147-deployment", + "UnauthRoleName": "amplify-psycl2-mana-145147-unauthRole", + "StackName": "amplify-psycl2-mana-145147", + "StackId": "arn:aws:cloudformation:us-east-1:059784805544:stack/amplify-psycl2-mana-145147/be7d5850-a4cd-11ed-becc-0ebc7567a9a9", + "AmplifyAppId": "d1xfk2f81dc5ak" + }, + "categories": { + "auth": { + "psycl2": {} + } + } + } +} \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle index 0b1bd03..e3d8db3 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -47,7 +47,7 @@ android { applicationId "com.example.psycl" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. - minSdkVersion flutter.minSdkVersion + minSdkVersion 21 targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig index 592ceee..ec97fc6 100644 --- a/ios/Flutter/Debug.xcconfig +++ b/ios/Flutter/Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig index 592ceee..c4855bf 100644 --- a/ios/Flutter/Release.xcconfig +++ b/ios/Flutter/Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 0000000..10f3c9b --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,41 @@ +# Uncomment this line to define a global platform for your project +platform :ios, '13.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/lib/models/ModelProvider.dart b/lib/models/ModelProvider.dart new file mode 100644 index 0000000..35a6ecb --- /dev/null +++ b/lib/models/ModelProvider.dart @@ -0,0 +1,46 @@ +/* +* Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"). +* You may not use this file except in compliance with the License. +* A copy of the License is located at +* +* http://aws.amazon.com/apache2.0 +* +* or in the "license" file accompanying this file. This file is distributed +* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +* express or implied. See the License for the specific language governing +* permissions and limitations under the License. +*/ + +// NOTE: This file is generated and may not follow lint rules defined in your app +// Generated files can be excluded from analysis in analysis_options.yaml +// For more info, see: https://dart.dev/guides/language/analysis-options#excluding-code-from-analysis + +// ignore_for_file: public_member_api_docs, annotate_overrides, dead_code, dead_codepublic_member_api_docs, depend_on_referenced_packages, file_names, library_private_types_in_public_api, no_leading_underscores_for_library_prefixes, no_leading_underscores_for_local_identifiers, non_constant_identifier_names, null_check_on_nullable_type_parameter, prefer_adjacent_string_concatenation, prefer_const_constructors, prefer_if_null_operators, prefer_interpolation_to_compose_strings, slash_for_doc_comments, sort_child_properties_last, unnecessary_const, unnecessary_constructor_name, unnecessary_late, unnecessary_new, unnecessary_null_aware_assignments, unnecessary_nullable_for_final_variable_declarations, unnecessary_string_interpolations, use_build_context_synchronously + +import 'package:amplify_core/amplify_core.dart'; +import 'Todo.dart'; + +export 'Todo.dart'; + +class ModelProvider implements ModelProviderInterface { + @override + String version = "671e864603609644a01cbf06dd6096dc"; + @override + List modelSchemas = [Todo.schema]; + static final ModelProvider _instance = ModelProvider(); + @override + List customTypeSchemas = []; + + static ModelProvider get instance => _instance; + + ModelType getModelTypeByModelName(String modelName) { + switch(modelName) { + case "Todo": + return Todo.classType; + default: + throw Exception("Failed to find model in model provider for model name: " + modelName); + } + } +} \ No newline at end of file diff --git a/lib/models/Todo.dart b/lib/models/Todo.dart new file mode 100644 index 0000000..f664188 --- /dev/null +++ b/lib/models/Todo.dart @@ -0,0 +1,258 @@ +/* +* Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. +* +* Licensed under the Apache License, Version 2.0 (the "License"). +* You may not use this file except in compliance with the License. +* A copy of the License is located at +* +* http://aws.amazon.com/apache2.0 +* +* or in the "license" file accompanying this file. This file is distributed +* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +* express or implied. See the License for the specific language governing +* permissions and limitations under the License. +*/ + +// NOTE: This file is generated and may not follow lint rules defined in your app +// Generated files can be excluded from analysis in analysis_options.yaml +// For more info, see: https://dart.dev/guides/language/analysis-options#excluding-code-from-analysis + +// ignore_for_file: public_member_api_docs, annotate_overrides, dead_code, dead_codepublic_member_api_docs, depend_on_referenced_packages, file_names, library_private_types_in_public_api, no_leading_underscores_for_library_prefixes, no_leading_underscores_for_local_identifiers, non_constant_identifier_names, null_check_on_nullable_type_parameter, prefer_adjacent_string_concatenation, prefer_const_constructors, prefer_if_null_operators, prefer_interpolation_to_compose_strings, slash_for_doc_comments, sort_child_properties_last, unnecessary_const, unnecessary_constructor_name, unnecessary_late, unnecessary_new, unnecessary_null_aware_assignments, unnecessary_nullable_for_final_variable_declarations, unnecessary_string_interpolations, use_build_context_synchronously + +import 'package:amplify_core/amplify_core.dart'; +import 'package:flutter/foundation.dart'; + + +/** This is an auto generated class representing the Todo type in your schema. */ +@immutable +class Todo extends Model { + static const classType = const _TodoModelType(); + final String id; + final String? _name; + final String? _description; + final bool? _isComplete; + final TemporalDateTime? _createdAt; + final TemporalDateTime? _updatedAt; + + @override + getInstanceType() => classType; + + @Deprecated('[getId] is being deprecated in favor of custom primary key feature. Use getter [modelIdentifier] to get model identifier.') + @override + String getId() => id; + + TodoModelIdentifier get modelIdentifier { + return TodoModelIdentifier( + id: id + ); + } + + String get name { + try { + return _name!; + } catch(e) { + throw new AmplifyCodeGenModelException( + AmplifyExceptionMessages.codeGenRequiredFieldForceCastExceptionMessage, + recoverySuggestion: + AmplifyExceptionMessages.codeGenRequiredFieldForceCastRecoverySuggestion, + underlyingException: e.toString() + ); + } + } + + String? get description { + return _description; + } + + bool? get isComplete { + return _isComplete; + } + + TemporalDateTime? get createdAt { + return _createdAt; + } + + TemporalDateTime? get updatedAt { + return _updatedAt; + } + + const Todo._internal({required this.id, required name, description, isComplete, createdAt, updatedAt}): _name = name, _description = description, _isComplete = isComplete, _createdAt = createdAt, _updatedAt = updatedAt; + + factory Todo({String? id, required String name, String? description, bool? isComplete}) { + return Todo._internal( + id: id == null ? UUID.getUUID() : id, + name: name, + description: description, + isComplete: isComplete); + } + + bool equals(Object other) { + return this == other; + } + + @override + bool operator ==(Object other) { + if (identical(other, this)) return true; + return other is Todo && + id == other.id && + _name == other._name && + _description == other._description && + _isComplete == other._isComplete; + } + + @override + int get hashCode => toString().hashCode; + + @override + String toString() { + var buffer = new StringBuffer(); + + buffer.write("Todo {"); + buffer.write("id=" + "$id" + ", "); + buffer.write("name=" + "$_name" + ", "); + buffer.write("description=" + "$_description" + ", "); + buffer.write("isComplete=" + (_isComplete != null ? _isComplete!.toString() : "null") + ", "); + buffer.write("createdAt=" + (_createdAt != null ? _createdAt!.format() : "null") + ", "); + buffer.write("updatedAt=" + (_updatedAt != null ? _updatedAt!.format() : "null")); + buffer.write("}"); + + return buffer.toString(); + } + + Todo copyWith({String? name, String? description, bool? isComplete}) { + return Todo._internal( + id: id, + name: name ?? this.name, + description: description ?? this.description, + isComplete: isComplete ?? this.isComplete); + } + + Todo.fromJson(Map json) + : id = json['id'], + _name = json['name'], + _description = json['description'], + _isComplete = json['isComplete'], + _createdAt = json['createdAt'] != null ? TemporalDateTime.fromString(json['createdAt']) : null, + _updatedAt = json['updatedAt'] != null ? TemporalDateTime.fromString(json['updatedAt']) : null; + + Map toJson() => { + 'id': id, 'name': _name, 'description': _description, 'isComplete': _isComplete, 'createdAt': _createdAt?.format(), 'updatedAt': _updatedAt?.format() + }; + + Map toMap() => { + 'id': id, 'name': _name, 'description': _description, 'isComplete': _isComplete, 'createdAt': _createdAt, 'updatedAt': _updatedAt + }; + + static final QueryModelIdentifier MODEL_IDENTIFIER = QueryModelIdentifier(); + static final QueryField ID = QueryField(fieldName: "id"); + static final QueryField NAME = QueryField(fieldName: "name"); + static final QueryField DESCRIPTION = QueryField(fieldName: "description"); + static final QueryField ISCOMPLETE = QueryField(fieldName: "isComplete"); + static var schema = Model.defineSchema(define: (ModelSchemaDefinition modelSchemaDefinition) { + modelSchemaDefinition.name = "Todo"; + modelSchemaDefinition.pluralName = "Todos"; + + modelSchemaDefinition.authRules = [ + AuthRule( + authStrategy: AuthStrategy.PUBLIC, + operations: [ + ModelOperation.CREATE, + ModelOperation.UPDATE, + ModelOperation.DELETE, + ModelOperation.READ + ]) + ]; + + modelSchemaDefinition.addField(ModelFieldDefinition.id()); + + modelSchemaDefinition.addField(ModelFieldDefinition.field( + key: Todo.NAME, + isRequired: true, + ofType: ModelFieldType(ModelFieldTypeEnum.string) + )); + + modelSchemaDefinition.addField(ModelFieldDefinition.field( + key: Todo.DESCRIPTION, + isRequired: false, + ofType: ModelFieldType(ModelFieldTypeEnum.string) + )); + + modelSchemaDefinition.addField(ModelFieldDefinition.field( + key: Todo.ISCOMPLETE, + isRequired: false, + ofType: ModelFieldType(ModelFieldTypeEnum.bool) + )); + + modelSchemaDefinition.addField(ModelFieldDefinition.nonQueryField( + fieldName: 'createdAt', + isRequired: false, + isReadOnly: true, + ofType: ModelFieldType(ModelFieldTypeEnum.dateTime) + )); + + modelSchemaDefinition.addField(ModelFieldDefinition.nonQueryField( + fieldName: 'updatedAt', + isRequired: false, + isReadOnly: true, + ofType: ModelFieldType(ModelFieldTypeEnum.dateTime) + )); + }); +} + +class _TodoModelType extends ModelType { + const _TodoModelType(); + + @override + Todo fromJson(Map jsonData) { + return Todo.fromJson(jsonData); + } + + @override + String modelName() { + return 'Todo'; + } +} + +/** + * This is an auto generated class representing the model identifier + * of [Todo] in your schema. + */ +@immutable +class TodoModelIdentifier implements ModelIdentifier { + final String id; + + /** Create an instance of TodoModelIdentifier using [id] the primary key. */ + const TodoModelIdentifier({ + required this.id}); + + @override + Map serializeAsMap() => ({ + 'id': id + }); + + @override + List> serializeAsList() => serializeAsMap() + .entries + .map((entry) => ({ entry.key: entry.value })) + .toList(); + + @override + String serializeAsString() => serializeAsMap().values.join('#'); + + @override + String toString() => 'TodoModelIdentifier(id: $id)'; + + @override + bool operator ==(Object other) { + if (identical(this, other)) { + return true; + } + + return other is TodoModelIdentifier && + id == other.id; + } + + @override + int get hashCode => + id.hashCode; +} \ No newline at end of file diff --git a/lib/src/features/calendar/calendar.dart b/lib/src/features/calendar/calendar.dart new file mode 100644 index 0000000..ae37714 --- /dev/null +++ b/lib/src/features/calendar/calendar.dart @@ -0,0 +1,103 @@ +import 'package:flutter/material.dart'; +import 'package:table_calendar/table_calendar.dart'; + +class Calendar extends StatefulWidget { + @override + _Calendar createState() => _Calendar(); +} + +class _Calendar extends State { + // Colors + final Color _rangeHighlight = const Color.fromARGB(255, 255, 126, 126); + + // Styles + final TextStyle _textStyle = const TextStyle(color: Colors.white); + + // Current date + CalendarFormat _calendarFormat = CalendarFormat.month; + DateTime _focusedDay = DateTime.now(); + late final DateTime _lastDay = + DateTime.utc(_focusedDay.year, _focusedDay.month + 1, 0); + late final DateTime _firstDay = + DateTime.utc(_focusedDay.year, _focusedDay.month, 1); + DateTime? _selectedDay; + + // Highlighted days + RangeSelectionMode _rangeSelectionMode = RangeSelectionMode.toggledOff; + late final DateTime _rangeStart = + DateTime.utc(_focusedDay.year, _focusedDay.month, _focusedDay.day - 10); + late final DateTime _rangeEnd = + DateTime.utc(_focusedDay.year, _focusedDay.month, _focusedDay.day - 2); + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.transparent, + resizeToAvoidBottomInset: true, + body: SingleChildScrollView( + child: TableCalendar( + firstDay: _firstDay, + lastDay: _lastDay, + focusedDay: _focusedDay, + rangeStartDay: _rangeStart, + rangeEndDay: _rangeEnd, + calendarFormat: _calendarFormat, + pageJumpingEnabled: false, + daysOfWeekVisible: false, + rowHeight: 48.0, + availableCalendarFormats: const {CalendarFormat.month: 'Month'}, + selectedDayPredicate: (day) { + return isSameDay(_selectedDay, day); + }, + onDaySelected: (selectedDay, focusedDay) { + if (!isSameDay(_selectedDay, selectedDay)) { + setState(() { + _selectedDay = selectedDay; + _focusedDay = focusedDay; + }); + } + }, + onFormatChanged: (format) { + if (_calendarFormat != format) { + // Call `setState()` when updating calendar format + setState(() { + _calendarFormat = format; + }); + } + }, + onPageChanged: (focusedDay) { + // No need to call `setState()` here + _focusedDay = focusedDay; + }, + headerStyle: const HeaderStyle( + titleTextStyle: TextStyle( + fontFamily: 'Gotham', + fontSize: 32.0, + color: Colors.white, + fontWeight: FontWeight.bold, + ), + leftChevronVisible: false, + rightChevronVisible: false, + headerPadding: EdgeInsets.only(left: 135, top: 50)), + calendarStyle: CalendarStyle( + rowDecoration: const BoxDecoration(color: Colors.transparent), + outsideDaysVisible: false, + defaultTextStyle: _textStyle, + selectedDecoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.redAccent, + border: Border.all(color: Colors.white)), + weekendTextStyle: _textStyle, + todayDecoration: const BoxDecoration( + color: Color.fromARGB(174, 254, 100, 100), + shape: BoxShape.circle), + rangeHighlightColor: _rangeHighlight, + rangeStartDecoration: BoxDecoration( + color: _rangeHighlight, shape: BoxShape.circle), + rangeEndDecoration: BoxDecoration( + color: _rangeHighlight, shape: BoxShape.circle), + withinRangeTextStyle: _textStyle), + ), + )); + } +} diff --git a/lib/src/features/landing-page/panel.dart b/lib/src/features/landing-page/panel.dart index 545dc0e..eee18d2 100644 --- a/lib/src/features/landing-page/panel.dart +++ b/lib/src/features/landing-page/panel.dart @@ -14,6 +14,7 @@ class PanelWidget extends StatelessWidget { controller: controller, children: [ const SizedBox(height: 36), + buildPopUp(context), buildAboutText(), const SizedBox(height: 24), ], @@ -38,4 +39,38 @@ class PanelWidget extends StatelessWidget { ], ), ); + + Widget buildPopUp(BuildContext context) => Container( + child: ElevatedButton( + child: Text('Popup Button'), + onPressed: () { + showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text('What do my phases mean?'), + content: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: const [ + Text( + 'Your cycle typically consists of four main phases: follicular, period, ovulation, and luteal!' + ), + SizedBox(height: 12), + Text(""" + Follicular\n\n\n\n + Period\n\n\n\n + Ovulation\n\n\n\n + Luteal\n\n\n\n + """), + ], + ), + actions: [ + TextButton( + child: const Text('Close'), + onPressed: () => Navigator.pop(context), + ), + ], + ), + ); + }), + ); } diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/macos/Flutter/Flutter-Debug.xcconfig index c2efd0b..4b81f9b 100644 --- a/macos/Flutter/Flutter-Debug.xcconfig +++ b/macos/Flutter/Flutter-Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/Flutter-Release.xcconfig b/macos/Flutter/Flutter-Release.xcconfig index c2efd0b..5caa9d1 100644 --- a/macos/Flutter/Flutter-Release.xcconfig +++ b/macos/Flutter/Flutter-Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Podfile b/macos/Podfile new file mode 100644 index 0000000..dade8df --- /dev/null +++ b/macos/Podfile @@ -0,0 +1,40 @@ +platform :osx, '10.11' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/macos/Podfile.lock b/macos/Podfile.lock new file mode 100644 index 0000000..326f830 --- /dev/null +++ b/macos/Podfile.lock @@ -0,0 +1,16 @@ +PODS: + - FlutterMacOS (1.0.0) + +DEPENDENCIES: + - FlutterMacOS (from `Flutter/ephemeral`) + +EXTERNAL SOURCES: + FlutterMacOS: + :path: Flutter/ephemeral + +SPEC CHECKSUMS: + FlutterMacOS: ae6af50a8ea7d6103d888583d46bd8328a7e9811 + +PODFILE CHECKSUM: 6eac6b3292e5142cfc23bdeb71848a40ec51c14c + +COCOAPODS: 1.11.3 diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 015d1fd..97ef721 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -26,6 +26,7 @@ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 7824EACD9065A27E6A52548F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBAC2D414C2B1943AEC3C730 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -54,7 +55,7 @@ /* Begin PBXFileReference section */ 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* psycl.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "psycl.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* psycl.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = psycl.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -66,8 +67,12 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 34F77D0719BCE9A3C21FEDC1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4670CE944E6A89092E27AB78 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 4BAE1B5DDA7760DE76B305B6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + DBAC2D414C2B1943AEC3C730 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -75,6 +80,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 7824EACD9065A27E6A52548F /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -99,6 +105,7 @@ 33CEB47122A05771004F2AC0 /* Flutter */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + DB2AC463AEA36F3815572112 /* Pods */, ); sourceTree = ""; }; @@ -148,10 +155,22 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + DBAC2D414C2B1943AEC3C730 /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; }; + DB2AC463AEA36F3815572112 /* Pods */ = { + isa = PBXGroup; + children = ( + 4670CE944E6A89092E27AB78 /* Pods-Runner.debug.xcconfig */, + 4BAE1B5DDA7760DE76B305B6 /* Pods-Runner.release.xcconfig */, + 34F77D0719BCE9A3C21FEDC1 /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -159,6 +178,7 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 74FE0D90678F1D81400188C3 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -270,6 +290,28 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 74FE0D90678F1D81400188C3 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/macos/Runner.xcworkspace/contents.xcworkspacedata b/macos/Runner.xcworkspace/contents.xcworkspacedata index 1d526a1..21a3cc1 100644 --- a/macos/Runner.xcworkspace/contents.xcworkspacedata +++ b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/pubspec.lock b/pubspec.lock index c75ae85..aeda1fa 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,6 +1,90 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + amplify_api: + dependency: "direct main" + description: + name: amplify_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.11" + amplify_api_android: + dependency: transitive + description: + name: amplify_api_android + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.11" + amplify_api_ios: + dependency: transitive + description: + name: amplify_api_ios + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.11" + amplify_auth_cognito: + dependency: "direct main" + description: + name: amplify_auth_cognito + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.11" + amplify_auth_cognito_android: + dependency: transitive + description: + name: amplify_auth_cognito_android + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.11" + amplify_auth_cognito_ios: + dependency: transitive + description: + name: amplify_auth_cognito_ios + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.11" + amplify_core: + dependency: transitive + description: + name: amplify_core + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.11" + amplify_datastore: + dependency: "direct main" + description: + name: amplify_datastore + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.11" + amplify_datastore_plugin_interface: + dependency: transitive + description: + name: amplify_datastore_plugin_interface + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.11" + amplify_flutter: + dependency: "direct main" + description: + name: amplify_flutter + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.11" + amplify_flutter_android: + dependency: transitive + description: + name: amplify_flutter_android + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.11" + amplify_flutter_ios: + dependency: transitive + description: + name: amplify_flutter_ios + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.11" async: dependency: transitive description: @@ -8,6 +92,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.9.0" + aws_common: + dependency: transitive + description: + name: aws_common + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1" boolean_selector: dependency: transitive description: @@ -36,6 +127,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.16.0" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.2" cupertino_icons: dependency: "direct main" description: @@ -67,6 +165,34 @@ packages: description: flutter source: sdk version: "0.0.0" + http: + dependency: transitive + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.13.5" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.2" + intl: + dependency: transitive + description: + name: intl + url: "https://pub.dartlang.org" + source: hosted + version: "0.17.0" + json_annotation: + dependency: transitive + description: + name: json_annotation + url: "https://pub.dartlang.org" + source: hosted + version: "4.8.0" lints: dependency: transitive description: @@ -102,6 +228,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.2" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" sky_engine: dependency: transitive description: flutter @@ -142,6 +275,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.0" + stream_transform: + dependency: transitive + description: + name: stream_transform + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" string_scanner: dependency: transitive description: @@ -163,6 +303,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.4.12" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + uuid: + dependency: transitive + description: + name: uuid + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.6" vector_math: dependency: transitive description: @@ -172,3 +326,4 @@ packages: version: "2.1.2" sdks: dart: ">=2.18.2 <3.0.0" + flutter: ">=2.10.0" diff --git a/pubspec.yaml b/pubspec.yaml index f2f8dfc..607e149 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -32,6 +32,11 @@ dependencies: flutter: sdk: flutter + amplify_flutter: ^0.6.0 + amplify_datastore: ^0.6.0 + amplify_api: ^0.6.0 + amplify_auth_cognito: ^0.6.0 + # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. @@ -44,6 +49,9 @@ dev_dependencies: flutter_test: sdk: flutter + #amplify_flutter: ^0.6.0 + #amplify_datastore: ^0.6.0 + # The "flutter_lints" package below contains a set of recommended lints to # encourage good coding practices. The lint set provided by the package is # activated in the `analysis_options.yaml` file located at the root of your