richPlural static method

Handler for overridden rich plural. Returns a TextSpan if the path was successfully overridden. Returns null otherwise.

Implementation

static TextSpan? richPlural(
    TranslationMetadata meta, String path, Map<String, Object> param) {
  final node = meta.overrides[path];
  if (node == null) {
    return null;
  }
  if (node is! PluralNode) {
    print('Overridden $path is not a PluralNode but a ${node.runtimeType}.');
    return null;
  }
  if (!node.rich) {
    print('Overridden $path must be rich (RichText).');
    return null;
  }

  final PluralResolver resolver;
  if (node.pluralType == PluralType.cardinal) {
    resolver = meta.cardinalResolver ??
        PluralResolvers.cardinal(meta.locale.languageCode);
  } else {
    resolver = meta.ordinalResolver ??
        PluralResolvers.ordinal(meta.locale.languageCode);
  }

  final quantities = node.quantities.cast<Quantity, RichTextNode>();

  return RichPluralResolvers.bridge(
    n: param[node.paramName] as num,
    resolver: resolver,
    zero: quantities[Quantity.zero] != null
        ? () => quantities[Quantity.zero]!
            ._buildTextSpan<num>(meta, param, node.paramName)
        : null,
    one: quantities[Quantity.one] != null
        ? () => quantities[Quantity.one]!
            ._buildTextSpan<num>(meta, param, node.paramName)
        : null,
    two: quantities[Quantity.two] != null
        ? () => quantities[Quantity.two]!
            ._buildTextSpan<num>(meta, param, node.paramName)
        : null,
    few: quantities[Quantity.few] != null
        ? () => quantities[Quantity.few]!
            ._buildTextSpan<num>(meta, param, node.paramName)
        : null,
    many: quantities[Quantity.many] != null
        ? () => quantities[Quantity.many]!
            ._buildTextSpan<num>(meta, param, node.paramName)
        : null,
    other: quantities[Quantity.other] != null
        ? () => quantities[Quantity.other]!
            ._buildTextSpan<num>(meta, param, node.paramName)
        : null,
  );
}