After shipping my first game, Baron: Tower Siege, I needed a change of pace. Tower defense games are all about systems colliding — waves, upgrades, pathfinding. For my second game I wanted something simpler on the surface, but just as tricky underneath. So I built a block puzzle game.
Puzzle: Block Blast is a classic block puzzle: drag colorful block pieces onto the grid, fill rows or columns to clear them, and keep the board alive as long as you can. Clean UI, fully offline, no nonsense — the kind of game I actually like playing in waiting rooms and during long calls.
Here is what building it with Flutter taught me.
1. Grid rendering is deceptively simple
A puzzle grid looks easy — it's just squares, right? But once you are repainting the board continuously during a drag, every dropped frame shows. I learned to keep the grid rendering dumb and cheap: precomputed layout values, minimal widget rebuilds, and CustomPainter for the parts that had to move fast. The real lesson: profile on a low-end device early. My mid-range phone forgave everything; a cheap device did not.
2. Game state with Provider held up better than I expected
I used Provider for the game state — board cells, current pieces, score, game-over checks. Honestly, I picked it because I already knew it from regular app development, not because it was the "correct" game architecture. It worked fine. The key was keeping the state model separate from the UI: a pure Dart class holding the board and the rules, with widgets just listening for changes. No framework magic, no over-engineering.
3. Small animations make or break the feel
Clearing a row with no animation feels broken. I added simple scale and fade animations when lines clear, and a subtle bounce when pieces snap into place. Nothing fancy — Flutter's built-in animation widgets were enough. The takeaway: players feel polish through motion, not through more features.
4. Keeping the APK light is a discipline
It is tempting to pull in a package for everything. Every dependency adds weight and build complexity, so I kept the list short and used Flutter's built-in widgets wherever possible. The result is a small, fast APK that installs in seconds — and that matters for a casual puzzle game, because nobody waits around for a huge download just to try a puzzle game.
Closing thoughts
This is very much a living project. I have a list of ideas — more game modes, better piece previews, maybe a daily challenge — but first I want to hear what real players run into.
The game is free on Google Play, so if you like puzzle games, try it and tell me what you think:
https://play.google.com/store/apps/details?id=com.mbs.puzzleblockblast
And if you've shipped a game with Flutter yourself, what surprised you most? I'd genuinely like to know.
Top comments (0)