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

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

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

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

Ответы

Ответ 1

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

  1. Передача строки Значение от флаттера до Android-кода
  2. Возвращение ответа от кода Android на флаттер

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

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

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();
                    }
                }

Надеюсь это поможет!

Ответ 2

Да, у flutter есть класс EventChannel который вы точно ищете.

Ниже приведен пример того, как можно реализовать методы MethodChannel и EventChannel. И эта средняя статья показывает, как EventChannel может быть реализован во флаттерах.

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

Ответ 3

Цель С

call.arguments [@"параметр"]