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.dartdosyasıdır
decoders.dart dosyası iki değişken içerecektir:
- modelDecoders - Tüm model kod çözücülerinizi yönetir
- apiDecoders - Tüm API kod çözücülerinizi yönetir
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(),
// ...
};