tokenResolver function Null safety

Map<String, dynamic> tokenResolver(
  1. Map<String, dynamic> style,
  2. BuildContext context
)

Implementation

Map<String, dynamic> tokenResolver(
  Map<String, dynamic> style,
  BuildContext context,
) {
  Map<String, dynamic> resolvedProp = {};

  /// Merge BaseStyles
  ///
  if (style.containsKey("baseStyle")) {
    Map<String, dynamic> map = style['baseStyle'];

    map.forEach((key, value) {
      if (style[key] is Map) {
        Map<String, dynamic> s = style[key] as Map<String, dynamic>;
        s.forEach((sKey, sValue) {
          if (sValue == null) {
            style[key][sKey] = map[key][sKey];
          }
        });
      } else {
        if (style[key] == null) {
          style[key] = map[key];
        }
      }
    });
  }

  /// Remove Null
  ///
  ///

  style.removeWhere((key, value) => (value == null));

  style.forEach((key, value) {
    var v = <String, dynamic>{};

    if (value is Map) {
      value.removeWhere((dk, dv) => (dv == null));
      value.forEach((k, val) {
        if (propConfig[k] != null) {
          /// Resolves from the Theme
          v.addAll({...getResolvedValueFromTheme(context, k, v, val)});
        } else {
          /// Converts string to double
          v.addAll({
            k: ((val != null && val.runtimeType == String)
                ? convertToDouble(val)
                : val)
          });
        }
      });

      resolvedProp.addAll({key: v});
    } else {
      /// which returns a number or a value as it is
      /// For e.g. sm lg
      var styledSystemValue = propConfig[key];
      if (styledSystemValue != null) {
        resolvedProp
            .addAll({...getResolvedValueFromTheme(context, key, v, value)});
      } else {
        /// Direct Resolver
        /// EG colors
        resolvedProp[key] = ((value != null && value.runtimeType == String)
            ? convertToDouble(value)
            : value);
      }
    }
  });

  print(resolvedProp);

  return resolvedProp;
}