Skip to content
Blog

Flutter Add-to-App: Embedding Flutter in Existing Native Applications

A practical guide to the Flutter Add-to-App workflow, integrating Flutter modules into existing iOS and Android codebases, memory management, and engine warming.

Published on • November 1, 2026

AI Assistant

Rewriting a massive, established native codebase from scratch is rarely viable for enterprise organizations. Instead, many top companies adopt Flutter incrementally through Add-to-App, embedding Flutter views or full user journeys into existing iOS (Swift/Objective-C) and Android (Kotlin/Java) apps.

In this guide, informed by Flutter’s release architecture discussions (flutter.dev/blog), we explore how Add-to-App functions and key strategies for smooth integration.

How Add-to-App Works

Rather than building a standard standalone Flutter application, developers create a Flutter Module:

flutter create -t module my_flutter_module

This module compiles into standard native artifacts:

  • Android: An AAR (Android Archive) library or local Gradle subproject dependency.
  • iOS: A CocoaPods podspec or a pre-compiled XCFramework.

Native host view controllers or activities can then instantiate a FlutterEngine and present a FlutterViewController (iOS) or FlutterActivity / FlutterFragment (Android).

Key Architectural Best Practices

1. FlutterEngine Pre-warming and Engine Groups

Instantiating a new Flutter engine consumes memory and introduces a brief startup latency. To ensure instant view presentation:

  • Pre-warm a FlutterEngine during app launch or background initialization.
  • Use FlutterEngineGroup when displaying multiple Flutter screens across the native navigation stack. Engine groups share underlying thread pools and GPU contexts, reducing memory overhead to just a few megabytes per additional view.

2. Bidirectional Communication

Establish type-safe communication between native code and Flutter using:

  • Pigeon: Google’s code generation tool that generates strongly typed interfaces across Dart, Swift/Obj-C, and Kotlin/Java.
  • Platform Channels: Standard MethodChannel and EventChannel for streaming native sensors or triggers.

3. Unified Asset and State Management

Coordinate token refreshes, authentication state, and deep linking so that transitioning between native views and embedded Flutter views feels completely transparent to end users.

Add-to-App provides a proven, low-risk pathway to harness Flutter’s cross-platform productivity within existing mission-critical software.