Platform Channel'ı Aşırı Kullanmak
Her native çağrı bir RTT

Android tarafında bir Kotlin fonksiyonum vardı: panoya metin koy, paylaşım sheet'ini aç, titret. Dart'tan her not satırı için ayrı invokeMethod. Liste 40 satır olunca kaydırma değil, kanal kuyruğu göründü.
Kanal ne zaman
OS'in Dart'ta karşılığı yoksa kanal haklı: belirli bir Intent, belirli bir bildirim kanalı, cihazın tek bildiği bir API. Pano, paylaşım, titreme için bakımlı eklenti dururken kendi kanalımı şişirmek, bakımı iki dile yaymak.
class DeviceClipboard {
static const _channel = MethodChannel('app.notes/clipboard');
static Future copy(String text) {
return _channel.invokeMethod('copy', {'text': text});
}
}
// Liste kaydırırken değil, kullanıcı kopyala deyince:
Future copyNoteTitle(String title) => DeviceClipboard.copy(title);
Kendi kanalım duruyor; çağrı noktası değişti. Scroll listener içinden titretmek, her pixel için JNI. EventChannel bir akış içindir (sensör, bağlantı). MethodChannel bir iş içindir. İkisini karıştırınca native taraf state tutmaya başlar, hata orada kaybolur.
Kotlin tarafında da aynı kural: kanal bir kapı, iş kuralı değil. Dart'tan gelen Map'i Activity'de tutup ikinci çağrıda 'hâlâ aynı context' sanmak, dispose'dan sonra crash. Kanal istateless kalsın; state Dart'ta veya gerçek bir native serviste dursun.
Ölçmeden 'native daha hızlı' demeyi bıraktım. Bir kez, kullanıcı jestinde, ihtiyaç olan API yoksa kanal. Döngüde, eklenti varken, 'bir widget daha native olsun' diye değil.
Yorumlar
Yorumlar (0)
Yorumlar üyelere açık. Üye ol · Giriş yap