0% found this document useful (0 votes)
103 views43 pages

Summer Internship Training Report

Rishab Goel completed an app development internship at Impact Digitech Solutions Pvt Ltd from June 2021 to September 2021. During the internship, he worked on developing mobile applications. He submitted a report on his internship experience which included details about the organization, introduction to mobile app development, types of applications and APIs, problem statement, diagrams, proposed work, database design, and hardware/software requirements. The report provided an overview of Rishab's internship project in app development.

Uploaded by

Rishab Goel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
103 views43 pages

Summer Internship Training Report

Rishab Goel completed an app development internship at Impact Digitech Solutions Pvt Ltd from June 2021 to September 2021. During the internship, he worked on developing mobile applications. He submitted a report on his internship experience which included details about the organization, introduction to mobile app development, types of applications and APIs, problem statement, diagrams, proposed work, database design, and hardware/software requirements. The report provided an overview of Rishab's internship project in app development.

Uploaded by

Rishab Goel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 43

SUMMER INTERNSHIP PROJECT

REPORT

APP DEVELOPMENT INTERNSHIP


UNDERTAKEN AT

IMPACT DIGITECH SOLUTIONS PVT LTD.

From: 30 June 2021– 30 September 2021

University School of Information, Communication and


Technology
Guru Gobind Singh Indraprastha University, Dwarka

Submitted To - Submitted By –
Rishab Goel
USICT BTech (CSE), 5th Sem
GGSIPU, Sec-16 C Dwarka 00716403219
Delhi - 110078
DECLARATION

I RISHAB GOEL, a student of Computer Science and Engineering,


Vth semester in University School of Information, Communication
& Technology, Dwarka hereby declare that the work presented in this
project report entitled “App development internship” was
undertaken from June 2021 – September 2021 under the guidance of
Vedvrat Deshpande, project manager at impact digitech solutions pvt
ltd.

The matter embodied in this project report has not been submitted
by me
or anybody else to any institution for award of any other degree or
diploma except to University School of Information, Communication
&
Technology, for the fulfilment of the requirements for the award
of degree of Bachelors of Technology.

Rishab Goel
00716403219
ACKNOWLEDGEMENT

I am thankful to “Impact digitech solutions pvt ltd” for providing me


an opportunity of App development internship. It is a great value
addition in my curriculum. It is my duty to record my sincere thanks
and gratitude towards my mentor at Impact digitech solutions pvt ltd
who helped me in understanding the concepts of app development
through informal lectures and assessments.

I would to express my gratitude towards my teachers at University


School of Information Communication and Technology for
encouraging students in developing their skills, my parents for their
consistent support and fellow collegeas for their support in making
my dream come true.

Rishab Goel
00716403219
CERTIFICATE OF ORIGINALITY
TABLE OF CONTENTS

S No. Topics Page


No.
i) Declaration
ii) Acknowledgement
iii) Certificate of originality

1. Organization Profile
2. Introduction
3. Applications
4. API(Application User Interface)

5. Diagrams

6. Proposed work description

7. Database Description and ER Diagram

8. Hardware and software requirements

9. Code/Snapshots
1. Organization Profile

Impact digitech solutions pvt ltd is a Digital Marketing, Website Designing and Software
Development agency based in Pune. It create beautiful brands, websites and cloud
platforms that empower our clients , create results and help them grow.

It work with small to medium businesses, corporations , government agencies and


entrepreneurs from all over India to create amazing results.

The work is evidence-based which in turn is powered by strategic innovation to help clients
test, improve, and deliver change to stay ahead of the market.

It don’t just mean commercially, although we will always strive to deliver solutions that are
cost-effective.
2. Introduction

Mobile application development is the process to making software for smartphones and
digital assistants, most commonly for Android and iOS. The software can be preinstalled on
the device, downloaded from a mobile app store or accessed through a mobile web browser.
The programming and markup languages used for this kind of software development include
Flutter,Java, Swift, C# and HTML5.

Mobile app development is rapidly growing. From retail, telecommunications and e-


