Общая цель состоит в том, чтобы использовать асинхронную функцию 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);
}
}
}