wrapWithSdkTheme function

Widget wrapWithSdkTheme(
  1. BuildContext context,
  2. Widget child
)

Implementation

Widget wrapWithSdkTheme(BuildContext context, Widget child) {
  final sdk = PayorcSdk.instance;

  final primary = sdk.primaryColor ??
      PayorcSdkUiConstants.brandColor ??
      PayorcSdkUiConstants.buttonColor;
  final secondary =
      sdk.secondaryColor ?? PayorcSdkUiConstants.accentColor;

  final hasColors = primary != null || secondary != null;
  final checkoutFont = PayorcSdkUiConstants.checkoutFontName?.trim() ?? '';
  final bodyHost = PayorcSdkUiConstants.hostBodyFontFamily?.trim() ?? '';
  final titleHost = PayorcSdkUiConstants.hostTitleFontFamily?.trim() ?? '';
  final effectiveBodyFont = bodyHost.isNotEmpty
      ? bodyHost
      : (checkoutFont.isNotEmpty
          ? checkoutFont
          : (titleHost.isNotEmpty ? titleHost : ''));
  final hasFont = effectiveBodyFont.isNotEmpty;

  final baseTheme = Theme.of(context);
  var themeData = baseTheme;
  if (hasFont) {
    themeData = themeData.copyWith(
      textTheme: payorcMergeHostFonts(
        themeData.textTheme,
        bodyFontName: PayorcSdkUiConstants.hostBodyFontFamily,
        titleFontName: PayorcSdkUiConstants.hostTitleFontFamily,
        checkoutFontName: PayorcSdkUiConstants.checkoutFontName,
      ),
    );
  }
  if (hasColors) {
    themeData = themeData.copyWith(
      colorScheme: themeData.colorScheme.copyWith(
        primary: primary ?? themeData.colorScheme.primary,
        secondary: secondary ?? themeData.colorScheme.secondary,
      ),
    );
  }

  Widget inner = child;
  inner = Directionality(
    textDirection: PayorcSdk.textDirection,
    child: inner,
  );
  if (hasFont) {
    inner = DefaultTextStyle.merge(
      style: payorcCheckoutDefaultTextStyle(effectiveBodyFont),
      child: inner,
    );
  }
  if (hasColors || hasFont) {
    inner = Theme(data: themeData, child: inner);
  }

  if (!hasColors) {
    return Container(
      decoration: BoxDecoration(
        color: AppColors.white,
        borderRadius: PayorcSdkUiConstants.bottomSheetTopBorderRadius,
      ),
      child: inner,
    );
  }
  return inner;
}