commerce to insurance, healthcare and government, organizations across industries must
meet user expectations for real-time, convenient ways to conduct transactions and access
information. Today, mobile devices—and the mobile applications that unlock their value—
are the most popular way for people and businesses to connect to the internet. To stay
relevant, responsive and successful, organizations need to develop the mobile applications
that their customers, partners and employees demand.

3. Applications

The importance of mobile phones in our everyday life and activities is undeniably
unending. This is so because there is ongoing tremendous transformation in that
mobile phones are no longer the ordinar y communication device it used to be. It has
become the colossal point of attention for individuals and businesses alike, courtesy
of the various incredible features and opportunities that mobile phones offer. The
cumulative progress of mobile technology, the availability and access to high speed
internet and the remarkable communicative interface in these devices results into a
whole level of new and innovative experience mobile computing. This is made
possible through the development of mobile applications (mobile apps).

Today, the availability of mobile apps is on the increase such that it is produce a
noticeable change in the way humans feel and experience computing. F ew years ago,
in other to access the internet, check and read mails, one had to use th e computer but
today this has changed because computing is now carried everywhere in mobile
phones. Imagine buying a train ticket on the go, this is something our ancestors never
imagined or did. Imagine not going to the bank but still transfer money to family and
friends. All thanks to app developers
and top app development companies. No matter which, they have come to the rescue
enabling easy life.
3. API(APPLICATION
USER INTERFACE)

Application Programming Interface (API) is a software interface that allows two


applications to interact with each other without any user intervention. API is a
collection of software functions and procedures. In simple terms, API means a
software code that can be accessed or executed. API is defined as a code that helps
two different software’s to communicate and exchange data with each other.
It offers products or services to communicate with other products and
services without having to know how they’re implemented.
some reason for using API:

Application Programming Interface acronym API helps two different


software’s to communicate and exchange data with each other.
It helps you to embed content from any site or application more
efficiently.
APIs can access app components. The delivery of services and
information is more flexible.
Content generated can be published automatically.
It allows the user or a company to customize the content and services which
they use the most.
Software needs to change over time, and APIs help to anticipate
changes.

Types of API
There are mainly four main types of APIs:

Open APIs: These types of APIs are publicly available to use like OAuth
APIs from Google. It has also not given any restriction to use them. So, they
are also known as Public APIs.

Partner APIs: Specific rights or licenses to access this type of API


because they are not available to the public.
Internal APIs: Internal or private. These APIs are developed by companies
to use in their internal systems. It helps you to enhance the productivity of
your teams.

Composite APIs: This type of API combines different data and service
APIs.
Communication level of APIs:
Here, are some communication level of APIS:
High-Level APIs:

High-level APIs are those that we can generally use in REST form, where
programmers have a high level of abstraction. These API’s mostly concerned about
performing a limited functionality.
Low-Level APIs:

This kind of APIs has a lower level of abstraction, which means they are more
detailed. It allows the programmer to manipulate functions within an application
module or hardware at a granular level.

What is Web APIs?


A Web API is an application programming interface which is use either for web
server or a web browser.
Two types of Web APIs are 1) Server-side API 2) Client-side API
1.Server-side:
Server-side web API is a programmatic interface that consist of one or more publicly
exposed endpoints to a defined request–response message system. It is typically
expressed in JSON or XML

2.Client-side:
A client-side web API is a programmatic interface helps to extend
functionality within a web browser or other HTTP client.
Examples of web API:

Google Maps API’s allow developers to embed Google Maps on


webpages by using a JavaScript or Flash interface.
YouTube API allows developers to integrate YouTube videos and
functionality into websites or applications.
Twitter offers two APIs. The REST API helps developers to access Twitter
data, and the search API provides methods for developers to interact with
Twitter Search.

Amazon’s API gives developers access to Amazon’s product selection.













4. PROBLEM STATEMENT
The topic of travel is very broad as there are many aspects to it. There are a multitude of
different problems that travelers face.
Users need a resource that provides all of the essential information about a destination because
it is time consuming to sort through multiple different sources of information.
VT Travel app provides all the information related to place and its news at a single app.It
covers photos,necessary information and news about place.

