# π LearnSphere - LMS
A mobile-first Learning Management System (LMS) built with Flutter to simplify online education. LearnSphere enables learners to enroll in programs, track their progress, and stay updated through notifications.
---
## π Vision
**Simplify online education** by offering an intuitive and streamlined mobile LMS experience for learners.
---
## π― Objectives
- Allow users to **browse and enroll** in educational programs.
- Enable learners to **track progress** through a friendly UI.
- Provide timely **notifications** and updates for enrolled users.
- Create a smooth, easy-to-navigate mobile learning journey.
---
## π§ Learner Navigation Flow
```text
Learner opens the app
β Logs in
β Browses programs
β Enrolls in a program
β Views progress
β Receives notifications- π User Authentication (Login/Signup)
- π Program Listing (Explore available programs)
- π Enrollment System (Join selected programs)
- π Progress Tracking (Monitor course advancement)
- π Notification System (Stay informed with alerts)
learnsphere-lms/
β
βββ lib/ # All Dart code
β βββ main.dart # App entry point
β βββ blocks/ # State management, business logic (e.g. BLoC, Cubits, controllers)
β βββ models/ # Data models/entities (e.g. Course, User, etc.)
β βββ screens/ # UI pages / views (Login, Home, Details, etc.)
β βββ widgets/ # Reusable UI components (buttons, cards, etc.)
β
βββ assets/ # Images, fonts, JSON, media files
βββ pubspec.yaml # Flutter dependencies, assets declarations
βββ README.md # Project documentation & overview
βββ android/ β¦ # Android-specific files (auto-generated by Flutter)
βββ ios/ β¦ # iOS-specific files
βββ test/ # Unit & widget tests
βββ β¦ other Flutter project files β¦
To set up and run the project locally:
git clone https://github.com/sam-in07/LearnSphere.git
cd learnsphere-lms
flutter pub get
flutter runThis project uses Git for version control. β Initial commit and push completed to GitHub.
π LearnSphere GitHub Repository
π GitHub Tracker for LearnSphere #Tracker
This project now uses Firebase Firestore to store and fetch program data dynamically for the Program Listing Screen.
-
Go to the Firebase Console.
-
Create a new project (or use an existing one).
-
Click βAdd Appβ β βFlutterβ and follow the on-screen instructions.
-
Download the
google-services.jsonfile and place it inside your Flutter project:android/app/google-services.json -
Open your
pubspec.yamlfile and add the following dependencies:dependencies: firebase_core: ^3.3.0 cloud_firestore: ^5.4.4
-
Run the following commands to initialize Firebase:
flutter pub get flutterfire configure
-
Initialize Firebase in your app by updating the main function:
void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); }
Firestore Collection: programs
Each document inside programs represents a course category (e.g., data_structures, java, python, etc.).
Example Document:
{
"program_name": "Data Structures",
"logo_url": "assets/images/program_images/datastructure.png",
"total_courses": "5",
"total_learners": "63k"
}The Program Listing Screen uses a StreamBuilder to fetch data in real time from Firestore.
Example Code:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
class ProgramListingScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Programs')),
body: StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance.collection('programs').snapshots(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Center(child: Text('Error loading data'));
}
final programs = snapshot.data!.docs;
return ListView.builder(
itemCount: programs.length,
itemBuilder: (context, index) {
var data = programs[index].data() as Map<String, dynamic>;
return Card(
margin: EdgeInsets.all(8),
child: ListTile(
leading: Image.asset(data['logo_url']),
title: Text(data['program_name']),
subtitle: Text(
'${data['total_courses']} Courses β’ ${data['total_learners']} Learners',
),
),
);
},
);
},
),
);
}
}- Connected Program Listing Screen to Firestore.
- Replaced hardcoded data with live Firestore data.
- Added loading indicators and error messages for better user experience.
- Updated documentation and code comments for clarity.
- Implement a Program Details Screen that displays specific course details for each program.
- Add user feedback form connected to the Firestore
feedbackcollection.



