gsy_github_app_flutter网络拦截器:Token刷新与错误处理

gsy_github_app_flutter网络拦截器:Token刷新与错误处理

【免费下载链接】gsy_github_app_flutter Flutter 超完整的开源项目,功能丰富,适合学习和日常使用。GSYGithubApp系列的优势:我们目前已经拥有Flutter、Weex、ReactNative、kotlin 四个版本。 功能齐全,项目框架内技术涉及面广,完成度高,持续维护,配套文章,适合全面学习,对比参考。跨平台的开源Github客户端App,更好的体验,更丰富的功能,旨在更好的日常管理和维护个人Github,提供更好更方便的驾车体验Σ( ̄。 ̄ノ)ノ。同款Weex版本 : https://github.com/CarGuo/GSYGithubAppWeex 、同款React Native版本 : https://github.com/CarGuo/GSYGithubApp 、原生 kotlin 版本 https://github.com/CarGuo/GSYGithubAppKotlin 【免费下载链接】gsy_github_app_flutter 项目地址: https://gitcode.com/gh_mirrors/gs/gsy_github_app_flutter

在移动应用开发中,网络请求的稳定性和安全性至关重要。gsy_github_app_flutter作为一个功能丰富的Flutter开源项目,通过拦截器机制实现了Token自动刷新和错误统一处理,确保用户在使用过程中获得流畅的体验。本文将深入解析这两个核心拦截器的实现原理,帮助开发者理解如何在实际项目中应用类似的网络请求管理方案。

Token拦截器:自动管理用户认证状态

Token拦截器是处理用户认证的关键组件,它负责在请求发送前自动添加Token、在登录成功后保存新Token,并在需要时清除Token。这种自动化管理极大减少了重复代码,提高了代码的可维护性。

Token拦截器核心实现

Token拦截器的核心代码位于lib/common/net/interceptors/token_interceptor.dart,其主要功能包括:

  1. 请求前添加Token:在每次请求发送前,拦截器会检查本地是否存储有Token。如果有,则自动添加到请求头的Authorization字段中。
  2. 响应后更新Token:当服务器返回新的Token(如登录成功时),拦截器会自动更新本地存储的Token。
  3. 清除Token:提供清除Token的方法,用于用户退出登录等场景。

下面是Token拦截器的关键代码片段:

class TokenInterceptors extends InterceptorsWrapper {
  String? _token;

  @override
  onRequest(RequestOptions options, handler) async {
    // 授权码
    if (_token == null) {
      var authorizationCode = await getAuthorization();
      if (authorizationCode != null) {
        _token = authorizationCode;
        await initClient(_token);
      }
    }
    if(_token != null) {
      options.headers["Authorization"] = _token;
    }
    return super.onRequest(options, handler);
  }

  @override
  onResponse(Response response, handler) async {
    try {
      var responseJson = response.data;
      if (response.statusCode == 201 && responseJson["token"] != null) {
        _token = 'token ${responseJson["token"]}';
        await LocalStorage.save(Config.TOKEN_KEY, _token);
      }
    } catch (e) {
      printLog(e);
    }
    return super.onResponse(response, handler);
  }

  /// 清除授权
  clearAuthorization() {
    _token = null;
    LocalStorage.remove(Config.TOKEN_KEY);
    releaseClient();
  }
}

Token存储与获取

Token的存储和获取依赖于本地存储工具lib/common/local/local_storage.dart。通过LocalStorage类,Token可以被持久化存储在设备中,即使应用被关闭后重新打开,也能快速恢复用户的登录状态。

GraphQL客户端初始化

当Token获取或更新后,拦截器会调用initClient方法初始化GraphQL客户端,确保后续的GraphQL请求能够使用最新的Token。相关代码位于lib/common/net/graphql/client.dart

错误拦截器:统一处理网络异常

错误拦截器负责在请求发送前检查网络连接状态,并在发生网络错误时返回统一的错误信息。这种机制可以避免应用因网络问题而崩溃,同时为用户提供友好的错误提示。

错误拦截器核心实现

