要素を1つのビューに送信しようとしています。この要素は、2ページ目のドロップダウンのデフォルト要素になります。私は最初のページでそのようなものを使用します
onTap: () {
Navigator.Push(
context,
new MaterialPageRoute(
builder: (context) => new SummaryPage(,
dropdownItem: dropdownSelection)));
}
次に、2ページ目でfutureを作成してドロップダウン内のすべての要素を取得し、initstateメソッドでデフォルトの要素ドロップダウンを設定します
List data = List();
Future<Null> getEstates() async {
final response = await http
.get('URL'
}).catchError((error) {
print(error.toString());
});
final responseJson = json.decode(response.body);
final getBody = responseJson['body'];
setState(() {
data = getBody;
loading = false;
});
}
void initState() {
super.initState();
setState(() {
dropdownSelection = widget.dropdownItem.toString();
});
getEstateはこれを返します
[{id:1、説明:Terreno Rio}、{id:2、説明:Terreno Asier}]
ドロップダウンは次のようになります
child: ButtonTheme(
alignedDropdown: true,
child: new DropdownButton<String>(
isDense: true,
hint: new Text("Search...",
textAlign: TextAlign.center),
value: dropdownSelection,
onChanged: (String newValue) {
setState(() {
dropdownSelection = newValue;
},
items: data.map((item) {
return new DropdownMenuItem<String>(
child: new Text(
item['description'],
),
value: item['id'].toString(),
);
}).toList(),
),
),
表示されるエラーは
値== null || items.where((DropdownMenuItem item)=> item.value == value).length == 1 ':trueではありません
どうやらコードは問題ありませんが、2番目のビューに移動すると、約1秒のエラービューが表示され、次に2番目のページが表示されます。値の読み込みが早すぎて、ドロップダウンが正しく設定できない可能性があると思います。このエラーが発生する理由と、それらを修正するにはどうすればよいですか?
これは、最初は値がない(リストが空である)ため、次のようにCircleProgressIndicator
を表示できるためです。
child: data.length > 0 ? ButtonTheme(
alignedDropdown: true,
child: new DropdownButton<String>(
isDense: true,
hint: new Text("Buscar..",
textAlign: TextAlign.center),
value: dropdownSelection,
onChanged: (String newValue) {
setState(() {
dropdownSelection = newValue;
},
items: data.map((item) {
return new DropdownMenuItem<String>(
child: new Text(
'Finca: ' + item['descripcion'],
),
value: item['id'].toString(),
);
}).toList(),
),
),
) : Center(child: CircularProgressIndicator()),
私があなたのコードで考えることができる2つの間違いがあるかもしれません:
文字列の代わりにintidのみを値として使用することをお勧めします