5. DIAGRAMS

5.1 Unified model language

5.2 Data flow diagram


6. PROPOSED WORK DESCRIPTION

VT Travels app is a solution for the people who travel frequently and struggle to find a single
platform for all travel related information and news.
Often on internet the information is vast unsorted and hard to find the right piece of
information. This consumes the time of people who are looking for the information related to
travel,and often the information is also very old which may not be relevant in today’s time.

User can log into the app and look for the information of various famous cities in different
countries. The information, news and pictures are provided from the server.Information is
well updated, and sorted.
The concept of apis is used in implementing same.From server the data is fetched in xml
format and decrypted to be shown at the user end.

7. Database Description and ER Diagrams

The Firebase Realtime Database is a cloud-hosted database in which data is stored as JSON. The data
is synchronized in real-time to every connected client.
All of our clients share one Realtime Database instances and automatically receive updates with the
newest data, when we build cross-platform applications with our android, iOS, and JavaScript SDKs.
The Firebase Realtime Database is a NoSQL database from which we can store and sync the data
between our users in real-time.
It is a big JSON object which the developers can manage in real-time. By using a single API, the
Firebase database provides the application with the current value of the data and updates to that data.
Real-time syncing makes it easy for our users to access their data from any device, be it web or
mobile.
ER DIAGRAMS

8. HARDWARE AND SOFTWARE REQUIREMENTS


Android or IOS operating system, free disk space of around 40 mb, minimum 512 mb RAM,
image viewer, pdf viewer.

9. CODE/SNAPSHOTS

App structure

VT Travel app
|---app
|---assets
(It contains all resources used in the app like images. )
|---lib
( It contains folders and dart files containing flutter code for the app.)
|---Pubspec.yaml
(It contains packages,dependencies,environment sdk specifications used in project.)

CODE
Main.dart

import 'package:flutter/material.dart';
import 'package:vt_travels/certificates.dart';
import 'package:vt_travels/contact_us.dart';
import 'package:vt_travels/home.dart';
import 'package:vt_travels/visa.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatefulWidget {


@override
_MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {


int _currentIndex = 0;

@override
Widget build(BuildContext context) {
var color = 0xffDAE0E2;

return MaterialApp(
title: 'VT Travels',
theme: ThemeData(
primarySwatch: Colors.blue,
),
debugShowCheckedModeBanner: false,
home: Home(),
routes: {
Home.id: (context) => Home(),
ContactUs.id: (context) => ContactUs(),
Certificates.id: (context) => Certificates(),
Visa.id: (context) => Visa(),
},
);
}
}
Home.dart

import 'package:flutter/material.dart';
import 'package:vt_travels/griddashboard.dart';

class Home extends StatelessWidget {


static const String id = 'Home';
const Home({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("VT Travels")),
body: Scrollbar(
child: SingleChildScrollView(
child: Column(
children: <Widget>[
SizedBox(
height: 30,
),
Padding(
padding: EdgeInsets.only(left: 16,
right: 16),
child: Row(
mainAxisAlignment:
MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.center,
children: <Widget>[

Image.asset('assets/logo.png', height: 85.00),


SizedBox(
height: 5,
),
Text(
"VT Tours and Travels",
style: TextStyle(
color: Colors.black,
fontSize: 18,
fontWeight:
FontWeight.bold),
),
// SizedBox(
// height: 20,
// ),
],
),
),
],
),
),
SizedBox(
height: 30,
),
Padding(
padding: EdgeInsets.only(left: 16,
right: 16),
child: Row(
children: <Widget>[
Expanded(
child: Container(child:
GridDashboard()),
),
],
),
),
SizedBox(
height: 10,
),
],
),
),
));
}
}

User.dart

class User{
final int id;
final String name;
final String email;
final String gender;
final String status;

User( this.id, this.name, this.email, this.gender,


this.status);
}
Visa.dart

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'user.dart';

class Visa extends StatefulWidget {


static const String id = 'Visa';

const Visa({Key? key}) : super(key: key);

@override
_VisaState createState() => _VisaState();
}

