Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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
颤振后API调用_Api_Rest_Flutter_Post - Fatal编程技术网

颤振后API调用

颤振后API调用,api,rest,flutter,post,Api,Rest,Flutter,Post,我正在从事颤振项目,在这个项目中我调用了一个PostAPI。它的反应是 { "_id": "5f61a39b8b7cf93550898b63", "buildname": "ANT PC DORYLUS RZ320G", "processor": "AMD Ryzen 3 3200G (4Core, 4Threads, Upto 4.0 Ghz)",

我正在从事颤振项目,在这个项目中我调用了一个PostAPI。它的反应是

{
    "_id": "5f61a39b8b7cf93550898b63",
    "buildname": "ANT PC DORYLUS RZ320G",
    "processor": "AMD Ryzen 3 3200G (4Core, 4Threads, Upto 4.0 Ghz)",
    "motherboard": "MSI B450M PRO m2 Max",
    "ram": "8GB ADATA XPG Gammix D30 DDR4 3000MHz",
    "graphiccard": "Radeon Vega Graphics",
    "ssd": "120GB ADATA/Crucial SATA SSD",
    "hdd": "1 TB WD Blue SATA HDD 7200 RPM",
    "psu": "Antec VP450P IN",
    "cpucooler": "AMD STOCK COOLER",
    "os": "30 Days Microsoft Windows 10 Home 64-Bit Trial",
    "cpucase": "Antec NX200",
    "price": "28437.00",
    "createdAt": "2020-09-16T05:33:15.383Z",
    "__v": 0
}
我编写了以下代码,但它向我显示了一个错误类型
“\u InternalLinkedHashMap”不是“PreBuildResponse”类型的子类型

代码:

Future\u fetchProduct()异步{
最终url=http://10.0.2.2:3000/prebuild/product';
最终响应=等待http.post(
网址,
正文:{
“id”:“$productId”
}
);
如果(response.statusCode==200){
List jsonResponse=json.decode(response.body);
返回jsonResponse
.map((列表)=>new PreBuildResponse.fromJson(列表))
.toList();
}否则{
抛出异常(“未能从API加载数据”);
}
}
@凌驾
小部件构建(构建上下文){
返回容器(
颜色:颜色,白色,
子:SingleChildScrollView(
孩子:未来建设者(
未来:_fetchProduct(),
生成器:(上下文,快照){
if(snapshot.hasData){
PreBuildResponse data=snapshot.data;
返回文本(data.buildname);
}else if(snapshot.hasrerror){
返回文本(“${snapshot.error}”);
}
返回循环ProgressIndicator();
},
),
)
);
}
}

在这里找到模型代码

您必须将JSON响应转换为模型类。 在模型类中应该有一个
fromJson
方法,在将JSON转换为模型类时可以在这里使用该方法。 我这里有一本
模型课,你可以参考

Future<List<Book>> getAllBook() async {
    http.Response response = await http.get(
      EndPoint.Book,
    );
    if (response.statusCode == 200) {
      var parsed = jsonDecode(response.body);
      var bookData = parsed['books'];
      List<Book> data = bookData.map<Book>((e) => Book.fromJson(e)).toList();
      print(data);
      return data;
    }
  }
Future getAllBook()异步{
http.Response-Response=等待http.get(
终结点。书,
);
如果(response.statusCode==200){
var parsed=jsonDecode(response.body);
var bookData=parsed['books'];
List data=bookData.map((e)=>Book.fromJson(e)).toList();
打印(数据);
返回数据;
}
}
Future\u fetchProduct()异步{
最终url=http://10.0.2.2:3000/prebuild/product';
最终响应=等待http.post(
网址,
正文:{
“id”:“$productId”
}
);
如果(response.statusCode==200){
返回PreBuildResponse.fromJson(json.decode(response.body));
}否则{
抛出异常(“未能从API加载数据”);
}
}

正如我所看到的,您只是在JSON解码后返回数据。没有我可以看到映射到PreBuildResponse的地方。您正在尝试分配给不兼容的数据类型。Hashmap到PreBuildResponse类型..我的get方法正在工作,但在post方法中显示错误。和POST方法在postman中给出响应。使用fromJson方法将JSON转换为模型类,如示例所示。此处不需要list.map,因为您的响应不是列表类型,而是映射类型。因此,请尝试
return PreBuildResponse.fromJson(response.body))
谢谢阿披舍克,但这段代码有效
PreBuildResponse.fromJson(json.decode(response.body))
如果这个答案对你有用,请接受我的答案@VaibhavA。Thanksit将在调用API时出现错误并返回字符串时导致错误。因此,返回类型应为Future或返回空对象,当出现错误时OK将更改它。
Future<List<Book>> getAllBook() async {
    http.Response response = await http.get(
      EndPoint.Book,
    );
    if (response.statusCode == 200) {
      var parsed = jsonDecode(response.body);
      var bookData = parsed['books'];
      List<Book> data = bookData.map<Book>((e) => Book.fromJson(e)).toList();
      print(data);
      return data;
    }
  }
Future<PreBuildResponse> _fetchProduct() async {
    final url = 'http://10.0.2.2:3000/prebuild/product';
    final response = await http.post(
        url,
        body: {
          'id' : "$productId"
        }
    );
    if (response.statusCode == 200) {
      return PreBuildResponse.fromJson(json.decode(response.body));
    } else {
      throw Exception('Failed to load data from API');
    }
  }