addDialog<T> method

Future<T?> addDialog<T>(
  1. DialogQueueElement dialog
)

Implementation

Future<T?> addDialog<T>(DialogQueueElement dialog) {
  // 入列前查重,直接替换已存在的并复用与之对应的 Completer
  List<DialogQueueElement> keyList = _dialogQueue.keys.cast<DialogQueueElement>().toList();
  int existIndex = keyList.indexOf(dialog);
  if (existIndex >= 0) {
    DialogQueueElement currentDialog = keyList.elementAt(existIndex);
    Completer<T?> existCompleter = _dialogQueue[currentDialog] as Completer<T?>;
    // 更新对话框
    currentDialog.update(dialog);
    // 更新排序
    _sortQueue();
    return existCompleter.future;
  }
  Completer<T?> dialogCompleter = Completer();
  _dialogQueue[dialog] = dialogCompleter;
  // 按优先级排序
  _sortQueue();
  // 弹出最近对话框
  _showNext();
  return dialogCompleter.future;
}