Когда пользователь регистрируется в моем приложении, он вводит свои предпочтения, и элементы сортируются по свойству в их профиле под названием «рекомендовано», которое поступает из API: «[Завтрак, Ужин, Десерты, Ужин]»
У меня есть панель вкладок, где пользователь может выбирать основные настройки ie: [Все параметры, тип еды, напитки], и когда пользователь переходит к каждому предпочтению, он получает подмножество, которое позволяет им дальше сортировать это происходит из Tabcategories. Это рабочие примеры и тот, который не работает:
Данные поступают через мое будущее:
var productsInHeadings =
_getProductsInHeadings(filteredProducts)
.where((e) => e.products.length != 0)
.toList();
Затем фильтруются по сегментам на вкладках.
enum FilterTabs { Breakfast,Rec, Lunch, Dinner, Dessert, All }
typedef void FilterTabCallback(FilterTabs tab);
List<ProductsInHeading> _getProductsInHeadings(List<Product> items) {
switch (selectedTab) {
case FilterTabs.Breakfast:
final Map<String, List<Product>> allBreakfast =
Map.fromEntries(TabCategories.breakfast.map((e) => MapEntry(e, [])));
Map<String, List<Product>> headingItems =
items.fold(allBreakfast, (breakfast, element) {
if (!breakfast.containsKey(element.food)) { //food would be classified breakfast, lunch, or dinner
return breakfast;
}
return breakfast
..update(element.food, (value) => value..add(element));
});
productList = headingItems;
print("headingItems: $headingItems");
return headingItems.entries
.map((e) => ProductsInHeading(e.key, e.value..sort()))
.toList()
..sort()
..where((e) => e.products.length != 0);
break;
}}
Для каждой вкладки в корзине, затем отображается в отдельном классе
itemBuilder: (context, index) {
currentProducts = snapshot.data;
return HeaderAndListing(
productsInHeading: _currentCat != -1
? productsInHeadings[_currentCat]
: productsInHeadings[index],
showHeading: selectedTab != FilterTabs.All,
restaurant: restaurant,
starCount: starCount,
rating: rating,
filterNum: _currentCat,
currentIndex: _tabDetails[selectedTab.index]);
},
),
Center(child: _subSort(productsInHeadings)),
]);
Этот не работает:
case FilterTabs.Rec:
final Map<String, List<Product>> allRecommended =
Map.fromEntries(recCategories.map((e) => MapEntry(e, [])));
Map<String, List> headingItems =
items.fold(allRecommended, (rec, element) {
if (!rec.containsKey(userProfile.recommended)) {
return rec;
}
return rec..update(userProfile.recommended, (value) => value..add(element));
});
productList = headingItems;
print("headingItems: $headingItems");
return headingItems.entries
.map((e) => ProductsInHeading(e.key, e.value..sort()))
.toList()
..sort()
..where((e) => e.products.length != 0);
break;
Почему первая сортировка работает, а вторая один не делает?