Je cherche un exemple facile à suivre d'eventlisteners avec des plugins natifs. Ainsi, par exemple: Le plugin que j'écris a beaucoup d'auditeurs qui font quelque chose quand une action échoue ou est terminée. Ces écouteurs peuvent être écrits en code natif, mais comment autoriser l'utilisateur final, qui écrit le code dart, à écrire ses propres écouteurs personnalisés? Par exemple, ajoutez une autre assignation de variable dans un événement onSuccess
?Flutter native plugin: Exemple avec eventlisteners
Je cherche un petit exemple pour Android et iOS.
---- ---- EDIT
Je travaille avec ce code atm:
public static void registerWith(Registrar registrar) {
final MethodChannel methodChannelGeoFire = new MethodChannel(registrar.messenger(), "com.bram.vanbilsen.geofire.GeoFire");
final MethodChannel methodChannelGeoQuery = new MethodChannel(registrar.messenger(), "com.bram.vanbilsen.geofire.GeoQuery");
final EventChannel geoQueryKeyEnteredEventChannel = new EventChannel(registrar.messenger(), "com.bram.vanbilsen.geofire.keyEnteredChannel");
final EventChannel geoQueryKeyExitedEventChannel = new EventChannel(registrar.messenger(), "com.bram.vanbilsen.geofire.keyExitedChannel");
final EventChannel geoQueryKeyMovedEventChannel = new EventChannel(registrar.messenger(), "com.bram.vanbilsen.geofire.keyMovedChannel");
final EventChannel geoQueryQueryReadyEventChannel = new EventChannel(registrar.messenger(), "com.bram.vanbilsen.geofire.queryReadyChannel");
final EventChannel geoQueryQueryErrorEventChannel = new EventChannel(registrar.messenger(), "com.bram.vanbilsen.geofire.queryErrorChannel");
final GeofirePlugin instance = new GeofirePlugin(registrar.activity());
geoQueryKeyEnteredEventChannel.setStreamHandler(instance);
geoQueryKeyExitedEventChannel.setStreamHandler(instance);
geoQueryKeyMovedEventChannel.setStreamHandler(instance);
geoQueryQueryReadyEventChannel.setStreamHandler(instance);
geoQueryQueryErrorEventChannel.setStreamHandler(instance);
methodChannelGeoFire.setMethodCallHandler(instance);
methodChannelGeoQuery.setMethodCallHandler(instance);
}
GeofirePlugin(Activity activity) {
this.activity = activity;
}
private final Activity activity;
Et
if (call.method.equals("addGeoQueryEventListener")) {
String refPath = call.argument("refPath");
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
GeoFire geofire = new GeoFire(ref);
List<Double> center = call.argument("center");
double radius = call.argument("radius");
GeoQuery query = geofire.queryAtLocation(new GeoLocation(center.get(0), center.get(1)), radius);
query.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
System.out.println("entered");
}
@Override
public void onKeyExited(String key) {
System.out.println("exited");
}
@Override
public void onKeyMoved(String key, GeoLocation location) {
System.out.println("moved");
}
@Override
public void onGeoQueryReady() {
}
@Override
public void onGeoQueryError(DatabaseError error) {
System.out.println(error.getMessage());
}
});
}
Mes onListen
et onCancel
méthodes sont encore vides. Je voudrais d'abord configurer geoQueryQueryReadyEventChannel
. Je voudrais envoyer des données avec ce canal chaque fois que onGeoQueryReady
dans le GeoQueryEventListener
ramasse quelque chose. Comment puis-je atteindre cet objectif? Mon problème principal est que je ne comprends pas comment je peux lier le GeoQueryEventListener
dans une méthode onListen
à une instance locale GeoQuery
.
Pourriez-vous mettre à jour le premier lien? Il est bas. Je pense que je comprends bien! Mais j'aimerais jeter un oeil à votre projet d'abord :) –
Désolé, le lien a été corrigé. –
Peut-être une question stupide mais est la chaîne dans le constructeur 'EventChannel' une chaîne choisie par vous qui est la même dans le code natif et le code dart? –