web-dev-qa-db-fra.com

Comment passer un message de Flutter à Native?

Comment transmettriez-vous les informations de Flutter au code Android/Native si nécessaire pour interagir avec un composant API/matériel spécifique?

Y a-t-il des canaux d'événements qui peuvent envoyer des informations dans l'autre sens ou quelque chose de similaire à un rappel?

  1. La documentation platform_channel indique que "les appels de méthode peuvent également être envoyés dans le sens inverse, la plate-forme jouant le rôle de client pour les méthodes implémentées dans Dart. Un exemple concret en est le plugin quick_actions . " Je ne vois pas comment le côté natif reçoit un message de Flutter dans ce cas.
  2. Il semble que la méthode send () de BasicMessageChannel puisse être utilisée pour envoyer "le message spécifié aux plugins de la plateforme sur ce canal". Quelqu'un peut-il fournir un exemple d'implémentation simple de cela?
18
Adam Hurwitz

Il s'agit d'une implémentation simple présentant:

  1. Passer une valeur de chaîne de flutter à Android code
  2. Récupérer la réponse de Android code à flutter

le code est basé sur l'exemple de: https://flutter.io/platform-channels/#codec

1.Passer la valeur de chaîne "texte":

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.Retourner la réponse "niveau batterie" après 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();
                    }
                }

J'espère que cela t'aides!

28
UpaJah

Oui, flutter a une classe EventChannel qui est exactement ce que vous recherchez.

Ici est un exemple qui montre comment MethodChannel et EventChannel peuvent être implémentés. Et this l'article moyen montre comment un EventChannel peut être implémenté en flutter.

J'espère que cela a aidé!

5
Hemanth Raj

Objectif C

call.arguments [@ "paramètre"]

1
Álvaro Agüero