如何在flutter中更新get it示例?

w6lpcovy  于 2023-01-27  发布在  Flutter
关注(0)|答案(3)|浏览(140)

我使用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 logger看到日志时,它仍然在“Authorisation”字段中显示空字符串。
如何更新我的示例,以便可以更改API请求的令牌值?

am46iovg

am46iovg1#

你必须用registerFactory注册你的dio才能得到它。在你的例子中,你是作为单例注册的,这就是为什么它会给你相同的示例

czfnxgou

czfnxgou2#

首先,你应该创建一个拦截器,它调用TokenInterceptor并覆盖onRequest方法。在onRequest方法中,你可以修改你的头如下:
https://i.stack.imgur.com/T6PFR.png
最后一步,你只添加到你的dio拦截器这样:

dio.interceptors.add(TokenInterceptor());
fnvucqvd

fnvucqvd3#

final getIt = GetIt.instance;
void setupSingleton(){
getIt.allowReassignment=true;
}
//this should call first and then it will work

相关问题