
Learn the basics of Dart and Flutter widgets to build apps. Explore Gattex for state management, Firebase for real-time databases and authentication, and AdMob monetization through real-world apps and publishing.
Meet your instructor, Rishi Suthar, Ahmedabad-based app developer who began in 2017 and now builds apps like Flutter Lab, trusted by schools on Google Play and Apple App Store.
Discover what Dart is and why it powers Flutter development. Dart is a modern object-oriented language by Google, fast, simple, and optimized for building user interfaces.
Flutter is a Google open source UI toolkit that enables fast, natively compiled apps for mobile, web, and desktop from a single code base, using Dart and rich widgets.
Discover why Flutter, a Google open source UI toolkit, enables fast development and high-performance apps for Android, iOS, web, and desktop from a single code base with a native feel.
Set up VSCode and flutter on macOS using homebrew, install via brew commands, verify flutter and dart versions, and learn how homebrew configures environment variables.
Install and configure VS Code and the Flutter SDK on Windows, set the path for Flutter, and verify Flutter and Dart versions to prepare your development environment for Flutter projects.
Explore essential VS Code extensions for Flutter development, including the flutter and dart extensions, better commands, todo tree, windsurf, error lens, VS Code icons, TL drawer, and coldsnap.
Create a new dart file in vscode, define the main function as the entry point with void main(), and print hello world to terminal. Run file to see output.
Learn how to declare and use variables in Dart, covering string, integer, double, and boolean types, including assignment, reusability across prints, and data type constraints.
Learn naming conventions to keep code clear, use meaningful variable and function names, apply camel casing, start with an alphabet, avoid reserved words in dart, stay consistent.
Learn how to use comments and documentation to clarify code. Create single-line and multi-line comments, noting they are for understanding and are ignored by the compiler.
Explore Dart operators, including arithmetic, assignment, comparison, logical, and the conditional and increment/decrement operators, with practical examples of addition, subtraction, division, modulo, and integer division.
Learn to use Dart string functions such as trim, toLowerCase, toUpperCase, contains, replaceAll, substring, startsWith, endsWith, split, and length, and see how they return new strings without altering the original.
Create and manipulate lists in Dart with the list keyword, brackets, and angular brackets to specify a type. Access elements by index and use add, insert, and remove to modify.
Explore maps in Dart as a key-value collection, create and update entries, access values by keys, and use properties like length, keys, values, plus containsKey, update, and clear.
Learn to use set in dart to store unordered, unique elements like apple, banana, and mango, and use operations such as add, remove, contains, length, and toList.
Explore iterable in dart as an immutable collection like a list. Create an iterable, check length, first and last, emptiness, contains and elementAt, plus where, map, reduce, every, and any.
Explore how where, map, reduce, every, and any operate on iterables and lists in Flutter to filter, transform, and aggregate data. Implement arrow functions and examples of filtering and summing.
Learn to use if else statements for conditional operations, including if, else if, and nested if else, to print whether a number is positive, zero, or negative.
Learn how to implement a switch statement to handle grade values A, B, and default, using case blocks, print statements, and breaks to produce outcomes like excellent, good, or okay.
Explore var, final, and const in dart, distinguishing mutable from immutable variables. Compare compile-time and runtime operations, and note how date time provides current date and time at runtime.
Explore loops in Dart to repeat code blocks based on a condition, using for-in, for, while, and do-while loops with lists and prints.
Explore break and continue keywords in Dart to control loop execution. Break terminates the loop at two, while continue skips that iteration.
Explore Dart functions, including return types, void, parameters, and how to call and print results, with normal and arrow function examples.
Explore named parameters and their default values in Dart, a cleaner and more flexible way to pass data.
Explore async and await in dart by delaying hello world with Future.delayed, using async main, and handling future string results with await or then.
Learn how to take user input in dart using the dart:io library, prompting for a name, using stdin to readLineSync, handling nullable strings, and printing a greeting.
Master typecasting in Dart by converting strings to int or double and numbers back to strings. Learn by examples using int.parse, double.parse, toString, and runtime type checks.
Explore how the math library in this course teaches constants and functions for mathematical operations, including sqrt, power, max, mean, pi, sine, cos, log, Euler's exponential, and random numbers.
Define a Dart class with properties and a method, create objects, and initialize them with a constructor, the this keyword, the dot operator, and named or default parameters.
Explore encapsulation in dart by wrapping data and methods in a class, restricting direct access with private variables, and exposing values through getters and setters.
Learn how Dart implements inheritance by reusing properties and methods from an animal class in a dog class with the extends keyword, including the eat method.
Discover how polymorphism in Dart's OOP lets a single draw method behave differently across classes, as circle extends shape and overrides draw to print drawing circle.
Explore abstraction in Dart with abstract classes and interfaces, covering abstract methods, normal methods, and the rules for instantiation and overriding; see implementing multiple interfaces.
Explore this and super keywords in Dart, learning how this refers to the current class instance and how super accesses superclass properties, methods, and constructors.
Learn exception handling in flutter by using try catch blocks, finally, and on to catch specific errors, print exceptions and stack traces, and throw explicit exceptions.
Explore variable scopes in dart, including global, class, function, and block scopes, through practical examples showing access rules across files and inside blocks.
Explore the static keyword to access class properties and methods without creating an object, and see why normal variables like surname require an instance.
Explore how the spread operator copies list elements in Dart, turning shallow copies into deep copies to keep lists L1, L2, and L3 independent in Flutter apps.
Explore the cascade operator to call multiple methods on the same object without repeating its name, demonstrated with a person class exposing say my name and say my age.
Learn how Dart null safety, introduced in version 2.1, enforces non-nullable and nullable types and uses ?, !, and ??= to manage nulls in strings and integers.
Explore extension methods in Dart to add new functions to existing or user defined classes without modifying code, with examples on a person class and on strings.
Define a dart enum as a fixed set of constant values, create it outside main, access with weather.sunny, print the constant name and index, and iterate through all values.
Learn how to use mixins in Dart to reuse code without extending, by defining flyer and swimmer mixins and applying them with the keyword to bird and duck.
Explore generics in Dart by using a type placeholder T in a generic box class, illustrating how to create typed objects (int and string) and print their values.
Explore the late keyword in Dart for lazy initialization of non-nullable variables, avoiding initialization at declaration, with examples of nullable variables and late initialization errors.
Install Android Studio to access the Android SDK and build tools, use the SDK Manager to install the latest Android version, then create a virtual device to test your app.
Install Xcode on macOS, create a new Xcode project with a unique bundle identifier, and set up iOS simulators for testing your Flutter app later.
Run flutter doctor to diagnose your flutter environment and spot missing dependencies or setup issues. After accepting Android licenses with flutter doctor --android-licenses, no issues found—start your flutter development journey.
Explore vscode extensions for flutter development, install the aml plugin for yaml support with validations and autocompletion, and use the flutter tree extension to build nested widgets efficiently.
Create a Flutter project using the VS Code extension or terminal, selecting application, empty application, or skeleton templates with a counter app, and set the project name using --org.
Explore the flutter project folder structure, including lib, Android, iOS, Linux, macOS, and web directories. Learn about key files like pubspec.yaml, readme, and hidden folders such as .gitignore and .metadata.
Launch your flutter project on virtual Android emulators or iOS simulators and on physical devices using flutter run. Enable USB debugging and pick a device for debug builds.
Explore the main.dart entry point and main function, and learn how runApp attaches a Material App or Cupertino app with a home container whose color you set via colors.
Learn to use the scaffold widget in flutter to structure a screen with an app bar, body, a floating action button, and a bottom navigation bar.
Explore the text widget in Flutter and style text with font size, color, and alignment. Apply text style, color hex codes, weight, decoration, and max lines.
Explore creating and customizing Flutter button widgets, including elevated, text, and outline buttons, with on pressed handlers and styled labels.
Wrap the outline button with a center widget to center it in the body between the app bar and bottom area, using wrap with center or wrap with widget.
Discover how the column widget in Flutter arranges widgets vertically and how main axis and cross axis alignment control placement with options like center, start, end, and space between.
Explore the flutter row widget and its relation to the column. Control main axis alignment (center, start, end, space evenly, space between, space around) and adjust row height.
Explore the sized box widget in Flutter to fix sizes, add vertical or horizontal space, and wrap widgets like buttons in a sized box within column or row layouts.
Learn how the container widget serves as a versatile box for layout and spacing in Flutter. Configure color, height, width, child, padding, margin, and decoration such as border radius.
Discover how the Flutter material widget applies material design styling with color, elevation, and border radius, and learn padding, child structure, and how it differs from container.
Explore the card widget in Flutter, creating elevated, rounded containers and customizing color, elevation, margin, shadow color, and border radius using the shape and border side properties.
Explore the expanded widget in flutter, letting a row or column child take up remaining space. See how flex controls ratios to distribute space without pushing siblings off screen.
Explore the Flutter spacer widget, which adds empty space between two expanded widgets without a child property, and use its flex to create gaps in a row or column.
Create an icon widget in flutter, select an icon from icons or Cupertino icons, and adjust its size and color for live preview in VS code.
Learn to make icons clickable in Flutter with the icon button widget. Set the icon and onPressed, and adjust size and style with icon size and the style property.
Learn to use the Flutter image widget to load local assets and network images, declare assets in pubspec.yaml, and adjust height, width, and fit options like contain, cover, and fill.
Explore the floating action button (fab) in Flutter, using Scaffold, onPressed, child icon, tooltip, colors, shape with rounded rectangle border, and positioning bottom right or in body.
Explore InkWell widget in Flutter to add a ripple effect and tap interactions, turning a widget into a button. Wrap the widget with InkWell and use onTap to trigger actions.
Explore the Flutter gesture detector widget to gain precise gesture control without visual feedback, including on tap and on double tap, unlike InkWell's ripple effect.
Explore the text field widget in Flutter, configuring max lines, style, hint and label, and capture user input using a text editing controller with a print button.
Explore the stack widget to overlap containers and control placement with align and position widgets, and learn how to remove the debug banner and prepare a release build.
Explore the flexible widget in Flutter, showing how it occupies available space without forcing the maximum available space, unlike Expanded, with examples in a row and a column.
Explore how the Flutter widget tree organizes every widget in a hierarchical structure from runApp to nested containers, rows, columns, icons, and text, with keys for unique identification.
explains how to implement a stateless widget in Flutter by separating the user interface into widgets, wiring them via the material app and home property, and using the build method.
Explore how Flutter stateful widget enables mutable state updated with setState. Compare stateless widgets and learn to manage state using build methods, scaffold, app bar, text and elevated buttons.
Explore hot reload and hot restart to understand their state effects. Preserve app state for UI updates with hot reload, while hot restart destroys app state and restarts from main.
Create a simple Flutter counter app that shows the current count and offers three buttons to increment, decrement, and reset the value, using a stateful widget and setState.
Explore how the build context in Flutter gives a widget access to its location in the widget tree, enabling navigation, theming, media data access, and handling inherited widgets.
Learn how to navigate between screens in Flutter using the navigator, understand stack navigation, and implement push, pop, and push replacement with context for smooth screen transitions.
Convert a stateless widget to a stateful one to access initState, load data before build from backend or Firebase, and use debugPrint to avoid exposing logs in release.
Explore the dispose method in a stateful widget, invoked when removed from the widget tree or navigation stack; override and call super.dispose to clean up.
Explore the Flutter rich text widget by styling text blocks with text spans, applying colors and font sizes, and using a children property to nest spans.
Explore how the single child scroll view widget handles overflow and scroll directions, and learn to style text with rich text and text span.
Explore the list style widget in Flutter, a prebuilt list item with leading, title, subtitle, and trailing, and learn to customize its shape, padding, and borders.
Discover Flutter's ListView for scrollable lists, compare it with static children, and build items with ListView.builder using itemCount and itemBuilder, while adjusting padding and physics.
Explore GridView in Flutter, using a sliver grid delegate with fixed cross axis count to create a 3-column grid, plus GridView.builder for lazy rendering of large lists.
Learn how to use the colored box widget in Flutter to give a text widget a background color, compare it with container, and apply padding with a separate padding widget.
Explore the list.generate method in Flutter to create a fixed length list of widgets using an index-based generator. See how to render items in a column and enable scrolling.
Learn how the wrap widget in Flutter automatically wraps children to new rows when space runs out, and how to adjust horizontal and line spacing with the spacing property.
Explore how the SafeArea widget in Flutter keeps UI visible by adding automatic padding for the status bar, notch, and navigation bar.
Learn how to clip widgets with rounded corners in Flutter using the ClipRRect widget and apply a border radius of 16 to a colored box containing white hello world text.
Discover how to add high-quality JSON-based Lottie animations to Flutter apps by configuring dependencies in pubspec.yaml, importing assets, and rendering with Lottie widgets, including network options.
Explore the shared preferences package in Flutter to store and retrieve simple key-value data locally, enabling persistent values like username and settings across app restarts.
Learn how to create and customize dialogs in Flutter using showDialog and alertDialog, including title, content, actions, closing behavior, and styling with background color, shape, and padding.
Learn how to implement a flutter snackbar using scaffold messenger to show brief messages like item saved after user actions, with customizable duration and an undo action.
Explore the Flutter popup menu button in an app bar, customize icon, color, border radius, and elevation, and handle item taps like settings, about, and rate app.
Explore the Flutter bottom navigation bar widget to navigate between app sections using tabs, manage current index with a stateful widget, and update the body with corresponding screens.
Explore the page view widget in flutter and swipe between pages, using onPageChanged and a page controller to jump to a specific page.
Explore the tab bar widget in Flutter, connect the tab bar with tab bar view using a default tab controller. Build three tabs: home, search, and settings.
Learn to implement a Flutter drawer with the scaffold's drawer property, style the header, add list items, remove default padding, and close the drawer on item taps.
Learn to create custom widgets in Flutter to reuse UI components, apply a reusable custom button with styling and border radius, and reduce code redundancy.
Add custom fonts to a flutter app by placing the font in assets and updating pubspec.yaml. Apply Open Sans in text widgets and use variable fonts to adjust weight.
Learn to use the Google fonts package in flutter, loading fonts from the internet and caching them after load. Import the package and apply fonts like Eldridge and Roboto.
Generate cross-platform launcher icons for Android, iOS, web, and Windows using the flutter launcher icons package, configured via yaml in a dev dependency.
Integrate a native splash screen in a Flutter app by creating the launcher icon, configuring Android 12 with color and image, and YAML config, then run Flutter run to preview.
Define a global theme in flutter by configuring theme data and app bar theme in the material app to achieve consistent colors across screens, including dark mode and material 3.
Learn to change the flutter app version by updating version name and version code in the yaml, incrementing for Google Play, and running flutter clean and flutter pub get.
Learn to change your app name for Android and iOS by editing the Android manifest and Info.plist, define permissions metadata, and verify the change by running flutter run.
Learn to restrict Flutter app orientation to portrait using SystemChrome.setPreferredOrientations with DeviceOrientation.portraitUp, and ensure engine initialization via WidgetsFlutterBinding.ensureInitialized when main is async.
Learn how to generate APK and AAB files for Flutter apps, export release and debug builds, and prepare Android and iOS archives for Google Play and App Store.
Explore the associated widget instance in Flutter and how to access immutable properties via widget.dot in state class. See constructor-based initialization and passing text and number to display in UI.
Explore four basic flutter keys: basic, value, object, and unique, and learn how global keys enable form validation via current state and the text form field validator.
Create a notes app in Flutter, exploring ListView, dialog, and Snackbar. Build a screen with notes and a fab to add, edit screen, and color options, saving locally with preferences.
Create a list view with ListView.builder to display notes, configure a notes page with an app bar, and apply constants for app name, colors, and item padding.
Learn to dynamically add new nodes in a flutter app using a floating action button and a dialog with a text field, inserting at index zero and updating the list.
Customize each note node in a Flutter list by wrapping with a material widget, applying color, padding, border radius, and an inline delete button with a confirmation dialog.
Replace the delete icon with a popup menu in the list view, adding edit, label, and delete options, and tune the popup menu theme and icon size.
Create an edit screen for notes, pass the notes list and index, and update the list using a text editing controller, navigator push/pop, and setState.
Replace string nodes with a map containing node and timestamp, convert DateTime.now to string, and display time ago using the time ago package.
Demonstrate separating note title from content by prompting for a title, navigating to an edit screen, and updating nodes with autofocus; future videos cover saving nodes with set preferences.
Display a centered 'no notes' message when the notes list is empty, and switch to a list view once items are added, with an optional Lottie animation.
Replace the map with a custom note model to simplify data handling in flutter. Define a note model with title, note, and timestamp and use typed lists and dot notation.
Implement label color functionality in a notes app using a color picker dialog, showing a color label before the title and timestamp, with consistent layout.
Save and load notes in a Flutter app by using a node storage helper with shared_preferences to convert node models to and from a string list, persisting data across restarts.
Add a blue native splash and logo icon to the notes app by configuring flutter native splash and flutter launcher icons, then run generation commands for Android and iOS.
Explore Gattex, a lightweight state management package for flutter that centralizes state, routes, and dependencies, reduces boilerplate, and keeps UI reactive without heavy setState calls.
Master reactive programming in flutter using gattex get: create a reactive count with obs, import the get package, and wrap widgets with ob to auto update on button taps.
learn how a gattex controller manages state logic and the widget lifecycle, and separate business logic into a home controller to keep ui code clean.
Explore Get navigation in Flutter using Get Material App, learning to push, replace, and replace all screens with Get.to, Get.off, Get.offAll, and Get.back, while passing data between routes.
Learn how to pass data between screens in Get using arguments, with Get.to, Get.off, and Get.offAll methods, including dynamic argument types and accessing them on the second screen.
Master the Gattex controller lifecycle in Flutter by attaching a controller to a stateless widget and observing on init, on ready, and on close.
Use tags to create multiple instances of the same controller and manage separate data in Flutter, demonstrated by tagging two controllers in a home widget to independently increment each count.
Explore dependency management in Flutter using get.put, get.find, and get.lazyPut to register and lazily instantiate controllers, attach them to widgets, and verify registration with isRegistered during navigation.
Learn to show dialogs in Flutter with Get.dialog, build an alert dialog with title, content, and actions, and close it using Get.back.
Learn to create and customize a GetX snackbar in flutter by wiring a button to show a snackbar with title, message, background color, text color, duration, and position.
Learn to toggle light and dark themes in a flutter app using Gattex and GetMaterialApp. Bind a reactive boolean to themeMode with Obx to switch on button press.
Master mobile app development from scratch!
This course takes you on a complete journey — from learning Dart programming to building, deploying, and monetizing full-featured Flutter apps. Whether you’re an absolute beginner or already familiar with coding, this course will help you build professional, real-world applications using Flutter and Firebase.
You’ll start with the basics of Dart (syntax, variables, loops, and OOP), then dive into Flutter to design beautiful, responsive UI for Android and iOS. You’ll learn state management with GetX, integrate APIs using HTTP, and connect your apps to Firebase for authentication, Firestore, and real-time updates.
Through hands-on projects like a Notes App and Chat App, you’ll gain practical experience building apps from start to finish. You’ll also learn how to integrate AdMob ads to monetize your creations and how to publish your app to the Google Play Store and Apple App Store.
By the end of this course, you’ll have the skills to develop, deploy, and maintain powerful cross-platform apps — just like a professional Flutter developer.
Key Topics Covered:
Dart Basics, OOP & Advanced Concepts
Flutter Widgets, UI & Navigation
GetX State Management
Firebase Integration (Auth, Realtime Database, Cloud Firestore, Storage)
HTTP & API Integration
AdMob Monetization
GitHub, Version Control & App Publishing