3 votes

Démarrer une sous-classe de FlutterActivity en utilisant un moteur mis en cache

Je suis en train d'ajouter une vue développée avec Flutter à une application Android existante. J'ai suivi les tutoriels que l'on trouve dans le guide Flutter site web et nous avons décidé d'utiliser un moteur en cache afin de minimiser le délai que les utilisateurs peuvent rencontrer lorsqu'ils naviguent vers la partie Flutter de l'application. Pour ce faire, vous devez lancer votre activité Flutter de la manière suivante

startActivity(
    FlutterActivity
      .withCachedEngine("my_engine_id")
      .build(this) // this is a Context

)

Au bout d'un moment, j'ai besoin de créer un canal de méthode pour communiquer entre la partie Flutter de l'application et l'application hôte Android. tutoriels où il est démontré que l'activité qui met en œuvre le canal doit s'étendre FlutterActivity .

Mon problème est donc que je ne suis pas sûr de savoir comment initialiser cette activité en utilisant un moteur en cache, puisque je ne peux évidemment pas utiliser FlutterActivity.withCachedEngine plus. Quelqu'un a-t-il déjà résolu ce problème ?

2voto

Nicolás Carrasco Points 1495

Après avoir examiné FlutterActivity J'ai trouvé la documentation provideFlutterEngine méthode . La description du document indique clairement que :

Ce hook est l'endroit où un FlutterEngine en cache doit être fourni, si un FlutterEngine en cache est souhaité.

L'implémentation finale de ma classe ressemble donc à ceci maintenant

class MyActivity : FlutterActivity() {

    override fun provideFlutterEngine(context: Context): FlutterEngine? =
        FlutterEngineCache.getInstance().get(FlutterConstants.ENGINE_ID)

    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "my-channel")
            .setMethodCallHandler { call, result ->
                if (call.method == "my-method") {
                    myMethod()
                    result.success(null)
                } else {
                    result.notImplemented()
                }
            }
    }

    private fun myMethod() {
        // Do native stuff
    }

}

Et je commence simplement à écrire startActivity(Intent(this, MyActivity::class.java))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X