Как удалить нулевой счетчик элементов в GridView? [Групповая проблема с GridView]

Необходимо создать групповое представление сетки. Я почти сделал. Мой json выглядит так,

[ { "d": "Gym", "p": 0 }, { "d": "Lifts", "p": 0 }, { "d": "Office", "p": 0 }, { "d": "Guest Rooms", "p": 1.1 }, { "d": "Front of House", "p": 1.2 }, { "d": "Restaurants", "p": 1.3 }, { "d": "Function Rooms", "p": 1.4 }, { "d": "Exterior", "p": 1.5 }, { "d": "Recreation", "p": 1.6 }, { "d": "Laundry", "p": 3.1 }, { "d": "A/V Equipment", "p": 3.2 }, { "d": "F&B Equipment", "p": 3.3 }, { "d": "Other Equipment", "p": 4.1 }, { "d": "Back of House", "p": 4.2 }, { "d": "Central Plant", "p": 4.3 }, { "d": "Headings", "p": 5 }, { "d": "Plumbing", "p": 5.1 }, { "d": "Essential Services", "p": 5.2 }, { "d": "Workshop Equipment", "p": 5.3 }, { "d": "HSK Equipment", "p": 5.4 }, { "d": "Electrical Equipment", "p": 5.5 }, { "d": "Business Centre", "p": 100 } ]

 Widget createListView(BuildContext context, AsyncSnapshot snapshot) {
    List<Data> values = snapshot.data;
    final listCount = getItemCounter(values);
//    final listCount =
//        values.map<double>((m) => m.p).reduce((a, b) => max(a, b)).floor();

    return CustomScrollView(
      slivers: <Widget>[
        SliverList(
          delegate: SliverChildBuilderDelegate((context, i) {
            final items = values
                .where((m) => i + 1 <= m.p && m.p < i + 2)
                .toList(growable: false)
                  ..sort((a, b) => a.p.compareTo(b.p));
            return GridView.builder(
              itemCount: items.length,
              shrinkWrap: true,
              primary: false,
             gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4),
              itemBuilder: (context, i) {
                final item = items[i];
                return _builderItem(item);
              },
            );
          }, childCount: listCount),
        )
      ],
    );
  }
 getItemCounter(List<Data> values){
    List iPoint = [];
    List distictI = [];
    for(int i = 0; i < values.length; i++){
      iPoint.add(values[i].p.toInt());
    }
    //remove duplicate
    distictI = iPoint.toSet().toList();
    return distictI.length;
  }

это мой вывод выглядит так,

Как удалить нулевой счетчик элементов в GridView? [Групповая проблема с GridView]

Я обнаружил проблему, почему это происходит, в моем json P, проходящем 1.1,1.2,1.3 после этого прохождения 3.1,3.2.. аналогично. пробел из-за отсутствия числа 02

какие? Я не знал, как решить мою проблему. Если ты знаешь, скажи мне

user11065582 09.04.2019 06:55

добавлен ответ, пожалуйста, проверьте

Harsh Bhikadia 09.04.2019 07:01

Вы должны отфильтровать свой список, прежде чем он перейдет к сетке.

Uttam Panchasara 09.04.2019 07:06
0
3
774
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ну вот:

 Widget createListView(BuildContext context, AsyncSnapshot snapshot) {
    List<Data> values = snapshot.data;
    final pIntValues = values.map<int>((m) => m.p.toInt()).toSet().toList(growable: false)..sort();

    return CustomScrollView(
      slivers: <Widget>[
        SliverList(
          delegate: SliverChildBuilderDelegate((context, i) {
            final p = pIntValues[i];
            final items = values
                .where((m) => p <= m.p && m.p < p + 1)
                .toList(growable: false)
                  ..sort((a, b) => a.p.compareTo(b.p));
//check if not items, return Container if true
            if (items.length == 0)
              return Container(); 
            return GridView.builder(
              itemCount: items.length,
              shrinkWrap: true,
              primary: false,
             gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4),
              itemBuilder: (context, i) {
                final item = items[i];
                return _builderItem(item);
              },
            );
          }, childCount: pIntValues.length),
        )
      ],
    );
  }

Возврат Container вместо GridView, если для этой группы нет элементов.

это должно решить вашу проблему. дайте мне знать, если это не так.

Harsh Bhikadia 09.04.2019 07:01

Я немного изменил ваш код. вы можете увидеть строку кода комментария в моем коде. из-за последнего p-значения возвращается 100.0.0. на выходе 100 строк черным цветом. Мой путь в порядке? или есть другой способ сделать это?

user11065582 09.04.2019 07:09

Да я видел это. Ваше решение лучше. Я думал, что между ними не будет промежутков, это будет последовательно. Поэтому я так и написал

Harsh Bhikadia 09.04.2019 07:12
final listCount = values.map<int>((m) => m.p.toInt()).toSet().length; вот как это можно сделать в одну строку
Harsh Bhikadia 09.04.2019 07:14

все отлично отображается. Без этого {"d": "Business Centre", "p": 100 }

user11065582 02.05.2019 14:50

результат печати (pIntValues) [0, 1, 3, 4, 5, 100]

user11065582 03.05.2019 06:51

в return _builderItem(item); я добавил оператор печати к Widget _builderItem(DataRegister item) { print(item); результату без "p": 100,

user11065582 03.05.2019 06:57

Спасибо большое. Вы мне так много раз помогали. Еще раз спасибо.

user11065582 03.05.2019 08:14

Другие вопросы по теме