Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to cancel cubit old function call?

I am trying to use cubit in my flutter project but i am facing this problem i am trying to call a function its function with future return type so its need time to be done but at the same time i got a notify so i need to call another function in side this cubit but i want to cancel the previous function first how can i do this thanks for your help .

class ConnectionCheckerCubit extends Cubit<ConnectionCheckerState> {
  ConnectionCheckerCubit() : super(ConnectionCheckerInitial());

  void whenConnectedFunction() {
    print('test1');
  }

  void whenDisconnectedFunction() async {
    print('test2');
    await Future.delayed(Duration(seconds: 10));
    print('test3');
  }
}

i call the second function whenDisconnectedFunction its print test2 then i call the upper function whenConnectedFunction before the 10 seconds end its print test1 but its also test3 is printed how can i fix this problem . thx .

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

You can’t cancel a function once it’s called, but what you can do is put a checker once a future is complete to check if the function needs to proceed forward or not.

I have written an example code to help you understand this better, you can paste this is dartpad to try for yourself.

void main() async {
  
  print("Testing without cancel");
  final cubitWithoutCancel = ConnectionCheckerCubit();
  cubitWithoutCancel.whenDisconnectedFunction();
  cubitWithoutCancel.whenConnectedFunctionWithoutCancel();
  
  await Future.delayed(const Duration(seconds: 11));
  
  print("Testing with cancel");
  final cubit = ConnectionCheckerCubit();
  cubit.whenDisconnectedFunction();
  cubit.whenConnectedFunction();
}


class ConnectionCheckerCubit {
  ConnectionCheckerCubit();
  
  bool _cancelFunctionIfRunning = false;

  void whenConnectedFunction() {
    _cancelFunctionIfRunning = true;
    print('test1');
  }
  
  void whenConnectedFunctionWithoutCancel(){
    print('test1');
  }

  void whenDisconnectedFunction() async {
    print('test2');
    await Future.delayed(Duration(seconds: 10));
    if(_cancelFunctionIfRunning) return;
    print('test3');
  }
}

The output of the above code is as follows:

Testing without cancel
test2
test1
test3
Testing with cancel
test2
test1

This is a rather simple implementation to help you understand the concept of how to quit a function midway based on an external factor, you can create a function to do this task for you instead of manually changing a boolean.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading