Master the tools you learned. Then build something real with classes.
Press J anytime to jump to any section. Arrow keys to navigate.
Click any card to revisit the concept before we go deeper.
var, final, const, int, String, List, Map
interpolation, ?, ??
arithmetic, comparison, logical
if/else, for, while
void, return, named params, arrow
blueprint, constructor, methods
Today we go deeper on all of these — using one project: building a bank 🏦
Filter — keep items that match a condition
Transform — change each item into something new
Accumulate — combine all items into one value
Check conditions — does any/every item pass?
Find first match — returns the first item that passes
Chain multiple methods together. Each step transforms the data.
📌 .where() and .map() return Iterable — call .toList() at the end to get a List back
📌 Strings are immutable — methods return NEW strings, they don't change the original
Each button shows a different List operation on real bank transaction data.
3 quick questions on Lists and Maps. Think carefully before clicking.
.fold(0, (sum, x) => sum + x) do?.map() and .where()?accounts.entries.where((e) => e.value > 1000) — what does .entries give you?Given 5 customers with balances. Click each task to see the Dart solution.
Does something, returns nothing
Returns a value of that type
One-line shortcut for return
Readable calls with labels
📌 One function = one job. If you can't name it clearly, it's doing too much.
An anonymous function is like a recipe card with no title — you use it once, right where you need it.
📌 Closures remember variables from their surroundings. That's their superpower.
Functions that take other functions as parameters, or return functions.
📌 Higher-order functions make your code flexible — write once, customize with different functions.
3 questions on closures, anonymous functions, and higher-order functions.
balances.map((b) => b * 1.05) do?Each button shows a banking utility function. Click to see the code + test output.
name1, balance1, type1... name2, balance2, type2... Nothing connects them. Easy to mix up.
Anyone can set balance1 = -5000. Nothing stops invalid data.
There has to be a better way...
📌 A class bundles data + behavior together. One account = one object.
You provide all values manually
Starts with Rs.0, type auto-set
New accounts get Rs.500 welcome bonus
📌 Named constructors let you create objects in different ways from the same class.
📌 Getters look like properties but run code. Use get when computing a value from existing data.
3 questions on constructors, methods, and getters.
this.owner mean in a constructor?var acc = BankAccount; acc.deposit(100);A SavingsAccount IS a BankAccount... with extra features. Like a house with an extra floor.
📌 extends means 'is a'. SavingsAccount IS a BankAccount with extra powers.
📌 @override lets child classes change how inherited methods work.
A mixin is like a skill you can plug into any class. Not every account needs it — but those that do, just add with.
📌 Inheritance = 'is a'. Mixin = 'can do'. Use mixins when multiple unrelated classes need the same ability.
An enum is like a dropdown menu — only these specific options exist, nothing else.
📌 Enums prevent bugs. Instead of type = 'savngs' (typo!), use AccountType.savings — the compiler catches mistakes.
In Dart, you can make an object callable — just add a call() method.
📌 Callable objects are useful when you need functions with state — like a transaction that remembers its type.
3 questions on inheritance, mixins, and enums.
extends do?Everything from today in one program. Click each feature to see the code.
Every concept here powers real Flutter apps. You now have the Dart foundation.
where, map, fold, any, every, chaining
split, trim, padLeft, substring, replaceAll
entries, forEach, update, removeWhere, keys/values
single responsibility, pure functions, clear naming
anonymous functions, captured variables, functions as data
constructor, methods, getters, toString
extends, super, @override
with keyword, fixed choices, switch safety
call() method, objects as functions
Build a complete system using everything you learned today.
Student class with name, age, marks (List<int>), enrollmentDateClassroom class that holds List<Student>Printable that adds printReport()Push to your flutter-tr06 repo. This is portfolio commit #3.
Futures, await/async
try/catch/finally
HTTP, JSON, REST basics
No question is too basic. If you're confused, someone else is too — ask now.
Practice on dartpad.dev — try the Student Management System yourself!