我正在使用 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 ,如下所示:
最后一步,您只需要像这样添加到 dio 拦截器中:
dio.interceptors.add(TokenInterceptor());
关于flutter - 如何在flutter中更新get it实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73134348/