show method

  1. @override
void show({
  1. required String id,
  2. String? title,
  3. String? content,
  4. List<Widget>? actions,
  5. DialogPriority priority = DialogPriority.medium,
  6. bool isFixed = false,
  7. bool canBeClosed()?,
  8. Widget? customDialog,
})
override

Implementation

@override
void show({
  required String id,
  String? title,
  String? content,
  List<Widget>? actions,
  DialogPriority priority = DialogPriority.medium,
  bool isFixed = false,
  bool Function()? canBeClosed,
  Widget? customDialog,
}) {
  Widget dialog = customDialog ?? _defaultDialog(title, content, actions);

  bool shouldReplaceCurrent() {
    if (_currentDialog == null) return true;

    if (_currentDialog!.isFixed &&
        !(priority.index > _currentDialog!.priority.index)) return false;

    if (_currentDialog!.canBeClosed != null &&
        !_currentDialog!.canBeClosed!()) {
      return false;
    }

    return priority.index > _currentDialog!.priority.index;
  }

  if (shouldReplaceCurrent()) {
    if (_currentDialog != null &&
        navigatorKey.currentState?.canPop() == true) {
      navigatorKey.currentState?.pop();
    }

    _currentDialog = DialogEntry(
      id: id,
      dialog: dialog,
      priority: priority,
      isFixed: isFixed,
      canBeClosed: canBeClosed,
    );

    WidgetsBinding.instance.addPostFrameCallback((_) {
      navigatorKey.currentState?.push(
        PageRouteBuilder(
          opaque: false,
          pageBuilder: (_, __, ___) => WillPopScope(
            child: _currentDialog!.dialog,
            onWillPop: () async => !isFixed,
          ),
        ),
      );
    });
  }
}