showCustomSnackBar method

Future? showCustomSnackBar({
  1. required String message,
  2. TextStyle? messageTextStyle,
  3. required dynamic variant,
  4. String? title,
  5. TextStyle? titleTextStyle,
  6. String? mainButtonTitle,
  7. ButtonStyle? mainButtonStyle,
  8. void onMainButtonTapped()?,
  9. Function? onTap,
  10. Duration duration = const Duration(seconds: 1),
})

Implementation

Future? showCustomSnackBar({
  required String message,
  TextStyle? messageTextStyle,
  required dynamic variant,
  String? title,
  TextStyle? titleTextStyle,
  String? mainButtonTitle,
  ButtonStyle? mainButtonStyle,
  void Function()? onMainButtonTapped,
  Function? onTap,
  Duration duration = const Duration(seconds: 1),
}) async {
  final snackbarConfigSupplied = _customSnackbarConfigs[variant];
  final snackbarConfigBuilder = _customSnackbarConfigBuilders[variant];

  final snackbarConfig = snackbarConfigBuilder != null
      ? snackbarConfigBuilder()
      : snackbarConfigSupplied;

  if (snackbarConfig == null) {
    throw CustomSnackbarException(
      'No config found for $variant make sure you have called registerCustomConfig with a config or a builder. See [https://pub.dev/packages/stacked_services#custom-styles] for implementation details.',
    );
  }

  final mainButtonBuilder = _mainButtonBuilder[variant];
  final hasMainButtonBuilder = mainButtonBuilder != null;

  final mainButtonWidget = hasMainButtonBuilder
      ? mainButtonBuilder!(mainButtonTitle, onMainButtonTapped)
      : _getMainButtonWidget(
          mainButtonTitle: mainButtonTitle,
          mainButtonStyle: snackbarConfig.mainButtonStyle ?? mainButtonStyle,
          onMainButtonTapped: onMainButtonTapped,
          config: snackbarConfig,
        );

  final getBar = GetSnackBar(
    key: Key('snackbar_view'),
    titleText: title != null
        ? Text(
            title,
            key: Key('snackbar_text_title'),
            style: snackbarConfig.titleTextStyle ??
                titleTextStyle ??
                TextStyle(
                  color:
                      snackbarConfig.titleColor ?? snackbarConfig.textColor,
                  fontWeight: FontWeight.w800,
                  fontSize: 16,
                ),
            textAlign: snackbarConfig.titleTextAlign,
          )
        : snackbarConfig.titleText ?? null,
    messageText: message.isNotEmpty
        ? Text(
            message,
            key: Key('snackbar_text_message'),
            style: snackbarConfig.messageTextStyle ??
                messageTextStyle ??
                TextStyle(
                  color:
                      snackbarConfig.messageColor ?? snackbarConfig.textColor,
                  fontWeight: FontWeight.w300,
                  fontSize: 14,
                ),
            textAlign: snackbarConfig.messageTextAlign,
          )
        : SizedBox.shrink(),
    icon: snackbarConfig.icon,
    shouldIconPulse: snackbarConfig.shouldIconPulse,
    maxWidth: snackbarConfig.maxWidth,
    margin: snackbarConfig.margin ?? EdgeInsets.zero,
    padding: snackbarConfig.padding,
    borderRadius: snackbarConfig.borderRadius,
    borderColor: snackbarConfig.borderColor,
    borderWidth: snackbarConfig.borderWidth,
    backgroundColor: snackbarConfig.backgroundColor,
    leftBarIndicatorColor: snackbarConfig.leftBarIndicatorColor,
    boxShadows: snackbarConfig.boxShadows,
    backgroundGradient: snackbarConfig.backgroundGradient,
    mainButton: mainButtonWidget,
    onTap: (snackbar) => onTap?.call(),
    duration: duration,
    isDismissible: snackbarConfig.isDismissible,
    dismissDirection: snackbarConfig.dismissDirection,
    showProgressIndicator: snackbarConfig.showProgressIndicator,
    progressIndicatorController: snackbarConfig.progressIndicatorController,
    progressIndicatorBackgroundColor:
        snackbarConfig.progressIndicatorBackgroundColor,
    progressIndicatorValueColor: snackbarConfig.progressIndicatorValueColor,
    snackPosition: snackbarConfig.snackPosition.toGet,
    snackStyle: snackbarConfig.snackStyle.toGet,
    forwardAnimationCurve: snackbarConfig.forwardAnimationCurve,
    reverseAnimationCurve: snackbarConfig.reverseAnimationCurve,
    animationDuration: snackbarConfig.animationDuration,
    barBlur: snackbarConfig.barBlur,
    overlayBlur: snackbarConfig.overlayBlur,
    overlayColor: snackbarConfig.overlayColor,
    userInputForm: snackbarConfig.userInputForm,
  );

  if (snackbarConfig.instantInit) {
    return getBar.show();
  } else {
    Completer completer = Completer();
    sc.ambiguate(WidgetsBinding.instance)!.addPostFrameCallback((_) async {
      final result = getBar.show();
      completer.complete(result);
    });
    return completer.future;
  }
}