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,T
merupakan cara untuk menyatakan tipe data generik. Ini berarti bahwaT
bisa 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?
setelahT
menunjukkan bahwa nilai dari tipeT
bisa bernilainull
. Ini adalah bagian dari fitur null safety di Dart, yang memungkinkan Anda mendefinisikan dengan jelas apakah suatu variabel bisa bernilainull
atau 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:
T
diganti denganProductEntity
.selectedValue
danitems
adalah objek dari tipeProductEntity
.onChanged
adalah fungsi callback yang dipanggil ketika ada perubahan item yang dipilih.getSelectedName
adalah fungsi yang mengambilProductEntity
dan mengembalikan nama produk sebagaiString
. Jikaproduct
bernilainull
, 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.