Mobile app development has become an essential skill in today's technology-driven world. This learning journey is focused on mobile app development with Flutter and is divided into two tracks. The first track covers the fundamentals of Dart programming and the Flutter framework. It starts with an introduction to Flutter and Dart programming language and covers using variables, collections, functions, classes, and objects. The track then delves into exploring different layouts, including implementing basic Flutter layouts, stateful widgets, stacks, lists, and grids, and building an application using layouts and navigation. The second track focuses on building mobile apps with Flutter, including creating forms, detecting, and handling gestures, implementing and configuring animations, integrating Flutter with backends using HTTP requests, persisting data on the local device, and integrating with Google Firebase. Additionally, it covers testing and debugging techniques for Flutter apps. Throughout the journey, there are hands-on activities and practice labs.
Track1: Fundamentals of Dart Programming and Flutter Framework
In this track of the Mobile Development Skillsoft Aspire journey, the focus will be on creating forms and animations in Flutter, integrating Flutter with backends, and testing and debugging Flutter Apps.
In recent years application development has become more complex and time-consuming as users expect the same application and functionality to be available across different platforms. The result has been increased adoption of technologies such as Flutter that support cross-platform development allowing organizations to use a single code-base to develop applications across multiple environments. In this course, you will learn how Flutter helps develop cross-platform applications. You will explore Flutter's layered architecture and understand how the Flutter framework, Flutter engine, and platform-specific embedder enable cross-platform development in a performant and efficient way. Finally, you will install and set up the Dart SDK on your local machine and use the IntelliJ IDEA to write Dart code.
Developing Flutter applications requires programmers to be familiar with the Dart programming language. Dart is an object-oriented programming language that supports mixin-based inheritance and functional constructs. In this course, you will learn how variables in Dart are initialized and used. Next, you will work with basic collection constructs such as the list, set, and map and explore some new operators such as the spread operator. You will also see how Dart implements sound null safety using specific types and null assertion and null aware operators. Finally, you will learn that functions in Dart are first-class citizens, which means that functions can be stored in variables, passed in as input arguments to other functions, and returned as values from functions.
Dart is an object-oriented programming language that supports mixin-based inheritance and functional constructs. Mixin-based inheritance allows you to reuse code from a class without having to inherit from that class and is very useful for modeling inclusive functionality for classes. In this course, we will focus on object-oriented programming constructs in Dart. We'll explore generative and factory constructs, and also see how const constructors can be used to create objects that are compile-time constants. Next, you will learn to use getters and setters in Dart and see how you can implement operator overloading, a feature borrowed from C++. You will discover class inheritance and interface implementation and see how to apply the mixin-based inheritance model to reuse code from classes. You will learn how to install and use third-party libraries from the pub.dev repository and include these as dependencies in your code using the pubspec.yaml file. Finally, you will use futures and the async and await keywords to write asynchronous code in Dart.
The Dart programming language is primarily used to develop cross-platform Flutter applications. Flutter allows you to use the same code to build apps not only for Android and iOS mobile platforms but also for web and desktop applications. In this course, you will set up with the correct environment to develop Flutter applications on Windows and MacOS devices. You will set up Android Studio and the Flutter SDK and configure the plugins needed for Flutter development on this integrated development environment (IDE) Next, you will create a simple Flutter application and run this sample app using the command line and Android Studio on the Chrome web browser. You will then configure an Android Virtual Device on Android Studio and run this application on the Android emulator. For MacOS users you will configure the iOS simulator and run the application on this simulator. Finally, you will test-drive your Flutter installation by creating a very simple web application using Flutter HTML elements and wiring up event handlers.
The Flutter cross-platform framework offers a wide range of layout options to develop your application's pages. Flutter layouts enable you to create beautiful, responsive design for the right look and feel in your mobile applications. In this course, you will learn how Flutter widgets work, how they use composition to build complex user interface component hierarchies, and how the Flutter framework uses the element tree and render tree to render widgets to screen in an efficient way. Next, you will use Material Design components to create simple application pages. You will learn how to work with the Container, Text, Padding, and Image widgets to build elegant app pages. Finally, you will learn how to work with the Scaffold widget to create app pages that follow Material Design best practices.
Widgets in Flutter can be stateless or stateful. Stateless widgets have properties that do not change, while stateful widgets contain mutable states that can be updated. In this course, you will create Flutter widgets that hold state information in a different object. You will see how you can handle user actions that update state and how Flutter automatically redraws widgets when their state changes. Next, you will build and use a number of different stateful widgets such as counters, checkboxes, and widgets that update state based on a timer. You will share state across multiple widgets by storing state in a parent component, and you will use callbacks to allow child components to change the parent's state. Finally, you will learn to design layouts using the Column and Row widgets in Flutter.
The stack, list, and grid layouts are very popular in mobile applications because they make great use of screen real estate and allow you to represent information in a manner that is easy for users to understand and parse. In this course, you will learn to use the Stack widget to layer widgets one on top of another. You will use relative and positioned widgets as a part of the stack and see that positioned widgets give you very fine-grained control over where a widget is placed. Next, you will represent elements using the ListView. You will configure the properties of the ListView to match your use case and use the ListTile and the Card widgets to build list elements. You will also build list views with an infinite number of elements. Finally, you will represent your app elements using the GridView.
Mobile applications often have several pages. These pages need to be connected correctly using navigation and routing. In this course, you will explore how Flutter uses a stack data structure to enable navigation. You will use the Navigator class to navigate between pages and use named routes to improve the readability and robustness of navigation code. Next, you will bring together everything you have learned in this path to build a simple application for an e-commerce company using Material Design for Android devices and Cupertino widgets for iOS devices. Finally, you will learn to connect a device to Flutter and test your app on a mobile phone.
Final Exam: Fundamentals of Dart Programming and Flutter Framework will test your knowledge and application of the topics presented throughout the Fundamentals of Dart Programming and Flutter Framework track.
Mobile applications often need to collect user input. User input in Flutter is collected using input widgets and these input widgets can be embedded in forms. In this course, you will discover the types of input widgets you can use to accept input. You will explore use cases and special characteristics of each input type and how inputs can be grouped together into forms with a submit button. Next, you will implement and handle changes in a variety of inputs. You will use change handlers to handle input changes and state updates and use grouped widgets to update the same state using multiple inputs. Finally, you will see how input widgets can be embedded as part of Flutter forms. You will learn how form state is accessed and validated using form field widgets and how you can create custom widgets that can be embedded in Flutter forms.
Users often interact with mobile devices using gestures, which are semantic actions that can update the state of the application. Flutter makes it easy to detect and handle gestures using built-in widgets. In this course, you will discover how the GestureDetector in Flutter helps you detect motions in your app that are gestures. The GestureDetector allows you to configure callbacks for the specific gestures you want to handle and allows you to detect and respond to these gestures. If multiple gesture detectors are activated, Flutter uses the gesture arena to disambiguate and invoke the callback on the right gestures. Next, you will explore how to implement gesture detection in your application. You will learn to handle tap, long press, double tap, and drag-related gestures. You will also configure callbacks for other states in the gesture lifecycle such as the start or end of a gesture. Finally, you will see how you can override the default behavior of the gesture arena by configuring a raw gesture detector that allows multiple winners in the arena.
Mobile applications can be made fun, interactive, and interesting using animations. Animations add continuity to transitions that you make in your application and make them more intuitive for users. Flutter offers built-in animatable widgets known as implicitly animated widgets while at the same time giving you the tools that you need to build your own custom advanced animations. In this course, you will explore how animations provide an illusion of motion and how Flutter makes animating widgets straightforward using implicit animations. Next, you will explore implicit animations using a variety of animatable widgets such as the AnimatedContainer, AnimatedOpacity, AnimatedCrossFade, and AnimatedSlide. You will learn to create and manage explicit animations that use the AnimationController and how to generate the right property values for your animations using tweens. You will also see how the AnimatedBuilder improves the performance of your animations. Finally, you will explore a range of animations such as Hero animations, staggered animations, and physics simulations that animate objects using the laws of physics.
All mobile applications display data to users and allow users to manipulate this data. The data can be stock quotes in a trading application, products in an e-commerce application, or restaurants and dishes in a food delivery application. This data is usually stored in a remote backend and exposed via HTTP REST endpoints. In this course, you will explore data persistence and create an e-commerce application using the Fake Store API. Then you will serialize and parse JSON data using the dart:convert library. Finally, you will set up and run your own HTTP server on your local machine and write code to handle GET, PUT, POST, and DELETE requests to view, update, add, and delete products from your app's catalog. When you are finished with this course, you will have the skills and knowledge to use the http and dart:convert libraries to access and update data from a remote server using HTTP requests.
When building mobile applications, there is often the need to store data locally on the mobile device, either across the application's sessions or to store user preferences. Based on the size and complexity of the data, there are several choices to store data locally. Discover how to use the local file system on your device to store data in files. Use the path_provider and path packages to access the application documents directory and create, read, and write files. Next you will use the SharedPreferences plugin to store simple data that can be expressed as key-value pairs. Then you will explore several real-world use cases for SharedPreferences and storing user preferences in an app. Finally, you will investigate how to store larger amounts of structured data using an embedded SQLite. Upon course completion, you will be able to select the appropriate data storage for local data persistence and integrate your Flutter application with this storage.
One of the most popular backends for mobile applications is Google's Firebase, a cloud-hosted platform specifically for mobile and web application developers that provides a host of scalable and robust services. Begin this course by exploring the ephemeral and application states in your mobile app. Then use the providers package in Flutter to set up and manage the app state using the provider components - the ChangeNotifier, the ChangeNotifierProvider, and the Consumer. Next you will integrate your app with Google Firebase to create and configure your app to connect to the Firebase backend and use Firebase services. Finally, you will build a real-world e-commerce application using Firebase as a backend, store data in the Cloud Firestore NoSQL database, and configure your app to receive real-time updates from Firestore using StreamBuilder widgets. You will set up authentication for your application using Firebase Authentication services, configure login and signup pages, and include functionality for user favorites, cart, and checkout.
In real-world app development, tests ensure that bugs and other issues can be found and fixed early in the development and release cycle. Flutter offers a range of testing and debugging tools that make it easy to write tests and debug Flutter applications. Through this course, learn about the types of tests that can be written for Flutter applications. Explore the test types and how to choose between them. Next, practice writing tests for use cases, using mocks to eliminate external dependencies in code, and writing widget tests to test stateless and stateful widgets. Finally, discover Flutter tools for debugging and profiling apps. Upon completion, you'll be able to implement tests and debug a Flutter application.