Использование жестких элементов в виджете DropdownButtonFormField - PullRequest
0 голосов
/ 22 апреля 2020

Общая цель состоит в том, чтобы использовать асинхронную функцию getpays для предоставления списка элементов в раскрывающемся меню. Как я могу использовать детектор жестов в моем виджете и как установить раскрывающийся список состояний? .Я хотел бы использовать для вызова своей функции getpays, но когда я вставляю ее в виджет dropdow, у меня возникает синтаксическая ошибка "слишком много положительных аргументов 0 ожидается 1 найдено. Я использую шаблон MVC. Мой экран

</p> <pre><code>Widget build(BuildContext context) { return new Scaffold( body: Container( width: double.infinity, height: double.infinity, child: new Form( child: Padding( padding: const EdgeInsets.only(top: 16.0, left: 28), child: new Column(children: <Widget>[ DropdownButtonFormField( GestureDetector(onTap: () async { await moncontrolleurdropdown.getpays(); setState(() {}); }), hint: Text("Select"), items: moncontrolleurdropdown.myPays ?.map((PaysModel pays) { DropdownMenuItem<String>( child: new Text(pays.nompays), value: pays.codestate, ); })?.toList(), onChanged: (value) => moncontrolleurdropdown.onSelectedState(value), value: moncontrolleurdropdown.selectedState, ), DropdownButtonFormField( items: moncontrolleurdropdown.tempvillesList ?.map((VilleModel ville) { return new DropdownMenuItem<String>( child: new Text(ville.nomville), value: ville.codeville, ); })?.toList(), onChanged: (value) => moncontrolleurdropdown.onSelectedVille(value), value: moncontrolleurdropdown.selectedVille, ), ]))))); } }

мои функции getpays и onselecstate </p> <pre><code>void getpays() async { try { var response = await http.get("http://..../getpays.php"); if (200 == response.statusCode) { print("testfonction"); print(response.body); // setState(() { _myPays = (json.decode(response.body) as List) .map((i) => PaysModel.fromJson(i)) .toList(); // print(_myPays.length); print(_myPays); _myPaystest = _myPays; //}); } } catch (e) { //return _myPays; } //return _myPays; } <code> void onSelectedState(String value) { this.getville(); print(value); print("a"); print(this.villesList.length); print("b"); //selecteddState=value; print("c"); //print(_selectedState); this.tempvillesList.clear(); for (var x = 0; x == this.villesList.length - 1; x++) { print(x); if (this.villesList[x].codepays == _selectedState) { print(this.villesList[x].codepays); this.tempvillesList.add(this.villesList[x]); print(this.tempvillesList); } } }

...