renderWithPlunge function

String renderWithPlunge(
  1. int count,
  2. bool hasResult, {
  3. String? first,
  4. String? firstNoResult,
  5. String? last,
  6. String? lastNoResult,
  7. required String next,
  8. required String nextNoResult,
  9. required String fillValues(
    1. int index,
    2. String template,
    3. Map<String, String> values,
    4. String next(
      1. int index
      ),
    ),
})

Implementation

String renderWithPlunge(
  int count,
  bool hasResult, {
  String? first,
  String? firstNoResult,
  String? last,
  String? lastNoResult,
  required String next,
  required String nextNoResult,
  required String Function(
    int index,
    String template,
    Map<String, String> values,
    String Function(int index) next,
  ) fillValues,
}) {
  String plunge(int index) {
    String? template;
    if (index == 0) {
      template = hasResult ? first : firstNoResult;
    }

    if (index == count - 1 && template == null) {
      template = hasResult ? last : lastNoResult;
    }

    if (index >= 0 && index <= count - 1) {
      template ??= hasResult ? next : nextNoResult;
    } else {
      throw RangeError.range(count, 0, count - 1);
    }

    final k = index + 1;
    final values = {
      'p1': '@p$k',
      'r1': '@r$k',
      'rv1': '@rv$k',
    };
    template = fillValues(index, template, values, plunge);
    return render(template, values);
  }

  return plunge(0);
}