Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass a message from Flutter to Native?

How would you pass info from Flutter back to Android/Native code if needed to interact with a specific API / hardware component?

Are there any Event Channels that can send info the other way or something similar to a callback?

  1. The platform_channel documentation points out "method calls can also be sent in the reverse direction, with the platform acting as client to methods implemented in Dart. A concrete example of this is the quick_actions plugin." I don't see how the native side is receiving a message from Flutter in this instance.
  2. It looks like a BasicMessageChannel’s send() method can be used to send "the specified message to the platform plugins on this channel". Can anyone provide a simple implementation example of this?
like image 429
Adam Hurwitz Avatar asked Mar 04 '18 19:03

Adam Hurwitz


Video Answer


1 Answers

This is a simple implementation showcasing :

  1. Passing a string Value from flutter to Android code
  2. Getting back response from Android code to flutter

code is based on example from :https://flutter.io/platform-channels/#codec

1.Passing string value "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.Getting back response "batterylevel" after 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();                     }                 } 

Hope this helps!

like image 94
UpaJah Avatar answered Sep 23 '22 10:09

UpaJah