In this workshop, attendees will build "Birdle," a Wordle-style word guessing game, through the following progressive steps:
-
Project Setup & Repair: Initialize the application and create the necessary file and directory structure for a clean, runnable Flutter project.
- Concepts: Flutter project structure,
pubspec.yaml.
- Concepts: Flutter project structure,
-
Core Game Logic: Implement the game's state management within a single
GameProviderclass. This includes logic for selecting a secret word, tracking user guesses, and evaluating the correctness of each letter.- Concepts: Dart classes,
Listmanipulation,enum,Random.
- Concepts: Dart classes,
-
Stateful Widgets: Build the app using a
StatefulWidgetto manage the game's state directly, usingsetStateto trigger UI updates in response to user actions.- Concepts:
StatefulWidgetvs.StatelessWidget, widget lifecycle (initState),setState. - Widgets:
GamePage.
- Concepts:
-
UI Components: Construct the user interface by creating several reusable, single-purpose widgets.
- Concepts: Widget composition, passing data via constructors.
LetterTile:Container,BoxDecoration,Center,Text.GameBoard:Column,Row, generating widgets with.map().Keyboard&KeyboardKey:Expanded,Padding,Material,InkWell, passing callbacks.
-
Final Assembly: Combine the
GameBoardandKeyboardwidgets within the mainGamePageto create the complete, interactive game screen.- Concepts: App layout.
- Widgets:
Scaffold,AppBar,Column,Expanded,Center,SizedBox.
In this workshop, attendees will build the "WikiExplore" application through the following progressive steps:
- App Structure & Navigation: Initialize the app shell, configure the global theme, and implement responsive navigation that adapts between mobile (bottom bar) and desktop (navigation rail) layouts.
- Data Layer: Implement the
TimelineRepositoryto fetch "On This Day" historical events from the Wikipedia API, including JSON parsing and error handling. - State Management: Create the
TimelineViewModelusingChangeNotifierto manage the data state (loading, success, error) and expose it to the UI usingProvider. - Basic UI: Build the initial list of events using
ListView.builderand standard Flutter widgets to verify data connection and basic layout. - Polish & Animations: Refactor the UI to use custom painting for the timeline visualization, implement responsive layout adjustments, and add professional entrance animations using
flutter_animate.
This workshop covers a comprehensive set of Flutter and Dart concepts, guiding developers from basic app structure to a polished, production-ready feature.
- Asynchronous Programming: Using
async,await, andFuturefor non-blocking operations (e.g., network requests). - Generics: Implementing type-safe classes and methods.
- Enums: Defining strongly-typed sets of values (e.g., for navigation destinations or event types).
- Exports: Structuring libraries using
exportto create clean public APIs.
- MVVM (Model-View-ViewModel): Separating business logic and state from the UI.
- Repository Pattern: Abstracting data fetching and caching logic from the rest of the app.
- Dependency Injection: Using
Providerto inject dependencies (like repositories) into ViewModels and ViewModels into Widgets. - Builder Pattern: Using
Builderwidgets to access the correctBuildContext.
- ChangeNotifier: Creating observable objects that notify listeners of changes.
- ValueNotifier: Managing simple reactive state.
- Provider Package:
MultiProvider: Registering multiple providers at the root of the app.Consumer: Rebuilding UI widgets when state changes.context.readvscontext.watch: Optimizing rebuilds by choosing the correct access method.Selector: Listening to specific parts of a state object (implied best practice).
- HTTP Networking: Making GET requests to REST APIs using the
httppackage. - JSON Serialization: Parsing JSON data into Dart objects (
fromJson). - Data Modeling: Creating immutable data classes.
- Caching: Implementing simple in-memory caching strategies.
- Error Handling: Managing network errors and exceptions gracefully.
- Layout & Structure:
Scaffold: The basic visual layout structure.ListView.builder: Efficiently rendering large lists of data.Stack,Column,Row: Composing complex layouts.Container,Padding,SizedBox: Styling and spacing.
- Responsiveness:
- Adaptive Navigation: Switching between
BottomNavigationBar(mobile) andNavigationRail(tablet/desktop). - Breakpoints: Adjusting layout and padding based on screen width.
- Adaptive Navigation: Switching between
- Theming:
ThemeData: Defining global app styles.TextTheme: Using consistent typography.CupertinoTheme: Supporting iOS-style aesthetics.
- Custom Painting:
CustomPaint&CustomPainter: Drawing custom graphics (timelines) directly on the canvas.
- Implicit Animations: Using simple animated widgets.
- Explicit Animations (flutter_animate):
- Chained Effects: Combining fade, slide, and scale effects.
- Staggered Animations: Animating list items sequentially with delays.
- Keyed Animations: Triggering animations based on state changes (e.g.,
ValueKey).


