Flutter ListView Üzerindeki Sorgular

Sep 18 2020

Liste görünümlerini öğreniyorum ve aşağıdaki iki dart dosyasına sahibim, biri ListView oluşturucu ve diğeri Listview kullanıyor. Her ikisi de aynı sonucu verir. Listview kılavuzunu takip etmekteyim:https://pusher.com/tutorials/flutter-listviews

Listview ile ilgili sorularım aşağıdadır:

  1. Gerçek dünyada verilerin bir API'den geleceğini anlıyorum ve aşağıdaki seçeneklerden hangisinin kullanılacağını ve neden kullanılacağını bilmek istedim.
  2. Kap, metin gibi herhangi bir parçacığın listView içinde alt öğesi olabileceğini anlamakta haklı mıyım?
  3. Seçenek 1'de ListView alt öğesi bir _buildListItemsFromLocation () işlevidir. Bu iyi bir uygulama mı yoksa _buildListItemsFromLocation () kodunu ayrı bir dart dosyasına mı taşımalıyız?

Seçenek1: ListView

class LocationListView extends StatefulWidget {
  @override
  _LocationListViewState createState() => _LocationListViewState();
}

class _LocationListViewState extends State<LocationListView> {

  List<Container> _buildListItemsFromLocation() {
    int index = 0;
    return locationData.map((location) {
      var container = Container(
          child: Row(
            children: [
              Container(
                margin: EdgeInsets.all(10.0),
                child: Image(
                  image: AssetImage(location.imagePath),
                  width: 100.0,
                  height: 100.0,
                  fit: BoxFit.cover,
                ),
              ),
              Container(
                child: Text(location.name),
              )
            ],
          ),
      );
      return container;
    }).toList();
  }

  @override
  Widget build(BuildContext context) {
    return ListView(
      children: _buildListItemsFromLocation(),
    );
  }
}


Seçenek 2 - ListView.builder

class LocationList extends StatefulWidget {
  @override
  _LocationListState createState() => _LocationListState();
}

class _LocationListState extends State<LocationList> {

  @override
  Widget build(BuildContext context) {
        return ListView.builder(
          itemCount: locationData.length,
          itemBuilder: (context, index) {
            
            return Row(
              children: [
                Container(
                  margin: EdgeInsets.all(10.0),
                  child: Image(
                    image: AssetImage(locationData[index].imagePath),
                    width: 100.0,
                    height: 100.0,
                    fit: BoxFit.cover,
                  ),
                ),
                Container(
                  child: Text(locationData[index].name),
                )
              ],
            );
        }
        );
      }
  }


Yanıtlar

2 Souvenir Sep 18 2020 at 09:04
  1. Yöntem 2'yi kullanıyorum çünkü anlaşılması kolay ve yukarıdan aşağıya sırayı takip ederek kodu okumak kolay.
  2. Herhangi bir widget, başka bir widget'ın alt öğesi olabilir. Onları nasıl ve ne için kullandığınıza bağlı olarak.
  3. Birçok kişi, uygulamanın performansını etkilediği için yukarıdaki gibi bölmek yerine başka bir sınıf oluşturup sonra tekrar çağırmamız gerektiğini söylüyor. Çok sayıda ancak tek ekranda kullanılması durumunda, kendi yönteminizle aynı yöntemi kullanabilirsiniz. Cevap kusurlu olabilir, kendinize verecek hiçbir şeyiniz yok.
1 Autocrab Sep 18 2020 at 09:01
  1. Önceden liste boyutunu bilmiyorsanız, oluşturucu aracılığıyla oluşturun

1.1 Liste oluşturursanız ve öğe sayısının on veya on ikiden fazla olmayacağını biliyorsanız ListView, example1'den oluşturabilirsiniz .

  1. Herhangi bir widget içinde olabilir ListView. Kolaylık sağlamak için ListTilebaştaki, sondaki, başlık, altyazı widget'larını içeren widget adı verilir.
  2. tamam