嘿,伙计们,我面临一个问题,我正在使用此代码从 api 检索数据
class carLists{
carLists();
getCarsFromNetwork(String jsonUrl) async {
List<Cars> list;
String link = jsonUrl;
var res = await http.get(Uri.encodeFull(link),headers: {"Accept":"Application/json"});
if (res.statusCode == 200) {
var data = json.decode(res.body);
var list = data["cars"] as List;
List<Cars> imagesList = list.map((i) => Cars.fromJson(i)).toList();
return imagesList;
}
}
List<DropdownMenuItem> getCars(List<Cars> carPlates){
List<DropdownMenuItem<String>> ordersType = new List<DropdownMenuItem<String>>();
for(var i = 0 ; i<carPlates.length;i++ ) {
ordersType.add(DropdownMenuItem(
value: carPlates[i].carPlate, child: Text(carPlates[i].carPlate),));
}
return ordersType;
}
}
并使用这两个函数实现一个下拉按钮来获取数据并返回下拉菜单列表:`
Future<List<Cars>> foo(String link) async{
carPlates = await carLists().getCarsFromNetwork(link);
print(carPlates.length);
return carPlates;
}
getItems(List values) {
List<DropdownMenuItem<String>> ordersType = new List<
DropdownMenuItem<String>>();
for (var i = 0; i > values.length; i++) {
ordersType.add(DropdownMenuItem(value: values[i], child: values[i],));
return ordersType;
}
}
`并使用此代码填充 DropdownButton
Container(
child: FutureBuilder(
future: foo(url) ,
builder: (context, snapshot){
if(snapshot.hasData)
{
return new DropdownButton(
iconDisabledColor: Colors.black,
isExpanded: true,
icon: Icon(FontAwesomeIcons.arrowCircleDown),
iconSize: 14,
style: TextStyle(fontSize: 16, color: Colors.black),
iconEnabledColor: Colors.deepOrange,
items: carLists().getCars(carPlates),
value: dropTyreBrand,
onChanged: (val) {
setState(() {
dropTyreBrand = val;
});
},
);
}else{
return CircularProgressIndicator();
}
}
),
) ,
值已填充,一切都很好,但是当我从下拉列表中选择一个值时,它会因此错误而崩溃
I/flutter (4578): 在构建 FutureBuilder>(dirty, state: I/flutter (4578): _FutureBuilderState>#f394d): I/flutter (4578): 'package:flutter/src/material/dropdown .dart':断言失败:第 608 行 pos 15:'items == null || 我/颤振(4578):items.isEmpty || 值 == 空 || items.where((DropdownMenuItem item) => item.value == I/flutter (4578): value).length == 1': 不正确。I/flutter (4578): I/flutter (4578): 要么断言表明框架本身有错误,要么我们应该提供实质性的 I/flutter (4578): 此错误消息中的更多信息可帮助您确定和修复根本原因。I/flutter (4578):在任何一种情况下,请通过在 GitHub 上提交错误报告此断言:I/flutter (4578): https://github.com/flutter/flutter/issues/new?template=BUG.md I/flutter(4578):I/flutter(4578):抛出异常时,这是堆栈:I/flutter( 4578): #2 新下拉按钮