邮递员上的授权类型承载令牌和来自API的请求数据,该API需要具有颤振的令牌承载

邮递员上的授权类型承载令牌和来自API的请求数据,该API需要具有颤振的令牌承载,api,flutter,dart,postman,bearer-token,Api,Flutter,Dart,Postman,Bearer Token,我试图从我的API请求数据并获取数据,它需要一个可以通过登录获得的承载令牌。作为一个前端,我创建了一个函数来保存和请求UI到API。我正在为UI使用颤振框架 我已经设法创建了一个函数来存储在登录时生成的承载令牌,这将保持用户登录。它的工作原理是将不记名令牌保存在sharedpref中 login() async { final response = await http.post( "https://api.batulimee.com//v1_ship/login_app"

我试图从我的API请求数据并获取数据,它需要一个可以通过登录获得的承载令牌。作为一个前端,我创建了一个函数来保存和请求UI到API。我正在为UI使用颤振框架

我已经设法创建了一个函数来存储在登录时生成的承载令牌,这将保持用户登录。它的工作原理是将不记名令牌保存在sharedpref中

login() async {
final response = await http.post(
  "https://api.batulimee.com//v1_ship/login_app",
  body: {"email": email, "password": password},
);  
final data = jsonDecode(response.body);
String status = data['status'];
String pesan = data['message'];
String apikey = data['data']['apikey'];
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('apikey', apikey);

if (status == "success") {
  Navigator.of(context).pushReplacement(PageRouteBuilder(
      pageBuilder: (_, __, ___) => new bottomNavBar(),
      transitionDuration: Duration(milliseconds: 600),
      transitionsBuilder:
          (_, Animation<double> animation, __, Widget child) {
        return Opacity(
          opacity: animation.value,
          child: child,
        );
      }));
  print(pesan);
  print(apikey);
} else {
  print(pesan);
}
}
现在我想创建一个可以获取用户配置文件数据的函数,在哪里获取这些数据需要我从登录中获得的承载令牌。我需要这个,以便用户可以编辑他们的名字,密码,或在用户的配置文件中的其他数据,并保存它

我的后端已创建API获取我的配置文件。我在前面解释过,要获得它,需要一个令牌承载器,它与我们先前从登录中获得的令牌承载器相同。现在,我的工作是使用颤振中的函数获取我的_剖面数据

下面是API获取我的_配置文件的响应

{
"status": "success",
"data": {
"id_user": 49,
"id_role": "8",
"name_role": "Ship Owner",
"first_name": "a",
"last_name": "f",
"email": "afriansyahm86@gmail.com",
"phone": "082258785595",
"saldo": "0",
"company_name": "aa",
"company_address": "jl kav pgri",
"photo": "https://batulimee.com/foto_user/avatar.png"
},
"message": "get profile detail successfully "
}

如何将承载令牌存储到授权中,以便获取我的_配置文件数据?请帮帮我(

创建api类:

import 'package:http/io_client.dart';
class Api {

  String _token;

 final Client http =IOClient(HttpClient()
    ..badCertificateCallback = _certificateCheck
    ..connectionTimeout = const Duration(seconds: kConnectionTimeoutSeconds));
static bool _certificateCheck(X509Certificate cert, String host, int port) =>
  host.endsWith('EXAMPLE.com'); // Enter your url for api here
  String GetToken() {
    return _token;
  }
Future<bool> setToken(String token) async {
    _token = token;
    return Future.value(true);
  }
Map<String, String> get headers => {
        "Content-Type": "application/json",
        "Accept": "application/json",
        "Authorization": "Bearer $_token",
      };
import'包:http/io_client.dart';
类Api{
字符串标记;
最终客户端http=IOClient(HttpClient())
..badCertificateCallback=\u certificateCheck
..connectionTimeout=常数持续时间(秒:kConnectionTimeoutSeconds));
静态bool_certificateCheck(X509Certificate cert,字符串主机,int端口)=>
host.endsWith('EXAMPLE.com');//在此处输入api的url
字符串GetToken(){
返回令牌;
}
未来setToken(字符串令牌)异步{
_令牌=令牌;
返回未来值(true);
}
映射获取标题=>{
“内容类型”:“应用程序/json”,
“接受”:“应用程序/json”,
“授权”:“持票人$\u代币”,
};
}

在登录中使用setToken:

等待api.setToken(apikey)

对于您的配置文件或api类中的任何请求,下一步:

Future<ProfileResponse> getProfile() async {
    var url = "$urlPrefix/api/v1/profile";

    var response = await http.get(url, headers: headers);

    if (response.statusCode != 200) {
      print(
          "$response");
      var parsed = json.decode(response.body);
      var message = parsed["message"];
      if (message != null) {
        throw message;
      }

      throw Exception(
          "Request to $url failed with status ${response.statusCode}: ${response.body}");
    }
    // return the response you want 
    return json.decode(response.body);
  }
Future getProfile()异步{
var url=“$urlPrefix/api/v1/profile”;
var response=wait http.get(url,headers:headers);
如果(response.statusCode!=200){
印刷品(
“$response”);
var parsed=json.decode(response.body);
var message=parsed[“message”];
如果(消息!=null){
抛出消息;
}
抛出异常(
“对$url的请求失败,状态为${response.statusCode}:${response.body}”);
}
//返回您想要的响应
返回json.decode(response.body);
}

final Client http=statInterceptor(IOClient(HttpClient()…badCertificateCallback=\u certificateCheck..connectionTimeout=const Duration(秒:kConnectionTimeoutSeconds));String GetToken(){return\u token;}什么是StatintInterceptor?您可以删除StateTInterceptor,如果失败,我在代码中有它可以重试。但是您可以简单地使用:Client http=http.Client();aahh我明白了,谢谢。很抱歉,您可以解释一下setToken:await _api.setToken(apike);?在登录类下面添加这一行:
print(apike);
您必须在此处导入api类,并将其作为最终登录类添加,然后才能使用它
Future<ProfileResponse> getProfile() async {
    var url = "$urlPrefix/api/v1/profile";

    var response = await http.get(url, headers: headers);

    if (response.statusCode != 200) {
      print(
          "$response");
      var parsed = json.decode(response.body);
      var message = parsed["message"];
      if (message != null) {
        throw message;
      }

      throw Exception(
          "Request to $url failed with status ${response.statusCode}: ${response.body}");
    }
    // return the response you want 
    return json.decode(response.body);
  }