Flutter 如何在flatter中调用API?

Flutter 如何在flatter中调用API?,flutter,Flutter,在我的flatter应用程序中,我想调用两个API。例如API A和API B。 如果API A加载数据,则调用API B并在listView中显示API B数据。 如何将API A数据作为参数传递给API B API A成功加载数据并在下拉列表中显示后,调用API B。 这是我的代码: Widget build(BuildContext context) { body: new SafeArea( child: new Form(

在我的flatter应用程序中,我想调用两个API。例如API A和API B。 如果API A加载数据,则调用API B并在listView中显示API B数据。 如何将API A数据作为参数传递给API B

API A成功加载数据并在下拉列表中显示后,调用API B。 这是我的代码:

Widget build(BuildContext context) {

      body: new SafeArea(

          child: new Form(

              child: new ListView(

                children: <Widget>[
               FutureBuilder('API A data'),
               Container(
              FutureBuilder('API B data'),
              )]))
小部件构建(构建上下文){
正文:新安全区(
儿童:新表格(
子:新列表视图(
儿童:[
FutureBuilder(“API A数据”),
容器(
FutureBuilder(“API B数据”),
)]))

您可以使用http包调用Api,并且可以链接调用以使用第二个调用中第一个调用的结果,如下所示:

void callApis(){
  http.get("https://jsonplaceholder.typicode.com/todos").then((result){
    int itemId = json.decode(result.body)[2]['id'];

    http.get("https://jsonplaceholder.typicode.com/todos/$itemId").then((result){
      print(result.body);
    });
  });
}
确保导入了类顶部的
http
包:

import 'package:http/http.dart' as http;

您可以使用http包调用Api,并且可以链接调用以使用第二个调用中第一个调用的结果,如下所示:

void callApis(){
  http.get("https://jsonplaceholder.typicode.com/todos").then((result){
    int itemId = json.decode(result.body)[2]['id'];

    http.get("https://jsonplaceholder.typicode.com/todos/$itemId").then((result){
      print(result.body);
    });
  });
}
确保导入了类顶部的
http
包:

import 'package:http/http.dart' as http;

您可能希望创建控制器(只是一个包含重要函数/业务逻辑的类,主要用于数据操作),以便更易于维护

类登录控制器{
静态未来登录(
{@required String email,@required String password})异步{
变量参数={
“电子邮件”:电子邮件,
“密码”:密码,
};
var response=wait http.post(ApiRoute.LOGIN,
body:json.encode(params));
///如果第一个API调用成功
if(response.statusCode==HttpStatus.ok){
var secondResponse=SecondController.anothrFunction();
///在这里执行与第二个api调用的响应相关的操作
}
///在这里做其他事情
返回响应;
}
}
第二类控制器{
静态未来函数(
{@required String something})异步{
变量参数={
“某物”:某物,
};
var response=wait http.post(ApiRoute.SOMETHING,
body:json.encode(params));
返回响应;
}
}

然后您可以只调用
LoginController.login
,这将调用这两个API。

您可能希望创建控制器(只是一个包含重要函数/业务逻辑的类,主要用于操作数据),以便更容易维护

类登录控制器{
静态未来登录(
{@required String email,@required String password})异步{
变量参数={
“电子邮件”:电子邮件,
“密码”:密码,
};
var response=wait http.post(ApiRoute.LOGIN,
body:json.encode(params));
///如果第一个API调用成功
if(response.statusCode==HttpStatus.ok){
var secondResponse=SecondController.anothrFunction();
///在这里执行与第二个api调用的响应相关的操作
}
///在这里做其他事情
返回响应;
}
}
第二类控制器{
静态未来函数(
{@required String something})异步{
变量参数={
“某物”:某物,
};
var response=wait http.post(ApiRoute.SOMETHING,
body:json.encode(params));
返回响应;
}
}

然后您可以调用
LoginController.login
,这将调用两个api。

到目前为止您做了什么?我在Widget build()中调用了两个api方法使用future Builder请向我们展示您所做的工作。没有人可以帮助您了解这么多信息。我们需要查看代码。您尝试过答案吗?到目前为止您做了什么?我在Widget build()中调用了两个api方法使用future Builder请向我们展示您所做的工作。没有人能帮您提供这么多信息。我们需要查看代码。您尝试过答案吗?我获取api数据,但如何调用第一个api A,在api成功加载数据后,再按我在响应中显示的方式调用api B。我们使用的是
。then()
它只会在您从第一次调用获得响应后运行。我获取api数据,但如何在api成功加载数据后调用第一个api A,然后按照我在响应中显示的方式调用api B。我们使用的是
.then()
,它只会在您从第一次调用获得响应后运行。