setMethodCallHandler
- Flutter kursu
- İleri seviye
- Ders 48/69
- 4 dk
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
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
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
channel.____((call) async {
print(call.method);
});
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 |