Flutter 类型';列表<;字符串>';不是类型为';字符串';http post列表数组时的类型转换
我在列表中有一个selectedItems:Flutter 类型';列表<;字符串>';不是类型为';字符串';http post列表数组时的类型转换,flutter,dart,Flutter,Dart,我在列表中有一个selectedItems: List<String> _selectedItems = []; 列表_selectedItems=[]; 然后,我想像这样传递这个_selectedItems: Future<void> _filterItem(List<String> _selectedItems) async { ProgressDialog pr = ProgressDialog(context, type:
List<String> _selectedItems = [];
列表_selectedItems=[];
然后,我想像这样传递这个_selectedItems:
Future<void> _filterItem(List<String> _selectedItems) async {
ProgressDialog pr = ProgressDialog(context,
type: ProgressDialogType.Normal, isDismissible: false);
pr.style(message: "Loading...");
await pr.show();
http.post("https://one.com/myapp/php/load_data.php", body: {
"_selectedItems":_selectedItems,
}).then((res) {
if (res.body == "nodata") {
setState(() {
print("No Found");
});
} else {
setState(() {
var extractdata = json.decode(res.body);
tutordata = extractdata["mydata"];
});
}
}).catchError((err) {
print(err);
});
await pr.hide();
}
Future\u filterItem(List\u selectedItems)异步{
ProgressDialog pr=ProgressDialog(上下文,
类型:ProgressDialogType.Normal,isDismissible:false);
pr.style(消息:“正在加载…”);
等待公关秀();
http.post(“https://one.com/myapp/php/load_data.php“,主体:{
“\u selectedItems”:\u selectedItems,
}).然后((res){
if(res.body==“nodata”){
设置状态(){
打印(“未找到”);
});
}否则{
设置状态(){
var extractdata=json.decode(res.body);
tutordata=extractdata[“mydata”];
});
}
}).catchError((err){
打印(错误);
});
等待公关隐藏();
}
传递此\u selectedItems
将抛出错误类型“List”不是类型转换中类型“String”的子类型
我该怎么办?身体:接受
您正试图给它
使用jsonecode
将列表
转换为JSON字符串
,在浏览forhttp.post()
时,您可以看到主体可以是什么类型:
body设置请求的主体。它可以是字符串、列表或映射
现在,您的代码正在将一个映射
传递到主体
,而此时它需要是映射
:
http.post(“https://one.com/myapp/php/load_data.php“,主体:{
“\u selectedItems”:\u selectedItems,
})
您可以这样做:
导入'dart:convert';
http.post(“https://one.com/myapp/php/load_data.php“,主体:{
“_selectedItems”:jsonecode(_selectedItems),
})
顺便说一句,您可以对代码进行一些改进。首先,对于逻辑流,将API调用的结果分离到setState()
通常是一种好的做法,因为这样可以更容易地预测应用程序的流。您可以阅读有关FutureBuilder
和StreamBuilder
以及BLoC
模式的更多信息
对于干净的代码,您也可以应用来自的原则。可以进行一些调整,例如使用CamelCase代替正常情况,因此extractData
代替extractData