Releases: JonathanPeterCole/dart-cancellation-token
Releases · JonathanPeterCole/dart-cancellation-token
v2.0.1
v2.0.0
This release aims to make it easier to implement custom Cancellables and provide more useful information for debugging.
- Added a 
.cancelWithReason()method toCancellationTokenfor a convenient way to set provide a cancellation reason for debugging. CancelledExceptionnow overrides.toString()to give a more useful message for debugging, including the cancellation reason.- Cancellation stack traces now show the call stack leading up to the operation that was cancelled, rather than the call stack leading up to the token's cancellation. This should make it easier to identify the origin of uncaught cancellation exceptions.
 - Added a 
.detach()method to theCancellablemixin. When paired with.maybeAttach(), this will detach your cancellable from the token. - Fixed a bug where the 
ignoreCancellation()wouldn't callwhenCompleteifonErrorthrew an exception. - Fixed a bug where 
asCancellable()could result in uncaught exceptions. 
Breaking changes
These changes are isolated to projects using custom cancellables or cancellation tokens. Other projects are unaffected.
- The 
CancellationToken.attach()and.detach()methods have been renamed to.attachCancellable()and.detachCancellable(). - The 
CancellationToken.exceptiongetter now returns null if the token hasn't been cancelled yet. - The 
CancellationToken.cancel()method'sexceptionparameter is now nullable, rather than using a default value. - Removed the 
[StackTrace? stackTrace]parameter from theCancellablemixin'sonCancelmethod. Instead, use the newcancellationStackTrace, which returns the stack trace at the time the cancellable was created. - Overridden 
Cancellablemixin methods must now call super. 
To migrate your custom cancellation tokens:
- If you're overriding the 
.attach()and.detach()methods, rename them to.attachCancellable()and.detachCancellable(). - If you're overriding 
.exception, update it to be nullable and only return an exception if the token's been cancelled. - If you're overriding 
.cancel(), update it to make theexceptionparameter nullable. If you were previously setting a default value, consider setting this within the method instead:@override void cancel([Exception? exception]) { exception ??= YourCustomDefaultException(); super.cancel(exception); }
 
To migrate your custom cancellables:
- Replace calls to 
cancellationToken.attach(this)withmaybeAttach(cancellationToken). - Replace calls to 
cancellationToken.detach(this)withdetach(). - Update 
onCancel()overrides to callsuper.onCancel()and remove thestackTraceparameter. To get the stack trace, usecancellationStackTraceinstead:// Old @override void onCancel(Exception cancelException, [StackTrace? stackTrace]) { _internalCompleter.completeError( cancelException, stackTrace ?? StackTrace.current, ); } // New @override void onCancel(Exception cancelException) { super.onCancel(cancelException); _internalCompleter.completeError(cancelException, cancellationStackTrace); }
 
v1.6.1
- Include Dart SDK license in license file.
 
v1.6.0
- Added 
CancellableIsolate.run(), based on the newIsolate.run()method in Dart 2.19.0. - Updated 
cancellableComputeto useCancellableIsolate.run()internally. - Increased minimum Dart SDK to 2.19.0.
 
v1.5.0
- Added 
MergedCancellationTokento combine multiple cancellation tokens into one. - Added 
cancellableFutureOr()to simplify cancellation when working withFutureOrtypes. - Added 
onError,whenComplete, andwhenCompleteOrCancelledparams toignoreCancellation(). This change doesn't impact existing usage. 
v1.4.0
- Added new static functions to 
CancellableFutureto make the API more similar to Dart'sFuture:Future()➡️CancellableFuture.from()Future.microtask()➡️CancellableFuture.microtask()Future.sync()➡️CancellableFuture.sync()Future.value()➡️CancellableFuture.value()Future.delayed()➡️CancellableFuture.delayed()
 - Breaking: The 
CancellableFutureconstructor is now private. Calls to this constuctor should be replaced with.asCancellable()orCancellableFuture.value():// Removed: // await CancellableFuture(exampleFuture, cancellationToken).future; // Recommended: await exampleFuture.asCancellable(cancellationToken);
 - Updated 
cancellableComputewith the latest changes from the Flutter SDK'scomputefunction (see flutter/flutter#99527). 
v1.3.4
- Rename the 
onCancelmethod'straceparameter tostackTrace. - Add Cancellation Token HTTP example to README.
 
v.1.3.3
- Fix CancellableCompute web implementation.
 
v1.3.2
- Added 
hasCancellablesto CancellationToken. 
v1.3.1
- Bugfix: Fix exception if a Cancellable calls 
cancellationToken.detach(this)in itsonCancelmethod.