错误拦截器的代码位于lib/common/net/interceptors/error_interceptor.dart,其主要功能是在请求发送前检查网络连接状态。如果设备没有网络连接,拦截器会立即返回一个网络错误,而不是等待服务器超时。

下面是错误拦截器的关键代码片段:

class ErrorInterceptors extends InterceptorsWrapper {
  @override
  onRequest(RequestOptions options, handler) async {
    // 没有网络
    var connectivityResult = await (Connectivity().checkConnectivity());
    if (connectivityResult.isEmpty ||
        connectivityResult[0] == ConnectivityResult.none) {
      return handler.reject(DioException(
          requestOptions: options,
          type: DioExceptionType.unknown,
          response: Response(
              requestOptions: options,
              data: ResultData(
                  Code.errorHandleFunction(Code.NETWORK_ERROR, "", false),
                  false,
                  Code.NETWORK_ERROR))));
    }
    return super.onRequest(options, handler);
  }
}

网络状态检查

错误拦截器使用connectivity_plus插件检查网络连接状态。该插件支持多种网络类型的检测,包括移动数据、WiFi等,确保应用能够准确判断设备的网络状况。

错误码处理

错误拦截器使用lib/common/net/code.dart中定义的错误码和错误处理函数,将不同类型的错误统一转换为易于理解的错误信息。这种标准化的错误处理方式,使得错误信息的展示和日志记录更加一致。

拦截器的应用场景

Token拦截器和错误拦截器在gsy_github_app_flutter中被广泛应用于各种网络请求场景,例如:

登录与授权

当用户登录成功后,Token拦截器会自动保存服务器返回的新Token,并在后续的所有请求中自动添加该Token,实现了用户的无缝授权体验。

网络异常处理

在网络不稳定或断开的情况下,错误拦截器会立即返回网络错误,避免用户长时间等待。应用可以根据返回的错误码,显示友好的错误提示,如"网络连接失败,请检查网络设置"。

多平台适配

由于gsy_github_app_flutter支持Android和iOS两个平台,拦截器的实现充分考虑了跨平台兼容性。例如,Token的存储使用了平台无关的LocalStorage,网络状态检查使用了支持跨平台的connectivity_plus插件。

拦截器的工作流程

为了更好地理解拦截器的工作原理,下面通过一个流程图展示Token拦截器和错误拦截器在一次网络请求中的工作流程:

mermaid

总结

gsy_github_app_flutter的网络拦截器机制通过Token拦截器和错误拦截器的协同工作,实现了Token的自动管理和网络错误的统一处理。这种设计不仅提高了应用的稳定性和安全性,也为开发者提供了清晰的网络请求管理方案。

通过学习这些拦截器的实现,开发者可以在自己的Flutter项目中应用类似的模式,解决网络请求中的常见问题。同时,gsy_github_app_flutter作为一个开源项目,其代码结构和实现细节对于理解Flutter应用开发具有重要的参考价值。

如果你想深入了解拦截器的更多实现细节,可以查看以下文件:

希望本文能够帮助你更好地理解Flutter网络拦截器的应用,为你的项目开发提供有益的参考。

【免费下载链接】gsy_github_app_flutter Flutter 超完整的开源项目,功能丰富,适合学习和日常使用。GSYGithubApp系列的优势:我们目前已经拥有Flutter、Weex、ReactNative、kotlin 四个版本。 功能齐全,项目框架内技术涉及面广,完成度高,持续维护,配套文章,适合全面学习,对比参考。跨平台的开源Github客户端App,更好的体验,更丰富的功能,旨在更好的日常管理和维护个人Github,提供更好更方便的驾车体验Σ( ̄。 ̄ノ)ノ。同款Weex版本 : https://github.com/CarGuo/GSYGithubAppWeex 、同款React Native版本 : https://github.com/CarGuo/GSYGithubApp 、原生 kotlin 版本 https://github.com/CarGuo/GSYGithubAppKotlin 【免费下载链接】gsy_github_app_flutter 项目地址: https://gitcode.com/gh_mirrors/gs/gsy_github_app_flutter

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值