O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Learn Flutter and Dart to Build iOS and Android Apps

Video Description

A complete guide to the Flutter SDK and Flutter framework to build native iOS and Android apps

About This Video

  • Build engaging native mobile apps for both Android and iOS
  • Use features such as Google Maps, the device camera, authentication, and much more!

In Detail

You don't need to learn Android/ Java and iOS/ Swift to build real native mobile apps! Flutter—a framework developed by Google—allows you to learn one language (Dart) and build beautiful native mobile apps in no time. Flutter is a SDK that provides the tooling to compile Dart code into native code, and it also gives you a rich set of pre-built and pre-styled UI elements (so called widgets) you can use to compose your user interfaces. Flutter is trending, and gets used for major Google apps such as Adwords. It's now marked as "ready for production" so now is the time to jump in and learn it!

This course will teach you Flutter and Dart from scratch. With Flutter, you'll be able to write code only once and ship your apps both to the Apple AppStore and Google Play. Use Google's Material Design to build beautiful yet fully customizable apps in no time with almost zero effort. You can use the rich widget suite Flutter provides to add common UI elements such as buttons, switches, forms, toolbars, lists, and more—or simply build your own widgets—Flutter makes that a breeze too. You're interested in building real native mobile apps for the two most popular mobile platforms - iOS and Android. You want to explore the full set of features Flutter offers. Don't want to spend hours learning two completely different languages

All the code and supporting files for this course are available at: https://github.com/PacktPublishing/Learn-Flutter-and-Dart-to-Build-iOS-and-Android-Apps

Downloading the example code for this course: You can download the example code files for all Packt video courses you have purchased from your account at http://www.PacktPub.com. If you purchased this course elsewhere, you can visit http://www.PacktPub.com/support and register to have the files e-mailed directly to you.

