Start with Flutter_
Build Flutter apps with Appwrite and learn how to use our powerful backend to add authentication, user management, file storage, and more.
4 min read
Learn how to setup your first Flutter project powered by Appwrite.
1. Create Flutter project
Create a Flutter project.
flutter create my_app && cd my_app2. Create project
Head to the Appwrite Console.

If this is your first time using Appwrite, create an account and create your first project.
Then, under Add a platform, add a Flutter app. You can choose between many different platforms.

You can skip optional steps.
3. Install Appwrite
Install the Appwrite SDK for Flutter.
flutter pub add appwrite:17.0.04. Import Appwrite
Find your project's ID in the Settings page.

Open the generated lib/main.dart and add the following code to it, replace <PROJECT_ID> with your project ID. This imports and initializes Appwrite.
import 'package:flutter/material.dart';import 'package:appwrite/appwrite.dart';import 'package:appwrite/models.dart' as models;
void main() { WidgetsFlutterBinding.ensureInitialized(); Client client = Client() .setEndpoint("https://<REGION>.cloud.appwrite.io/v1") .setProject("<PROJECT_ID>"); Account account = Account(client);
runApp(MaterialApp( home: MyApp(account: account), ));}class MyApp extends StatefulWidget { final Account account;
MyApp({required this.account});
@override MyAppState createState() { return MyAppState(); }}5. Create a login page
Then, append the following widgets to lib/main.dart create your login page.
class MyAppState extends State<MyApp> { models.User? loggedInUser; final TextEditingController emailController = TextEditingController(); final TextEditingController passwordController = TextEditingController(); final TextEditingController nameController = TextEditingController();
Future<void> login(String email, String password) async { await widget.account.createEmailPasswordSession( email: email, password: password, ); final user = await widget.account.get(); setState(() { loggedInUser = user; }); }
Future<void> register(String email, String password, String name) async { await widget.account.create( userId: ID.unique(), email: email, password: password, name: name, ); await login(email, password); }
Future<void> logout() async { await widget.account.deleteSession(sessionId: 'current'); setState(() { loggedInUser = null; }); }
@override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Text(loggedInUser != null ? 'Logged in as ${loggedInUser!.name}' : 'Not logged in'), SizedBox(height: 16.0), TextField( controller: emailController, decoration: InputDecoration(labelText: 'Email'), ), SizedBox(height: 16.0), TextField( controller: passwordController, decoration: InputDecoration(labelText: 'Password'), obscureText: true, ), SizedBox(height: 16.0), TextField( controller: nameController, decoration: InputDecoration(labelText: 'Name'), ), SizedBox(height: 16.0), Row( mainAxisAlignment: MainAxisAlignment.start, children: <Widget>[ ElevatedButton( onPressed: () { login(emailController.text, passwordController.text); }, child: Text('Login'), ), SizedBox(width: 16.0), ElevatedButton( onPressed: () { register(emailController.text, passwordController.text, nameController.text); }, child: Text('Register'), ), SizedBox(width: 16.0), ElevatedButton( onPressed: () { logout(); }, child: Text('Logout'), ), ], ), ], ), ), ); }}6. All set
Run your project with flutter run and select a browser, platform, or emulator to run your project.
Was this page helpful?
Share what worked or what we should fix. Once approved, our agents automatically apply suggested updates to the docs.