Как запустить FlutterActivity в нативном Android-приложении?

«Как запустить FlutterActivity в нативном Android-приложении?» — вопрос из категории Платформенное взаимодействие, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для интеграции Flutter-экрана в существующее нативное Android-приложение используется FlutterActivity. Вот основные шаги:

1. Настройка манифеста (AndroidManifest.xml): Укажите FlutterActivity и необходимые конфигурации.

<activity
    android:name="io.flutter.embedding.android.FlutterActivity"
    android:theme="@style/LaunchTheme"
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
    android:hardwareAccelerated="true"
    android:windowSoftInputMode="adjustResize" />

2. Запуск с новым движком (New Engine): Простой способ, но каждый запуск создает новый изолированный движок Flutter, что требует больше памяти.

startActivity(
    FlutterActivity
        .withNewEngine()
        .initialRoute("/my_screen") // Опциональный начальный маршрут
        .build(context)
)

3. Запуск с кэшированным движком (Cached Engine): Оптимальный способ для производительности. Требует предварительной инициализации и регистрации движка с уникальным ID в классе Application.

// Предварительная инициализация (например, в Application.onCreate())
FlutterEngineCache.getInstance().put("my_engine_id", flutterEngine)

// Запуск Activity
startActivity(
    FlutterActivity
        .withCachedEngine("my_engine_id")
        .build(context)
)

Ключевой выбор: Используйте withCachedEngine() для частых переходов между нативными и Flutter-экранами, так как это устраняет задержку на инициализацию движка. withNewEngine() подходит для одноразового отображения Flutter-контента.