İçindekiler
Geliştirme sırasında çoğu zaman kendinizi ListView'i bir tür önceden tanımlanmış formatla doldururken bulabilirsiniz. Bu düzeni Rows, Columns ve Containers kullanarak kendiniz oluşturmak yerine, yardımcı olması için Flutter'daki hazır widget'ı ListTile widget'ı olarak kullanabilirsiniz.
Bu derste, bazı pratik örnekler üzerinden bir Flutter uygulamasına nasıl ListTile widget'ı ekleyeceğinizi göstereceğim.
İşte bugün ele alacağımız şeyler:
- ListTile nedir?
- ListeTile varyasyonları
- ListTile temasını yönetme
- bölücü ekleme
- Kapatmak için hızlıca kaydırma davranışı ekleme
- ListTile yüksekliğini değiştirme
- özelleştirme
ListTile nedir?
Flutter'daki ListTile widget'ı, ilgili bilgileri görüntüleyen bir UI öğesidir.
Materyal Tasarımından Liste spesifikasyonunu takip eder. Tipik bir ListTile üç bölüme ayrılmıştır; Başlat , Ortala ve Bitir . Başlangıç bölümü, önde gelen pencere aracını içerir; Merkez bölümü başlık ve alt başlığı içerir; ve Bitiş bölümü, sondaki widget'ı içerir.

Esas olarak ListView, Column ve Row gibi kaydırılabilir görünümleri doldurmak için kullanılır. Örneğin, yapılacaklar listesi, e-postalar, gezinme seçenekleri ve daha fazlasını göstermek için ListTile'ı kullanabilirsiniz. ListTile'a dokunarak da click olayını alabilirsiniz.
Görsel bir öğreniciyseniz, bu hızlı video eğitimine göz atın:
ListTile Ekleme
ListView widget'ında ListTile'ı görüntülemek için minimum kod:
Liste görünümü(
çocuklar: const [
ListeTile(
lider: Simge(Icons.car_rental),
başlık: Metin('Araba'),
sondaki: Simge(Icons.more_vert),
),
ListeTile(
lider: Simge(Icons.flight),
başlık: Metin('Uçuş'),
sondaki: Simge(Icons.more_vert),
),
ListeTile(
lider: Simge(Icons.train),
başlık: Metin('Tren'),
sondaki: Simge(Icons.more_vert),
)
],
)
Kodun tasarıma nasıl çevrildiği aşağıda açıklanmıştır:

Arka ucunuzdan gelebilecek uzun listeyi doldurmak için ListTile'ı kullanmak istediğinizde, tek ListTile pencere öğesini ListView.Builder içine sarabilir ve aşağıdaki kodda gösterildiği gibi ListTile içindeki verileri gösterebilirsiniz:
final List<String> item = List<String>.generate(10000, (i) => '$i');
ListView.builder(
itemCount: item.length,
itemBuilder: (bağlam, dizin) {
ListTile'ı döndür(
lider: CircleAvatar(
arkaplanRenk: const Renk(0xff764abc),
çocuk: Metin(öğeler[indeks]),
),
başlık: Text('Item ${items[index]}'),
alt başlık: Metin('Öğe açıklaması'),
sondaki: Simge(Icons.more_vert),
);
},
)
Çıktı:

ListeTile varyasyonları
Üzerinde belirli bir eylem gerçekleştirmenize izin veren başka ListTile türleri de vardır.
Bunlar:
- Onay KutusuListTile
- RadioListTile
- SwitchListTile
Onay KutusuListTile
CheckboxListTile pencere bileşeni, ListTile ve Checkbox pencere öğelerinin bir birleşimidir.
Herhangi bir öğeyi tamamlandı olarak işaretlemek için bu widget'ı kullanabilirsiniz – örneğin; yapılacaklar öğeleri. Varsayılan olarak, ListTile'ın sağ tarafında onay kutusu görüntülenir (soldan sağa dil için).
CheckboxListTile pencere öğesini şu şekilde ekleyebilirsiniz:
sınıf Dil {
dize adı;
bool kontrol edildi;
Language(this.name, {this.isChecked = false});
}
// 1.
final Liste<Dil> diller = [Language('English'), Language('Fransızca'), Language('Almanca')];
ListView.builder(
itemCount: diller.uzunluk,
itemBuilder: (bağlam, dizin) {
dönüş CheckboxListTile(
// 2.
başlık: Metin('${diller[index].name}'),
// 3.
değer: diller[index].isChecked,
// 4.
onChanged: (bool? değer) {
setState(() {
diller[index].isChecked = değer!;
});
},
// 5.
ikincil: const Icon(Icons.language),
);
},
)
Kod bloğundaki sayıların açıklaması:
- Dillerin listesini tutan bir değişken
- Bu, onay kutusu etiketini gösterir
- Bu, öğenin işaretlenip işaretlenmeyeceğine karar verir.
- Bu, ListTile'a dokunduğunuzda çağrılır.
- Bu, önde gelen bir simge görevi görür
çıktı :