class _VisaState extends State<Visa> {

static const List<Tab> tabs = <Tab>[


Tab(text: 'E-Visa'),
Tab(text: 'Paper Visa'),
];

Future <List<User>> getData() async {


final response =
await
http.get(Uri.parse('https://gorest.co.in/public/v1/users
'));
print(json.decode(response.body));
//var jsonData=jsonDecode( "[" + response.body +
"]");
var jsonData=jsonDecode(response.body);

// List<User> users = [];


// for(var u in jsonData){
// User user = User(u["id"], u["gender"],
u["name"], u["email"], u["status"]);
// users.add(user);
// }
// return users;
return jsonData;

@override
Widget build(BuildContext context) {
return DefaultTabController(
length: tabs.length,
child: Scaffold(
appBar: AppBar(
bottom: const TabBar(
tabs: tabs,
),
),
body: TabBarView(
children: [
FutureBuilder(
future: getData(),
builder: (BuildContext context,
AsyncSnapshot snapshot){

if(snapshot.data==null){
return Text('Loading ...');
}
else {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context,
int index) {
return ListTile(
title:
Text(snapshot.data[index].name),
);
},
);
}
},
),
// SecondScreen(),
Text("Second Screen")
],
),
),
);
}

// FirstScreen() {}
// SecondScreen() {
// Text("Second Screen");
// }
Griddashboard.dart

import 'package:flutter/material.dart';
import 'package:vt_travels/certificates.dart';
import 'package:vt_travels/contact_us.dart';
import 'package:vt_travels/modal/items.dart';
import 'package:vt_travels/visa.dart';

class GridDashboard extends StatelessWidget {


Items item1 = new Items(
title: "Visa",
img: "assets/call-to-action.png",
onTap: 'Visa',
);

Items item2 = new Items(


title: "Travel",
img: "assets/about.png",
onTap: 'Services',
);

Items item3 = new Items(


title: "Services",
img: "assets/about.png",
onTap: '',
);
Items item4 = new Items(
title: "Certificate",
img: "assets/about.png",
onTap: 'Certificates',
);
Items item5 = new Items(
title: "Banking",
img: "assets/about.png",
onTap: '',
);
Items item6 = new Items(
title: "Contact",
img: "assets/about.png",
onTap: 'ContactUs',
);
Items item7 = new Items(
title: "News",
img: "assets/about.png",
onTap: '',
);

@override
Widget build(BuildContext context) {
/*24 is for notification bar on Android*/

List<Items> myList = [item1, item2, item3, item4,


item5, item6, item7];
var color = 0xffDAE0E2;
// var color = 0xff8080E2;

return SingleChildScrollView(
child: GridView.count(
physics: ScrollPhysics(),
shrinkWrap: true,
childAspectRatio: 1.0,
padding: EdgeInsets.only(left: 16, right: 16),
crossAxisCount: 2,
crossAxisSpacing: 18,
mainAxisSpacing: 18,
children: myList.map((data) {
return GestureDetector(
onTap: () {
if (data.onTap == 'ContactUs') {
Navigator.pushNamed(context,
ContactUs.id);
} else if (data.onTap == 'Certificates')
{
Navigator.pushNamed(context,
Certificates.id);
} else if (data.onTap == 'Visa') {
Navigator.pushNamed(context, Visa.id);
}
},
child: Container(
height: 20.00,
width: 20.00,
decoration: BoxDecoration(
color: Color(color),
borderRadius:
BorderRadius.circular(10),
),
child: Column(
mainAxisAlignment:
MainAxisAlignment.center,
children: <Widget>[
SizedBox(
height: 35,
),
Expanded(
child: Image.asset(
data.img,
width: 60,
),
),
SizedBox(
height: 12,
),
Expanded(
child: Text(data.title,
style: TextStyle(
color: Colors.black,
fontSize: 18,
fontWeight: FontWeight.w600,
)),
),
],
),
),
);
}).toList()),
);
}

locationAlertDialog(BuildContext context) {
return showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('Our Service Only Available in
Amravati.'),
actions: <Widget>[
MaterialButton(
elevation: 5.0,
child: Text('Call Now'),
onPressed: () {
Navigator.of(context).pop();
// launch("tel://7020699909");
}),
MaterialButton(
elevation: 5.0,
child: Text('Cancel'),
onPressed: () {
Navigator.of(context).pop();
}),
],
);
});
}
}
Contact Us.dart

