Navigation'da Safe Args ile Ekranlar Arası Veri Paylaşımı

Merhabalar.


Bu yazıda Navigation Component’inin Safe Args özelliğini kullanarak güvenli bir şekilde ekranlar arası veri paylaşımını nasıl yapabileceğimizi inceleyeceğiz.


Navigation, ekranlar arası geçiş yaparken argument taşımamıza olanak tanıyor. Argument taşımak pek çok noktada ihtiyaç haline gelebiliyor. Misal, kullanıcının bilgilerinin gösterildiği bir ekranımız olsun. Bu ekrana geçiş yaparken user_id verisini taşıyarak ilgili ekranda hangi kullanıcın gösterilmesi gerektiğine kolay bir şekilde karar verebiliyoruz.


Safe Args Nedir?


Navigation Component’i Safe Args adında bir Gradle plugin’i içeriyor. Safe Args ise type-safe sağlamak ve ilişkili argument’lara erişmek için basit nesneler ve builder class’lar oluşturuyor.


Safe Args’ı Projeye Eklemek


Safe Args’ı kullanabilmek için öncelikle aşağıda bulunan kodları projenize eklemeniz gerekiyor. Aşağıdan kopyalayabilir ya da buradan ilgili kodlara ulaşabilirsiniz.


build.gradle(project) için:



build.gradle(app) için:



Neden Safe Args?


Navigation Component’i ekranlar arası veri göndermek için bizlere iki adet yol sunuyor. İlki Bundle object olarak geçiyor. Veri göndermek için bir Bundle objesi oluşturuyoruz ve ardından bir destination’a göndermek istediğimiz veriyi navigate() metodunu kullanarak yolluyoruz.


Örnek:


Veri göndermenin ikinci yoluysa bu yazının da konusu olan Safe Args olarak adlandırılıyor. Android, şiddetle Safe Args kullanılmasını tavsiye ediyor. Peki neden tavsiye ediyor?


“Safe Args is strongly recommended for navigating and passing data, because it ensures type-safety.

Safe Args, göndermek istediğimiz argument ile alakalı bilgileri navigation graph içerisine girmemize olanak tanıyor. Bu sayede gönderilecek olan argument’ın type’ını ve diğer pek çok özelliğini belirleyebiliyoruz. Bu durum type-safety sağlanmasında büyük önem taşıyor.


Bir diğer artısı ise bizleri kod kalabalığından kurtarması oluyor. Safe Args ile göndermek istediğimiz argument’ı basit işlemlerle tanımlayabiliyor ve diğer ekrana yollayabiliyoruz.