Как запустить несколько FlutterActivities?

У меня есть приложение, созданное во Flutter, которое работает только на Android, и у него есть один экран, полностью созданный в нативном коде.

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

Вот как выглядит приложение: Страница Flutter (MainActivity) -> Собственная страница (другое действие) -> Новая флаттер-страница (третье действие)

ПРИЛОЖЕНИЕ НЕ ЯВЛЯЕТСЯ ВСТРОЕННЫМ ПРИЛОЖЕНИЕМ, ЭТО ПОЛНОЕ ПРИЛОЖЕНИЕ FLUTTER С ТОЛЬКО ОДНОЙ СОБСТВЕННОЙ СТРАНИЦЕЙ

Кто-нибудь знает как это сделать?

Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, v1.2.1, on Microsoft Windows [versão 10.0.17763.379], locale pt-BR)
[√] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[√] Android Studio (version 3.3)
[√] IntelliJ IDEA Community Edition (version 2019.1)
[√] VS Code (version 1.30.1)
[√] Connected device (1 available)

• No issues found!

Нельзя ли поменять местами взгляды?

EpicPandaForce 09.04.2019 00:32

Что ты имеешь в виду? Вы можете показать мне образец?

Daniel Oliveira 09.04.2019 00:37

Примерно так: stackoverflow.com/a/36775658/2413303

EpicPandaForce 09.04.2019 00:47

Не сработает, потому что нативная страница — это полноценная активность, а не просто представление.

Daniel Oliveira 09.04.2019 01:24

Вы на 100% уверены в этом? Похоже на просто взгляд на меня. Конечно, было бы проще анимировать его, если бы он не был ContentView, но если бы он существовал внутри FrameLayout, если это возможно. Интересно, существует ли FlutterFragmentDelegate. Хотя, если нет, написать его не составит труда.

EpicPandaForce 09.04.2019 01:31

Не могли бы вы просто "подделать" это? завершить собственный вид и вернуться к активности флаттера, но изменить состояние флаттер-приложения, чтобы оно выглядело так, как будто оно было запущено нажатием кнопки? В противном случае взгляните на файл руководство по добавлению флаттера в существующее приложение. View flutterView = Flutter.createView( MainActivity.this, getLifecycle(), "route1" );

Herbert Poul 09.04.2019 15:34

@herbert Я пытался создать еще один FlutterActivity, но по какой-то причине плагины перестали работать, например, SharedPreferences, он возвращает пустые значения каждый раз, когда я пытаюсь что-то получить от него. Кроме того, по какой-то причине в моем java-классе «Flutter» нет методов с именем «createView».

Daniel Oliveira 09.04.2019 15:52
1
7
1 684
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ключ был GeneratedPluginRegistrant, который вызывал проблемы. Теперь я мог заставить его работать так:

class ANewFluterActivity : FlutterActivity() {

    override fun createFlutterView(context: Context): FlutterView {
        val matchParent = WindowManager.LayoutParams(-1, -1)
        val nativeView = this.createFlutterNativeView()
        val flutterView = FlutterView(this, null as AttributeSet?, nativeView)
        flutterView.setInitialRoute("YOUR_NEW_ROUTE")
        flutterView.layoutParams = matchParent

        this.setContentView(flutterView)
        return flutterView
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        GeneratedPluginRegistrant.registerWith(this) //THIS IS THE SECRET TO MAKE PLUGINS WORK PROPERLY
    }

}

Имейте в виду, что это запустит новый движок, поэтому для этого есть время загрузки.

Daniel Oliveira 09.04.2019 17:08

Другие вопросы по теме