Флаттер: Как получить baseurl от обществ? - PullRequest
0 голосов
/ 30 января 2020

для аутентификации я хотел бы восстановить base_url компании, выбранной из выпадающего списка, но я не могу этого сделать, так как для начинающего небольшая помощь будет приветствоваться. Вот код выпадающего списка:

class DropDown extends StatefulWidget {
  DropDown({Key key}) : super(key: key);
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<DropDown> {
  String _mySelection;
  String _myBaseUrl;
  List<Map> _myJson = [{"id":2,"society":"test","baseUrl":"url.com"},{"id":1,"society":"planeef","baseUrl":"url.com"}];

  @override
  Widget build(BuildContext context) {
    return Container(
        child: new DropdownButton<String>(
          isDense: true,
          hint: new Text("Select"),
          value: _mySelection,
          onChanged: (String newValue) {
            setState(() {
              _mySelection = newValue;
            });
          },
          items: _myJson.map((Map map) {
            return new DropdownMenuItem<String>(
              value: map["id"].toString(),
              child: new Text(
                map["society"],
              ),
            );
          }).toList(),
        ),
    );
  }
}

1 Ответ

0 голосов
/ 30 января 2020

Проверьте код ниже. Вы можете использовать функцию singleWhere, чтобы извлечь элемент из значения id, полученного из раскрывающегося списка, и затем прочитать baseUrl из элемента.

Функция singleWhere сопоставляет и возвращает один элемент из списка на основе предоставленного нами условия.

Примечание - Функция singleWhere по умолчанию выдает ошибку, если есть дубликаты или элемент не найден. Вам также может понадобиться передать параметр orElse в singleWhere или добавить некоторую обработку ошибок в этом случае.

Подробнее об этом можно узнать здесь .

class _MyHomePageState extends State<MyHomePage> {
  String _mySelection;

  List<Map> _myJson = [{"id":2,"society":"test","baseUrl":"url.com"},{"id":1,"society":"planeef","baseUrl":"url.com"}];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: new DropdownButton<String>(
          isDense: true,
          hint: new Text("Select"),
          value: _mySelection,
          onChanged: (String newValue) {
             Map<dynamic,dynamic> _myElement = _myJson.singleWhere((test) => test["id"] == int.parse(newValue));
            print(_myElement["baseUrl"]);
            //Add the above two lines

            setState(() {
              _mySelection = newValue;
            });
          },
          items: _myJson.map((Map map) {
            return new DropdownMenuItem<String>(
              value: map["id"].toString(),
              child: new Text(
                map["society"],
              ),
            );
          }).toList(),
        ),
      )
    );
  }
}
...