pushCancellableRoute<T extends Object?> method
推入一个可撤销的route
Implementation
Future<T?> pushCancellableRoute<T extends Object?>(
Route<T> route, Cancellable? cancellable) {
if (cancellable == null) return push<T>(route);
if (cancellable.isUnavailable == true) {
return Future.value(null);
}
final Cancellable showing = Cancellable();
// showing.bindCancellable(cancellable);
cancellable.onCancel.then((_) {
if (showing.isAvailable) {
scheduleMicrotask(() {
if (showing.isAvailable && route.isActive) {
showing.cancel();
route.navigator?.removeRoute(route);
}
});
}
});
showing.onCancel.then(cancellable.cancel);
return push<T>(route).whenComplete(() => showing.cancel());
}