Professional Documents
Culture Documents
Fodei 1
Fodei 1
of
Bachelor of Technology In
Computer Science & Engineering
in
PROJECT REPORT
Submitted by
Submitted to
I hereby declare that the work, which is being presented in the report entitled “FOOD APP
SYSTEM” in partial fulfillment for the award of Degree of “Bachelor of Technology” in
Department of Computer Science Engineering with specialization in Computer Science
Engineering and Submitted to the Department of Computer Science Engineering, Bhartiya
Institute of Engineering & Technology, Sikar. Bikaner Technical University is a record of my own
investigations carried under the guidance of Mr. Pankaj gothwal, department of computer science
engineering, Bhartiya Institute of Engineering & Technology, Sikar.
I have not submitted the matter presented in this report anywhere for the award of any other degree.
Sikar
i
ACKNOWLEDGEMENT
I have taken efforts in this report. However, it would not have been possible without the kind
support and help of many individuals and organization. We would like to extend my sincere thanks
to all of them.
We are highly indebted to “Bhartiya institute of Engineering & Technology, Sikar” for their
kind co-operation and encouragement which help us in completion of the report.
We would like to express our special gratitude and thanks to our guide Mr. Pankaj Gothwal (HOD)
for giving us such attention and time.
ii
ABSTRACT
The Flutter Report explores the framework's benefit on mobile app development. Flutter, knownfor
its cross-platform capabilities, facilitates the creation of visually appealing and consistent
applications on iOS and Android. This report delves into Flutter's architecture, emphasizing its
widget-based approach and Hot Reload feature, fostering rapid development cycles. The report
highlights Flutter's extensive widget library and its role in crafting responsive and engaging user
interfaces.
Additionally, it discusses the framework's integration with various plugins, enabling seamless
access to device functionalities. Case studies showcase successful applications built with Flutter,
demonstrating its versatility across industries. The report concludes with insights into Flutter's
community support, continuous updates, and its potential role in shaping the future of cross-
platform development.
"Fodei" represents a cutting-edge Flutter application tailored for food enthusiasts seeking local
culinary experiences with a strong emphasis on privacy and authentication. Powered by Firebase
Authentication, the app offers seamless and secure user login and registration processes, ensuring
data confidentiality and user trust. Users can effortlessly browse through a curated selection of
nearby restaurants, each showcased with vivid imagery and detailed descriptions of their signature
dishes. The app's intuitive design facilitates easy navigation and personalized recommendations
based on user preferences, enhancing engagement and satisfaction. By integrating advanced
security protocols and prioritizing user privacy, "Fodei" sets a new standard in digital dining
experiences, promising both convenience and peace of mind for its users.
iii
CONTENTS
1. Introduction 01
1.1. Project Overview
1.2. Objectives of the Project
1.3. Scope of the Project
1.4. Significance of the Project
2. Bckground Study 03
2.1. Introduction to Mobile App Development
2.2. Overview of Fodei Food Application
2.3. Introduction to Flutter
2.4. Why Choose Flutter for Mobile Development
3. System Analysis 06
3.1. Functional Requirements
3.2. Non-Functional Requirements
3.3. Technical Feasibility
3.4. Architectural Design
4. Development Environment 09
4.1. Introduction to Dart Programming Language
4.2. Setting-Up Flutter Development Environment
4.3. Flutter SDK
4.4. Visual Studio Code
4.5. Firebase
5. Application Design 14
5.1. UI Design
iv
5.2. User Experience Consideration
5.3. Navigation & Routing
6. Implementation 21
6.1. Setting-Up the Project
6.2. Implementing the UI
6.3. Backend Integration
8. Future Enhancement 38
9. Further Development 40
10. Conclusion 41
v
Chapter 1
INTRODUCTION
In this thesis, the Flutter technology is utilized to develop a fodei food application. It is a
technique of foods and services through the internet that is growing in popularity and
effectiveness for online. This offers a number of benefits, the most significant of which is that
it is inexpensive and convenient.
The Fodei Food Application is a six-month project aimed at creating an innovative platform
that showcases restaurants and recipes. Designed by a team of experts including product and
project managers, UX/UI designers, front-end and back-end developers, and marketing
specialists, the application focuses on providing users with detailed restaurant profiles and
a wide array of recipes. Key features include comprehensive browsing capabilities, advanced
search and filter options for finding specific cuisines or dishes, and user-generated reviews
and ratings to guide dining choices. The app will also feature interactive recipe sections
where users can explore, save, and share their favorite recipes. The technical stack involves
React Native for cross-platform development, Node.js with Express.js for backend services,
and MongoDB for data management, ensuring a robust and scalable platform.
The primary objective of the Fodei Food Application is to build a comprehensive and
innovative platform dedicated exclusively to showcasing restaurants and recipes, thereby
enriching the culinary experiences of its users. This application will serve as an extensive
1
Dept. of CSE
directory of restaurant profiles, providing users with detailed information on menus, ratings,
reviews, location, and dining options. This will enable users to discover new dining spots,
make informed choices based on authentic feedback, and easily access various cuisines and
specialty dishes.
2
Dept. of CSE
Chapter 2
BACKGROUND STUDY
Incorporating industry best practices in UI/UX design and software development, "Fodei"
aims to set new standards in the food app industry by combining technological innovation
with a focus on user privacy and data security.
The process of mobile app development typically involves several key stages:
conceptualization, design, development, testing, and deployment. During conceptualization,
developers and stakeholders collaborate to define the app's purpose, target audience, and
core features. Designers then create wireframes and prototypes to visualize the user
interface and user experience (UI/UX) design.
Development begins with coding, where developers write the backend logic, frontend
interfaces, and integrate APIs (Application Programming Interfaces) for functionality such
as data storage, user authentication, and third-party service integration.
3
Dept. of CSE
from exploration to enjoyment. Users can seamlessly explore a diverse array of restaurants,
ranging from casual eateries to fine dining establishments, all presented with detailed
menus, vibrant food imagery, and insightful reviews. The app's intuitive interface allows for
effortless browsing, ordering, and customization of meals, ensuring a personalized dining
experience tailored to individual preferences.
With its commitment to quality, convenience, and community, Fodei Food Application aims
to become a trusted companion for food enthusiasts seeking culinary adventures, while also
providing restaurants with a powerful platform to showcase their offerings and engage with
a broader audience. By combining technology with gastronomic delight, Fodei is poised to
set new standards in the digital food industry, offering a comprehensive solution that
satisfies cravings and fuels culinary exploration in today's fast-paced world.
4
Dept. of CSE
Beyond its development efficiency, Flutter excels in performance with its compiled code
approach, ensuring smooth animations and fluid interactions that rival native applications.
This efficiency extends to its platform-specific adaptation, allowing developers to customize
behaviors and appearances for iOS and Android without compromising performance or user
experience. Flutter redefines cross-platform development by combining ease of use,
performance optimization, and a rich set of features that empower developers to create
visually appealing, responsive, and scalable applications across multiple platforms. Its rapid
adoption and continuous enhancement underscore its position as a leading choice for
modern app development.
5
Dept. of CSE
Chapter 3
SYSTEM ANALYSIS
Technology: tools, systems, methods, and materials applied to achieve objectives, solve
problems, and enhance human capabilities, evolving rapidly.
User profile management must enable creating and updating profiles with privacy settings.
A customizable dashboard and intuitive navigation bar should provide easy access to key
features. Content management is crucial, with capabilities for creating, editing, and deleting
posts, comments, and media, complemented by a dynamic content feed. Efficient search
functionality with filters and sorting options is necessary. Users should receive real-time
notifications and have access to in-app notifications for significant events.
Performance is paramount, ensuring the app loads quickly and operates smoothly without
lag, even under heavy usage. This involves optimizing code, reducing load times, and
ensuring a seamless user experience across different devices and screen sizes. Usability
focuses on delivering an intuitive and engaging user interface, making the app easy to
navigate and use, which involves thorough user testing and incorporating feedback into the
design.
6
Dept. of CSE
By addressing these non-functional requirements, developers can create a Flutter app that
not only meets its functional goals but also delivers a high-quality, reliable, and secure user
experience.
Platform Compatibility
Flutter is known for its capability to create cross-platform applications from a single
codebase. This technical feasibility check ensures that Flutter supports the targeted
platforms (iOS, Android, web, desktop). Flutter's compatibility with various operating
systems and devices needs to be assessed to ensure that the app will run smoothly across all
intended environments.
Evaluating the availability and maturity of development tools and libraries is essential.
Flutter has a rich ecosystem with a wide range of plugins and packages available through the
Dart package repository, Pub.dev.
Performance Considerations
Flutter is known for its high performance and fast rendering capabilities, leveraging the Skia
graphics engine. The feasibility study should evaluate whether Flutter can meet the
performance requirements of the application, especially for graphics-intensive or resource-
heavy functionalities. Profiling tools provided by Flutter, such as the Flutter DevTools, can
help in assessing performance metrics and identifying potential bottlenecks.
The strength and activity of the Flutter community can significantly impact technical
feasibility. A vibrant community means better support, more tutorials, active forums, and
quicker resolution of issues.
7
Dept. of CSE
3.4 Architectural Design:
Architectural design in system analysis for Flutter app development is crucial as it lays the
foundation for the entire project, ensuring the system meets both functional and non-
functional requirements. This phase involves defining the overall structure of the
application, selecting the appropriate architectural patterns, and detailing the components
and their interactions. Here's a comprehensive look at the architectural design process in the
context of Flutter app development.
It’s essential to define the architectural goals. These goals typically include scalability,
performance, maintainability, and modularity. Scalability ensures the architecture can
handle growth in terms of users, features, and data. Performance focuses on optimizing the
app to provide a smooth user experience. Selecting the appropriate architectural pattern is
crucial. Popular patterns in Flutter include MVC (Model-View-Controller), although it's less
commonly used due to the nature of reactive programming in Flutter. MVVM (Model-View-
ViewModel) is often chosen for separating UI from business logic, especially with state
management solutions like Provider.
Identifying and defining the components and their interactions is the next step. This involves
specifying the UI components, state management mechanisms, networking for API requests
and responses, data storage solutions, authentication processes, and background services.
Each component should be clearly defined in terms of its responsibilities and interactions
with other components.
8
Dept. of CSE
Chapter 4
DEVELOPMENT ENVIRONMENT
Dart's syntax is easy to learn, especially for developers familiar with languages like Java,
JavaScript, and C#. It features a clean, class-based object-oriented structure with a syntax
that is straightforward and readable.
Dart supports both strong typing and type inference, offering the benefits of static type
checking while maintaining the flexibility of dynamic typing. This hybrid approach allows
developers to write robust and error-free code by catching type-related errors at compile
9
Dept. of CSE
time. At the same time, type inference reduces boilerplate code, making the language concise
and expressive.
Dart's integration with Flutter is a significant advantage, enabling developers to build cross-
platform applications with a single codebase. Flutter's widget-based architecture, combined
with Dart's performance and flexibility, allows for the creation of visually appealing and
highly responsive user interfaces. Dart's capabilities are fully leveraged in Flutter to deliver
a seamless and productive development experience.
Dart is a powerful and modern programming language designed for building fast and
scalable web, mobile, and desktop applications. Its simple syntax, strong typing, and robust
performance features, combined with its seamless integration with Flutter, make Dart an
excellent choice for developers looking to create high-quality applications efficiently. With
ongoing support from Google and a vibrant community, Dart continues to evolve, meeting
the needs of contemporary software development.
Once the Flutter SDK is set up, open a new terminal window and run the command flutter
doctor. This command checks your environment and displays a report of the status of your
Flutter installation. Follow any additional instructions provided by flutter doctor to install
any missing dependencies. This may include setting up Android Studio for Android
development, which can be downloaded from the Android Studio website. During the
installation, make sure to install the Android SDK, Android SDK Platform-Tools, and Android
SDK Build-Tools.
After installing Android Studio, configure it by installing the Flutter and Dart plugins from
the plugin marketplace. Open Android Studio, go to the plugin preferences, and search for
Flutter. Install both the Flutter and Dart plugins and restart Android Studio to apply the
changes.
10
Dept. of CSE
With these steps completed, you are ready to create a new Flutter project. Open a terminal
window, navigate to your preferred development directory, and run flutter create my_app,
replacing my_app with your desired project name. Change into the project directory using
cd my_app.
Finally, to run your Flutter application, connect your Android device or ensure the emulator
is running, and execute the command flutter run in the terminal. This will build and deploy
your Flutter app to the connected device or emulator, allowing you to start developing and
testing your Flutter applications on your Windows machine.
Cross-platform Development: Flutter allows developers to write code once and deploy it
on both Android and iOS platforms, as well as on the web and desktop.
Widgets: Flutter uses a reactive framework that utilizes widgets as the building blocks of
the user interface. These widgets are customizable and allow for fast rendering.
11
Dept. of CSE
Hot Reload: One of Flutter's standout features is hot reload, which allows developers to
instantly see changes made to the code reflected on the emulator, simulator, or physical
device without restarting the app.
Performance: Flutter apps are compiled directly to native ARM code (for mobile) using
Dart's native compilers, resulting in high performance and smooth animations.
Integration: Flutter can be integrated with existing iOS and Android projects, enabling
gradual adoption of Flutter within an organization.
Overall, Flutter SDK simplifies and accelerates the development of mobile, web, and
desktop applications by providing a unified framework with high performance and a rich
set of features.
Visual Studio Code, commonly referred to as VS Code, is a highly versatile and widely
adopted code editor developed by Microsoft. It has garnered immense popularity among
developers due to its powerful features, ease of use, and extensive customization options. VS
Code is designed to cater to a diverse range of developers working across different platforms,
including Windows, macOS, and Linux, making it a truly cross-platform tool.
One of the standout features of VS Code is its extensive extension ecosystem. Developers can
customize and extend the editor's capabilities using a wide variety of extensions available in
the VS Code Marketplace. These extensions cover a broad spectrum of functionalities,
including support for different programming languages, debugging tools, project
management utilities, and integration with various frameworks and services. This flexibility
enables developers to tailor VS Code to their specific workflows and preferences, whether
they are building web applications, mobile apps, backend services, or any other type of
software.
12
Dept. of CSE
Visual Studio Code stands out as a leading choice among code editors for its versatility,
robust features, and strong community support. Whether you're a beginner learning to code
or a seasoned developer working on complex projects, VS Code provides the tools and
flexibility to enhance productivity and streamline the development process effectively.
4.5 Firebase:
Firebase is a comprehensive platform developed by Google, designed to facilitate the
development and management of mobile and web applications. It offers a suite of backend
services, tools, and libraries that enable developers to build high-quality apps quickly and
efficiently. Firebase's primary goal is to streamline app development by providing ready-to-
use solutions for common challenges developers face, such as data storage, authentication,
analytics, and more.
One of Firebase's core features is its real-time database solutions: the Firebase Realtime
Database and Cloud Firestore. These NoSQL databases allow developers to store and sync
data in real-time across clients, enabling collaborative and responsive applications. Whether
it's syncing user data, chat messages, or application states, Firebase databases provide
scalable solutions that integrate seamlessly with client-side libraries for iOS, Android, and
web platforms.
13
Dept. of CSE
Chapter 5
APPLICATION DESIGN
Application design for "Fodei" in Flutter involves creating a visually appealing and intuitive
interface that enhances user experience. Utilizing Flutter's widget library, the design
prioritizes simplicity and functionality, offering easy navigation through restaurant listings,
dish details, and user profiles.
5.1 UI Design:.
14
Dept. of CSE
Flutter supports both Material Design, Google’s design language, and Cupertino, Apple’s iOS
design language, out of the box. Material widgets offer predefined styles and components
like buttons, cards, and sliders, while Cupertino widgets replicate iOS-specific styles and
behaviors. This duality allows developers to create UIs that seamlessly adhere to platform-
specific design guidelines.
Responsive design is another key aspect of Flutter UI development. Developers can leverage
a variety of layout widgets (Row, Column, Stack, Flex) along with constraints and
responsiveness features to ensure that UIs adapt gracefully to different screen sizes and
orientations. This flexibility enables consistent user experiences across various devices.
Flutter benefits from a strong community and a growing ecosystem of packages and plugins.
Developers can leverage community-contributed packages for additional UI components,
animations, state management, and more, expanding Flutter’s capabilities and accelerating
app development.
15
Dept. of CSE
3. Performance Optimization:
o Color Contrast: Adhere to accessibility guidelines for text legibility and color
contrast ratios to accommodate users with visual impairments.
o User Feedback: Provide clear feedback for user actions (e.g., button press
animations, loading indicators) to indicate system response and maintain user
confidence.
o Error States: Design error states and messages that are informative and
actionable, guiding users on how to resolve issues gracefully.
o Iterative Design: Use Flutter’s hot reload feature to iterate quickly on design
changes based on user feedback without losing app state.
16
Dept. of CSE
Incorporating these UX considerations into Flutter development ensures that applications
are not only visually appealing but also functional, accessible, and capable of delivering a
positive user experience across different platforms and devices.
Navigation and routing are some of the core concepts of all mobile application, which allows
the user to move between different pages. We know that every mobile application contains
several screens for displaying different types of information. For example, an app can have a
screen that contains various products. When the user taps on that product, immediately it
will display detailed information about that product.
In Flutter, the screens and pages are known as routes, and these routes are just a widget. In
Android, a route is similar to an Activity, whereas, in iOS, it is equivalent to a ViewController.
In any mobile app, navigating to different pages defines the workflow of the application, and
the way to handle the navigation is known as routing. Flutter provides a basic routing
class MaterialPageRoute and two methods Navigator.push() and Navigator.pop() that
shows how to navigate between two routes. The following steps are required to start
navigation in your application.
Step 2: Then, navigate to one route from another route by using the Navigator.push()
method.
Step 3: Finally, navigate to the first route by using the Navigator.pop() method.
Let us take a simple example to understand the navigation between two routes:
Here, we are going to create two routes for navigation. In both routes, we have created only
a single button. When we tap the button on the first page, it will navigate to the second page.
Again, when we tap the button on the second page, it will return to the first page. The below
code snippet creates two routes in the Flutter application.
17
Dept. of CSE
class FirstRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('First Route'),
),
body: Center(
child: RaisedButton(
child: Text('Open route'),
onPressed: () {
// Navigate to second route when tapped.
},
),
),
);
}
}
18
Dept. of CSE
// Within the `FirstRoute` widget
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondRoute()),
);
}
Now, we need to use Navigator.pop() method to close the second route and return to the first
route. The pop() method allows us to remove the current route from the stack, which is
managed by the Navigator.
To implement a return to the original route, we need to update the onPressed() callback
method in the SecondRoute widget as below code snippet:
Now, let us see the full code to implement the navigation between two routes. First, create a
Flutter project and insert the following code in the main.dart file.
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
title: 'Flutter Navigation',
theme: ThemeData(
// This is the theme of your application.
primarySwatch: Colors.green,
),
home: FirstRoute(),
));
}
19
Dept. of CSE
child: RaisedButton(
child: Text('Click Here'),
color: Colors.orangeAccent,
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondRoute()),
);
},
),
),
);
}
}
20
Dept. of CSE
Chapter 6
IMPLEMENTATION
Developing an eCommerce app with Flutter offers several advantages. Flutter, a UI toolkit by
Google, enables cross-platform development, reducing development time and costs. Its hot
reload feature allows real-time code changes, enhancing productivity. Flutter's widget-based
architecture ensures a consistent user experience across platforms
Design the user interface (UI) and user experience (UX) of your app using Flutter's rich set
of widgets. Create responsive layouts using widgets like Container, Column, Row, and utilize
ListView for scrolling lists of items such as food categories or search results. Customize app
themes using ThemeData to ensure consistent colors, fonts, and styling across your app.
Implement app functionality by integrating with a backend service. Use RESTful APIs to fetch
data such as food items, categories, and user information. For state management, consider
using Flutter's built-in Provider or more advanced solutions like flutter_bloc for handling
complex app states. Finally, prepare your app for deployment by generating an APK
(Android) or IPA (iOS) file. Follow platform-specific guidelines to sign and package your app
for distribution on the Google Play Store or Apple App Store. Consider beta testing your app
with a limited audience to gather feedback and make any necessary improvements before
launching it to a broader audience.
By following these steps and considerations, you can effectively set up and develop your
"fodei" food app project in Flutter, ensuring a smooth development process and a high-
quality end product for your users.
21
Dept. of CSE
Key Widgets to Use-
• AppBar: Displayed at the top of each screen for navigation and title.
• ListView and GridView: Display lists or grids of items (restaurants, food items).
• Card and ListTile: Structured widgets for displaying items with consistent styling.
• Hero: For smooth image transitions between screens (e.g., from menu to food
details).
@override
State<HomePage> createState() => _HomePageState();
}
@override
void initState() {
_isLoading = true;
Future.delayed(Duration(seconds: 2), () {
setState(() {
_isLoading = false;
});
});
22
Dept. of CSE
super.initState();
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () => FocusScope.of(context).unfocus(),
child: Scaffold(
backgroundColor: Color(0xffF9F9F9),
drawer: CustomDrawer(),
appBar: AppBar(
centerTitle: true,
backgroundColor: Colors.white,
elevation: 0,
title:
Text(
'FODEI',
style: TextStyle(
color: Color(0xff4B5563),
fontFamily: 'InterMedium',
fontSize: 17,
),
),
),
body: _isLoading
? Center(
child: CircularProgressIndicator(
color: Color(0xFF32B768),
),
)
: Column(
children: [
// Search(),
AutoSlider(),
NewArrivalText(),
DishCard(),
ExploreRestroText(),
RestroCard(),
],
),
),
);
}
}
23
Dept. of CSE
6.2.2 Recipe Screen:
The recipe screen of the 'Fodei' app epitomizes culinary exploration and expertise,
presenting a curated collection of diverse recipes accessible at users' fingertips. Each recipe
is meticulously crafted to cater to varying tastes and dietary preferences, offering detailed
ingredient lists, precise measurements, and comprehensive cooking instructions.
24
Dept. of CSE
fontFamily: 'InterMedium',
fontSize: 20,
),
),
),
body: _isLoading
? Center(
child: CircularProgressIndicator(
color: Color(0xFF32B768),
),
)
: GridView.builder(
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 10),
itemCount: _recipes.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 10,
mainAxisSpacing: 10,
childAspectRatio: .9,
),
itemBuilder: (context, index) {
return Material(
elevation: 3,
borderRadius: BorderRadius.circular(6),
child: Container(
width: MediaQuery.of(context).size.width / 3,
child: Padding(
padding: EdgeInsets.all(5),
child: Wrap(
children: [
Container(
height: MediaQuery.of(context).size.height / 6,
width: double.infinity,
child: ClipRRect(
borderRadius: BorderRadius.circular(7),
child: Image.network(
_recipes[index].images,
fit: BoxFit.cover,
),
),
),
Column(
children: [
SizedBox(height: 5),
Text(
_recipes[index].name,
textAlign: TextAlign.start,
style: TextStyle(
fontFamily: 'InterSemiBold',
fontSize: 12,
25
Dept. of CSE
),
),
],
),
],
),
),
),
);
},
),
);
}
26
Dept. of CSE
6.2.3 Drawer:
In Flutter, a "drawer" refers to a commonly used navigation panel that slides in from the side
of the screen, typically accessed via a hamburger menu icon or swipe gesture. It serves as a
space-efficient way to provide navigation options and additional functionalities without
cluttering the main UI.
@override
Widget build(BuildContext context) {
final email = _firebaseAuth.currentUser?.email;
final String firebaseUser = _firebaseAuth.currentUser?.displayName ?? '';
print('pppppppppp $firebaseUser');
return Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: [
UserAccountsDrawerHeader(
accountName: Text(
firebaseUser,
27
Dept. of CSE
style: TextStyle(fontFamily: 'InterMedium'),
),
accountEmail: Text(
email.toString(),
style: TextStyle(
fontFamily: 'InterSemiBold',
color: Color(0xFF6B7280),
),
),
currentAccountPicture: CircleAvatar(
backgroundColor: Colors.white,
child: ClipOval(
child: Icon(
Icons.person_outline,
size: 55,
),
),
),
decoration: BoxDecoration(
image: DecorationImage(
fit: BoxFit.fill,
image: NetworkImage(
'https://oflutter.com/wp-content/uploads/2021/02/profile-
bg3.jpg')),
),
),
ListTile(
titleTextStyle: TextStyle(
fontFamily: 'InterMedium',
color: Colors.black,
),
leading: Icon(Icons.password),
title: Text('Change Password'),
onTap: () => Navigator.pushNamed(context, ChangePassword.routeName),
),
ListTile(
titleTextStyle: TextStyle(
fontFamily: 'InterMedium',
color: Colors.black,
),
leading: Icon(Icons.logout),
title: Text('Logout'),
onTap: () async {
await GoogleSignIn().signOut();
await FirebaseAuth.instance.signOut();
Navigator.pushNamed(context, Welcome.routeName);
},
),
],
),
28
Dept. of CSE
);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Color(0xff32B768),
foregroundColor: Color(0xffFFFFFF),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
bottom: Radius.circular(23),
),
),
title: Text(
'Restaurants',
style: TextStyle(
fontFamily: 'InterMedium',
fontSize: 20,
),
),
),
body: _isLoading
? Center(
child: CircularProgressIndicator(
color: Color(0xFF32B768),
),
)
: ListView.builder(
padding: EdgeInsets.only(top: 10),
itemCount: _hotels.length,
shrinkWrap: true,
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 13),
child: Card(
color: Color(0xffFFFFFF),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
elevation: 1,
child: ListTile(
29
Dept. of CSE
leading: ConstrainedBox(
constraints: BoxConstraints(
minWidth: MediaQuery.of(context).size.width * .2,
maxWidth: MediaQuery.of(context).size.width * .2,
minHeight: MediaQuery.of(context).size.width * .2,
maxHeight: MediaQuery.of(context).size.width * .2,
),
child: ClipRRect(
borderRadius: BorderRadius.circular(10),
child: Image.asset(
_hotels[index]["imagePath"],
fit: BoxFit.cover,
),
),
),
title: Padding(
padding: EdgeInsets.only(bottom: 5),
child: Flexible(
child: Text(
_hotels[index]["name"],
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontFamily: 'InterSemiBold',
fontSize: 14,
),
),
),
),
subtitle: Row(
children: [
Icon(
Icons.location_on,
color: Color(0xFF32B768),
size: 15,
),
SizedBox(width: 2),
Flexible(
child: Text(
_hotels[index]["location"],
overflow: TextOverflow.ellipsis,
softWrap: true,
style: TextStyle(
fontSize: 12,
fontFamily: 'InterRegular',
),
),
),
],
),
),
30
Dept. of CSE
),
);
},
),
);
}
31
Dept. of CSE
Integrating backend services in Flutter involves connecting your mobile app to external
servers or databases to fetch and manage data dynamically. This backend integration
enables functionalities such as user authentication, data storage, real-time updates, and
interaction with external APIs.
{
"project_info": {
"project_number": "889149858182",
"project_id": "fodei-5096e",
"storage_bucket": "fodei-5096e.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:889149858182:android:0aaf3ab39da3a0541f4c07",
"android_client_info": {
"package_name": "com.example.fodei"
}
},
"oauth_client": [],
"api_key": [
{
"current_key": "AIzaSyD4gVmyWfVb3lHHjd7xaDZkJlGu1rMhSSk"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": []
}
}
}
],
"configuration_version": "1"
}
32
Dept. of CSE
6.3.2 Implementing Authentication:
Implementing authentication in Flutter typically involves using Firebase Authentication, a
backend service provided by Google. Here’s a brief overview of how you can implement
authentication in Flutter using Firebase:
33
Dept. of CSE
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_facebook_auth/flutter_facebook_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
class AuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn _googleSignIn = GoogleSignIn();
import 'dart:convert';
import 'package:fodei/models/recipe.dart';
import 'package:http/http.dart' as http;
class RecipeApi {
static Future<List<Recipe>> getRecipe() async {
var uri = Uri.https(
'yummly2.p.rapidapi.com',
'/feeds/list',
{
'limit': '24',
'start': '0',
'tag': 'list.recipe.popular',
},
);
final response = await http.get(
uri,
34
Dept. of CSE
headers: {
'x-rapidapi-key': '5857fe0ed7msh85a6cbef8e5ae76p18b40cjsn4c9b6a47c618',
'x-rapidapi-host': 'yummly2.p.rapidapi.com',
'useQueryString': 'true',
},
);
Map data = jsonDecode(response.body);
List _temp = [];
return Recipe.recipesFromSnapshot(_temp);
}
}
APIs are integrated into Flutter apps to retrieve data, such as fetching weather information,
user data from a database, or interacting with third-party services like payment gateways.
The process involves constructing requests with necessary headers and parameters,
handling responses asynchronously, and managing errors gracefully. Flutter's asynchronous
programming model ensures that UI remains responsive during API calls, enhancing user
experience.
35
Dept. of CSE
Chapter 7
CHALLENGES & SOLUTIONS
Developing an eCommerce app with Flutter offers several advantages. Flutter, a UI toolkit by
Google, enables cross-platform development, reducing development time and costs. Its hot
reload feature allows real-time code changes, enhancing productivity. Flutter's widget-based
architecture ensures a consistent user experience across platforms.
In developing the "Fodei" food app, several challenges and their corresponding solutions can
be identified:
1. User Engagement:
Challenge: Sustaining user interest and engagement beyond initial app usage.
Solution: Implement personalized recommendations based on user preferences and
behavior analysis. Introduce loyalty programs, promotions, and social sharing
features to incentivize continued usage.
2. Real-time Updates:
Challenge: Ensuring real-time updates for restaurant availability, menu changes, and
order statuses.
3. Scalability:
Challenge: Handling a growing user base and increasing data volume without
compromising performance.
36
Dept. of CSE
within the app. Provide currency conversion options, language settings, and culturally
relevant content to cater to diverse user demographics.
Solution: Follow Flutter’s design guidelines and utilize responsive design principles.
Conduct usability testing and gather user feedback to refine UI elements and ensure a
seamless user experience across devices.
Addressing these challenges with proactive solutions ensures that "Fodei" can deliver a
secure, engaging, and scalable food app experience that meets the needs of its users while
adhering to industry best practices and regulatory requirements.
37
Dept. of CSE
Chapter 8
FUTURE ENHANCEMENT
Future enhancements for "Fodei" could focus on expanding functionality, improving user
experience, and staying competitive in the food delivery app market. Potential future
enhancements include:
3. Voice Integration: Enable voice commands for navigation, ordering, and customer
support within the app. Integrate with voice assistants like Google Assistant or
Amazon Alexa for hands-free interaction, catering to users seeking convenience.
5. Social Features: Expand social sharing capabilities to allow users to share their dining
experiences, reviews, and favorite dishes directly from the app. Integrate social media
login options and encourage community interaction among users.
7. Offline Mode and Progressive Web App (PWA): Develop an offline mode that allows
users to browse menus, place orders, and view their order history without an internet
connection. Additionally, optimize the app as a PWA to ensure seamless access across
devices and platforms.
38
Dept. of CSE
8. Integration with IoT Devices: Collaborate with IoT devices like smart refrigerators
or kitchen appliances to streamline grocery replenishment, recipe suggestions based
on available ingredients, and personalized meal planning.
10. Multi-Channel Customer Support: Expand customer support options with chatbots,
in-app messaging, and real-time support channels. Implement AI-driven customer
service solutions for efficient query resolution and proactive user engagement.
39
Dept. of CSE
Chapter 9
FURTHER DEVELOPMENT
For further development of "Fodei," several strategic avenues can be explored to enhance
its functionality, user engagement, and market competitiveness.
By focusing on these areas of development, "Fodei" can not only enrich its user experience
but also differentiate itself in the competitive food app market, catering to evolving
consumer preferences and technological advancements. Regular feedback from users and
market trends should guide ongoing development efforts to ensure continued relevance
and growth.
40
Dept. of CSE
Chapter 10
CONCLUSION
In conclusion, "Fodei" emerges as a robust and user-centric food app developed using Flutter,
designed to seamlessly connect users with local dishes and restaurants while prioritizing
authentication and privacy.
With its intuitive interface and extensive database of local eateries, "Fodei" simplifies the
search for culinary delights, offering detailed insights into dishes and restaurant options
tailored to user preferences. The integration of Firebase Authentication ensures secure user
access, safeguarding personal information and transactions.
Looking forward, "Fodei" is poised for further growth through continuous enhancement of
user personalization, expansion into new geographic regions, and integration of advanced
technologies like augmented reality for enriched dining experiences. By adhering to stringent
privacy standards and regularly updating security protocols, "Fodei" maintains user trust and
satisfaction, cementing its position as a trusted companion in discovering and enjoying local
flavors.
41
Dept. of CSE