columnWidthFromBreakPointTriggers static method

double columnWidthFromBreakPointTriggers({
  1. required double maxWidth,
  2. required double screenWidth,
  3. required List<String> breakPointTriggers,
})

returns the width a column should be based on it's breakpoints ex: col-lg-6 would set width to 50% of container width when breakpoint is lg

Implementation

static double columnWidthFromBreakPointTriggers({
  required double maxWidth,
  required double screenWidth,
  required List<String> breakPointTriggers,
}) {
  // set values to unset
  Map<String, double> map = <String, double>{
    "": maxWidth,
    "sm": -1,
    "md": -1,
    "lg": -1,
    "xl": -1,
    "xxl": -1,
  };

  // set explicit values
  for (int i = 0; i < breakPointTriggers.length; i++) {
    if (RegExp(r"^col$").firstMatch(breakPointTriggers[i]) != null) {
      map[""] = (1 / 12) * maxWidth;
    } else if (RegExp(r"^col-(([0-9])|([0-9][0-2]))$")
            .firstMatch(breakPointTriggers[i]) !=
        null) {
      map[""] =
          (_getSuffixNumbersValue(breakPointTriggers[i]) / 12) * maxWidth;
    } else {
      for (int r = 1; r < breakPointLabels.length; r++) {
        if (RegExp("^col-${breakPointLabels[r]}-(([0-9])|([0-9][0-2]))\$")
                .firstMatch(breakPointTriggers[i]) !=
            null) {
          map[breakPointLabels[r]] =
              (_getSuffixNumbersValue(breakPointTriggers[i]) / 12) * maxWidth;
        }
      }
    }
  }

  // set inferred values
  for (int i = 1; i < breakPointLabels.length; i++) {
    if (map[breakPointLabels[i]] == -1) {
      map[breakPointLabels[i]] = map[breakPointLabels[i - 1]]!;
    }
  }

  return valueBasedOnBreakPointFromDefinedWidth(width: screenWidth, map: map);
}