Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.

Page updated May 1, 2024

Set up fullstack project

For new Amplify apps, we recommend using Amplify Gen 2. You can learn more in our Gen 2 Docs.

Set up your application

Create a new Flutter application

Create a new project using Flutter CLI:

flutter create budget_tracker

Add Amplify to your application

Amplify Flutter is distributed via pub.dev.

  1. From your project root directory, find and modify your pubspec.yaml and add the Amplify plugins to the project dependencies.

    dependencies:
    amplify_api: ^2.0.0
    amplify_auth_cognito: ^2.0.0
    amplify_authenticator: ^2.0.0
    amplify_flutter: ^2.0.0
    flutter:
    sdk: flutter
    go_router: ^6.5.5
  2. Install the dependencies by running the following command. Depending on your development environment, you may perform this step via your IDE (or it may even be performed for you automatically).

    flutter pub get

Platform Setup

Depending on the platform you're building for, some extra set up may be required.

Amplify requires a minimum deployment target of 13.0 and Xcode 15.0 or higher when targeting iOS.

From your project root, navigate to the ios/ directory and open the Podfile in a text editor of your choice. At the top of the file, update the target iOS platform to 13.0 or higher.

platform :ios, '13.0'

Open your project in Xcode and select Runner, Targets -> Runner and then the "General" tab. Under the "Minimum Deployments" section, update the iOS version to 13.0 or higher.

Setting the iOS version to 13.0 or higher in the minimum deployments section of the Runner general window.

Select Runner, Project -> Runner and then the "Info" tab. Update "iOS Deployment Target" to 13.0 or higher.

Setting the iOS version to 13.0 or higher in the deployment targets section of the Runner info window.

Amplify Flutter supports API level 24+ (Android 7.0+), and requires Gradle 8+, Kotlin 1.9+, and Java 17+ when targeting Android. Follow the steps below to apply these changes in your app.

The steps below are intended for Flutter apps created with Flutter version 3.16+. If your app was created prior to version 3.16, please follow the guide here to migrate to Gradle's declarative plugins block before following the steps below.

  1. Open android/settings.gradle and update the Android Gradle plugin and kotlin versions:
android/settings.gradle
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
- id "com.android.application" version "7.3.0" apply false
- id "org.jetbrains.kotlin.android" version "1.7.10" apply false
+ id "com.android.application" version "8.1.0" apply false
+ id "org.jetbrains.kotlin.android" version "1.9.10" apply false
}
  1. Open android/gradle/wrapper/gradle-wrapper.properties and update the Gradle distributionUrl.
android/gradle/wrapper/gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip
  1. Open android/app/build.gradle and update the Java version and minimum Android SDK version.
android/app/build.gradle
android {
namespace = "com.example.myapp"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
compileOptions {
- sourceCompatibility = JavaVersion.VERSION_1_8
- targetCompatibility = JavaVersion.VERSION_1_8
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId = "com.example.myapp"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
- minSdk = flutter.minSdkVersion
+ minSdk = 24
targetSdk = flutter.targetSdkVersion
versionCode = flutterVersionCode.toInteger()
versionName = flutterVersionName
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig = signingConfigs.debug
}
}
}

If you would like to use a higher version of Gradle or Android Gradle plugin see the compatibility matrix here.

Network Permissions for Release Builds

Flutter apps have access to make network requests by default in debug mode. This permission needs to be added when building in release mode. To do this, open android/app/src/main/AndroidManifest.xml and make the following addition.

android/app/src/main/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET"/>
...
</manifest>

There are no Amplify specific requirements or setup instructions when targeting web. You will need to use a browser supported by Flutter. See the following Flutter docs for more info:

Amplify requires a minimum deployment target of 10.15 and Xcode 15.0 or higher when targeting macOS. Additionally, you will need to enable networking, keychain entitlements, and code signing.

Update Minimum Version

From your project root, navigate to the macos/ directory and open the Podfile in a text editor of your choice. Update the target macOS platform to 10.15 or higher.

platform :osx, '10.15'

Open your project in Xcode and select Runner, Targets -> Runner and then the "General" tab. Under the "Minimum Deployments" section, update the macOS version to 10.15 or higher.

Setting the macOS version to 10.15 or higher in the Minimum Deployments tab of the Runner general section.

Select Runner, Project -> Runner and then the "Info" tab. Update "macOS Deployment Target" to 10.15 or higher.

Setting the macOS version to 10.15 or higher in the macOS Deployment Target tab of the Runner info section.

Enable Network Calls

Open your project in Xcode and select Runner, Targets -> Runner and then the "Signing and Capabilities" tab. Under "App Sandbox" select "Outgoing Connections (Client)".

Selecting outgoing connections in the app sandbox section of the runner signing and capabilities tab.

For more info on the Networking entitlement, see Apple's documentation on com.apple.security.network.client.

Enable Keychain Sharing

This capability is required because Amplify uses the Data Protection Keychain on macOS as a platform best practice. See TN3137: macOS keychain APIs and implementations for more information on how Keychain works on macOS and the Keychain Sharing entitlement.

Open your project in Xcode and select Runner, Targets -> Runner and then the "Signing and Capabilities" tab.

  1. Click the "+ icon".

Plus icon circled in the signing and capabilities section of the runner tab.

  1. Search for "Keychain Sharing" in the subsequent modal, and add it.

Keychain Sharing search result after searching keychain.

  1. Scroll down to "Keychain Sharing" in the "Signing and Capabilities" and click the "+" icon. By default, your bundle ID will be used.

Plus icon highlighted in the keychain sharing section of the signing and capabilities section of runner.

  1. Finally, add a development team and enable signing.

Team selector and Enable Development Signing button highlighted in the signing and capabilities section of the runner tab.

There are no Amplify specific requirements or setup instructions when targeting Windows. You will need to use a Windows version supported by Flutter. See the following Flutter docs for more info:

Depending on how your Windows configuration and the method you use to run your Flutter app, you may need to change the file path length limitation.

Amplify Flutter depends on the libsecret library when targeting Linux.

Local Development

To run and debug an app that depends on Amplify Flutter, you must install libsecret-1-dev.

To install on Ubuntu, run:

sudo apt-get update
sudo apt-get install -y libsecret-1-dev

This will install libsecret-1-dev and any dependencies of libsecret-1-dev, such as libglib2.0-dev, which are also required to run and debug apps that depend on Amplify Flutter.

The command to install might vary on other Linux distributions.

Packaging Your App

To include the required dependencies when packaging your app with Snapcraft, include them in your snapcraft.yaml file. For more info, see Flutter's documentation on releasing to the Snap Store.

parts:
my-app:
plugin: flutter
source: .
flutter-target: lib/main.dart
build-packages:
- libsecret-1-dev
stage-packages:
- libsecret-1-0