刚开始我是这么写的,本意是想等这个操作完成之后 再继续后续的操作。但是发现后续的操作一直不执行,也没有报错。
js
await Navigator.of(globalKey.currentState!.context).pushAndRemoveUntil
这是pushAndRemoveUntil的源码,可以看到返回的是newRoute.popped,看字面意思就是等待的是我们push的新route的pop操作。所以也能理解上面的await一直没有返回,一直没有往后继续执行的原因。
js
@optionalTypeArgs
Future<T?> pushAndRemoveUntil<T extends Object?>(Route<T> newRoute, RoutePredicate predicate) {
assert(newRoute._navigator == null);
assert(newRoute.overlayEntries.isEmpty);
_pushEntryAndRemoveUntil(
_RouteEntry(newRoute, pageBased: false, initialState: _RouteLifecycle.push),
predicate,
);
return newRoute.popped;
}
所以这里没必要await push and remove 是同步操作。