CodeBlanks Logo Icon CodeBlanks

setMethodCallHandler

setMethodCallHandler ile native'den çağrı almayı öğrenirsin.

setMethodCallHandler nedir?

setMethodCallHandler, native taraftan Dart'a gelen metot çağrılarını dinler. Native taraf bir metot çağırdığında kaydedilen callback çalışır. Bu, Dart'ın native tarafın başlattığı iletişimi almasını sağlar.

channel.setMethodCallHandler((call) async {
  if (call.method == 'notify') {
    print('Bildirim alındı');
  }
});

MethodCall nesnesi

Handler callback'i bir MethodCall nesnesi alır. call.method ile metot adını, call.arguments ile gönderilen argümanları okursun. Bu bilgilerle native'den gelen isteğe göre işlem yapılır.

channel.setMethodCallHandler((call) async {
  print(call.method);
  print(call.arguments);
});

Uygulama Handler kaydet ve tetikle

Bir MethodChannel oluştur, setMethodCallHandler ile bir handler kaydet ve handler içinde call.method'u yazdır. Sonra channel.simulateCall('notify') ile handler'ı tetikle. 10 milisaniye bekle.

Başlangıç kodu

main.dart
class MethodCall {
  final String method;
  MethodCall(this.method);
}

class MethodChannel {
  final String name;
  void Function(MethodCall)? _handler;
  MethodChannel(this.name);
  void setMethodCallHandler(void Function(MethodCall) handler) {
    _handler = handler;
  }
  void simulateCall(String method) {
    if (_handler != null) _handler!(MethodCall(method));
  }
}

void main() async {
  // MethodChannel oluştur
  // handler kaydet, call.method yazdır
  // simulateCall ile tetikle
}

Örnek çözüm

main.dart
class MethodCall {
  final String method;
  MethodCall(this.method);
}

class MethodChannel {
  final String name;
  void Function(MethodCall)? _handler;
  MethodChannel(this.name);
  void setMethodCallHandler(void Function(MethodCall) handler) {
    _handler = handler;
  }
  void simulateCall(String method) {
    if (_handler != null) _handler!(MethodCall(method));
  }
}

void main() async {
  const channel = MethodChannel('samples.flutter.dev/battery');
  channel.setMethodCallHandler((call) {
    print(call.method);
  });
  channel.simulateCall('notify');
  await Future.delayed(Duration(milliseconds: 10));
}

Beklenen çıktı

notify

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 setMethodCallHandler ne zaman çalışır?

  • Dart native metot çağırdığında
  • Native taraf Dart'a metot çağırdığında Doğru cevap
  • Hiç çalışmaz, yalnızca tanımlama amaçlıdır
  • Yalnızca uygulama başlarken

Açıklama: setMethodCallHandler native tarafın Dart'a çağrı yapmasıyla çalışır; Dart'ın native çağrısı invokeMethod ile yapılır.

2 Handler kaydet

Soru
channel.____((call) async {
  print(call.method);
});
Cevap
channel.setMethodCallHandler((call) async {
  print(call.method);
});

Açıklama: Native'den gelen çağrıları dinlemek için setMethodCallHandler metodu çağrılır ve bir callback verilir.

3 setMethodCallHandler parçaları

Kavram Anlamı
setMethodCallHandler Handler kaydeder
MethodCall Çağrı nesnesi
call.method Metot adı
callback İşleyici fonksiyon

İleri seviye bölümündeki tüm dersler