Ответ
Для интеграции 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-контента.