Expanded dan Flexible adalah dua widget dalam Flutter yang digunakan untuk mengatur tata letak widget di dalam komponen yang memiliki luas yang dapat berubah. Mereka berfungsi sebagai pengelola ruang yang tersedia dan memberikan fleksibilitas dalam membagi dan mengontrol ruang sesuai dengan kebutuhan.
Berikut adalah penjelasan lengkap tentang perbedaan antara Expanded dan Flexible:
- Expanded
- Expanded adalah widget yang digunakan untuk memperluas widget anak dalam tata letak Flex atau Column/Row ke dalam ruang yang tersisa.
- Ketika menggunakan Expanded, widget anak akan mengisi dan memperluas ruang yang tersedia ke seluruh luasnya.
- Jika terdapat beberapa widget yang memiliki Expanded dalam tata letak yang sama, ruang akan dibagi secara proporsional berdasarkan faktor yang diberikan untuk setiap Expanded.
- Expanded harus ditempatkan di dalam widget Flex (seperti Column atau Row) agar berfungsi dengan baik.
Contoh penggunaan Expanded :
Column(
children: [
Expanded(
flex: 1,
child: Container(
color: Colors.red,
),
),
Expanded(
flex: 2,
child: Container(
color: Colors.blue,
),
),
],
)
Pada contoh di atas, terdapat dua Expanded dalam tata letak Column. Expanded pertama memiliki faktor fleksibilitas (flex) 1, sedangkan Expanded kedua memiliki faktor fleksibilitas 2. Ini berarti Expanded pertama akan mengambil 1 bagian dari 3 bagian total ruang yang tersedia, sedangkan Expanded kedua akan mengambil 2 bagian dari 3 bagian total ruang yang tersedia.
- Flexible
- Flexible adalah widget yang memungkinkan widget anak mengisi ruang yang tersedia sesuai dengan faktor fleksibilitas yang ditentukan.
- Flexible juga dapat mengubah ukuran widget anak untuk memenuhi kebutuhan tata letak.
- Jika terdapat beberapa widget yang memiliki Flexible dalam tata letak yang sama, ruang akan dibagi secara proporsional berdasarkan faktor yang diberikan untuk setiap Flexible.
- Flexible dapat ditempatkan di dalam widget Column, Row, atau Flex.
Contoh penggunaan Flexible:
Row(
children: [
Flexible(
flex: 1,
child: Container(
color: Colors.red,
),
),
Flexible(
flex: 2,
child: Container(
color: Colors.blue,
),
),
],
)
Pada contoh di atas, terdapat dua Flexible dalam tata letak Row. Flexible pertama memiliki faktor fleksibilitas (flex) 1, sedangkan Flexible kedua memiliki faktor fleksibilitas 2. Ini berarti Flexible pertama akan mengambil 1 bagian dari 3 bagian total ruang yang tersedia, sedangkan Flexible kedua akan mengambil 2 bagian dari 3 bagian total ruang yang tersedia.
Perbedaan utama antara Expanded dan Flexible terletak pada perilaku saat ada ruang yang tersedia dan saat tidak ada ruang yang tersedia. Jika ada ruang yang tersedia, Expanded akan memperluas widget anak hingga mengisi seluruh ruang yang tersedia, sedangkan Flexible akan menyesuaikan ukuran widget anak sesuai dengan faktor fleksibilitas yang ditentukan. Jika tidak ada ruang yang tersedia, Expanded akan memaksa widget anak untuk memenuhi ruang yang tersedia, sedangkan Flexible akan mengubah ukuran widget anak sesuai dengan faktor fleksibilitas yang ditentukan, bahkan jika tidak ada ruang yang cukup.
Dalam praktiknya, penggunaan Expanded atau Flexible tergantung pada kebutuhan dan preferensi tata letak yang diinginkan. Jika kita ingin memastikan widget anak mengisi seluruh ruang yang tersedia, maka Expanded cocok digunakan. Jika kita ingin widget anak menyesuaikan ukuran mereka sesuai kebutuhan dan fleksibilitas yang ditentukan, maka Flexible dapat digunakan.