[英]How can i call the Future<string> rest api in flutter?
如何調用Future API? 這是我的 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');
}
}
}
並且正在使用下面的容器來調用 API。 基於 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),
),
),
],
),
);
我試過上面的代碼。 它顯示參數類型 'Future' 不能分配給參數類型 '() → void
這應該做你想做的:
onPressed: () => apiClient.getPasswordToken("",""),
或者
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
}
你所在的那條線
onPressed: apiClient.getPasswordToken("",""),
您正在傳遞一個 Future (這是 getPasswordToken 的返回值到onPressed
,它需要一個函數。
你應該做
onPressed: () => apiClient.getPasswordToken("",""),
或者
onPressed: () {
apiClient.getPasswordToken("","");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.