Как я могу отфильтровать список Json во флаттере - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь создать надежный выпадающий список с использованием json. У меня есть этот список json в моем коде

  List<Map> myJson = [
    {"id": 0, "continent": "Africa", "country":"Egypt"},
    {"id": 1, "continent": "Europe", "country":"Denmark"},
    {"id": 2, "continent": "Asia", "country":"India"},
    {"id": 3, "continent": "Africa", "country":"Kenya"},
    {"id": 4, "continent": "Europe", "country":"Spain"},
  ];

И я показываю континент в выпадающем списке

 DropdownButton<String>(
          isExpanded: true,
          isDense: true,
          hint: new Text("Select"),
          value: _mySelection,
          onChanged: (String newValue) {
            setState(() {
              _mySelection = newValue;
            });

            print(_mySelection);

          },
          items: myJson.map((Map val) {
            return new DropdownMenuItem<String>(
              value: val["continent"].toString(),
              child: Text(
                val["continent"],
              ),
            );
          }).toList(),
        ),

Приведенный выше код не работает , всякий раз, когда я запускаю его, я получаю эту ошибку на консоли.

A non-null String must be provided to a Text widget.
'package:flutter/src/widgets/text.dart':
Failed assertion: line 285 pos 10: 'data != null'

Я хочу показать список африканских стран и заполнить его другим раскрывающимся списком (например, раскрывающимся списком стран), если выбрано Африка от текущего выпадающего списка. У меня есть поиск решений, но большинство решений по переполнению стека не связаны с моей ситуацией. заранее спасибо.

1 Ответ

0 голосов
/ 22 апреля 2020

надеюсь, вы ищете что-то вроде этого

, вы можете сгруппировать свой список, тогда у вас есть только отдельные континенты

collection.dart требуется

import "package:collection/collection.dart";
var newMap = groupBy(myJson, (obj) => obj['continent']);

в новая карта ключом является ваше поле groupBy, вы можете сделать то же самое для стран

              items: newMap.entries.map((val) {
                return new DropdownMenuItem<String>(
                  value: val.key.toString(),
                  child: Text(
                    val.key,
                  ),
                );
              }).toList(),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...