Expanded & Flexible

 Sejauh ini kita telah mempelajari beberapa widget dasar dan bagaimana menyusunnya secara horizontal maupun vertikal. Dalam pengembangan aplikasi mobile kita tahu bahwa terdapat banyak sekali perangkat dengan ukuran layar yang berbeda pula. Untuk itu penting bagi kita untuk bisa menyusun tampilan yang responsif terhadap ukuran layar.

Kira-kira bagaimana Anda akan menyusun layout dengan tampilan seperti berikut?
20200615161011d0bb9c837344b597049b67d0898cbf75.jpeg

Tentunya akan sangat merepotkan apabila kita mengatur tinggi dari masing-masing kotak, bukan? Belum lagi jika harus mengembangkan aplikasi di ukuran yang lebih besar seperti perangkat tablet. 


Expanded

Flutter memiliki widget Expanded yang dapat mengembangkan child dari Row atau Column sesuai dengan ruang yang tersedia. Cara menggunakannya Anda cukup membungkus masing-masing child ke dalam Expanded.

  1. class Rainbow extends StatelessWidget {
  2. const Rainbow({Key? key}) : super(key: key);
  3.  
  4.   @override
  5.   Widget build(BuildContext context) {
  6.     return Column(
  7.       children: <Widget>[
  8.         Expanded(
  9.           child: Container(
  10.             color: Colors.red,
  11.           ),
  12.         ),
  13.         Expanded(
  14.           child: Container(
  15.             color: Colors.orange,
  16.           ),
  17.         ),
  18.         Expanded(
  19.           child: Container(
  20.             color: Colors.yellow,
  21.           ),
  22.         ),
  23.         Expanded(
  24.           child: Container(
  25.             color: Colors.green,
  26.           ),
  27.         ),
  28.         Expanded(
  29.           child: Container(
  30.             color: Colors.blue,
  31.           ),
  32.         ),
  33.         Expanded(
  34.           child: Container(
  35.             color: Colors.indigo,
  36.           ),
  37.         ),
  38.         Expanded(
  39.           child: Container(
  40.             color: Colors.purple,
  41.           ),
  42.         ),
  43.       ],
  44.     );
  45.   }
  46. }

Saat aplikasi dijalankan, masing-masing container akan menempati ruang kosong yang ada. Jika Anda menjalankan di ukuran layar yang berbeda, maka ukuran container juga akan menyesuaikan.
2020061516111745a046ee02c506aa469a828fe8cb8cdd.jpeg

Bisa kita lihat seluruh container menempati ruang dengan ukuran yang sama. Ini disebabkan Expanded memiliki parameter flex yang memiliki nilai default 1. Anda dapat mengubah nilai flex ini sesuai perbandingan yang diinginkan. Misalnya Anda memberikan nilai flex 2 pada salah satu container.

  1. Expanded(
  2.   flex: 2,
  3.   child: Container(
  4.     color: Colors.blue,
  5.   ),
  6. ),

Maka container berwarna biru ini akan menjadi lebih besar dengan perbandingan 2/(1 + 1 + 1 + 1 + 2 + 1 + 1) atau 2/8 dari halaman.
20200615161338103190234521f130325fd1dabc87f651.jpeg


Flexible

Sama seperti Expanded, widget Flexible digunakan untuk mengatur ukuran widget di dalam Row atau Column secara fleksibel. Perbedaan Flexible dan Expanded adalah widget Flexible memungkinkan child widget-nya berukuran lebih kecil dibandingkan ukuran ruang yang tersisa. Sementara, child widget dari Expanded harus menempati ruang yang tersisa dari Column atau Row.

Berikut ini adalah contoh perbedaan antara Expanded dan Flexible:

2021042515350622310934015b880e289e8ece3afdeb48.png

Kode untuk tampilan seperti di atas adalah seperti berikut:

  1. class ExpandedFlexiblePage extends StatelessWidget {
  2. const ExpandedFlexiblePage({Key? key}) : super(key: key);
  3.  
  4.   @override
  5.   Widget build(BuildContext context) {
  6.     return Scaffold(
  7.       body: SafeArea(
  8.         child: Column(
  9.           children: [
  10.             Row(
  11.               children: const [
  12.                 ExpandedWidget(),
  13.                 FlexibleWidget(),
  14.               ],
  15.             ),
  16.             Row(
  17.               children: const [
  18.                 ExpandedWidget(),
  19.                 ExpandedWidget(),
  20.               ],
  21.             ),
  22.             Row(
  23.               children: const [
  24.                 FlexibleWidget(),
  25.                 FlexibleWidget(),
  26.               ],
  27.             ),
  28.             Row(
  29.               children: const [
  30.                 FlexibleWidget(),
  31.                 ExpandedWidget(),
  32.               ],
  33.             ),
  34.           ],
  35.         ),
  36.       ),
  37.     );
  38.   }
  39. }
  40.  
  41. class ExpandedWidget extends StatelessWidget {
  42. const ExpandedWidget({Key? key}) : super(key: key);
  43.  
  44.   @override
  45.   Widget build(BuildContext context) {
  46.     return Expanded(
  47.       child: Container(
  48.         decoration: BoxDecoration(
  49.           color: Colors.teal,
  50.           border: Border.all(color: Colors.white),
  51.         ),
  52.         child: Padding(
  53.           padding: const EdgeInsets.all(16.0),
  54.           child: Text(
  55.             'Expanded',
  56.             style: TextStyle(
  57.               color: Colors.white,
  58.               fontSize: 24,
  59.             ),
  60.           ),
  61.         ),
  62.       ),
  63.     );
  64.   }
  65. }
  66.  
  67. class FlexibleWidget extends StatelessWidget {
  68. const FlexibleWidget({Key? key}) : super(key: key);
  69.  
  70.   @override
  71.   Widget build(BuildContext context) {
  72.     return Flexible(
  73.       child: Container(
  74.         decoration: BoxDecoration(
  75.           color: Colors.tealAccent,
  76.           border: Border.all(color: Colors.white),
  77.         ),
  78.         child: Padding(
  79.           padding: const EdgeInsets.all(16.0),
  80.           child: Text(
  81.             'Flexible',
  82.             style: TextStyle(
  83.               color: Colors.teal,
  84.               fontSize: 24,
  85.             ),
  86.           ),
  87.         ),
  88.       ),
  89.     );
  90.   }
  91. }


Dokumentasi berikut ini dapat Anda pelajari untuk memaksimalkan penggunaan widget Expanded dan Flexible:

Popular posts from this blog

Build APK

Generic

Build IPA