
Discover how to get help in this course by using the Udemy QA discussion boards, direct messages, and Twitter, with typical response times.
Embark on a three-arc course that builds a Dart foundation, including syntax, patterns, and docs, before mastering Flutter for mobile apps, using Dart Pad, a local editor, and an emulator.
Explore a high level overview of Dart, including its object oriented design with classes, static typing, a C-style syntax, and multiple runtime environments.
Explore the browser-based dartpad editor for learning dart by writing small snippets. Run code with the top run button and view output on the right.
Create and run a dart program from scratch in dart pad, define void main with a string named name, then print a message; examine each line to learn Dart basics.
Explore Dart basics by dissecting a Hello World snippet line by line, explaining variable declaration with var, initialization, semicolons, and calling a function to assign a value.
Explore how Dart functions are declared, named, and called, with argument lists and function bodies. Learn about return types and the main function, which starts every Dart program.
Understand the Dart type system by exploring how every value and variable has a type, how references relate to values, how Dart infers types, and when to annotate.
Explore Dart's basic types—string, int, double, and dynamic—and learn why a strong type system can boost performance, simplify large projects, and expose simple errors early.
Explore how Dart's string interpolation and the print function inject variables into strings, and learn when to use ${expression} for properties like length.
Explore object oriented programming in Dart by building classes and objects, using fields and methods to manage data, with blueprints guiding each instance.
Build a person class in Dart with a string first name and a print name method. Create an instance in Dart Pad and explore the optional this dot reference.
Create a new Person instance inside main and set its firstName property. Call the printName method to display the name, and demonstrate type safety by preventing non-string values.
Explore constructor functions in Dart, ensuring every person instance has a first name at creation, using a parameter to auto-assign to the firstName property with a shorthand.
Review how Dart constructors initialize class instances with a parameter list and a this dot shorthand to automatically assign a property, using the new keyword for instantiation.
Explore modeling a deck of 52 playing cards in Dart with classes, covering ranks and suits, and implement creating, shuffling, and dealing a hand to simulate gameplay.
Model two core Dart classes for the cards app—a card and a deck—and begin adding fields and methods, acknowledging multiple valid OOP designs.
Identify two classes: a card with rank and suit as strings, and a deck with a cards list of Card objects, enabling printing and basic object-oriented design in Dart.
Design and implement a deck class to encapsulate interactions with a deck of playing cards, and add methods like print cards, shuffle, and deal.
Explore using a constructor to automatically initialize a deck with 52 cards when creating a new deck instance, populating the deck's cards property without extra calls.
Define two lists for ranks and suits, like ace through king and diamonds, hearts, clubs, spades, in the deck constructor, then generate all 52 cards with a nested for loop.
Iterate over suits and ranks to create cards with a constructor that assigns rank and suit, then add cards to the deck and test 'ad is not a function' error.
Diagnose why adding to an uninitialized cards list yields a null error in a deck class. Initialize cards with an empty list to enable add and prevent null reference errors.
Explore controlling how objects print by implementing a two string method in the deck class, then use print to inspect the cards list and verify contents.
Implement toString for the deck by delegating to the cards list's toString, then define toString on the card class to display rank of suit for readable output.
Shuffle a list in Dart using the built-in List.shuffle from the core library, and explore the Dart API to leverage the standard library to randomize a deck of cards.
Add a cards with suit method to the deck that takes a suit string, annotates it as string, and returns all matching cards using list.where, without modifying the original deck.
Students learn to filter a deck's cards by suit using the where method, passing an anonymous function that returns true when card.suit equals the target suit, producing a lazy iterable.
Refactor a where function with shorthand arrow syntax in Dart, using an implicit return for single-expression bodies and knowing when to use the long-form version.
Explore how the Dart list subList method differs from dealing cards, showing that subList returns references rather than duplicating objects, and discuss start-end indices in implementing a deal function.
Learn how sub list returns a list by referencing cards from start to end without removing them from the deck, and implement deal to update deck and return a hand.
Implement a remove card method in Dart by using a predicate with the list's removeWhere, removing a card by suit and rank from a deck.
Implement a deck class remove card method that takes suit and rank and uses removeWhere to delete the matching card from the list. Refactor to a concise arrow function.
Learn how named parameters in Dart prevent arg-order bugs by refactoring a card constructor to accept named rank and suit, enabling flexible argument order and safer code.
Install the Flutter CLI on macOS and set up the Flutter SDK. Configure Android or iOS development environments and use an emulator for testing.
Download and extract the Flutter SDK by moving the zip to your workspace, then set up your path variable to include the Flutter directory for creating and running projects.
Wire up the Flutter SDK to the terminal by updating the PATH variable to include the Flutter bin directory, then verify by opening a new terminal and running Flutter.
Resolve Flutter tool initialization by agreeing to the Xcode iOS license: run sudo xcodebuild -license, review and accept, then re-run Flutter to continue building.
Generate a new flutter project with flutter create, naming it Pix Like So, in your workspace, and anticipate files, dependencies, and emulator-related errors.
Set up android on macos for flutter development by installing android studio from the flutter getting started guide. Download the dmg and drag android studio into the applications folder.
Open Android Studio, create a new emulator to run Flutter code, and complete the setup wizard to download the required tools for Flutter on your machine, noting a large download.
Install android dependencies, create a new project in Android Studio to build an emulator, then open the main Android Studio window to configure the simulator.
Install missing Android build tools and dependencies, resolve Gradle sync, and set up an Android emulator in Android Studio to continue building a new Flutter project.
Create and launch an Android emulator using the AVD Manager, selecting a device like Nexus 5X, downloading API 28 image, and starting the emulator to run your Flutter app.
Open the Android emulator, run flutter doctor --android-licenses to accept licenses, navigate to your Pix project directory, and run flutter run to launch the app on the emulator.
Launch the app with the Flutter run command on the emulator, finishing the Android setup; if you want iOS on macOS, continue in the next section.
Install Xcode from the App Store on macOS and update it if needed. Set up the iOS emulator on macOS to run the iOS simulator.
Open Xcode from the app launcher, install the additional components when prompted, enter your password, and wait as the installation completes.
start the iOS simulator from Xcode's developer tools, confirm an iPhone X simulator, and deploy your flutter app using flutter run in the project directory.
Execute the flutter run command in the project directory, compile, and deploy the starter app to a mobile device, showing the default application on screen as the section ends.
Install Flutter on Windows by downloading the Flutter SDK, extracting it, and updating the path to include the bin folder, then configure environment variables and restart.
Install the Flutter SDK, set the PATH, and verify the flutter command. Create a new flutter app named picks and prepare an Android emulator by downloading Android Studio.
Install Android Studio and Android Virtual Device by running the installer and completing the setup. Expect the installation to take a few minutes and resume in the next section.
Install and set up Android Studio, skip importing settings, choose standard, and download additional files as needed, pausing to complete the setup and repeat steps.
Launch Android Studio, start a new project, and proceed through the setup to reach the main editing interface, then generate a new Android emulator and wait for it to initialize.
Set up and run an Android Studio emulator by installing build tools, using the AVD Manager, and creating a Nexus 5X virtual device with the latest system image.
Select the downloaded Android system image and start the emulator. Run flutter doctor, accept Android licenses, then deploy the Flutter app to the emulator with flutter run.
Finish android setup by running Flutter run to build and deploy your app to the Android emulator, showing the default Flutter app. Prepare to begin development in the next section.
Explore how Flutter uses widgets to build apps, reuse components, and compose interfaces with scaffold, app bar, bottom navigation bar, and floating action button, leveraging named parameters.
Explore building a Flutter app that fetches images from the internet and displays them in a list, using widgets and a bottom-right button to reveal each image and its title.
practice the four step design process in flutter by initializing a fresh main.dart, importing a helper library, defining a main function, creating a text widget, and rendering it on screen.
Explore how import statements bring Dart and Flutter libraries into your main.dart, including third-party, Dart standard, and project files, with syntax like import 'package:flutter/material.dart'.
Define the void main function in Dart, build a MaterialApp with a home text widget showing hi there, and learn how saving and trailing commas affect code readability.
Apply Flutter basics by wiring a material app to display a text widget on screen, using runApp with the app variable, then reload with Shift+R to see Hi there.
Learn to use the scaffold widget with an app bar and a floating action button in a material app to create a header and a bottom right action.
Pass a text widget to the app bar's title property to display app bar text, using the scaffold and app bar constructor, and consult the Flutter documentation for guidance.
Learn to add a bottom-right floating action button to a scaffold using the named parameter floatingActionButton and understand how app bar and floating action button widgets are referenced.
Learn to handle the required onPressed parameter for Flutter's floating action button by supplying a void callback and printing a message on press.
Explore how the floating action button uses a child parameter to display a widget, try rendering a plus symbol, and adjust size in the emulator as you update code.
Replace a text widget with an icon on the floating action button, using icons.Add as the first argument, and explore the material icons catalog to choose different icons.
Extract application logic from main into a new custom app widget in lib/src/app.dart. Define a stateless widget with a build method that composes these widgets.
Learn to extend the stateless widget base class in Flutter and distinguish stateless from stateful widgets, focusing on when a widget maintains its own data and uses the build method.
Define a build method in a stateless widget that returns the screen widgets, accepting a build context, and understand how Flutter uses this method to render the app on screen.
Learn how to import a local file into Main.dart and pass a custom widget to runApp, with diagrams showing Dart standard library, lib directory, and package imports.
The lecture reviews refactoring main.dart by moving logic into a new custom stateless widget in app.dart, detailing the build method, context, and the widget tree.
Refactor the app widget from stateless to stateful to bind a counter to the screen, starting at zero images and incrementing with each button press.
Refactor a stateless widget into a stateful one by adding state class, create state, and a counter updated by set state displayed in scaffold body via a floating action button.
Explore generics in Dart by turning a slot into a generic class with a type parameter, enforcing insertions for a chosen shape like circle or square.
Explore why Flutter uses two classes and a createState method to preserve state across re-renders, illustrating how app state is cached and not reset.
If you're tired of spinning your wheels learning Swift or Android, this is the course for you.
Animations? You will learn it. Architectural Patterns? Included. Navigation? Of course!
Flutter is a newcomer to the mobile development scene. Strongly supported by Google, it is already viewed as an ideal platform for replacing native Swift and Android development. Thanks to its amazing standard library of widgets, fast compile times, and amazing documentation, developers are falling in love with Flutter!
This course supports MacOS and Windows - develop Android and iOS apps easily!
Flutter apps are created using the language Dart. No problem if you're not already familiar with Dart; this course includes a lightning fast introduction to Dart at the beginning, along with hours of bonus lectures at the end of the course solely focused on Dart and its advanced features. If you come from a background working with Java, Ruby, or Javascript, you'll feel right at home with Dart - the syntax is nearly identical, only a few core concepts need to be learned. Dart is a strongly typed language - but don't be discouraged if you're not a fan of strong types! I spend special time in this course to make it extra clear why developing with a strongly typed language is a breeze!
One of the greatest challenges around developing Flutter applications right now is understanding how to design and architect apps. Flutter is still in rapid development, and the community at large is still trying to find out the best techniques. With this in mind, special attention is paid in the course to making sure you understand the primary design patterns advocated by Google's Flutter team, including both the 'Stateful Widget' pattern and the 'BLOC' pattern. The 'BLOC' pattern makes heavy use of Reactive Programming techniques, which you'll learn about in this course as well. These techniques can be easily applied to other languages and frameworks as well - talk about a bonus!
Of course, no mobile app is complete without some nice looking animations. You'll learn how to build animations using Flutter's standard library of tools, which can be easily used to make interactions that your users will love. You should plan to complete the course with knowledge of how to reference Flutter's standard library of widgets to assemble complex animations.
Sign up today and you will:
I've built the course that I would have wanted to take when I was learning Flutter. A course that explains the concepts and how they're implemented in the best order for you to learn and deeply understand them.