Home Android Stack in Flutter

Stack in Flutter

0
Stack in Flutter

Halo teman – teman,
Pernah bingung atau bosan gk sih sama susunan widget yang hanya menggunakan column, row dan container? Sebenarnya buat mengatur / menyusun widget gk hanya itu saja, tetapi ada juga yang namanya Stack !

Udah pada tau belum stack itu apa ? Secara bahasa stack artinya tumpukan. Jadi udah pada ketebak gk? Pastinya sudah kan. Nah, Stack ini akan berfungsi sebagai pengatur posisi widget yang mana akan menyusun widget tdengan menumpukkan widget itu sendiri.

Secara sederhana akan terlihat seperti gambar berikut :

source : flutter.dev
Stack(
  children: <Widget>[
    Container(
      width: 100,
      height: 100,
      color: Colors.red,
    ),
    Container(
      width: 90,
      height: 90,
      color: Colors.green,
    ),
    Container(
      width: 80,
      height: 80,
      color: Colors.blue,
    ),
  ],
)

Jadi, pada dasarnya penumpukan akan di susun secara default berurut pada bagian atas (top start) jika tidak mengatur posisinya dengan menggunakan alignment atau positioned.

Sebenarnya ada banyak yang bisa di pakai pada Stack sendiri, seperti pada gambar berikut :

Berikut beberapa contoh penggunaan stack :

  • Mengatur IconButton di pojok kanan bawah Circler
             Stack(
                  alignment: Alignment.center,
                  children: [
                    CircleAvatar(
                    child: Icon(Icons.person),
                      radius: 35,
                    ),
                    Positioned(
                      bottom: 0,
                      right: 5,
                      child: Container(
                        height: 30,
                        width: 30,
                        decoration: BoxDecoration(
                          borderRadius: BorderRadius.circular(50),
                          color: Color(0xffDCE5F0),
                        ),
                        child: IconButton(
                          onPressed: () {},
                          icon: Icon(
                            Icons.camera_alt_outlined,
                            size: 15,
                            color: Colors.black,
                          ),
                        ),
                      ),
                    )
                  ],
                ),
  • Menempatkan Icon di atas gambar
          Stack(
            children: [
              Container(
                height: 200,
                width: MediaQuery.of(context).size.width,
                child: Image.asset(
                  'images/boarding01.png',
                  fit: BoxFit.cover,
                ),
              ),
              IconButton(
                onPressed: () {
                  Navigator.pop(context);
                },
                icon: Icon(Icons.arrow_back),
              ),
              Positioned(
                right: 10,
                top: 10,
                child: CircleAvatar(
                  radius: 20,
                  backgroundColor: Colors.white,
                  child: IconButton(
                    onPressed: () {
                      setState(() {
                        changed = !changed;
                      });
                    },
                    icon: Icon(
                      Icons.favorite,
                      color: changed ? Colors.grey : Colors.red,
                    ),
                  ),
                ),
              )
            ],
          ),
  • Membuat design untuk tampilan awal page menjadi lebih menarik, dengan penempatan Texformfield di antara warna background
Stack(
              clipBehavior: Clip.none,
              children: [
                Container(
                  color: Colors.green,
                  height: 85,
                  child: ListTile(
                      contentPadding: EdgeInsets.only(left: 20, right: 7),
                      leading: CircleAvatar(
                        child: Icon(
                          Icons.person,
                          color: Color(0xff2B976B),
                        ),
                        backgroundColor: Colors.white,
                        radius: 20,
                      ),
                      title: Text(
                        'Login untuk melanjutkan',
                        style: TextStyle(
                            fontSize: 10,
                            fontFamily: 'OpenSans',
                            fontWeight: FontWeight.normal,
                            color: Colors.white),
                      ),
                      subtitle: Text(
                          'Masuk',
                          style: TextStyle(
                              fontSize: 12,
                              fontFamily: 'OpenSans',
                              fontWeight: FontWeight.w600,
                              color: Colors.white),
                        ),


                      trailing: IconButton(
                        icon: Icon(
                          Icons.notifications,
                          color: Colors.white,
                        ),
                        onPressed: () {
                          //pageNotifikasi
                          Navigator.push(
                              context,
                              MaterialPageRoute(
                                  builder: (context) =>
                                      PageBerandaNotifikasi()));
                        },
                      )),
                ),
                Positioned(
                  left: 0,
                  right: 0,
                  bottom: -25,
                  child: Container(
                    margin: EdgeInsets.only(left: 20, right: 20),
                    height: 45,
                    child: TextFormField(
                      decoration: InputDecoration(
                        contentPadding: EdgeInsets.only(left: 10, right: 10),
                        fillColor: Colors.white,
                        filled: true,
                        hintText: 'Cari',
                        hintStyle: TextStyle(
                              fontSize: 12,
                            fontFamily: 'OpenSans',
                            color: Colors.grey),
                        border: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(5),
                            borderSide: BorderSide.none),
                        suffixIcon: Icon(Icons.search),
                      ),
                    ),
                  ),
                )
              ],
            ),

Jadi sekian pembahasan tentang stack kali ini, semoga dapat di pahami dan memberikan ide baru untuk teman – teman dalam membuat UI untuk aplikasi yang akan dibangun.