Mobile Application Development - Introduction 2023
Mobile Application Development - Introduction 2023
● explain the steps and processes involved to release your apps to the iOS
App Store and Google Play Store
Native vs Cross Platform
Native apps are exclusively developed for a single platform, such as
The Native apps have direct access to the hardware of the device such as
they acquire all the possible advantages of the device and deliver a
high-performance and better user experience
Native vs Cross Platform
Cross-platform app development is the process to develop an app that is
compatible with various platforms such as iOS or Android
Flutter (https://github.com/flutter/flutter),
Xamarin (https://github.com/xamarin?WT.mc_id=dotnet-35129-website)
Cross Platform Mobile App Development Options
React Native (https://reactnative.dev)
Native Development
An app platform for building Android and iOS apps with .NET and C#
https://github.com/flutter/flutter
Flutter Great Features
It uses the Dart programming language
Hot reload allows you to make updates to the code and the UI that
rebuild the widget tree, then deliver them live to emulators and devices —
without having to reload state or recompile your app
hot reload helps you quickly and easily experiment, build UIs, add
features, and fix bugs faster
Flutter Great Features
It supports hot restart
Hot restart takes a little longer than hot reload because it loads the
changes, restarts the app and resets the state
You need to use a full restart when you make certain significant changes
to the code, including anything changing state management
Flutter Great Features
It supports Material Design and Cupertino
Because widgets are composable, you can be creative and flexible with the
UI
Flutter Great Features
It was designed with accessibility in mind, with out-of-the-box support for
dynamic font sizes and screen readers and a ton of best practices around
language, contrast and interaction methods
for complex 2D and 3D games, you’d probably prefer to base your app
on a cross-platform game engine technology like Unity or Unreal
Flutter also produces app binaries that are bigger in size than those built
with platform frameworks
When not to use Flutter
Certain platforms
Flutter doesn’t support Apple Bitcode yet, which means that it doesn’t
support watchOS, tvOS or certain iOS app extensions
How to set up development platform
Go to https://docs.flutter.dev/get-started/install and follow the
instruction for your platform
Install Android Studio
Flutter relies on a full installation of Android Studio to supply its Android
platform dependencies
https://docs.flutter.dev/get-started/editor
Set up validation
Validate your setup with the
Dart provides the language and runtimes that power Flutter apps
https://dart.dev/overview
https://dart.dev/guides
Features of Dart
Optimized for UI
Productive development
Make changes iteratively: use hot reload to see the result instantly in your
running app
https://dart.dev/
Features of Dart
Fast on all platforms
Compile to ARM & x64 machine code for mobile, desktop, and backend or
https://dart.dev/
Dart: The language
Type safe
Dart offers sound null safety, meaning that values can’t be null unless
you say they can be
Built-in types, collections, and other core functionality for every Dart
program
dart:collection
Richer collection types such as queues, linked lists, hashmaps, and binary
trees
Dart: The libraries
dart:convert
dart:math
dart:io
File, socket, HTTP, and other I/O support for non-web applications
Dart: The libraries
dart:async
dart:isolate
Web platform: For apps targeting the web, Dart includes both a
development time compiler (dartdevc) and a production time compiler
(dart2js). Both compilers translate Dart into JavaScript
Brief introduction to Dart
Dart language features
https://dart.dev/samples
Hello World
Every app has a main() function
To display text on the console, you can use the top-level print() function
void main() {
print('Hello world');
}
Variables
Dart is type-safe. However, most variables don’t need explicit types
because of dart`s type inference feature
void main() {
print(add(2,3));
}
Recommended way of defining functions
add(x, y) { int add(int x, int y) {
return x+y;
return x+y;
}
}
Functions
A shorthand => (arrow) syntax is handy for functions that contain a single
statement
void main() {
print(add(2,3));
}
int add(int x, int y) => x+y;
Functions
A shorthand => (arrow) syntax is is especially useful when passing
anonymous functions as arguments
flyByObjects
.where((name) => name.contains('turn'))
.forEach(print);
Exercises
Write a dart function that find maximum between two numbers
Write a dart function that find the sum of all odd numbers between start and
end integer values
Comments
// This is a normal, one-line comment.
supported */
Imports
// Importing core libraries
import 'dart:math';
// Importing files
import 'path/to/my_other_file.dart';
Class
import 'dart:math'; Notice the underscore (_)
class Circle { How many constructors,
double _radius; properties, and methods are
there?
static const double PI = 3.14;
Circle(this._radius); What is the role of the _ symbol
Circle.inMeter(this._radius);
double area() => PI * pow(_radius, 2);
get radius => _radius;
}
Class
import 'dart:math'; Class with two properties, two
class Circle { constructors, one method and
one getter method
double _radius;
static const double PI = 3.14;
Circle(this._radius); Constructors
Circle.inMeter(this._radius);
double area() => PI * pow(_radius, 2);
get radius => _radius;
} Getter
Inheritance
Dart has single inheritance class Circle extends Shape {
double _radius;
abstract class Shape {
static const double PI = 3.14;
double area();
}
Circle(this._radius);
@override
double area() => PI * pow(_radius, 2);
get radius => _radius;
}
Mixins
Mixins are a way of reusing code in multiple class hierarchies
await Future.delayed(oneSecond);
print(message);
}
Exceptions
To raise an exception, use throw
void main(){
int x, y;
void main() {
int x = 1, y = 0;
try {
x / y;
} catch (IntegerDivisionByZeroException) {
print('Y cannot be zero');
}
}
Evaluation and Assessments
Evaluation and Assessment Type Weigh in %
Laboratory Assignments 20
Quizzes and Classroom Exercises 10
Project 25
Final 45
Missing any of the Lab, Project, or Final assessments results in an incomplete (NG) grade; if
you can not bring any evidence for your absence, eventually, the NG grade turns to F
General Project Requirements
You should form a group with a maximum of 5 members
● A backend (REST API) that serve the front end with the two service and
Authentication/Authorization
● Write a brief description about the project in the README.md file (include
Members Full Name and ID)
● You cannot use titles used when the course was offered before
General Project Requirements
Other requirements that you must consider
● You can not host your REST API, or Database on the Internet, it should run
locally on your machine
Signup
Login/Logout
Change username (or password)
Delete Account
Authentication Related Requirement
Authorization feature should include the following capabilities
Defining Roles
Assigning/Revoking roles to users
Allowing/Restricting users access to certain
screens based on their permissions/roles
Removing Roles from the system
Application Architecture
Your project should have the architecture shown on
the right
https://resocoder.com/2020/03/09/flutter-firebase-ddd-c
ourse-1-domain-driven-design-principles/
https://resocoder.com/wp-content/uploads/2020/03/DDD-Flutte
r-Diagram-v3.svg
Project Evaluation
Feedback Evaluation
Flutter Apprentice, By Michael Katz, Kevin David Moore, Vincent Ngo &
Vincenzo Guzzi 2021, 2nd Edition