Сортировка элементов по сгенерированному пользователем флаттеру карты - PullRequest
0 голосов
/ 07 мая 2020

Когда пользователь регистрируется в моем приложении, он вводит свои предпочтения, и элементы сортируются по свойству в их профиле под названием «рекомендовано», которое поступает из 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;

Почему первая сортировка работает, а вторая один не делает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...