img-dart
#dart #flutter

Layout Widget Bagian 2

1. CarouselView

2. Flow

seperti floating button

3. GridView

widget yang menampilkan koleksi widget dalam tata letak grid (berbaris dan berkolom). Berikut penjelasan lengkap dan contoh implementasinya:

Jenis GridView di Flutter

GridView.count(
  crossAxisCount: 2, // Jumlah kolom
  children: List.generate(10, (index) {
    return Container(
      margin: EdgeInsets.all(8),
      color: Colors.blue[100],
      child: Center(child: Text('Item $index')),
    );
  }),
)
GridView.extent(
maxCrossAxisExtent: 150, // Lebar maksimum item
children: List.generate(10, (index) {
  return Container(
    margin: EdgeInsets.all(8),
    color: Colors.green[100],
    child: Center(child: Text('Item $index')),
  );
}),
)
GridView.builder(
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 3, // 3 kolom
  ),
  itemCount: 50, // Jumlah total item
  itemBuilder: (context, index) {
    return Card(
      child: Image.network('https://picsum.photos/250?image=$index'),
    );
  },
)
GridView.custom(
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 2,
  ),
  childrenDelegate: SliverChildListDelegate(
    List.generate(10, (index) => Text('Item $index')),
  ),
)

Tips Penggunaan GridView:

4. IndexedStack

widget yang memungkinkan Anda menampilkan satu child widget dari sekumpulan widget berdasarkan indeks yang ditentukan, sambil mempertahankan state semua child widget.

Keuntungan Menggunakan IndexedStack:

Kekurangan:

Tips Penggunaan:

5. LayoutBuilder

widget yang memberikan Anda informasi constraints parent dan memungkinkan pembuatan layout responsif berdasarkan ukuran yang tersedia.

Fungsi Utama:

Tips Penggunaan

LayoutBuilder sangat berguna ketika Anda perlu:

6. ListView

widget scrollable yang menampilkan daftar children widget secara linear (vertikal atau horizontal). Berikut penjelasan lengkapnya:

  1. ListView (Konstruktor Dasar) = Untuk daftar pendek dengan children langsung
ListView(
  padding: EdgeInsets.all(8),
  children: [
    ListTile(title: Text('Item 1')),
    ListTile(title: Text('Item 2')),
    ListTile(title: Text('Item 3')),
  ],
)
  1. ListView.builder (Lazy Loading) = Optimal untuk daftar panjang/dinamis
ListView.builder(
  itemCount: 100, // Jumlah total item
  itemBuilder: (context, index) {
    return ListTile(
      title: Text('Item $index'),
    );
  },
)
  1. ListView.separated = Dengan pemisah antar item
ListView.separated(
  itemCount: 50,
  separatorBuilder: (context, index) => Divider(),
  itemBuilder: (context, index) {
    return ListTile(title: Text('Item $index'));
  },
)
  1. ListView.custom = Dengan kontrol maksimal menggunakan SliverChildDelegate
ListView.custom(
  childrenDelegate: SliverChildBuilderDelegate(
    (context, index) => ListTile(title: Text('Item $index')),
    childCount: 100,
  ),
)

Tips Performa:

7. Stack

widget yang memungkinkan Anda menumpuk beberapa widget satu di atas yang lain, dengan kontrol posisi yang presisi. Widget ini sangat berguna untuk membuat desain kompleks dengan lapisan-lapisan elemen UI.

Fungsi Utama:

Tips Penggunaan

8. Table

widget yang memungkinkan Anda membuat tata letak berbasis tabel dengan baris dan kolom, memberikan kontrol presisi atas penempatan sel-sel. Berikut penjelasan lengkapnya:

Fungsi Utama:

Tips Penggunaan

9. Wrap

widget layout yang secara otomatis mengalirkan children-nya ke baris/kolom berikutnya ketika ruang horizontal/vertikal tidak cukup. Berikut penjelasan lengkapnya. kalau di css flexbox mirip seperti flex-wrap.

Fungsi Utama:

Tips Penggunaan