In a Dart UI, I have a button [submit] to launch a long async request. The [submit] handler returns a Future. Next, the button [submit] is replaced by a button [cancel] to a
my 2 cents worth...
class CancelableFuture { bool cancelled = false; CancelableFuture(Duration duration, void Function() callback) { Future.delayed(duration, () { if (!cancelled) { callback(); } }); } void cancel() { cancelled = true; } }