Как передать сообщение от Flutter к Native?

Как бы вы передали информацию из Flutter обратно в Android / родной код, если это необходимо для взаимодействия с конкретным API / аппаратным компонентом?

есть ли какие-либо каналы событий, которые могут отправлять информацию другим способом или что-то похожее на обратный вызов?

  1. на platform_channel документация указывает " вызовы методов также могут быть отправлены в обратном направлении, при этом платформа действует как клиент для методов, реализованных в Dart. Конкретным примером этого является the плагин quick_actions.- Я не понимаю, как туземная сторона получает сообщение от флаттера в данном случае.
  2. похоже BasicMessageChannelметод send () можно использовать для отправки "указанного сообщения плагинам платформы на этом канале". Может ли кто-нибудь привести простой пример реализации этого?

2 ответов


Это простая демонстрация реализации :

  1. передача строкового значения из flutter в Android code
  2. получение ответа от кода Android для flutter

код основан на примере из :https://flutter.io/platform-channels/#codec

1.Передача строкового значения "text":

String text = "whatever";

Future<Null> _getBatteryLevel(text) async {
String batteryLevel;
try {
  final String result = await platform.invokeMethod('getBatteryLevel',{"text":text}); 
  batteryLevel = 'Battery level at $result % .';
} on PlatformException catch (e) {
  batteryLevel = "Failed to get battery level: '${e.message}'.";
}

setState(() {
  _batteryLevel = batteryLevel;
});

}

2.Получение ответа "batterylevel" после RandomFunction ();

 public void onMethodCall(MethodCall call, MethodChannel.Result result) {
                    if (call.method.equals("getBatteryLevel")) {

                        text = call.argument("text");
                        String batteryLevel = RandomFunction(text);

                        if (batteryLevel != null) {
                            result.success(batteryLevel);
                        } else {
                            result.error("UNAVAILABLE", "Battery level not available.", null);
                        }
                    } else {
                        result.notImplemented();
                    }
                }

надеюсь, что это помогает!


да, flutter имеет EventChannel класс, который является то, что вы ищете именно.

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

надеюсь, что помогла!