Table of Contents

  1. Chapter 1 : Introduction
    1. Introduction 00:02:45
    2. What is Flutter? 00:02:59
    3. Understanding the Flutter Architecture 00:03:43
    4. Flutter MacOS Setup 00:18:50
    5. MacOS Development Environment 00:04:08
    6. Flutter Windows Setup 00:19:16
    7. Windows Development Environment 00:03:45
    8. Flutter Alternatives 00:03:12
    9. Flutter & Material Design 00:01:25
    10. Flutter is Under Active Development! 00:02:08
    11. Course Outline 00:04:17
    12. How to Get the Most Out Of the Course 00:01:26
  2. Chapter 2 : Diving Into the Basics & Understanding Widgets
    1. Module Introduction 00:01:15
    2. Creating a New Flutter Project 00:04:18
    3. Exploring the Default Project Structure 00:02:20
    4. Diving Into the "main.dart" File 00:02:32
    5. Widgets in Flutter – Theory 00:02:07
    6. Creating a Widget 00:04:56
    7. Adding the "Build" Method 00:04:06
    8. Adding the Scaffold 00:06:35
    9. Diving Deeper Into the Syntax 00:06:06
    10. Adding Cards & Images 00:06:52
    11. Diving Into the Official Docs 00:01:57
    12. Adding a Button 00:03:57
    13. Creating a Stateful Widget 00:05:27
    14. Managing Data inside Stateful Widgets 00:05:12
    15. Adding the Stateful Widget & Lists 00:03:32
    16. Splitting our Code Up 00:06:39
    17. Creating the "Product Manager" Widget 00:05:49
    18. Passing Data to Stateful Widgets 00:07:03
    19. Understanding Lifecycle Hooks 00:09:36
    20. Diving Into Google's Material Design 00:04:46
    21. Understanding Additional Dart Features 00:05:45
    22. Passing Data Up 00:08:53
    23. Understanding "const" & "final" 00:06:06
    24. Wrap Up 00:05:17
  3. Chapter 3 : Debugging Flutter Apps
    1. Module Introduction 00:00:40
    2. Fixing Syntax Errors 00:04:40
    3. Understanding Runtime Errors & Runtime Messages 00:04:17
    4. Dealing with Logical Errors 00:03:46
    5. Using Breakpoints 00:04:53
    6. Debugging the User Interface 00:04:08
    7. More about Visual Helpers 00:02:28
    8. Wrap Up 00:03:06
  4. Chapter 4 : Running the App on Different Devices
    1. Testing Devices 00:01:19
    2. How to Start the App 00:02:41
    3. Testing a Real Android Device 00:01:55
    4. Using the iOS Emulator & a Real Device 00:06:08
    5. Using the Native IDE Consoles 00:01:46
  5. Chapter 5 : Working with Lists & Conditionals
    1. Module Introduction 00:00:57
    2. Creating Scrollable Lists with "ListView" 00:04:26
    3. Optimizing the List Loading Behaviour 00:06:46
    4. Rendering Content Conditionally 00:05:14
    5. Alternative Approaches to Render Content Conditionally 00:05:39
    6. One Important Gotcha 00:01:48
    7. Wrap Up 00:01:53
  6. Chapter 6 : Navigation
    1. Module Introduction 00:01:08
    2. Adding Multiple Pages to our App 00:03:40
    3. Adding Buttons 00:03:15
    4. Implementing a Basic Navigation 00:07:33
    5. Improving the Look of the Product Page 00:04:54
    6. Passing Data around ("Pushing" the Page) 00:08:13
    7. Passing Information Back ("Popping" the Page) 00:07:09
    8. Adding Reactions upon Button Pressing 00:06:06
    9. Adding the Basic Authentication Page & Replacing Routes 00:04:41
    10. Adding the Sidedrawer & the Hamburger Icon 00:04:21
    11. Understanding Stack Based Navigation 00:01:40
    12. Adding Tabs 00:07:25
    13. Finishing the Tab Navigation 00:01:39
    14. Adding Named Routes 00:05:51
    15. Parsing Route Data Manually 00:06:39
    16. Lifting State Up 00:06:34
    17. Using the Named Routes 00:04:50
    18. Working with "onUnknownRoute" as Fallback 00:02:58
    19. Adding Alert Dialogs 00:06:25
    20. Showing a Modal 00:02:53
    21. Wrap Up 00:03:45
  7. Chapter 7 : Handling User Input
    1. Module Introduction 00:00:53
    2. Saving User Input 00:07:11
    3. Configuring Text Fields 00:03:45
    4. Styling Text Fields 00:04:23
    5. Fixing a Bug & Adding a Button 00:03:06
    6. Using our Form to Create a New Product 00:09:24
    7. Improving the Style of our Form 00:04:13
    8. Fixing a Tiny "Error" 00:01:37
    9. Adding a Switch 00:04:44
    10. Wrap Up 00:01:43
  8. Chapter 8 : Diving Deeper Into Widgets
    1. Module Introduction 00:00:55
    2. Exploring the Widget Catalogue 00:03:49
    3. There's More Than One Widget for the Job 00:08:46
    4. Working with Text & Fonts 00:06:48
    5. Working with Rows 00:06:33
    6. Decorating Boxes & Styling a Price Tag 00:07:58
    7. Setting Borders 00:06:30
    8. Understanding "Expanded" & "Flexible" 00:08:51
    9. Adding a Background Image 00:08:01
    10. Centering Input Fields 00:04:04
    11. Adding Icons to our Sidemenu 00:03:43
    12. Adding Icon Buttons 00:05:18
    13. Outsourcing Code into Separate Widgets 00:05:40
    14. Refactoring our Code 00:04:17
    15. Creating a Standardized Tile Widget 00:04:44
    16. Adding Separate Methods for Specific Widgets 00:04:22
    17. Optimizing our Project 00:07:01
    18. Responsive Design Problems 00:03:04
    19. Adding Media Queries 00:06:37
    20. Understanding Media Queries with ListView 00:03:11
    21. Working with Themes 00:03:36
    22. Listening to Touch Events with the Gesture Detector 00:03:08
    23. Wrap Up 00:03:55
  9. Chapter 9 : Working with Forms
    1. Module Introduction 00:00:57
    2. Using the Form Widget 00:07:25
    3. Adding Form Validation 00:06:10
    4. Advanced Validation 00:04:14
    5. Closing the Keyboard 00:03:17
    6. Submitting Data 00:04:07
    7. Outputting Lists of Products 00:06:06
    8. Re-Using the Product Create Form 00:04:16
    9. Setting Initial Values 00:05:39
    10. Updating Products 00:05:18
    11. Ensuring Input Visibility 00:07:33
    12. Wrap Up 00:01:33
  10. Chapter 10 : Improving the App
    1. Module Introduction 00:00:41
    2. Improving the List Tile 00:04:42
    3. Adding the Dismissible Widget 00:04:48
    4. Deleting Products upon Swipe 00:05:12
    5. Restructuring the Code & Wrap Up 00:04:06
  11. Chapter 11 : Models & State Management
    1. Module Introduction 00:00:43
    2. What can be improved? 00:02:45
    3. Adding a Product Model 00:12:03
    4. Creating a Scoped Model 00:09:29
    5. Connecting the Scoped Model 00:11:00
    6. Providing the Scoped Model 00:05:20
    7. Viewing Single Products 00:05:31
    8. Editing & Deleting Products with the Scoped Model 00:17:19
    9. Finishing the Product Model 00:02:48
    10. A Note on Immutability 00:03:48
    11. Creating the Toggle Favorite Method 00:05:41
    12. Working on the Favorite Feature 00:04:42
    13. Adding "notifylisteners" 00:03:38
    14. Finishing the Favorite Feature 00:09:39
    15. Adding a User Model 00:05:43
    16. Using Mixins to Merge Models 00:05:49
    17. Logging in with the Main & the User Model 00:03:04
    18. Connecting Models & Sharing Data 00:14:43
    19. Improving the Code & Fixing an Error 00:08:57
    20. Wrap Up 00:04:35
  12. Chapter 12 : Flutter & HTTP
    1. Module Introduction 00:01:43
    2. Understanding the Backend Setup 00:03:22
    3. Sending a POST Request 00:09:48
    4. Using the Response 00:06:22
    5. Getting Data From a Server 00:05:36
    6. Transforming & Extracting Response Data 00:11:01
    7. Displaying a Loading Spinner 00:07:58
    8. Finishing the Loading Spinner 00:08:11
    9. Updating Products 00:10:53
    10. Deleting Products 00:05:16
    11. Using Pull to Refresh 00:03:59
    12. Adding "fadein" to the Image Placeholder 00:04:12
    13. Adjusting the Scoped Model & the Selected Product 00:18:25
    14. Fixing the Product Selection 00:01:46
    15. Handling Error Responses 00:07:33
    16. Generic Error Handling 00:04:17
    17. Adding "async" "await" 00:05:02
    18. Improving our Code 00:04:23
    19. Wrap Up 00:02:46
  13. Chapter 13 : Authentication
    1. Module Introduction 00:00:53
    2. How Authentication Works 00:03:56
    3. Adding a "Confirm Password" Textfield 00:10:45
    4. Implementing the Signup Functionality 00:12:08
    5. Handling Errors 00:08:20
    6. Adding a Spinner Whilst Signing Up 00:02:14
    7. Adding the Signin Functionality 00:07:11
    8. Refactoring our Code 00:05:15
    9. Authenticating Requests with Tokens 00:09:10
    10. Storing the Token on the Device 00:07:21
    11. Signing Users In Automatically 00:05:30
    12. Adding a Logout Button 00:08:05
    13. Adding Autologout 00:11:05
    14. Route Protection & Redirection 00:14:53
    15. Fixing the Manual Logout 00:02:18
    16. Time for a Quick Recap Regarding our Code Structure 00:05:02
    17. Adding Optimistic Updating to Store the Favorite Status 00:10:00
    18. Fetching the Favorite Status 00:05:16
    19. Allow Editing for own Posts Only 00:06:48
    20. Wrap Up 00:03:35
  14. Chapter 14 : Adding Google Maps to our App
    1. Module Introduction 00:00:58
    2. Unlocking the Required APIs 00:05:38
    3. Requesting Permissions 00:07:26
    4. Preparing our Text Form Field 00:08:00
    5. Adding a Static Dummy Map 00:09:05
    6. Sending a Request to Convert an Address to Coordinates 00:09:05
    7. Adding Geocoding & Maps with Real Coordinates 00:05:12
    8. Working on the Map Control 00:05:30
    9. Storing Location Data in the Database 00:05:53
    10. Fixing a Bug 00:01:54
    11. Loading Location Data from the Backend 00:07:26
    12. Updating an Existing Product's Position 00:14:08
    13. Adding the Update Method for the Location 00:02:15
    14. Adding the Location Package 00:03:32
    15. Getting the User Location 00:14:47
    16. Preventing Memory Leaks 00:03:11
    17. Displaying the Address 00:01:46
    18. Showing a Fullscreen Map 00:11:12
    19. Wrap Up 00:03:08
  15. Chapter 15 : Accessing the Device Camera
    1. Module Introduction 00:00:55
    2. Adding an Image Picker Button 00:08:53
    3. Adding the "Use Camera" & "Gallery" Buttons 00:07:33
    4. Connecting the "Choose" Buttons to the Image Picker 00:07:53
    5. Adding an Image Preview 00:05:12
    6. Adding Text Editing Controllers 00:04:33
    7. Setting Up Firebase Cloud Functions 00:07:03
    8. Adding Server Side Code 00:08:58
    9. Reading Incoming Files & Fields 00:07:54
    10. Storing Data and Move it to a Temporary Storage 00:14:12
    11. Deploying our Firebase Cloud Function 00:06:31
    12. Configuring the Upload Request 00:09:38
    13. Setting Headers to Add the Token 00:07:54
    14. Fixing an Error 00:03:31
    15. Fetching & Using Images 00:03:40
    16. Previewing & Editing the Image 00:06:26
    17. Adding the Image Upload Flow 00:06:06
    18. Deleting Images When Deleting a Product 00:06:45
    19. Wrap Up 00:02:04
  16. Chapter 16 : Adding Animations to our Project
    1. Module Introduction 00:00:53
    2. Adding Floating Action Buttons (FABs) 00:10:48
    3. Adding Functionality to our Favorite Button 00:05:40
    4. Working on the Contact Button 00:04:43
    5. Animating the Contact Icon 00:09:41
    6. Animating the Favorite Icon 00:02:02
    7. Animating the Options Button 00:05:32
    8. Fading the Password Field In & Out 00:08:40
    9. Sliding the Password Field In & Out 00:05:44
    10. Adding Hero Widgets 00:03:12
    11. Adding the Sliver Effect 00:05:55
    12. Adding Route Transitions 00:07:15
    13. Wrap Up 00:02:29
  17. Chapter 17 : Polishing & Bugfixing
    1. Module Introduction 00:00:27
    2. Fixing an Autologout Bug 00:01:54
    3. Fixing the Price Input in Landscape Mode 00:09:42
    4. Fixing the Filtered Product Index 00:01:51
    5. Fixing the Product Title Style & the Favorite Product Selection 00:08:19
    6. Clearing All Products Before Fetching 00:02:09
    7. Testing the iPhone & Fixing the Product Reset Logic 00:04:48
    8. Adding Space on the Product Card 00:01:02
    9. Using Flutter Analyze 00:02:05
    10. Possible Code Restructurings 00:02:18
    11. Managing Global Values 00:03:00
    12. Testing the App on an Android Device 00:02:20
    13. Testing the App on an iPhone & fixing the European Decimal Comma 00:06:22
  18. Chapter 18 : Running Platform Specific Code
    1. Module Introduction 00:00:58
    2. Understanding Material Design & Cupertino 00:03:09
    3. Detecting the Platform 00:04:41
    4. Using Platform Specific Widgets 00:03:11
    5. Adding a Platform Specific Theme 00:06:33
    6. When Should we Use Platform Specific Themes? 00:01:06
    7. Wrap Up 00:02:16
  19. Chapter 19 : Adding Native Code to our Flutter App
    1. Module Introduction 00:01:56
    2. Understanding the Communication Between Flutter & Native Code 00:06:20
    3. Writing Native Android Code 00:10:19
    4. Running Native Android Code 00:05:16
    5. Writing Native iOS Code 00:05:38
    6. Running Native iOS Code 00:05:48
  20. Chapter 20 : Publishing our App to the Google Play & the App Store
    1. Module Introduction 00:01:03
    2. Finalizing our Code 00:01:51
    3. Restricting API Keys 00:02:44
    4. Installing Flutter Launch Icons 00:05:25
    5. Adding a Splash Screen 00:05:45
    6. Adjusting the App Name 00:02:15
    7. Deploying the Android App 00:10:57
    8. Deploying the iOS App 00:12:32
  21. Chapter 21 : Roundup
    1. Course Roundup 00:02:38