Advanced

Kod Çözücüler

Giriş

Kod çözücüler, Nylo Website tarafından tanıtılan ve verileri nesnelere veya sınıflara dönüştürmenize olanak sağlayan bir kavramdır. Kod çözücüleri büyük olasılıkla ağ işlemleri sınıfıyla çalışırken veya Nylo Website'daki api yardımcısını kullanmak istediğinizde kullanacaksınız.

Varsayılan olarak, kod çözücülerin konumu lib/config/decoders.dart dosyasıdır

decoders.dart dosyası iki değişken içerecektir:

Model Kod Çözücüler

Model kod çözücüler Nylo Website'da yenidir, veri yüklerini model temsillerine dönüştürmenin bir yolunu sağlarlar.

network() yardımcı metodu, hangi kod çözücünün kullanılacağını belirlemek için config/decoders.dart dosyanızdaki modelDecoders değişkenini kullanacaktır.

İşte bir örnek.

network yardımcısının modelDecoders'ı nasıl kullandığı aşağıdadır.

class ApiService extends NyApiService {
  ApiService({BuildContext? buildContext}) 
        : super(buildContext, decoders: modelDecoders);

  @override
  String get baseUrl => "https://jsonplaceholder.typicode.com";

  Future<User?> fetchUsers() async {
    return await network<User>(
        request: (request) => request.get("/users"),
    );
  }
...

fetchUsers metodu, istekten gelen yükü otomatik olarak bir User nesnesine dönüştürecektir.

Bu nasıl çalışır?

Aşağıdaki gibi bir User sınıfınız var.

class User {
  String? name;
  String? email;

  User.fromJson(dynamic data) {
    this.name = data['name'];
    this.email = data['email'];
  }

  toJson()  => {
    "name": this.name,
    "email": this.email
  };
}

Yukarıdan görebileceğiniz gibi bu sınıfın sınıfı başlatmamızı sağlayan bir fromJson metodu vardır.

Bu sınıfı aşağıdaki metodu çağırarak başlatabiliriz.

User user = User.fromJson({'name': 'Anthony', 'email': 'agordon@mail.com'});

Şimdi, kod çözücülerimizi kurmak için aşağıdakini yapmamız gerekiyor.

Dosya: config/decoders.dart

final modelDecoders = {
  List<User>: (data) => List.from(data).map((json) => User.fromJson(json)).toList(),

  User: (data) => User.fromJson(data),

  // ...
};

modelDecoders dosyasında, anahtar olarak Type sağlamamız ve değerde yukarıdaki örnekteki gibi dönüşümü yapmamız gerekir.

data argümanı, API isteğinden gelen yükü içerecektir.

API Kod Çözücüler

API kod çözücüler, api yardımcı metodu çağrılırken kullanılır.

loadUser() async {
    User user = await api<ApiService>((request) => request.fetchUser());
}

api yardımcısı, generic'ler kullanarak doğru API Servisini eşleştirecektir, böylece servisinize erişmek için aşağıdaki yardımcıyı çağırabilirsiniz.

await api<MyService>((request) => request.callMyMethod());

api yardımcısını kullanmadan önce, API Servisinizi lib/config/decoders.dart > apiDecoders içine eklemeniz gerekecektir.

final Map<Type, dynamic> apiDecoders = {
  ApiService: ApiService(),

  // ...
};