⚡ TL;DR
10 intermediate pattern programs in Dart — spiral matrix, hollow diamond, letter triangle, Fibonacci triangle, wave, and more. Full code with output.
This is a follow-up to our Dart pattern collection. Below are 10 more pattern programs that show up in interviews and help solidify nested loop fundamentals.
1. Spiral Matrix Pattern
Fill an n x n grid with numbers in spiral order.
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7void spiralMatrix(int n) {
List<List<int>> m = List.generate(n, (_) => List.filled(n, 0));
int num = 1;
int top = 0, bottom = n - 1, left = 0, right = n - 1;
while (top <= bottom && left <= right) {
for (int i = left; i <= right; i++) m[top][i] = num++;
top++;
for (int i = top; i <= bottom; i++) m[i][right] = num++;
right--;
for (int i = right; i >= left; i--) m[bottom][i] = num++;
bottom--;
for (int i = bottom; i >= top; i--) m[i][left] = num++;
left++;
}
for (var row in m) {
print(row.map((e) => e.toString().padLeft(2)).join(" "));
}
}
void main() => spiralMatrix(4);Output
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 72. Hollow Diamond Star
Diamond outline, hollow inside.
*
* *
* *
* *
*void hollowDiamond(int n) {
void row(int i) {
String stars;
if (i == 1) {
stars = "*";
} else {
stars = "*" + " " * (2 * i - 3) + "*";
}
print(" " * (n - i) + stars);
}
for (int i = 1; i <= n; i++) row(i);
for (int i = n - 1; i >= 1; i--) row(i);
}
void main() => hollowDiamond(3);Output
*
* *
* *
* *
*3. Letter Triangle
Each row gets one more letter, starting from ‘A’.
A
A B
A B C
A B C D
A B C D Evoid letterTriangle(int n) {
for (int i = 0; i < n; i++) {
final row = <String>[];
for (int j = 0; j <= i; j++) {
row.add(String.fromCharCode(65 + j));
}
print(row.join(" "));
}
}
void main() => letterTriangle(5);Output
A
A B
A B C
A B C D
A B C D E4. Number Stair
Row i contains i copies of i.
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5void numberStair(int n) {
for (int i = 1; i <= n; i++) {
print(List.filled(i, i).join(" "));
}
}
void main() => numberStair(5);Output
1
2 2
3 3 3
4 4 4 4
5 5 5 5 55. Fibonacci Triangle
Each row continues the Fibonacci sequence.
0
1 1
2 3 5
8 13 21 34
55 89 144 233 377void fibonacciTriangle(int n) {
int a = 0, b = 1;
for (int i = 1; i <= n; i++) {
final row = <String>[];
for (int j = 0; j < i; j++) {
row.add("$a");
int temp = a;
a = b;
b = temp + b;
}
print(row.join(" "));
}
}
void main() => fibonacciTriangle(5);Output
0
1 1
2 3 5
8 13 21 34
55 89 144 233 3776. Binary Triangle
Alternating 1s and 0s, starting with 1.
1
0 1
1 0 1
0 1 0 1
1 0 1 0 1void binaryTriangle(int n) {
for (int i = 1; i <= n; i++) {
final row = List.generate(i, (j) => (i + j) % 2);
print(row.join(" "));
}
}
void main() => binaryTriangle(5);Output
1
0 1
1 0 1
0 1 0 1
1 0 1 0 17. Wave Pattern
Stars tracing a wave.
* *
* *
* *
* *
*void wavePattern(int n) {
for (int i = 0; i < n; i++) {
final row = StringBuffer();
for (int j = 0; j < 2 * n - 1; j++) {
if (i == j || i + j == 2 * n - 2) {
row.write("*");
} else {
row.write(" ");
}
}
print(row.toString().trimRight());
}
}
void main() => wavePattern(5);Output
* *
* *
* *
* *
*Note: The wave peaks where the two diagonals converge; increase
nfor a deeper trough.
8. Double Hill
Two mirrored hills forming an “M” shape.
* *
** **
*** ***
**** ****
***** *****
****** ******
******* *******void doubleHill(int n) {
for (int i = 1; i <= n; i++) {
final sides = "*" * i;
final gap = " " * (2 * (n - i) + 1);
print(sides + gap + sides);
}
}
void main() => doubleHill(7);Output
* *
** **
*** ***
**** ****
***** *****
****** ******
******* *******9. Hollow Pyramid
A pyramid with only the outline.
*
* *
* *
* *
*********void hollowPyramid(int n) {
for (int i = 1; i <= n; i++) {
String row = " " * (n - i);
if (i == n) {
row += "*" * (2 * n - 1);
} else if (i == 1) {
row += "*";
} else {
row += "*" + " " * (2 * i - 3) + "*";
}
print(row);
}
}
void main() => hollowPyramid(5);Output
*
* *
* *
* *
*********10. X-Shape
Diagonals of stars forming an “X”.
* *
* *
*
* *
* *void xShape(int n) {
for (int i = 0; i < n; i++) {
final row = StringBuffer();
for (int j = 0; j < n; j++) {
if (i == j || i + j == n - 1) {
row.write("*");
} else {
row.write(" ");
}
}
print(row.toString());
}
}
void main() => xShape(5);Output
* *
* *
*
* *
* *Conclusion
These Dart patterns complement the earlier creative set. The spiral matrix and hollow shapes are common in interviews, while the letter and Fibonacci triangles reinforce iteration and state management. Combined, they give you a solid pattern toolkit for any coding round.
Happy coding!

Written by Mihir Pipermitwala
Senior Full Stack Consultant & Mobile Engineering Specialist building user-focused applications in healthcare with Flutter, Dart and React Native. I write about what I actually build and test — every tutorial here comes from real project work.
More about Mihir →