dismiss<T extends Object?> static method

void dismiss<T extends Object?>({
  1. required BuildContext context,
  2. String tag = _safeDialogDefaultTag,
  3. T? result,
})

用于关闭某个 Dialog,仅移除对应 tag 列表中最后入栈的 Dialog tag: 用于移除对应 tag 的 Dialog

注意, 1、直接 remove 不会调用 push future 的 then 回调,使用 Completer 转发; 2、当 router 不在队列队列中时会抛异常,catch 并打印异常日志。

Implementation

static void dismiss<T extends Object?>({
  required BuildContext context,
  String tag = _safeDialogDefaultTag,
  T? result,
}) {
  List<_SafeDialogRoute> typeStates = (_dialogStates[tag] ??= []);
  if (typeStates.isNotEmpty) {
    try {
      _SafeDialogRoute _safeDialogRoute = typeStates.removeLast();
      Navigator.removeRoute(context, _safeDialogRoute);
      if (!_safeDialogRoute.completer.isCompleted) {
        _safeDialogRoute.completer.complete(result);
      }
    } catch (e) {
      /// TODO 可能会抛出异常, 直接打印到日志区
      print(e);
    }
  }
}