distributeSpace function

(double, double) distributeSpace(
  1. MainAxisAlignment alignment,
  2. double freeSpace,
  3. int itemCount,
  4. bool flipped,
  5. double spacing,
)

Implementation

(double leadingSpace, double betweenSpace) distributeSpace(
    MainAxisAlignment alignment,
    double freeSpace,
    int itemCount,
    bool flipped,
    double spacing) {
  assert(itemCount >= 0);
  return switch (alignment) {
    MainAxisAlignment.start => flipped ? (freeSpace, spacing) : (0.0, spacing),
    MainAxisAlignment.end => distributeSpace(
        MainAxisAlignment.start, freeSpace, itemCount, !flipped, spacing),
    MainAxisAlignment.spaceBetween when itemCount < 2 => distributeSpace(
        MainAxisAlignment.start, freeSpace, itemCount, flipped, spacing),
    MainAxisAlignment.spaceAround when itemCount == 0 => distributeSpace(
        MainAxisAlignment.start, freeSpace, itemCount, flipped, spacing),
    MainAxisAlignment.center => (freeSpace / 2.0, spacing),
    MainAxisAlignment.spaceBetween => (
        0.0,
        freeSpace / (itemCount - 1) + spacing
      ),
    MainAxisAlignment.spaceAround => (
        freeSpace / itemCount / 2,
        freeSpace / itemCount + spacing
      ),
    MainAxisAlignment.spaceEvenly => (
        freeSpace / (itemCount + 1),
        freeSpace / (itemCount + 1) + spacing
      ),
  };
}