Flutter learning resources
Demo
Add-to-app
Recommended approaches for adding Flutter to existing apps.
Demo
Android splash screen
A Flutter sample app that exemplifies how to implement an animated splash screen for Android devices.
Demo
iOS app clip
A sample project demonstrating integration with iOS App Clip.
Demo
Swift platform view
A Flutter sample app that combines a native iOS UIViewController with a full-screen Flutter view.
Quickstart
Simplistic editor
This sample text editor showcases the use of TextEditingDeltas and a DeltaTextInputClient to expand and contract styled ranges of text.
Workshop
Your first Flutter app workshop
An instructor-led version of our very popular
'Write your first Flutter app' codelab.
Codelab
Your first Flutter app
Create a simple random-name generator app.
This app is responsive and runs on mobile, desktop, and web.
Codelab
Records and Patterns in Dart
Discover Dart 3's new records and patterns features.
Learn how you can use them in a Flutter app to help you
write more readable and maintainable Dart code.
Codelab
Scrolling experiences in Flutter
Start with an app that performs simple, straightforward scrolling
and enhance it to create fancy and custom scrolling effects
by using slivers.
Codelab
Take your Flutter app from boring to beautiful
Learn how to use some of the features in Material 3
to make your app beautiful and responsive.
Codelab
Building next generation UIs in Flutter
Learn how to build a Flutter app that uses the power of `flutter_animate`,
fragment shaders, and particle fields.
Codelab
Adaptive Apps in Flutter
Learn how to build a Flutter app that adapts to the
platform that it's running on, be that Android, iOS,
the web, Windows, macOS, or Linux.
Codelab
Animations in Flutter
Learn how to build animated effects in Flutter. You'll learn how to build
implicit and explicit animations, and customize
navigation transition animations the animations package and predictive back
on Android.
Codelab
Building Beautiful Transitions with Material Motion for Flutter
Learn how to use the Material animations package to
add pre-built transitions to a Material app called Reply.
Codelab
How to debug layout issues with the Flutter Inspector
Step-by-step instructions on how to debug
common layout problems using the Flutter
Inspector and Layout Explorer.
Codelab
Implicit animations
Use DartPad (no downloads required!) to learn how to use
implicit animations to add motion and create
visual effects for the widgets in your UI.
Codelab
MDC-101 - Material Components (MDC) Basics
Learn the basics of using Material Components by building
a simple app with core components.
Codelab
MDC-102 - Material Structure and Layout
Learn how to use Material for structure and layout in Flutter.
Continue building the e-commerce app, introduced in MDC-101,
by adding navigation, structure, and data.
Codelab
MDC-103 - Material Theming with Color, Shape, Elevation, and Type
Discover how Material Components for Flutter make it
easy to differentiate your product, and express your
brand through design.
Codelab
MDC-104 - Material Advanced Components
Improve your design and learn to use our advanced
component backdrop menu.
Codelab
Adding AdMob Ads to a Flutter app
Learn how to add an AdMob banner, an interstitial ad,
and a rewarded ad to an app called Awesome Drawing Quiz,
a game that lets players guess the name of the drawing.
Codelab
Adding an AdMob banner and native inline ads to a Flutter app
Learn how to implement inline banner and native ads
to a travel booking app that lists possible
flight destinations.
Codelab
Adding in-app purchases to your Flutter app
Extend a simple gaming app that uses the Dash mascot as
currency to offer three types of in-app purchases:
consumable, non-consumable, and subscription.
Codelab
Add a user authentication flow using FirebaseUI
Learn how to add Firebase authentication to a Flutter app
with only a few lines of code.
Codelab
Get to know Firebase for Flutter
Build an event RSVP and guestbook chat app on both Android
and iOS using Flutter, authenticating users with Firebase
Authentication, and sync data using Cloud Firestore.
Codelab
Notifications with Firebase Cloud Messaging
Learn how to develop a multi-platform app with Flutter
and Firebase Cloud Messaging, integrating FCM to send and
receive messages on Android, iOS, and web.
Codelab
Add sound and music to your Flutter game with SoLoud
The SoLoud package, a free and portable engine,
delivers the low-latency and high-performance sound that's
essential for many games.
Codelab
Build a 2D physics game with Flutter and Flame
This codelab guides you through crafting game mechanics in a
Flutter and Flame game using a 2D physics simulation called Forge2D.
Codelab
Build a word puzzle with Flutter
This codelab focuses on building word puzzle games,
and dives into using Flutter's background processing
to generate expansive crossword-style grids of interlocking words.
Codelab
Introduction to Flame with Flutter
Build a Breakout clone using the Flame 2D game engine and
embed it in a Flutter wrapper.
Codelab
Adding Google Maps to a Flutter app
Display a Google map in an app, retrieve data from a
web service, and display the data as markers on the map.
Codelab
Adding WebView to your Flutter app
With the WebView Flutter plugin you can add a WebView
widget to your Android or iOS Flutter app.
Codelab
Using FFI in a Flutter plugin
Learn how to use Dart's FFI (foreign function interface)
library, ffigen, allowing you to leverage
existing native libraries that provide a
C interface.
Codelab
How to test a Flutter app
Start with a simple app that manages state with the Provider package.
Unit test the provider package. Write widget tests for two of the
widgets. Use Flutter Driver to create an integration test.
Codelab
Adding a Home Screen widget to your Flutter app
Learn how to add a Home Screen widget to your Flutter app
on iOS. This applies to your home screen, lock screen, or the
today view.
Codelab
Write a Flutter desktop application
Build a Flutter desktop app (Windows, Linux, or macOS)
that accesses GitHub APIs, and
create and use plugins to interact with native APIs and desktop applications.
Quickstart
Command-line app
A command line app that parses command-line options and fetches from GitHub.
Quickstart
Extension methods
Demonstrates Dart's extensions method syntax.
Quickstart
FFI
A series of simple examples demonstrating how to call C libraries from Dart.
Quickstart
Isolates (in a CLI)
Command line applications that demonstrate how to work with Concurrency in Dart using isolates.
Quickstart
Native Dart app
A command line application that can be compiled to native code using `dart compile exe`.
Quickstart
Server side Dart
Examples of running Dart on the server.
Quickstart
Package constraint solver
Demonstrates best-practices for publishing packages on pub.dev.
Recipe
Animate a page route transition
Transition between routes by animating the new route into view from the bottom of the screen.
Recipe
Animate a widget using a physics simulation
Learn how to move a widget from a dragged point back to the center using a spring simulation.
Recipe
Animate the properties of a container
Use AnimatedContainer to animate the size, background color, and border radius of a Container.
Recipe
Fade a widget in and out
The AnimatedOpacity widget makes it easy to perform opacity animations.
Recipe
Add a drawer to a screen
Use the Drawer widget in combination with a Scaffold to create a layout with a Material Design drawer.
Recipe
Display a snackbar
Use the Snackbar widget to display messages to your users.
Recipe
Export fonts from a package
Use a font across multiple apps.
Recipe
Update the UI based on orientation
Build a list that displays two columns in portrait mode and three columns in landscape mode.
Recipe
Use a custom font
Apply fonts to your entire app or individual widgets.
Recipe
Use themes to share colors and font styles
To share styles across your app, use Themes.
Recipe
Work with tabs
Working with tabs is a common pattern in mobile apps that follow the Material Design or Cupertino guidelines.
Recipe
Create a download button
Build a download button that transitions through multiple visual states, based on the status of an app download.
Recipe
Create a nested navigation flow
Create top level routes, and routes nested below specific widgets.
Recipe
Create a scrolling parallax effect
Create the parallax effect by building a list of cards with images that 'move'.
Recipe
Create a shimmer loading effect
Communicate that data is loading with a chrome color shimmer on the screen.
Recipe
Create a staggered menu animation
Build a drawer menu with animated content that is staggered and has a button that pops in at the bottom
Recipe
Create a typing indicator
Build a speech bubble typing indicator that animates in and out of view.
Recipe
Create an expandable FAB
Create a floating action button that spawns other action buttons.
Recipe
Drag a UI element
Build a drag-and-drop interaction when the user long presses.
Recipe
Build a form with validation
Learn how to add validation to a form.
Recipe
Create and style a text field
In this recipe, explore how to create and style text fields.
Recipe
Focus and text fields
Shift focus to a text field programmatically.
Recipe
Handle changes to a text field
Listen for changes to a TextField using a callback.
Recipe
Retrieve the value of a text field
Learn how to retrieve the text a user has entered into a text field.
Recipe
Add achievements and leaderboards to your game
Use the games_services package to add leaderboard functionality to your mobile game.
Recipe
Add multiplayer support to your Flutter game
Use the cloud_firestore package to implement multiplayer capabilities in your game.
Recipe
Add ads to your Flutter game
Use the google_mobile_ads package to add a banner ad to your app or game.
Recipe
Add Material touch ripples
Use the Inkwell widget to display a ripple animation.
Recipe
Handle taps
Use the GestureDetector widget to respond to fundamental actions, such as tapping and dragging.
Recipe
Implement swipe to dismiss
Learn how to use the Dismissible widget.
Recipe
Display images from the internet
To work with images from a URL, use the Image.network() constructor.
Recipe
Fade in images with a placeholder
Use the FadeInImage widget to show a visual placeholder before an image loads.
Recipe
Grid lists
Learn to use a GridView widget.
Recipe
Horizontal lists
Learn to display items horizontally in a scrollable list.
Recipe
Lists with different types of items
Create a list with headers followed by a few list items.
Recipe
Lists and floating app bars
Place a floating app bar or navigation bar above a list.
Recipe
Basic lists
Learn to display items with the ListView widget.
Recipe
Long lists
Work with longer lists with the Listview.builder constructor.
Recipe
Lists with spaced items
Create a list with padding between items.
Recipe
Animate a widget across screens
Use the Hero widget to animate a widget from one screen to the next.
Recipe
Navigate to a new screen and back
This recipe uses the Navigator to navigate to a new route.
Recipe
Named routes
Create named routes and navigate to them.
Recipe
Arguments and named routes
Pass arguments to a named route and read the arguments on that route.
Recipe
Android app links
Set up deep linking on Android
Recipe
iOS universal links
Set up universal links for iOS
Recipe
Return data from a screen
Return data from one screen to another with the Navigator.pop method.
Recipe
Send data to a new screen
Send data from one screen to new one.
Recipe
Fetch data from the internet
Learn to use HTTP in your app.
Recipe
Make authenticated requests
Authorization headers in HTTP
Recipe
Send data to the internet
Send HTTP POST requests in your app.
Recipe
Update data over the internet
Send an HTTP put request.
Recipe
Delete data on the internet
Send an HTTP delete request.
Recipe
WebSockets
Connect to and communicate with a websocket.
Recipe
Parse JSON in the background
Learn to use Dart's Isolate objects
Recipe
Persist data with SQLite
Use the sqflite package.
Recipe
Read and write files
Use the dart:io library and path_provider plugin to save files to disk.
Recipe
Store key-value data on disk
Persist data with shared_preferences
Recipe
Play and pause a video
Play videos stored on the file system, as an asset, or from the internet.
Recipe
Use the camera
Learn to use a devices camera.
Recipe
Report errors to a service
Report errors to Sentry crash reporting.
Recipe
Performance profiling
Write a test that records a performance timeline.
Recipe
Write unit tests
An introduction to writing unit tests.
Recipe
Write widget tests
An introduction to writing widget tests.
Recipe
Mock dependencies in tests
The basics of mocking with the Mockito package.
Recipe
Find widgets in tests
This recipe looks at the 'find' constant provided by the flutter_test package.
Recipe
Handle scrolling
Learn how to scroll in widget tests.
Recipe
App orientation
Learn how to check app orientation in widget tests.
Recipe
Tap, drag, and enter text
Interact with widgets in widget tests.
Recipe
Persistent storage architecture - SQL
Save complex application data to a user's device with SQL.
Recipe
Error handling with Result objects
Improve error handling across classes with Result objects.
Recipe
Optimistic state
Improve the perception of responsiveness of an application by implementing optimistic state.
Recipe
Offline First
Implement offline-first support for one feature in an application.
Recipe
Persistent storage architecture - Key-value data
Save application data to a user's on-device key-value store.
Recipe
Command pattern
Simplify view model logic by implementing a Command class.
Quickstart
Asset transformation
Demonstrates how to transform images' color scales and formats.
Quickstart
Background isolate channels
Demonstrates how to use long-lived isolates.
Quickstart
Code sharing
Demonstrates how to share business logic between a Flutter client and Dart server using `package:shelf`.
Quickstart
Context menus
This sample shows how to create and customize cross-platform context menus, such as the text selection toolbar on mobile or the right click menu on desktop.
Quickstart
Desktop UI
Demonstrates desktop features in both Material and FluentUI design systems.
Quickstart
AI generated dynamic theme
Demonstrates how to call on-device Flutter APIs based on output from the Gemini API.
Quickstart
Form app
A sample demonstrating different types of forms and best practices.
Quickstart
AI todo list
A developer sample written in Flutter demonstrating how to interact with a to-do list in natural language using the Gemini API.
Quickstart
Google Maps plugin
Demonstrates the Google Maps for Flutter plugin.
Quickstart
Infinite list
A Flutter sample app that shows an implementation of the 'infinite list' UX pattern.
Quickstart
Isolates
A sample application that demonstrate best practices when using isolates.
Quickstart
Navigation and routing
A sample that shows how to use `go_router` API to handle common navigation scenarios.
Quickstart
Google Maps Flutter plugin
A sample place tracking app that uses the google_apps_flutter plugin.
Quickstart
Platform adaptive design
This sample project shows a Flutter app that maximizes application code reuse while adhering to different design patterns on Android and iOS.
Quickstart
Counter app with Provider
The starter Flutter application, but using the Provider package to manage state.
Quickstart
Shopping app with Provider
A Flutter sample app that shows a state management approach using the Provider package.
Quickstart
Simple shaders
A simple Flutter fragment shaders project.
Quickstart
Desktop calculator
A calculator sample to demonstrate a simple start for a desktop Flutter app.
Quickstart
Testing app
A sample app that shows different types of testing in Flutter.
Quickstart
Web element embedding
Modifies the index.html of a flutter app so it is launched in a custom hostElement. This is the most basic embedding example.
Quickstart
ng-flutter
A simple Angular app (and component) that replicates the element embedding example, but in an Angular app.
Quickstart
Platform channels
A sample Flutter app which demonstrates how to use `MethodChannel`, `EventChannel`, `BasicMessageChannel` and `MessageCodec`.
Filter by
Subject
Type
Was this page's content helpful?
Unless stated otherwise, the documentation on this site reflects Flutter 3.35.5. Page last updated on 2025-10-28. View source or report an issue.