Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to pass access token in header using dio in flutter

After i logged in successfully i got access token, and i'm passing that accestoken using SharedPerference to another screen, i am getting values too in my header and data, but it gives me this error

Error: type 'String' is not a subtype of type 'int' of 'index'

here is my code

var localhostUrlTimeIn="http://10.0.2.2:8000/TimeIn";
  timeIn() async {

    Dio dio=new Dio();
    //dio.options.headers['content-Type'] = 'application/json';
    dio.options.headers["authorization"]="token ${getaccesstoken}";
    var data={
      'username': getname,

    };
    await dio
    .post(localhostUrlTimeIn,data: json.encode(data),
    )
      .then((onResponse)  async {
        print(onResponse.data['message']);
      
      }).catchError((onerror){
        print(onerror.toString());
        //showAlertDialog(context);
    });

    
  }

i am calling this method on button click. please help if anyone know how to fix it.

like image 577
TimeToCode Avatar asked Oct 28 '25 01:10

TimeToCode


2 Answers

You can use app AppInterceptors

final _dio = Dio();
_dio.options.baseUrl = ApiPath.base_Url;
_dio.options.receiveTimeout = 3000;
_dio.interceptors.add(AppInterceptors());

class AppInterceptors extends InterceptorsWrapper {
  GlobalKey<NavigatorState> navigator;
  @override
  Future onRequest(
      RequestOptions options, RequestInterceptorHandler handler) async {
    print(options.baseUrl + options.path);
    AuthService auth = new AuthService();
    var accessToken = await auth.getToken();
    if (accessToken == null) {
      log('trying to send request without token exist!');
      return super.onRequest(options, handler);
    }
    options.headers["Authorization"] = "Bearer " + accessToken.toString();
    return super.onRequest(options, handler);
  }

  @override
  onResponse(Response response, ResponseInterceptorHandler handler) {
    return super.onResponse(response, handler);
  }

  @override
  onError(DioError err, ErrorInterceptorHandler handler) {
    // var url = err.request.uri;
    print("************************************************");
    print(err);

    super.onError(err, handler);
    if (err.response.statusCode == 401) {
      AuthService authservice = new AuthService();
      authservice.logout();
      locator<NavigationService>().navigateTo(Routes.root);
    }
  }
}
like image 85
Hasan Rihawi Avatar answered Oct 30 '25 16:10

Hasan Rihawi


Make an object of Dio also give a base URL

final Dio dio = Dio(BaseOptions(baseUrl: baseUrl,));

Then call get function, pass existing url and pass token through headers like this

final Response response = await dio.get(url, options: Options(headers:{"Authorization":"Bearer $token"},));
like image 20
Amarchand K Avatar answered Oct 30 '25 17:10

Amarchand K