Flutter Foundations
Overview
You already know Dart syntax and language mechanics. Flutter adds a UI rendering framework, a deployment pipeline for real applications, and product-delivery constraints across mobile, web, and desktop. This lesson explains where Flutter creates business value, how to install the right toolchain, and how its architecture actually works.
Value
Business Value
- Single product team can target Android, iOS, web, and desktop while sharing domain logic and design systems.
- Fast UI iteration using hot reload and declarative widgets reduces cycle time for product experiments.
- Consistent rendering because Flutter controls pixels instead of relying on platform-native widgets improves brand fidelity across platforms.
- Flutter is especially attractive when you need one application strategy that can evolve from MVP to store-distributed product without fragmenting the engineering team.
Engineering Value
- Strongly typed Dart + widget composition encourage maintainable feature modules.
- Predictable rebuild model for UI updates makes runtime behavior easier to reason about than ad-hoc imperative UI code.
- Mature package ecosystem and first-party tooling support profiling, testing, release builds, and store distribution.
- Shared architecture patterns across platforms simplify CI/CD, code review, and regression control.
Best Fit
- You are building a product app that must ship on both Apple App Store and Google Play with high UI consistency.
- You need fast iteration on onboarding, commerce, dashboard, or workflow-heavy applications.
- You want one engineering organization to control product logic, tests, observability, and release automation in one repository.
Setup
Toolchain
- Flutter SDK on a stable channel pinned for the team.
- Dart SDK bundled with Flutter.
- Android Studio for Android SDKs, emulators, and platform tools.
- Xcode on macOS for iOS simulators, signing, and App Store delivery.
- VS Code or Android Studio with Flutter and Dart extensions.
Checklist
flutter doctor
flutter config --enable-web
flutter config --enable-macos-desktop
flutter create starter_app
cd starter_app
flutter run
Use flutter doctor as a non-negotiable baseline check and resolve every red item before you begin curriculum work.
Team Policy
- Document supported Flutter channel and version in the repository.
- Commit formatter/linter rules and run them in CI, not only locally.
- Separate emulator/simulator troubleshooting from application bugs during triage.
Concepts
Widgets
In Flutter, screens are trees of widgets. Stateful behavior is represented by widget + element + render object interactions.
Build Contract
class WelcomeCard extends StatelessWidget {
const WelcomeCard({super.key, required this.name});
final String name;
@override
Widget build(BuildContext context) {
return Card(
child: Padding(
padding: const EdgeInsets.all(16),
child: Text('Welcome, $name'),
),
);
}
}
The build method should be pure with respect to side effects. It returns UI based on current input state.
Rendering Pipeline
Stages
- Build: create/update widget subtree.
- Layout: resolve constraints and sizes.
- Paint: draw visual layers.
- Compositing: merge layers for final frame.
Performance
- Avoid unnecessary rebuilds in frequently updated areas.
- Use const constructors where possible to reduce widget churn.
- Measure with DevTools before optimizing speculative bottlenecks.
Project Baseline
Structure
lib/
app/
app.dart
routes.dart
features/
auth/
dashboard/
shared/
widgets/
services/
theme/
Checks
flutter analyzein CI.- Unit tests for core state and service logic.
- Widget tests for critical UI flows.
- At least one emulator and one physical-device smoke test path for release candidates.
Engineering Notes
Architecture decisions should be documented as ADR entries: problem, chosen pattern, alternatives considered, and operational consequences.
Common Mistakes
- Treating Flutter as "Dart + UI" without planning app architecture boundaries.
- Starting feature work before the toolchain is fully validated on the target platforms.
- Running side effects inside build methods.
- Choosing state libraries before understanding state categories.
Practice Scope
Create a Flutter starter app shell with feature folders, route setup, app theme, and one ADR explaining your architecture choices.
Back to roadmap: Flutter Roadmap