首页 > 解决方案 > DioError 显示数据时出现 Http 状态错误 [401]

问题描述

我正在尝试将 API 中的数据显示到屏幕上,但由于 401 错误,我无法执行此操作,请查看我的代码并告诉我到底出了什么问题,我认为我编写的 API 不正确。目前我正在尝试自己查找信息,但我认为问题出在 API 中,如果是这样,究竟是什么问题?

代码 :

接口:

    class ApiService {
     Dio dio = new Dio();

     var token ="token";
      var refresh_token ="token";
   

     Future getUserCards() async {
       try {
         Response resp;

        var get_cards = "https://example/api/cards";
         resp = await dio.get(get_cards);
         dio.options.headers["Authorization"] = "Bearer ${token}";
         dio.options.headers['Content-Type'] = "application/json";
         var json = (resp.data);
         var value = json["id"]["row"]["seq_num"]["text"];
         return value;
    } catch (e) {
      print(e);
    }
  

     Future loginUser(String username, String password) async {
       var storage = new FlutterSecureStorage();
       await storage.write(key: 'JWT', value: token);

       var login = "https://example/users/login/";

    final data = {"username": username, "password": password};

    Response response;
    response = await dio.post(login, data: data);

    dio.options.headers["Authorization"] = "Bearer ${token}";
    dio.options.headers['Content-Type'] = "application/json";

    if (response.statusCode == 200) {
      Get.to(CardScreen());
      return response.data;
    } else if (response.statusCode == 401) {
      var refreshToken = await dio.post(
          "https://example.api/cards/refresh/");

      response = await dio.post(refresh_token, data: data);

      dio.options.headers["Authorization"] =
          "Bearer ${token},'Content-Type': 'application/json','refresh_token': '$refresh_token'";

      storage = response.data["token"];
      refresh_token = response.data["refresh_token"];

      return loginUser("username", "password");
    } else
      return null;
  }
}

用户界面:

children: [
           Expanded(
               child: FutureBuilder<dynamic>(
             future: ApiService().getUserCards(),
             builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
               if (!snapshot.hasData) {
                 return Center(
                   child: CircularProgressIndicator(),
                 );
               } else {
                 return ListView.builder(
                     itemCount: snapshot.data.length,
                     itemBuilder: (context, index) {
                       return Card(
                         child: Text(snapshot.data[index]),
                       );
                     });
               }
             },
           )

标签: flutterapi

解决方案


推荐阅读