Decoder
Pengantar
Decoder adalah konsep baru yang diperkenalkan di Nylo Website yang memungkinkan Anda mendekode data menjadi objek atau kelas.
Anda kemungkinan akan menggunakan decoder saat berurusan dengan kelas networking atau jika Anda ingin menggunakan helper api di Nylo Website.
Secara default, lokasi untuk decoder ada di
lib/config/decoders.dart
File decoders.dart akan berisi dua variabel:
- modelDecoders - Menangani semua decoder model Anda
- apiDecoders - Menangani semua decoder API Anda
Decoder Model
Decoder model adalah fitur baru di Nylo Website, mereka menyediakan cara bagi Anda untuk mengubah payload data menjadi representasi model.
Method helper network() akan menggunakan variabel modelDecoders di dalam file config/decoders.dart Anda untuk menentukan decoder mana yang akan digunakan.
Berikut contohnya.
Berikut cara helper network menggunakan modelDecoders.
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"),
);
}
...
Method fetchUsers akan secara otomatis mendekode payload dari permintaan menjadi User.
Bagaimana cara kerjanya?
Anda memiliki kelas User seperti di bawah ini.
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
};
}
Anda dapat melihat dari kelas di atas bahwa kelas ini memiliki method fromJson yang menyediakan cara untuk menginisialisasi kelas.
Kita dapat menginisialisasi kelas ini dengan memanggil method di bawah ini.
User user = User.fromJson({'name': 'Anthony', 'email': 'agordon@mail.com'});
Sekarang, untuk mengatur decoder kita, kita harus melakukan hal berikut.
File: config/decoders.dart
final modelDecoders = {
List<User>: (data) => List.from(data).map((json) => User.fromJson(json)).toList(),
User: (data) => User.fromJson(data),
// ...
};
Di file modelDecoders, kita perlu menyediakan Type sebagai kunci dan menangani transformasi di nilai seperti contoh di atas.
Argumen data akan berisi payload dari permintaan API.
Decoder API
Decoder API digunakan saat memanggil method helper api.
loadUser() async {
User user = await api<ApiService>((request) => request.fetchUser());
}
Helper api akan mencocokkan API Service yang benar menggunakan generics, sehingga Anda dapat memanggil helper di bawah ini untuk mengakses service Anda.
await api<MyService>((request) => request.callMyMethod());
Sebelum menggunakan helper api, Anda perlu terlebih dahulu menambahkan API Service Anda ke lib/config/decoders.dart > apiDecoders.
final Map<Type, dynamic> apiDecoders = {
ApiService: ApiService(),
// ...
};