show method

ComBannerController show({
  1. required String message,
  2. required ComToastConfig config,
  3. required ComToastBannerContent? content,
  4. required ComBannerBuilder? builder,
  5. required ComBannerOptions options,
  6. required Object duplicateKey,
  7. bool skipDuplicateFilter = false,
})

Implementation

ComBannerController show({
  required String message,
  required ComToastConfig config,
  required ComToastBannerContent? content,
  required ComBannerBuilder? builder,
  required ComBannerOptions options,
  required Object duplicateKey,
  bool skipDuplicateFilter = false,
}) {
  config.validate();
  options.validate();
  _ensureLifecycleObserver();

  final id = ++_sequence;
  final completer = Completer<ComBannerClosedReason>();
  final controller = ComBannerController.managed(
    closed: completer.future,
    onClose: () => unawaited(close(id, ComBannerClosedReason.programmatic)),
  );
  final banner = _QueuedBanner(
    id: id,
    message: message,
    config: config.copyWith(
      presentation: ComToastPresentation.banner,
      position: ComToastPosition.top,
    ),
    content: content,
    builder: builder,
    options: options,
    controller: controller,
    completer: completer,
  );

  final isEmpty = builder == null &&
      message.trim().isEmpty &&
      content?.title == null &&
      content?.subtitle == null &&
      content?.trailing == null;
  if (isEmpty) {
    _complete(banner, ComBannerClosedReason.failedToShow);
    return controller;
  }

  final usesDuplicateFilter =
      options.queuePolicy == ComBannerQueuePolicy.enqueue;
  if (!skipDuplicateFilter &&
      usesDuplicateFilter &&
      _isDuplicate(duplicateKey)) {
    _complete(banner, ComBannerClosedReason.duplicate);
    return controller;
  }

  _enqueue(banner);
  return controller;
}