Search code examples
flutterdartdio

How to avoid freezing the UI on heavy computation


Trying to decrypt JSON from server with Interceptor (from dio). But UI freezes during decryption.

class DecryptInterceptor extends Interceptor {

  @override
  Future onResponse(Response response) async {
    response.data = decrypt(response.data); //freezes here
    return super.onResponse(response);
  }

}

Object decrypt(Object object){
  // computations
}


Solution

  • You can use compute property that flutter provides to perform tasks in another isolate. It exists exactly for such tasks.

    class DecryptInterceptor extends Interceptor {
      @override
      Future onResponse(Response response) async {
        response.data =await compute(decrypt,response.data); //freezes here
        return super.onResponse(response);
      }
    }
      Object decrypt(Object object){
        return result;
      }
    

    It has some restrictions though for the type of data you can pass in argument and retrieve as result. You can learn more here.