Every new Flutter project I start uses roughly the same skeleton, refined over dozens of client apps. This post walks through the folder structure, state management choice, and testing setup I default to.
Folder structure
I organize by feature, not by type โ each feature gets its own folder with UI, state, and data layers together, rather than one giant "screens" folder and one giant "models" folder.
State management
Riverpod is my default for new projects; Provider or BLoC when joining an existing codebase that already uses them. Consistency with the existing team matters more than my personal preference.
Why this matters
A predictable structure means any developer joining the project โ including a client's in-house team after I hand off โ can find their way around in minutes, not days.