Отображение List с Firestore
Какой из вариантов отображения листа с Firestore считается правильней?
Вариант 1:
class ItemList extends StatelessWidget {
@override
Widget build(BuildContext context) {
final retrieveItems = context.bloc<CategoriesCubit>();
retrieveItems .getData();
return BlocBuilder<CategoriesCubit, CategoriesState>(
builder: (context, state) {
if (state is CategoriesLoaded) {
return ListView.builder(
itemCount: state.categories.length,
itemBuilder: (context, index) {
return Column(
children: state.categories[index].listItems
.map((item) => Text(item.name))
.toList(),
);
});
}
return Container();
});
}
}
Вариант 2 вместо ListView.builder:
return Column(
children: state.categories
.map((cat) => Column(
children: cat.listItems
.map((item) => Text(item.name))
.toList()))
.toList());
Или есть еще метод который более правильней?
Category.fromMap(Map<String, dynamic> data) {
categoryName = data['categoryName'];
listItems =
(data['testItems'] as List).map((data) => Item.fromMap(data)).toList();
}
Item.fromMap(Map<String, dynamic> data) {
categoryID = data['categoryID'];
name = data['name'];
}
Стрим:
Stream<List<Category>> getData() {
return categoryData.snapshots().map((event) =>
event.documents.map((e) => Category.fromJson(e.data)).toList());
}
Ответы (1 шт):
Автор решения: MiT
→ Ссылка
С точки зрения оптимизации вариант с ListView.builder, работает лучше. Так как он рендерит элементы в момент скролла (и лишь определенное количество штук). В то время как Column рендерит все элементы списка. Но также есть и обратная сторона, ListView.builder является более тяжелым для малого количество элементов (до 5-15 элементов, где половина из них можно показать на экране).
По этому надо выбирать, отталкиваясь от задач...