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?
- 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.
- 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?
Solution 1:
This is a simple implementation showcasing :
- Passing a string Value from flutter to Android code
- 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!
Solution 2:
Objective C
call.arguments[@"parameter"]
Android
call.argument("parameter");