Kueri di Flutter ListView

Sep 18 2020

Saya belajar tentang tampilan daftar dan saya memiliki dua file panah di bawah ini, satu menggunakan pembuat ListView dan yang lainnya Listview. Keduanya menghasilkan hasil yang sama. Saya telah mengikuti panduan listview:https://pusher.com/tutorials/flutter-listviews

Di bawah ini adalah pertanyaan saya di listview:

  1. Saya mengerti di dunia nyata data akan berasal dari API dan ingin tahu opsi mana di bawah ini yang akan digunakan dan mengapa?
  2. Apakah saya benar untuk memahami bahwa widget apa pun seperti container, teks dapat menjadi turunan dari dalam listView?
  3. Dalam opsi 1, anak ListView adalah fungsi _buildListItemsFromLocation (). Apakah ini praktik yang baik atau haruskah kita memindahkan kode _buildListItemsFromLocation () ke file dart terpisah?

Option1: 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(),
    );
  }
}


Opsi 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),
                )
              ],
            );
        }
        );
      }
  }


Jawaban

2 Souvenir Sep 18 2020 at 09:04
  1. Saya menggunakan cara 2 karena mudah dipahami dan mengikuti urutan dari atas ke bawah sehingga mudah untuk membaca kodenya.
  2. Widget apa pun bisa menjadi turunan dari widget lain. Tergantung pada bagaimana dan untuk apa Anda menggunakannya.
  3. Banyak orang mengatakan bahwa kita harus membuat kelas lain dan kemudian memanggilnya lagi daripada memisahkannya seperti di atas karena hal itu mempengaruhi kinerja aplikasi. Jika menggunakan banyak tetapi hanya dalam satu layar, Anda dapat menggunakan metode yang sama seperti milik Anda. Jawabannya mungkin salah, tidak ada yang bisa diberikan kepada diri Anda sendiri.
1 Autocrab Sep 18 2020 at 09:01
  1. Jika Anda tidak tahu terlebih dahulu ukuran daftar, buatlah melalui pembuat

1.1 Jika Anda membuat daftar dan mengetahui bahwa jumlah elemen tidak akan lebih dari sepuluh atau dua belas, Anda dapat membuat ListViewdari example1

  1. Widget apa pun bisa masuk ListView. Untuk kenyamanan ada widget bernama ListTile, yang berisi widget leading, trailing, title, subtitle
  2. tidak apa-apa