İkincil (baştaki) pencere aracını ve onay kutusunu değiştirmek için controlAffinity özelliğini kullanabilir ve bunu ListTileControlAffinity.leading olarak ayarlayabilirsiniz.

Ayrıca checkboxShape parametresini RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)) olarak ayarlayarak onay kutusunun şeklini değiştirebilirsiniz.

RadioListTile
RadioListTile pencere bileşeni, ListTile ve RadioButton pencere öğelerinin bir birleşimidir — bu pencere öğesi, bir öğe listesinden tek bir seçeneği seçmek için kullanılır.
RadioListTile widget'ını şu şekilde ekleyebilirsiniz:
// 1.
enum Cinsiyet { erkek, kadın }
// 2.
Cinsiyet? _gender = Cinsiyet.male;
Liste görünümü(
çocuklar: [
// 3.
RadioListTile<Gender>(
ikincil: Simge(Icons.male),
controlAffinity: ListTileControlAffinity.trailing,
başlık: const Metin('Erkek'),
// 4.
değer: Gender.male,
// 5.
grupDeğeri: _gender,
// 6.
onChanged: (Cinsiyet? değer) {
setState(() {
_gender = değer;
});
},
),
RadioListTile<Gender>(
ikincil: Simge(Icons.female),
controlAffinity: ListTileControlAffinity.trailing,
başlık: const Metin('Kadın'),
değer: Gender.female,
grupDeğeri: _gender,
onChanged: (Cinsiyet? değer) {
setState(() {
_gender = değer;
});
},
),
],
)
Kod bloğundaki sayıların açıklaması:
- RadioListTile için tüm seçim değerlerini tutan bir numaralandırma
- Bu, enum kullanarak varsayılan seçimi kaydeder
- enum türünde RadioListTile ekleme
- Geçerli liste döşemesine seçim değeri atama. ListTile bu değeri temsil eder
- Bu, halihazırda seçili olan değeri görüntülemek için kullanılır.
- Bu, radyo düğmesini değiştirdiğinizde seçimle birlikte çağrılır
Çıktı:

SwitchListTile
SwitchListTile pencere bileşeni, ListTile veSwitch pencere öğelerinin bir birleşimidir.
Kullanıcıların uygulama ayarlarını açmasına veya kapatmasına olanak tanıyan UI etkileşimini oluşturmak için bu widget'ı kullanabilirsiniz.
SwitchListTile widget'ını şu şekilde ekleyebilirsiniz:
sınıf Cihaz {
dize adı;
bool Açık;
Cihaz(this.name, {this.isOn = false});
}
// 1.
nihai Liste<Cihaz> cihazlar = [
Cihaz('TV'),
Cihaz('Fan'),
Cihaz('Buzdolabı'),
];
ListView.builder(
itemCount: cihazlar.uzunluk,
itemBuilder: (bağlam, dizin) {
SwitchListTile(
// 2.
başlık: Text('${cihazlar[index].name}'),
// 3.
değer: cihazlar[indeks].isOn,
// 4.
onChanged: (bool değeri) {
setState(() {
cihazlar[indeks].isOn = değer;
});
},
);
},
)
Kod bloğundaki sayıların açıklaması:
- Cihazların listesini tutan bir değişken
- Bu, ListTile'ın adını veya başlığını gösterir.
- Bu, anahtarın açılıp kapatılmayacağını belirler.
- Bu, anahtarı değiştirdiğinizde çağrılır
Çıktı:

ListTile temasını yönetme
Tema, bir ön uç uygulaması geliştirmenin önemli bir yönüdür. Tema, markanızı aktarır ve dikkatli yönetilmezse, tüm UI öğelerinin aynı kuralı izlemesini sağlamak için çok fazla zaman harcıyor olabilirsiniz.
ListTile'ın görünümünü ve verdiği hissi tasarımınıza uyacak şekilde değiştirmek istediğinizi varsayalım. Gerçekten aşağıdaki iki seçeneğiniz var:
- Widget düzeyinde temayı değiştirme
- Uygulama düzeyinde tema değiştirme
Widget düzeyinde temayı değiştirme
Renk, şekil ve boyut gibi özelliklerini doğrudan değiştirerek ListTile'ın görünümünü değiştirebilirsiniz.
ListTile'ın arka plan rengini, metin rengini ve simge rengini şu şekilde değiştirebilirsiniz:
ListTile'ı döndür( // 1. karoRenk: Colors.redAksan, // 2. metinRenk: Renkler.beyaz, // 3. iconColor: Renkler.beyaz, );
Kod bloğundaki sayıların açıklaması:
- Bu, ListTile'ın arka plan rengini değiştirir
- Bu, ListTile'da görünen tüm metnin rengini değiştirir.
- Bu, ListTile'da görünen tüm simgelerin rengini değiştirir.
Uygulama düzeyinde tema değiştirme
Muhtemelen tüm uygulama sayfalarında ListTile pencere aracının görsel estetiğini değiştirmek isteyebilirsiniz. Bunu listTileTheme tanımlayarak ve ardından ListTileThemeData pencere aracını ekleyerek yapabilirsiniz.
ListTileThemeData pencere bileşeninin içinde, projenizdeki tüm ListTile pencere öğeleri için değiştirmek istediğiniz tüm özellikleri belirtebilirsiniz.
İşte kod örneği:
MaterialApp'ı iade et(
başlık: 'Flutter Demo',
debugShowCheckedModeBanner: yanlış,
tema: ThemeData(
birincilSwatch: Colors.blue,
listTileTheme: ListTileThemeData(
karoRenk: Colors.redAksan,
metinRenk: Renkler.beyaz,
iconColor: Renkler.beyaz,
),
),
ana sayfa: MyHomePage(),
);
Hem birinci hem de ikinci yaklaşım, aşağıdakiyle aynı sonucu verir:

bölücü ekleme
Ayırıcı eklemek, özellikle öğeler orta bölümde üç satırla görüntülendiğinde, öğeler arasında net bir şekilde ayrım yapmanıza yardımcı olur.
ListTile öğeleri arasına ayırıcı eklemek için ListView pencere aracını ekleyin. ListView içine, fayans özelliği ve ListTile.divideTiles listesiyle ListTile.divideTiles ekleyin.
Kod Örneği:
Liste görünümü(
çocuklar: ListTile.divideTiles(bağlam: bağlam, döşemeler: [
ListeTile(
lider: Simge(Icons.car_rental),
başlık: Metin('Araba'),
),
ListeTile(
lider: Simge(Icons.flight),
başlık: Metin('Uçuş'),
),
ListeTile(
lider: Simge(Icons.train),
başlık: Metin('Tren'),
),
]).Listeye(),
)
Çıktı:

ListView.Builder kullanıyorsanız, onu ListView.separated ile değiştirebilir ve ayırıcıyı döndüren separatorBuilder parametresini ekleyebilirsiniz.
Kod örneği:
ListView.separated( // <-- BURAYA BAKIN
itemCount: item.length,
itemBuilder: (bağlam, dizin) {
ListTile'ı döndür(
lider: CircleAvatar(
arkaplanRenk: const Renk(0xff764abc),
çocuk: Metin(öğeler[indeks]),
),
başlık: Text('Item ${items[index]}'),
alt başlık: Metin('Öğe açıklaması'),
sondaki: Simge(Icons.more_vert),
);
},
separatorBuilder: (bağlam, dizin) { // <-- BURAYA BAKIN
Dönüş Bölücü();
},
)
Çıktı:

Kapatmak için hızlıca kaydırma davranışı ekleme
Kaydırarak kapat özelliği, bir kaydırma hareketi kullanarak belirli bir ListTile'ı listeden kaldırmanıza olanak tanır. Örneğin, bir e-postayı listenizden kaldırmak için bu özelliği kullanabilirsiniz.
İşte adımlar:
-
ListTilewidget'ınızı Dismissible widget'ının içine sarın - Dismissible widget'ının
onDismissedparametresini ekleyin ve bir geri arama kaydedin. Öğeyi listeden çıkarmak için mantığı buraya yazabilirsiniz.
ListView.builder(
itemCount: item.length,
itemBuilder: (bağlam, dizin) {
Geri Dön Dismissible( // Adım 1
anahtar: Anahtar(öğeler[indeks]),
onDismissed: (yön) { // 2. Adım
setState(() {
item.removeAt(index);
});
ScaffoldMessenger.of(context).showSnackBar(SnackBar(içerik: Text('${items[index]} reddedildi')));
},
çocuk: ListTile(
//visualDensity: VisualDensity(dikey: 4),
lider: CircleAvatar(
arkaplanRenk: const Renk(0xff764abc),
çocuk: Metin(öğeler[indeks]),
),
başlık: Text('Item ${items[index]}'),
alt başlık: Metin('Öğe açıklaması'),
sondaki: Simge(Icons.more_vert),
),
);
},
)
)
(Not: Yukarıdaki kod yalnızca ListTile'ı kullanıcı arayüzünden kaldırır ve öğeyi veritabanınızdan kaldırmak için iş mantığını kendiniz yazmanız gerekir)
Çıktı:

ListTile yüksekliğini değiştirme
Bazen ListTile yüksekliğini bir dereceye kadar ayarlamak isteyebilirsiniz. ListTile pencere bileşeni, boyutları Malzeme tasarımı belirtimine göre sınırlandırıldığından, height özelliğini doğrudan desteklemez. Bu nedenle ListTile yüksekliğini artırmak veya azaltmak için visualDensity özelliğini kullanabilirsiniz.
visualDensity pozitif bir sayıya ayarlanması ListTile yüksekliğini artırırken, negatif bir sayı yüksekliği azaltır.
(Not: Ayarlayabileceğiniz maksimum ve minimum değerler 4 ve -4'tür )
İşte kod örneği:
ListeTile(
visualDensity: VisualDensity(dikey: 4), //<-- BURAYA BAKIN
lider: CircleAvatar(
arkaplanRenk: const Renk(0xff764abc),
çocuk: Metin(öğeler[indeks]),
),
başlık: Text('Item ${items[index]}'),
alt başlık: Metin('Öğe açıklaması'),
sondaki: Simge(Icons.more_vert),
);
Çıktı:

özelleştirme
Mevcut özellikleri kullanarak ListTile'a çeşitli özelleştirmeler ekleyebilirsiniz. Örneğin, rengini değiştirebilir (vurgulu, basılı vb. gibi farklı durumlarda), şeklini değiştirebilir, başlık ile diğer öğeler arasına boşluk ekleyebilir ve yüksekliğini değiştirebilirsiniz.
Tanımına giderek desteklediği tüm özellikleri görebilirsiniz. Tüm özellikleri görmek için sağ tıklayın ve ardından Git > Delcation veya Kullanımlar öğesine tıklayın.

Çözüm
ListTile pencere aracını eklemek, uygulama geliştirme hızını artırmanıza yardımcı olur. Malzeme özelliklerini takip eder ve bir öğeyi anlamlı bir şekilde sunmak için ihtiyacınız olan her şeyi kapsar.
Bu eğitimde, önce ListTile'ın nasıl ekleneceğine, türlerine ve temanın nasıl yönetileceğine baktık ve bölücü ve hızlıca kapat özelliği ekleme ve ListTile yüksekliğini değiştirme gibi bazı senaryoları ele aldık. umarım bir sonraki listenizi oluştururken yardımcı olursunuz.
Flutter'da ListTile nasıl eklenir: LogRocket Blog'da ilk olarak örnekler içeren bir eğitim çıktı.

Sohbete katıl0
Henüz yorum yok. İlk katkı senden gelsin.