Platform Kanallarında Error Handling: Exception Türlerini Doğru Yakalamak
Platform kanalları (method channels) kullanırken native koddan gelen hatalar yanlış yakalanırsa uygulama çöker ya da hata sessizce geçilir. Flutter ve React Native'de her platform farklı exception türü fırlatabilir; bunu bilmek kritik.
Native taraftan (Android/iOS) gelen hata bir PlatformException olarak gelir. Bunu yakalayıp türüne göre işlem yapmak gerekir. Mesela, izin hatası, ağ hatası, cihaz hatası farklı farklı ele alınmalı.
Flutter'da örnek:
1import 'package:flutter/services.dart';23final platform = MethodChannel('com.example.app/native');45future<void> getNativeData() async {6try {7final result = await platform.invokeMethod('getData');8print('Başarılı: $result');9} on PlatformException catch (e) {10if (e.code == 'PERMISSION_DENIED') {11print('İzin verilmedi');12} else if (e.code == 'NETWORK_ERROR') {13print('Ağ hatası: ${e.message}');14} else {15print('Bilinmeyen hata: ${e.code}');16}17} catch (e) {18print('Genel hata: $e');19}20}React Native'de benzer yaklaşım:
1import { NativeModules } from 'react-native';23const { NativeModule } = NativeModules;45NativeModule.getData().then(result => console.log('Başarılı:', result)).catch(error => {6if (error.code === 'PERMISSION_DENIED') {7console.log('İzin hatası');8} else if (error.code === 'NETWORK_ERROR') {9console.log('Ağ hatası:', error.message);10} else {11console.log('Hata:', error);12}13});Native tarafta (Kotlin):
1val channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "com.example.app/native")2channel.setMethodCallHandler { call, result ->3when (call.method) {4"getData" -> {5try {6val data = fetchData()7result.success(data)8} catch (e: SecurityException) {9result.error("PERMISSION_DENIED", "İzin yok", null)10} catch (e: IOException) {11result.error("NETWORK_ERROR", "Ağ hatası", e.message)12} catch (e: Exception) {13result.error("UNKNOWN_ERROR", "Bilinmeyen hata", e.message)14}15}16}17}Önemli nokta: Native tarafta error() metoduna geçtiğin code değeri, Flutter/React Native tarafta e.code ile eşleşir. Türleri tanımlı tutmak ve konsistent kullanmak gerekir.
Sık yapılan hata, PlatformException dışında başka exception türlerini yakalamayı unutmak. Mesela, timeout, null pointer gibi durumlar ek try-catch bloğunda ele alınmalı. Ayrıca native tarafta hata fırlatırken boş message göndermemek; hata ayıklamada işini zorlaştırır.
0 yorum