Flutter ile Android İletişimi

Önce genel mantığı özetleyip daha sonra adım adım anlatmayı daha yararlı buluyorum.
Genel Bakış: Flutter katmanı ile native/android alt katmanı iletişimi dartın sunduğu MethodChannel(String benzersizkanaladı); sınfı ile sağlar.
Android tarafında yine MethodChannel sınıfı ile yapılan çağrıları dinler. Kısaca bir kanal oluşturulur ve metod isimleri ile parametreler native tarafa gönderilir/çağrı yapılır android tarafında bu çağrılar yakalanır ve gelen metod ismine parametrelerine göre arzu edilen farklı senaryolar gerçekleştirilir.
Flutter tarafından çağrı yapılması:

//MethodChannel Kullanımı Flutter tarafı ##############################################
import ‘package:flutter/services.dart’;

static const _CHANNEL = ‘com.example.uygulamaismi’; //MetodChannel benzersiz adi, genel kullanım domain
static const _metodkanali = const MethodChannel(_CHANNEL); // Kanalı oluştur

// metod adlarını belirt
static const _metodAdiNotificationServis = ‘notificationServis’; // flutter tarafından android tarafına notification servisini başlatmasını istiyoruz diyelim
static const _metodAdiTostMesajiGoster= ‘tostMesajiGoster’; // diğer çağrımız bir tost mesajı yazdırmak

// çağrı metodumuzu yazalım
static Future benimCagriMetodum(String metodAdi, Map<String, dynamic> parametreler) async {

try {
//invokeMethod metodu ile android tarafa çağrı yapılır.invokeMethod un aldığı ilk parametre metod adıdır(string) ve android tarafında bu metod ismiyle farklı operasyonlar yapılır, diğer parametre argumanlar örneğin bir map verilebilir böylece daha esnek bir kullanım sağlanabilir.

bool androidtarafındandonenDeger= await metodkanali.invokeMethod( metodAdi, parametreler });
return androidtarafindandonenDeger;
} on PlatformException catch (e) {
throw ‘Hata 1F : benimCagriMetodum: Uygulamada Hata Oluştu ${e.message}’;
}
}

// MethodChannel Kullanımı Flutter tarafı bitti
//##############################################
…bu kadar..

şimdi android tarafından çağrıları dinleyelim.

//MethodChannel Kullanımı Android tarafı ##############################################

package com.example.uygulamaismi;

import android.os.Bundle;
import io.flutter.app.FlutterActivity;
import io.flutter.plugins.GeneratedPluginRegistrant;

//MetodChannel import paket baslangici
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
//MetodChannel import paket bitimi

//FlutterActivity den miras alan MainActivity (önemli zira Vscode ile proje oluturduysanız kotlin dosyası oluşturulur ama java MainActivity dosyası oluşturulmaz. elle oluşturacaksanız FlutterActivity den miras almayı unutmayın
public class MainActivity extends FlutterActivity {
//MetodChannel benzersiz adini domainle yaz
private static final String CHANNEL = “com.example.uygulamaismi”; //MetodChannel benzersiz adi, genel kullanım domain
//MetodChannel benzersiz adini domainle yaz bitimi

//ayni metod adlarını belir
private static final String metodAdiNotificationServis = “notificationServis”; // flutter tarafından android tarafınagelecek metod ismi
private static final String metodAdiTostMesajiGoster= “tostMesajiGoster”; // flutter tarafından android tarafınagelecek bir diğer metod ismi

//metod çağrılarını yakalamak için bir çağrı yakalayıcı kaydetmek için en dorgu yer onCreate metodu.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);

//MetodChannel Baslangıcı

/* android tafaındaki metod kanalı sınıfımız bir parametre olarak bir getFlutterView() ve kanal ismi alır. metod kanalımızın static metod olan setMethodCallHandler ile bir metod yakalayıcı kaydederiz/set ederiz
setMethodCallHandler parametre olarak bir cağrı yakalayıcı MethodCallHandler sınıfını alır ve nihayet çağrı yapıldığında onMethodCall abstract metodu ile
çağrıları yakalrız.
onMethodCall metodu parametre olarak bir metod çağrısı alır
*/

new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
new MethodCallHandler() {

@Override
public void onMethodCall(MethodCall call, Result result) {
// işte burada call.method ile flutter tarafından yapılan çağrı metodu
switch (call.method) {
case “metodAdiNotificationServis”:

try {

// burası öenmli zira flutter tarafında nasıl bir Map yapısı oluşturduysanız aynı key ile istemelisiniz.hataların önüne geçmek için key lerde yukarıda sabit olarak belirtilebilirdi
boolean isActivee = call.argument(“isActivee”);

metodAdiNotificationServis(isActive);
//android tarafına çağrının geldiğini doğrulamak için flutter tarafına bir bool/boolean gönderelim

result.success(isActive);

} catch {

result.error(“Hata 1A : Uygulamada Hata Oluştu”, “metodAdiNotificationServis”, null);
}
break;
case “metodAdiTostMesajiGoster”
try {
String tostMesaji = call.argument(“mesaj”);
metodAdiTostMesajiGoster(tostMesaji);

result.success(true);

} catch {

result.error(“Hata 2A : Uygulamada Hata Oluştu”, “metodAdiTostMesajiGoster”, null);
}
break;

default:
result.notImplemented(); //çağrı yakalanamadı

}

}//onMethodCall(MethodCall call, Result result) bitimi

});// new MethodChannel()

//MetodChannel Bitimi

}//onCreate bitimi

//methodNameSetActive
private void notificationservis( int isactive ) {

// bu duruma gore servis baslat durdur vs..

}

//metodAdiTostMesajiGoster
private void notificationservis( String tostMesaji ) {

// tost goster vs..

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);
}

@Override
protected void onResume() {
super.onResume();
}

} // class sonu

// MethodChannel Kullanımı Android Tarafı Bitti
//##############################################

Yapı basit olarak bu şekildea tersi de benzer şekilde çalışır. Dart ile alt katmanda farklı diller ile iletiğim kurulabiir. Vakit buldukça android tarafından flutter tarafına çağrıya değineceğim…iyi çalışmalar

KAPAT
%d blogcu bunu beğendi: