⚡ TL;DR
Master Dart with 10 unique pattern programs — Spiral Square, K-Shape, Wave, Checkerboard, Fibonacci Triangle, and more. Great for interview prep.
In this tutorial, we’ll explore 10 creative pattern programs in Dart that are useful for interviews and understanding loop mechanics. These go beyond basic shapes and introduce algorithmic thinking.
1. Spiral Square Pattern
Print a square spiral of numbers.
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9void spiralSquare(int n) {
List<List<int>> matrix = 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++) matrix[top][i] = num++;
top++;
for (int i = top; i <= bottom; i++) matrix[i][right] = num++;
right--;
for (int i = right; i >= left; i--) matrix[bottom][i] = num++;
bottom--;
for (int i = bottom; i >= top; i--) matrix[i][left] = num++;
left++;
}
for (var row in matrix) {
print(row.map((e) => e.toString().padLeft(2)).join(" "));
}
}
void main() => spiralSquare(5);2. K-Shape Pattern
Print a K shape using asterisks.
* *
* *
* *
* *
* *
* *
* *void kShape(int n) {
// Upper part
for (int i = 1; i <= n; i++) {
print("*" + " " * i + "*");
}
// Lower part
for (int i = n - 1; i >= 1; i--) {
print("*" + " " * i + "*");
}
}
void main() => kShape(4);3. Wave Pattern
Print a sine wave pattern.
* *
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
* * *
* * * *
* * * *void wavePattern(int n) {
int width = 4 * n - 3; // 17 for n = 5
int peak = 2 * n - 2; // inner apex row
for (int r = 1; r <= 2 * n; r++) {
List<String> cells = List.filled(width, " ");
cells[0] = "*";
cells[width - 1] = "*";
if (r > 1) {
int inner = r <= peak ? r : 2 * peak - r;
cells[inner] = "*";
cells[width - 1 - inner] = "*";
}
print(cells.join());
}
}
void main() => wavePattern(5);4. Concentric Square Pattern
Print nested squares (like a target).
* * * * * * *
* *
* * * * *
* * * *
* * * * *
* *
* * * * * * *void concentricSquare(int n) {
for (int i = 1; i <= n; i++) {
String row = "";
for (int j = 1; j <= n; j++) {
int min = [i, j, n - i + 1, n - j + 1].reduce((a, b) => a < b ? a : b);
if (min % 2 == 1) {
row += "* ";
} else {
row += " ";
}
}
print(row);
}
}
void main() => concentricSquare(7);5. Checkerboard Pattern
Print a checkerboard (alternating black and white squares).
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *void checkerboard(int n) {
for (int i = 0; i < n; i++) {
String row = "";
for (int j = 0; j < n; j++) {
row += ((i + j) % 2 == 0) ? "* " : " ";
}
print(row);
}
}
void main() => checkerboard(5);6. Fibonacci Triangle Pattern
Print Fibonacci numbers in triangle shape.
0
1 1
2 3 5
8 13 21 34
55 89 144 233 377void fibonacciTriangle(int n) {
List<int> fib = [0, 1];
while (fib.length < n * (n + 1) ~/ 2) {
fib.add(fib[fib.length - 1] + fib[fib.length - 2]);
}
int index = 0;
for (int i = 1; i <= n; i++) {
String row = "";
for (int j = 1; j <= i; j++) {
row += "${fib[index++]} ";
}
print(row);
}
}
void main() => fibonacciTriangle(5);7. Hollow Cross Pattern
Print a hollow cross/plus symbol.
*
*
*****
*
*void hollowCross(int n) {
int mid = n ~/ 2;
for (int i = 0; i < n; i++) {
String row = "";
for (int j = 0; j < n; j++) {
if (i == mid || j == mid) {
row += "*";
} else {
row += " ";
}
}
print(row);
}
}
void main() => hollowCross(5);8. Arrow Pattern
Print a right-pointing arrow.
*
**
***
****
*****
****
***
**
*void arrowPattern(int n) {
// Top half
for (int i = 1; i <= n; i++) {
print("*" * i);
}
// Bottom half
for (int i = n - 1; i >= 1; i--) {
print("*" * i);
}
}
void main() => arrowPattern(5);9. Heart Pattern
Print a heart shape.
** **
**** ****
*********
*******
*****
***
*void heartPattern(int n) {
// Top lobes: two bumps separated by a gap
for (int i = n ~/ 2 - 1; i <= n - 2; i += 2) {
int pad = (n - i - 2) ~/ 2;
print(" " * pad + "*" * i + " " * (n - i - 1) + "*" * i);
}
// Bottom point: shrinking triangle ending in a single star
for (int i = n; i >= 2; i--) {
print(" " * (n - i) + "*" * (2 * i - (n ~/ 2)));
}
}
void main() => heartPattern(6);10. Diamond with Letters
Print a diamond using consecutive letters.
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
Aimport 'dart:io';
void diamondLetters(int n) {
String letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// Upper half
for (int i = 0; i < n; i++) {
stdout.write(" " * (n - i - 1));
for (int j = 0; j <= i; j++) stdout.write(letters[j]);
for (int j = i - 1; j >= 0; j--) stdout.write(letters[j]);
stdout.writeln();
}
// Lower half
for (int i = n - 2; i >= 0; i--) {
stdout.write(" " * (n - i - 1));
for (int j = 0; j <= i; j++) stdout.write(letters[j]);
for (int j = i - 1; j >= 0; j--) stdout.write(letters[j]);
stdout.writeln();
}
}
void main() => diamondLetters(5);Conclusion
These Dart patterns are perfect for Flutter developers looking to strengthen their algorithmic thinking. They cover everything from mathematical sequences (Fibonacci) to spatial reasoning (Spiral, Concentric) and ASCII art (Heart, K-Shape).
Try integrating these into your DartPad or Flutter console apps!
Happy coding!