import 'package:flutter/material.dart';

class ContactUs extends StatefulWidget {


static const String id = 'ContactUs';
const ContactUs({Key? key}) : super(key: key);

@override
_ContactUsState createState() => _ContactUsState();
}

class _ContactUsState extends State<ContactUs> {


String name = '';
String email = '';
String subject = '';
String mobile = '';
String message = '';
bool isMobileValid = true;
final GlobalKey<FormState> key =
GlobalKey<FormState>();

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Contact VT Travels")),
body: Center(
child: SingleChildScrollView(
padding: const EdgeInsets.all(8.0),
child: Center(
child: Form(
key: key,
child: Column(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.center,
children: <Widget>[
Hero(
tag: 'logo',
child: Container(
height: 100.0,
child:
Image.asset('assets/logo.png'),
),
),
// Name
SizedBox(
height: 15,
),
Padding(
padding: EdgeInsets.only(left: 16,
right: 16, top: 16),
child: TextFormField(
initialValue: name,
onSaved: (val) => name =
val.toString(),
validator: (val) =>
val.toString().length == 10
? null
: 'Name is invalid',
decoration: InputDecoration(
labelText: 'Your Name',
hintText: 'Enter Your Name',
icon: Icon(Icons.person),
isDense: true,
border: OutlineInputBorder(),
),
),
),

// email
SizedBox(
height: 15,
),
Padding(
padding: EdgeInsets.only(left: 16,
right: 16, top: 16),
child: TextFormField(
initialValue: name,
onSaved: (val) => email =
val.toString(),
validator: (val) =>
val.toString().length == 10
? null
: 'email is invalid',
decoration: InputDecoration(
labelText: 'Your Email',
hintText: 'Enter Your Email',
icon: Icon(Icons.email),
isDense: true,
border: OutlineInputBorder(),
),
),
),

// Subject
SizedBox(
height: 15,
),
Padding(
padding: EdgeInsets.only(left: 16,
right: 16, top: 16),
child: TextFormField(
initialValue: subject,
onSaved: (val) => subject =
val.toString(),
validator: (val) =>
val.toString().length == 10
? null
: 'Subject is invalid',
decoration: InputDecoration(
labelText: 'Your Subject',
hintText: 'Enter Your subject',
icon: Icon(Icons.subject),
isDense: true,
border: OutlineInputBorder(),
),
),
),

// Mobile Number
SizedBox(
height: 15,
),
Padding(
padding: EdgeInsets.only(left: 16,
right: 16, top: 16),
child: TextFormField(
// maxLines: 4,
initialValue: mobile,
onSaved: (val) => mobile =
val.toString(),
validator: (val) =>
val.toString().length == 10
? null
: 'Mobile number is invalid',
decoration: InputDecoration(
labelText: 'Mobile Number',
hintText: 'Enter mobile Number',
icon: Icon(Icons.phone),
isDense: true,
border: OutlineInputBorder(),
),
),
),
// message
SizedBox(
height: 20,
),
Padding(
padding: EdgeInsets.only(left: 16,
right: 16, top: 16),
child: TextFormField(
maxLines: 4,
initialValue: message,
onSaved: (val) => message =
val.toString(),
validator: (val) =>
val.toString().length > 0
? null
: 'Message can not be empty',
decoration: InputDecoration(
labelText: 'Message',
hintText: 'Enter Message',
icon: Icon(Icons.message),
isDense: true,
border: OutlineInputBorder(),
),
),
),
SizedBox(
height: 10.00,
),

SizedBox(
height: 30,
),
MaterialButton(
color: Colors.blue.shade400,
onPressed: () {
_submitLogin(context);
},
child: Container(
// width: width*0.9,
child: Text(
'Submit',
textAlign: TextAlign.center,
)),
),

SizedBox(
height: 30,
),
// MaterialButton(
// color: Colors.blue.shade400,
// onPressed: () {
// // Navigator.pushNamed(context,
RegistrationMobile.id);
// // Navigator.of(context).push(
// // MaterialPageRoute(
// // builder: (BuildContext
context) =>
// //
RegistrationMobile(otpType: 'register')),
// // );
// },
// child: Container(
// // width: width*0.9,
// child: Text(
// 'Register',
// textAlign: TextAlign.center,
// )),
// ),
],
),
),
),
),
),
);
}

