Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 类型';列表<;字符串>';不是类型为';字符串';http post列表数组时的类型转换_Flutter_Dart - Fatal编程技术网

Flutter 类型';列表<;字符串>';不是类型为';字符串';http post列表数组时的类型转换

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:

我在列表中有一个selectedItems:

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字符串
,在浏览for
http.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