Truy vấn trên Flutter ListView
Sep 18 2020
Tôi đang tìm hiểu về các chế độ xem danh sách và tôi có hai tệp phi tiêu dưới đây, một tệp sử dụng trình tạo ListView và một tệp Listview khác. Cả hai đều xuất ra cùng một kết quả. Tôi đã làm theo hướng dẫn listview:https://pusher.com/tutorials/flutter-listviews
Dưới đây là các truy vấn của tôi trên listview:
- Tôi hiểu trong thế giới thực, dữ liệu sẽ đến từ một API và muốn biết tùy chọn nào dưới đây sẽ được sử dụng và tại sao?
- Tôi có đúng khi hiểu rằng bất kỳ tiện ích con nào như vùng chứa, văn bản đều có thể là con của trong listView không?
- Trong tùy chọn 1, ListView con là một hàm _buildListItemsFromLocation (). Đây có phải là một phương pháp hay hay chúng ta nên di chuyển mã _buildListItemsFromLocation () sang một tệp phi tiêu riêng biệt?
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(),
);
}
}
Tùy chọn 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),
)
],
);
}
);
}
}
Trả lời
2 Souvenir Sep 18 2020 at 09:04
- Mình sử dụng cách 2 vì nó dễ hiểu và theo thứ tự từ trên xuống dưới nên rất dễ đọc code.
- Bất kỳ widget nào cũng có thể là con của widget khác. Tùy thuộc vào cách thức và những gì bạn sử dụng chúng để làm gì.
- Nhiều người nói rằng chúng ta nên tạo một lớp khác rồi gọi lại chứ không nên chia nhỏ như trên vì nó ảnh hưởng đến hiệu suất của ứng dụng. Trường hợp sử dụng nhiều mà chỉ ở một màn hình thì có thể sử dụng phương pháp như của riêng mình. Câu trả lời có thể là thiếu sót, không có gì để cho chính mình.
1 Autocrab Sep 18 2020 at 09:01
- Nếu bạn không biết trước kích thước danh sách, hãy tạo nó thông qua trình tạo
1.1 Nếu bạn tạo danh sách và bạn biết rằng số phần tử sẽ không nhiều hơn mười hoặc mười hai, bạn có thể tạo ListViewtừ example1
- Bất kỳ widget nào cũng có thể ở trong
ListView. Để thuận tiện, có một widget được gọi là widgetListTilechứa các widget đầu, cuối, tiêu đề, phụ đề - nó ổn