Overview
In this assignment, you will build a multi-screen Flutter application that allows users to complete and submit survey forms.
All survey responses must be stored in Firebase Cloud Firestore.
This task is designed to move you beyond a single-widget Todo app into a more realistic application with navigation, multiple UI components, data storage, and form handling.
Learning Outcomes
By completing this assignment, you will be able to:
-
Implement multiple screens in Flutter using navigation
-
Build reusable UI widgets instead of a single large widget
-
Integrate Firebase Cloud Firestore for data storage
-
Handle form validation and submission flows
-
Apply basic state management for form and loading states
-
Structure a Flutter project using clean separation of concerns
Task Description
You must develop a Flutter app that allows a user to:
-
View a list of available surveys
-
Select a survey and view its details
-
Complete a multi-question survey form
-
Submit the survey and store responses in Firebase
-
View a confirmation screen after submission
No authentication is required unless you choose the optional extension.
Functional Requirements
✅ 1. Home Screen
-
Display a list of surveys from Firestore
-
Each item shows:
-
Survey title
-
Short description
-
-
Tapping a survey navigates to its detail screen
✅ 2. Survey Detail / Start Screen
-
Show survey title and description
-
“Start Survey” button to begin
✅ 3. Survey Form Screen
Must include at least 4 question types, such as:
-
Short text input
-
Long text input
-
Single-choice (radio)
-
Multi-choice (checkbox)
-
Dropdown
-
Rating (e.g., 1–5)
Requirements:
-
Each question must be its own widget
-
Validation for required fields
-
Submit button:
-
Disabled until form is valid
-
Shows loading state
-
Saves response to Firestore
-
✅ 4. Thank You Screen
-
Confirmation message
-
Button to return to Home
Firebase Requirements
Use Cloud Firestore with the following structure:
Additional requirements:
-
Store one document per submission
-
Enable Firestore offline persistence
-
No direct Firestore calls inside UI widgets (use a repository/service)
Technical Requirements
✅ Minimum
-
At least 3 separate screens
-
Reusable widgets (not one single file)
-
State management using:
-
Provider / ChangeNotifier OR
-
Riverpod OR
-
Cubit
-
-
Form validation
-
Loading and error handling states
-
Clean project structure (e.g.,
screens/,widgets/,data/)
✅ Navigation
Use Navigator.push / pop or routing package.
Deliverables
Submit the following:
-
Git repository link (GitHub/GitLab/Bitbucket)
-
Source code must include:
-
lib/folder -
pubspec.yaml
-
-
A short README.md containing:
-
App description
-
Setup instructions
-
Firebase setup notes
-
List of completed features
-
Assessment Criteria (Rubric)
| Criteria | Marks |
|---|---|
| Multiple screens implemented correctly | 20 |
| Firebase integration works and stores responses | 25 |
| Reusable widgets and clean UI structure | 20 |
| Form validation and submission flow | 15 |
| State management used appropriately | 10 |
| Loading/error/empty states handled | 10 |
| Total | 100 |