Есть ли способ вызвать методы Flutter из активности Android?

Я пытаюсь создать SDK во Flutter, с помощью которого собственные приложения могут вызывать методы flutter с аргументами.

После этого я создал модуль Flutter.

Я добавил экран Flutter после этого

Собственный код Android

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import io.flutter.embedding.android.FlutterActivity
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    /****************** Launching Flutter activity *************/
    button.setOnClickListener {
        val flutterEngine = FlutterActivity.withNewEngine()
        startActivity(
                flutterEngine
                .initialRoute("/")
                .build(this)
        )
    }

    login.setOnClickListener {
        // Want to do this
        //  channel?.invokeFlutterMethod("login", "username", "password");
    }
}

}

Код флаттера

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
         return MaterialApp(
             title: 'Flutter Demo',
             theme: ThemeData(
                        primarySwatch: Colors.blue,
                    ),
             home: MyHomePage(title: 'Flutter Demo Home Page'),
         );
    }
}

class MyHomePage extends StatefulWidget {
     MyHomePage({Key key, this.title}) : super(key: key);

     final String title;

     @override
     _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
    static const channel = const 
    MethodChannel('sample.flutter.sdk/apis');

    @override
    void initState() {
         channel.setMethodCallHandler((call) {
            switch(call.method) {
              case "login": {
                   // Call Login API and return the result to 
                   //   android activity  
              }
            }
            return;
         });
        super.initState();
    }

    @override
    Widget build(BuildContext context) {
           return Scaffold(
                body: Center(
                  child: Column(
                     mainAxisAlignment: MainAxisAlignment.center,
                     children: <Widget>[
                          Text(
                              'Login',
                              style: 
                              Theme.of(context).textTheme.headline4,
                           ),
                     ],
                  ),
                ),
           );
     }
}

Я не могу создать здесь MethodChannel, FlutterActivity.withNewEngine не имеет dartExecutor.

    MethodChannel(flutterEngine.dartExecutor.binaryMessenger, 
CHANNEL).setMethodCallHandler {
  call, result ->
  // Note: this method is invoked on the main thread.
  // TODO
}

Есть ли другой способ создания MethodChannels?

0 ответов

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