flutter - 如何在flutter中更新get it实例?

标签 flutter dart instance

我正在使用 getIt 包在我的应用程序中创建实例。

instance.registerLazySingleton<DioFactory>(() => DioFactory(instance()));

  // app  service client
  final dio = await instance<DioFactory>().getDio();
  instance.registerLazySingleton<AppServiceClient>(() => AppServiceClient(dio));

以上代码用于初始化实例。 getDio() 函数:

Future<Dio> getDio() async {
    Dio dio = Dio();
    int _timeOut = 60 * 1000; // 1 min
    String language = await _appPreferences.getAppLanguage();
    Map<String, String> headers = {
      CONTENT_TYPE: APPLICATION_JSON,
      ACCEPT: APPLICATION_JSON,
      AUTHORIZATION: Constants.token,
      DEFAULT_LANGUAGE: language
    };

    dio.options = BaseOptions(
        baseUrl: Constants.baseUrl,
        connectTimeout: _timeOut,
        receiveTimeout: _timeOut,
        headers: headers);

    if (kReleaseMode) {
    } else {
      dio.interceptors.add(PrettyDioLogger(
          requestHeader: true, requestBody: true, responseHeader: true));
    }

    return dio;
  }

当我第一次构建应用程序时,Constants.token 具有空白值。 但在应用程序中间我希望向其中添加一个值。我可以更改该值,但是当我看到来自 dio 记录器的日志时,它仍然在“授权”字段中显示空字符串。

如何更新我的实例以便可以更改 API 请求的 token 值?

最佳答案

首先,您应该创建一个拦截器,通过重写 onRequest 方法来调用 TokenInterceptor。在 onRequest 方法中,您可以修改 header ,如下所示:

/image/T6PFR.png

最后一步,您只需要像这样添加到 dio 拦截器中:

dio.interceptors.add(TokenInterceptor());

关于flutter - 如何在flutter中更新get it实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73134348/

相关文章:

Xcode 不会与 FLUTTER_BUILD_NAME 一起使用

Dart polymer : unable to get input from array

function - Perl - 调用类的实例

flutter - WidgetsBindingObserver 是否适用于无状态小部件?

flutter - Flutter中各种小部件的滚动问题

c# - 如何将方法扩展到一个类而不是它的实例

c++ - 非静态函数 C++ 还剩下什么?

flutter - 如何为给定类型的Flutter小部件强制某些参数值?

dart - 我是否有义务使用 Stateful Widgets 来配置 Flutter 中的流 Controller ?

flutter - 如何从 flutter 中的时间戳值中仅获取日期和时间值