如何解决无法使用dio设置标头
我无法使用dio设置标头。我正在尝试将访问令牌设置为标头。我正在尝试设置标头,以便不需要每个请求都调用它。这是我正在尝试的网络类用dio调用报头
我的网络班级:
class NetworkUtil {
Dio _dio;
String token;
getToken() async {
SharedPreferences preferences = await SharedPreferences.getInstance();
String getToken = preferences.getString(AppPrefernces.LOGIN_PREF);
return getToken;
}
NetworkUtil() {
///Create Dio Object using baseOptions set receiveTimeout,connectTimeout
BaseOptions options = BaseOptions(receiveTimeout: 5000,connectTimeout: 5000);
options.baseUrl = ApiConstants.BASE_URL;
_dio = Dio(options);
_dio.interceptors.add(InterceptorsWrapper(
onRequest: (Options option) async{
//my function to recovery token
await getToken().then((result) {
LoginResponse loginResponse = LoginResponse.fromJson(jsonDecode(result));
token = loginResponse.accessToken;
});
option.headers = {
"Authorization": "Bearer $token"
};
}
));
}
///used for calling Get Request
Future<Response> get(String url,Map<String,String> params) async {
Response response = await _dio.get(url,queryParameters: params,options: Options(responseType: ResponseType.json));
return response;
}
///used for calling post Request
Future<Response> post(String url,String> params) async {
Response response = await _dio.post(url,data: params,options: Options(responseType: ResponseType.json));
return response;
}
}
解决方法
我使用此设置,对我来说效果很好。
Future<Dio> createDioWithHeader() async {
if (_dioWithHeader != null) return _dioWithHeader;
String token = await appSharedPreferences.getToken();
String userAgent = await getUserAgent();
print('User-Agent: $userAgent');
// base config
_dioWithHeader = Dio(BaseOptions(
connectTimeout: 10000,receiveTimeout: 10000,baseUrl: Config.apiBaseUrl,contentType: 'application/json',headers: {
'Authorization': token,'User-Agent': userAgent
}));
// setup interceptors
return addInterceptors(_dioWithHeader);
}```
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。