docs.flutter.dev uses cookies from Google to deliver and enhance the quality of its services and to analyze traffic. Learn more.

Skip to main content
Flutter logo Flutter Docs
search
  • Flutter logo Flutter
  • Flutter logo Flutter Docs
  • Flutter logo Flutter API
  • Dart logo Dart
  • Dart logo DartPad
  • Dart logo pub.dev
Get started
  • Get started
  • Set up Flutter
    • Overview
    • Install with VS Code
    • Install manually
    • Upgrade SDK
    • SDK archive
    • Add to path
    • Troubleshoot
    • Uninstall SDK
    • Introduction
    • Write your first app
      • Introduction
      • Intro to Dart
      • Widgets
      • Layout
      • State management
      • Handling user input
      • Networking and data
      • Local data and caching
      • Flutter for Android devs
      • Flutter for Jetpack Compose devs
      • Flutter for SwiftUI devs
      • Flutter for UIKit devs
      • Flutter for React Native devs
      • Flutter for web devs
      • Flutter for Xamarin.Forms devs
      • Introduction to declarative UI
      • Flutter versus Swift concurrency
    • Samples & tutorials
    • Release notes
    • Breaking changes
    • Compatibility policy
    • Medium publicationopen_in_new
    • What's new in the docs
      • Overview
      • Discover Firebase for Flutteropen_in_new
      • Get to know Firebase for Flutteropen_in_new
      • Add a user authentication flow to a Flutter app using FirebaseUIopen_in_new
      • Get to know Firebase for webopen_in_new
      • Overview
      • Add achievements and leaderboards
      • Build leaderboards with Firestoreopen_in_new
      • Add advertising
      • Add multiplayer support
      • Add in-app purchasesopen_in_new
      • Add user authenticationopen_in_new
      • Debug using Crashlyticsopen_in_new
      • Intro to Flame with Flutteropen_in_new
        • Ads overview
        • Add advertising
        • Add AdMob ads to your Flutter appopen_in_new
        • Add an AdMob banner and native inline adsopen_in_new
        • Integrate multimedia ads (video)open_in_new
        • Google AdMob mediationopen_in_new
        • Interactive Media Ads SDKopen_in_new
        • Payments overview
        • Google pay packageopen_in_new
      • Add in-app purchasesopen_in_new
      • Add Google maps to a Flutter appopen_in_new
      • Google Maps packageopen_in_new
    • Build a news app
    • Create with AI
    • AI Rules
      • Overview
      • User experience
      • Feature integration
      • Custom LLM providers
      • Chat client sample
    • Dart & Flutter MCP serveropen_in_new
    • GenUI SDK for Flutteropen_in_new
    • Firebase AI Logicopen_in_new
  • User interface
  • Introduction
    • Overview
      • Cupertino
      • Material components
      • Accessibility
      • Animation
      • Assets
      • Async
      • Basics
      • Input
      • Interaction
      • Layout
      • Painting
      • Scrolling
      • Styling
      • Text
    • Introduction
    • Build a layout
      • Create and use lists
      • Create a horizontal list
      • Create a grid view
      • Create lists with different types of items
      • Create lists with spaced items
      • Work with long lists
      • Overview
      • Use slivers to achieve fancy scrolling
      • Place a floating app bar above a list
      • Create a scrolling parallax effect
    • Overview
    • General approach
    • SafeArea & MediaQuery
    • Large screens & foldables
    • User input & accessibility
    • Capabilities & policies
    • Automatic platform adaptations
    • Best practices
    • Additional resources
    • Share styles with themes
    • Material design
    • Migrate to Material 3
      • Fonts & typography
      • Use a custom font
      • Export fonts from a package
      • Google Fonts packageopen_in_new
      • Use custom fragment shaders
    • Add interactivity to your app
      • Introduction
      • Handle taps
      • Drag an object outside an app
      • Drag a UI element within an app
      • Add Material touch ripples
      • Implement swipe to dismiss
      • Create and style a text field
      • Retrieve the value of a text field
      • Handle changes to a text field
      • Manage focus in text fields
      • Build a form with validation
    • Display a snackbar
    • Implement actions & shortcuts
    • Manage keyboard focus
    • Add assets and images
    • Display images from the internet
    • Fade in images with a placeholder
    • Play and pause a video
    • Transform assets at build time
    • Overview
    • Add tabs to your app
    • Navigate to a new screen and back
    • Send data to a new screen
    • Return data from a screen
    • Add a drawer to a screen
    • Set up deep linking
    • Set up app links for Android
    • Set up universal links for iOS
    • Configure web URL strategies
    • Introduction
    • Tutorial
    • Implicit animations
    • Animate the properties of a container
    • Fade a widget in and out
    • Hero animations
    • Animate a page route transition
    • Animate using a physics simulation
    • Staggered animations
    • Create a staggered menu animation
    • API overview
    • Accessibility
    • Internationalization
  • Beyond UI
      • Introduction
      • Think declaratively
      • Ephemeral vs app state
      • Simple app state management
      • Options
      • Overview
      • Fetch data from the internet
      • Make authenticated requests
      • Send data to the internet
      • Update data over the internet
      • Delete data on the internet
      • Communicate with WebSockets
      • JSON serialization
      • Parse JSON in the background
      • Store key-value data on disk
      • Read and write files
      • Persist data with SQLite
      • Overview
      • Add Firebase to your Flutter appopen_in_new
    • Google APIs
    • Introduction
    • Architecture concepts
    • Guide to app architecture
      • Overview
      • UI layer
      • Data layer
      • Dependency injection
      • Testing each layer
    • Recommendations
    • Design patterns
    • Supported platforms
    • Build desktop apps with Flutter
    • Write platform-specific code
      • Set up Android development
      • Add a splash screen
      • Add predictive back
      • Bind to native code
      • Host a native Android view
      • Calling JetPack APIs
      • Launch a Jetpack Compose activity
      • Restore state on Android
      • Target ChromeOS with Android
      • Protect your app's sensitive content
      • Set up iOS development
      • Flutter on latest iOS
      • Leverage Apple's system libraries
      • Add a launch screen
      • Add iOS App Clip support
      • Add iOS app extensions
      • Bind to native code
      • Host a native iOS view
      • Enable debugging on iOS
      • Restore state on iOS
      • Set up Linux development
      • Build a Linux app
      • Set up macOS development
      • Build a macOS app
      • Bind to native code
      • Host a native macOS view
      • Web support in Flutter
      • Set up web development
      • Build a web app
      • Compile to WebAssembly