Skip to content

Apa itu (T?)


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:

  1. Generik T: Dalam pemrograman Dart, T merupakan cara untuk menyatakan tipe data generik. Ini berarti bahwa T bisa diganti dengan tipe data apapun (misalnya String, int, ProductEntity, dll.) tergantung pada bagaimana Anda menggunakan kelas atau fungsi tersebut. Dengan demikian, kelas atau fungsi bisa digunakan dengan lebih fleksibel.
  2. Nullable T?: Tanda tanya ? setelah T menunjukkan bahwa nilai dari tipe T bisa bernilai null. Ini adalah bagian dari fitur null safety di Dart, yang memungkinkan Anda mendefinisikan dengan jelas apakah suatu variabel bisa bernilai null atau tidak.
  3. Fungsi Function(T?): Di sini, Function(T?) berarti sebuah fungsi yang menerima satu argumen dengan tipe T (yang bisa bernilai null) dan mengembalikan sebuah String. Fungsi ini bisa digunakan, misalnya, untuk mengambil nama atau representasi string dari objek tipe T.

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 dengan ProductEntity.
  • selectedValue dan items adalah objek dari tipe ProductEntity.
  • onChanged adalah fungsi callback yang dipanggil ketika ada perubahan item yang dipilih.
  • getSelectedName adalah fungsi yang mengambil ProductEntity dan mengembalikan nama produk sebagai String. Jika product bernilai null, 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.