[英]How can i call the Future<string> rest api in flutter?
How can I call the Future API?如何调用Future API? This is my API code
这是我的 API 代码
class ApiClient{
Future<String> getPasswordToken(String username, String password) async {
var response =
await http.post(Uri.parse(this.apiBaseUrl + "/auth/token"), headers: {
"Accept": "application/json"
}, body: {
"username": username,
"password": password
});
if (response.statusCode == 200) {
var token = OAuthToken.fromJson(json.jsonDecode(response.body));
return token.accessToken;
} else {
throw Exception('Failed to fetch access token');
}
}
}
And am using the below container to call the API.并且正在使用下面的容器来调用 API。 Based on the API response need to navigate another screen I have struck the calling API in onPressed
基于 API 响应需要导航另一个屏幕,我在onPressed中点击了调用 API
var apiClient = new ApiClient();
Container(
margin: const EdgeInsets.only(top: 20.0),
padding: const EdgeInsets.only(left: 20.0, right: 20.0),
child: new Row(
children: <Widget>[
new Expanded(
child: FlatButton(
shape: new RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(28.0)),
splashColor: this.primaryColor,
color: this.primaryColor,
child: new Row(
children: <Widget>[
new Padding(
padding: const EdgeInsets.only(left: 20.0),
child: Text(
"LOGIN",
style: TextStyle(color: Colors.white),
),
),
new Expanded(
child: Container(),
),
new Transform.translate(
offset: Offset(15.0, 0.0),
child: new Container(
padding: const EdgeInsets.all(5.0),
child: FlatButton(
shape: new RoundedRectangleBorder(
borderRadius: new BorderRadius.circular(28.0)),
splashColor: Colors.white,
color: Colors.white,
child: Icon(
Icons.arrow_forward,
color: this.primaryColor,
),
onPressed: apiClient.getPasswordToken("",""),
/* child:new FutureBuilder(future: apiClient.getClientToken(),
builder: (BuildContext context, AsyncSnapshot response) {
response.hasData==false? new SignIn(): new Scaffold(
appBar: new AppBar(title: new Text("Future Builder"),),
body: new Center(
child: new Text("Build your widgets"),
),
);
}
);*/
),
),
)
],
),
onPressed: () => {},
//onPressed: apiClient.getPasswordToken(emailInputField.key,emailInputField.key),
),
),
],
),
);
I tried the above code.我试过上面的代码。 it showing The argument type 'Future' can't be assigned to the parameter type '() → void
它显示参数类型 'Future' 不能分配给参数类型 '() → void
This should do what you want:这应该做你想做的:
onPressed: () => apiClient.getPasswordToken("",""),
or或者
onPressed: () async {
var result = await apiClient.getPasswordToken("","");
print(result);
setState(() => this.foo = result); // you can omit `this.` it's just for demonstration purposes that this line would modify the widgets state
}
The line where you have你所在的那条线
onPressed: apiClient.getPasswordToken("",""),
You're passing a Future (which is the return value of getPasswordToken to onPressed
, which expects a function.您正在传递一个 Future (这是 getPasswordToken 的返回值到
onPressed
,它需要一个函数。
You should instead be doing你应该做
onPressed: () => apiClient.getPasswordToken("",""),
or或者
onPressed: () {
apiClient.getPasswordToken("","");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.