Apa itu (T?) dalam flutter? . T merupakan tipe parameter generik dan T? menandakan bahwa parameter tersebut bisa bernilai null. Contohnya pada line kode berikut :
final String Function(T?) getSelectedName;
‘Dalam konteks ini, T digunakan untuk mewakili tipe data yang bisa digunakan dalam mengambil nilai dari selected name contohnya dalam dropdown.
Mari kita jelaskan lebih rinci:
- Generik
T: Dalam pemrograman Dart,Tmerupakan cara untuk menyatakan tipe data generik. Ini berarti bahwaTbisa diganti dengan tipe data apapun (misalnyaString,int,ProductEntity, dll.) tergantung pada bagaimana Anda menggunakan kelas atau fungsi tersebut. Dengan demikian, kelas atau fungsi bisa digunakan dengan lebih fleksibel. - Nullable
T?: Tanda tanya?setelahTmenunjukkan bahwa nilai dari tipeTbisa bernilainull. Ini adalah bagian dari fitur null safety di Dart, yang memungkinkan Anda mendefinisikan dengan jelas apakah suatu variabel bisa bernilainullatau tidak. - Fungsi
Function(T?): Di sini,Function(T?)berarti sebuah fungsi yang menerima satu argumen dengan tipeT(yang bisa bernilainull) dan mengembalikan sebuahString. Fungsi ini bisa digunakan, misalnya, untuk mengambil nama atau representasi string dari objek tipeT.
Sebagai contoh, jika Anda memiliki dropdown yang berisi objek-objek ProductEntity, Anda mungkin ingin mengonversi objek tersebut menjadi nama produk untuk ditampilkan. Dalam kasus ini, T akan menjadi ProductEntity, dan fungsi getSelectedName akan mengambil ProductEntity sebagai input dan mengembalikan nama produk sebagai String.
Berikut contoh penggunaan kelas kita sebut saja CustomDropdownWithOverlay dengan tipe generik T untuk menjelaskan bagaimana fungsi getSelectedName bisa digunakan secara spesifik.
Pertama, mari kita asumsikan CustomDropdownWithOverlay didefinisikan seperti ini:
class CustomDropdownWithOverlay<T> extends StatelessWidget {
final T? selectedValue;
final List<T> items;
final void Function(T?) onChanged;
final String Function(T?) getSelectedName;
CustomDropdownWithOverlay({
this.selectedValue,
required this.items,
required this.onChanged,
required this.getSelectedName,
});
@override
Widget build(BuildContext context) {
// Implementasi Widget Dropdown
}
}
Dalam contoh ini, T adalah tipe generik yang bisa diganti dengan tipe data apapun. getSelectedName adalah fungsi yang mengambil objek tipe T dan mengembalikan String yang merupakan representasi nama dari objek tersebut.
Sekarang, mari kita buat contoh penggunaan CustomDropdownWithOverlay dengan tipe ProductEntity. Asumsikan ProductEntity adalah kelas dengan properti name.
class ProductEntity {
final String name;
ProductEntity({required this.name});
}
// Contoh penggunaan CustomDropdownWithOverlay dengan ProductEntity
CustomDropdownWithOverlay<ProductEntity>(
// selectedProduct adalah instance dari ProductEntity
selectedValue: selectedProduct,
// listProducts adalah List<ProductEntity>
items: listProducts,
onChanged: (ProductEntity? newValue) {
// ... Fungsi untuk menangani perubahan nilai
},
getSelectedName: (ProductEntity? product) {
return product?.name ?? 'Default Name';
},
)
Dalam contoh ini:
Tdiganti denganProductEntity.selectedValuedanitemsadalah objek dari tipeProductEntity.onChangedadalah fungsi callback yang dipanggil ketika ada perubahan item yang dipilih.getSelectedNameadalah fungsi yang mengambilProductEntitydan mengembalikan nama produk sebagaiString. Jikaproductbernilainull, maka'Default Name'dikembalikan.
Ini menunjukkan bagaimana CustomDropdownWithOverlay bisa digunakan dengan tipe data yang berbeda-beda, dengan getSelectedName memberikan fleksibilitas dalam menentukan bagaimana representasi string dari objek tipe T dihasilkan.