void _submitLogin(BuildContext context) async {


key.currentState?.save();
if (key.currentState!.validate()) {
// if (password == confirmPassword) {
// // var registerPayload = {
// // 'auths': ['ROLE_BACKER'],
// // 'password': password,
// // 'emailAddress': emailAddress,
// // 'fullname': fullname,
// // 'mobilenumber':
widget.mobileNumber.toString(),
// // 'addressline1': addressline1,
// // 'city': city,
// // 'state': state,
// // 'pincode': pincode.toString(),
// // };

// // String body =
json.encode(registerPayload);
// // http.Response response = await
Services().register(body);
// // // print(json.decode(response.body));
// // print(response.statusCode);

// // final jsonBody =
json.decode(response.body);
// // print("++++++++++++json
body++++++++++++++");

// // if (response.statusCode == 200) {
// // createAlertDialog(context, 'Registration
Successful');
// // // Navigator.pushNamed(context,
LoginScreen.id);
// // } else {
// // print("status code is not 200");
// // // createAlertDialog(context, 'Something
went worng');
// // createAlertDialogForError(context,
'Something went wrong');
// // }

// // Loader on
// // http.Response response = await Services()
// // .validateotp(otp.toString(),
widget.mobileNumber.toString());

// // if (response.body == "true") {
// // print("OTP verify");
// // Navigator.push(
// // context,
// // MaterialPageRoute(
// // builder: (context) =>
Registration(
// // mobileNumber:
widget.mobileNumber,
// // ),
// // ));
// // } else if (response.body == "false") {
// // print("Wrong Otp");
// // }
// }
// else {
// print("Password and confirm password must be
same");
// // createAlertDialogForPassword(
// // context, 'Password and Confirm
Password must be same');
// }
print("Password and confirm password must be
same");
} else {
print("Validate failed");
}
}
}

Certificates.dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:gallery_view/gallery_view.dart';

class Certificates extends StatefulWidget {


static const String id = 'Certificates';
const Certificates({Key? key}) : super(key: key);

@override
_CertificatesState createState() =>
_CertificatesState();
}
class _CertificatesState extends State<Certificates> {
String _platformVersion = 'Unknown';
final GlobalKey<FormState> key =
GlobalKey<FormState>();

@override
void initState() {
super.initState();
}

@override
Widget build(BuildContext context) {
return Scaffold(
// appBar: AppBar(
// title: const Text('Gallery'),
// ),
appBar: AppBar(title: Text("Gallery")),
body: GalleryView(key: key, crossAxisCount: 2,
imageUrlList: [

"http://core.w3trades.com/Content/multimedia/certificat
e/big/asia-sell.jpg",

"http://core.w3trades.com/Content/multimedia/certificat
e/big/dubai.jpg",

"http://core.w3trades.com/Content/multimedia/certificat
e/big/kenya.jpg",

"http://core.w3trades.com/Content/multimedia/certificat
e/big/malaysia.jpg",

"http://core.w3trades.com/Content/multimedia/certificat
e/big/south-africa.jpg",

"http://core.w3trades.com/Content/multimedia/certificat
e/big/switzerland.jpg",

"http://core.w3trades.com/Content/multimedia/certificat
e/big/thailand.jpg",
// "https://images.unsplash.com/photo-
1523719185231-aff40a400361?ixlib=rb-
1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=8
00&q=60",
]),
);
}
}
Items.dart

class Items {
String title;
String img;
String onTap;
Items({this.title = '', this.img = '', this.onTap =
''});
}

Snapshots

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy