我试图在flutter中使用下拉列表,并且应该通过HTTP请求添加下拉值。
这是HTTP的代码。
Future<String> getData() async {
try{
var deviceid = '123';
var dtgUid = '123';
var body = { "uid" : dtgUid, "deviceid": deviceid};
var response = await http.post(url, body: json.encode(body)).timeout(Duration(seconds: 15),
onTimeout: (){
// throw Exception();
_showSnackBar(context,'Some issue with connectivity. Can not connect to server.',Colors.redAccent);
//or you can also
return null;
});
if(response. statusCode == 200){
final datafromdb = getNewsTypeFromJson(response.body);
setState(() {
_inProcess = false;
if(datafromdb.content.length == null){
count = 0;
}else{
count = datafromdb.content.length;
}
if(datafromdb.content.length > 0 && datafromdb.content[0].tagname != 'Empty'){
for (var i in datafromdb.content) {
print(i.tagname);
data.add(i.tagname);
}
}else{
nodata = 'No Record Found';
_showSnackBar(context,nodata,Colors.redAccent);
}
});
}
}catch(e){
print("Exception Caught: $e");
}
}
这是JSONParse。
import 'dart:convert';
GetNewsType getNewsTypeFromJson(String str) => GetNewsType.fromJson(json.decode(str));
class GetNewsType {
GetNewsType({
this.content,
this.success,
});
List<Content> content;
bool success;
factory GetNewsType.fromJson(Map<String, dynamic> json) => GetNewsType(
content: List<Content>.from(json["content"].map((x) => Content.fromJson(x))),
success: json["success"],
);
}
class Content {
Content({
this.tagname,
});
String tagname;
factory Content.fromJson(Map<String, dynamic> json) => Content(
// tagname: json["tagname"],
tagname: json == null ? 'Empty' : json["tagname"]
);
}
这是下拉代码。
DropdownButton(
items: data.map((item) {
return DropdownMenuItem(
child: Text(item['tagname']),
value: item['tagname'].toString(),
);
}).toList(),
onChanged: (newVal) {
setState(() {
_mySelection = newVal;
});
},
value: _mySelection,
),
当我运行该应用程序时,出现以下错误。我不明白。
type 'String' is not a subtype of type 'int' of 'index'
答案 0 :(得分:1)
我还没有执行代码,但是错误消息和代码item['tagname']
中的这一行看起来像List<String>
一样被key
之类的map
访问。
由于在.map()
中您拥有单个Content
对象,因此像.
一样使用item.tagname