{"id":26208156,"url":"https://github.com/paishanmadusha/learn-planner-app","last_synced_at":"2026-02-18T07:31:25.101Z","repository":{"id":281777839,"uuid":"946390530","full_name":"PAIshanMadusha/learn-planner-app","owner":"PAIshanMadusha","description":"Learn Planner is a Firebase and Flutter-based app that helps users manage their courses, assignments, and notes efficiently. It provides a structured way to organize learning materials while ensuring persistence and easy access. The app also supports theme persistence.","archived":false,"fork":false,"pushed_at":"2025-03-24T05:47:51.000Z","size":539,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-14T13:03:01.019Z","etag":null,"topics":["dark-light-theme","dart","firebase","firebase-storage","firestore","flutter","flutter-svg","go-router","image-picker","lottie-animation","mobile-application","provider","sharedpreferences"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PAIshanMadusha.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-11T04:13:15.000Z","updated_at":"2025-03-24T05:47:54.000Z","dependencies_parsed_at":"2025-05-29T16:33:14.520Z","dependency_job_id":null,"html_url":"https://github.com/PAIshanMadusha/learn-planner-app","commit_stats":null,"previous_names":["paishanmadusha/learn-planner-app"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/PAIshanMadusha/learn-planner-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PAIshanMadusha%2Flearn-planner-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PAIshanMadusha%2Flearn-planner-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PAIshanMadusha%2Flearn-planner-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PAIshanMadusha%2Flearn-planner-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PAIshanMadusha","download_url":"https://codeload.github.com/PAIshanMadusha/learn-planner-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PAIshanMadusha%2Flearn-planner-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29572394,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T06:19:27.422Z","status":"ssl_error","status_checked_at":"2026-02-18T06:18:44.348Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dark-light-theme","dart","firebase","firebase-storage","firestore","flutter","flutter-svg","go-router","image-picker","lottie-animation","mobile-application","provider","sharedpreferences"],"created_at":"2025-03-12T06:19:51.093Z","updated_at":"2026-02-18T07:31:25.080Z","avatar_url":"https://github.com/PAIshanMadusha.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📚 Learn Planner App\n\nLearn Planner is a **Flutter-based** application that helps users manage their courses, assignments, and notes efficiently. The app provides a structured way to organize learning materials while ensuring persistence and ease of access. Additionally, it supports **light and dark theme persistence**, ensuring that the user's preferred theme remains unchanged even after restarting the app.\n\n## 🚀 Features:\n\n### 📌 Course Management:\n- Users can **add courses** with details such as course name and description, etc.\n- View a **single course** with its details.\n- Users can **edit and delete courses** easily.\n\n### 📝 Assignment Management:\n- Users can **add assignments** related to a course, including details like the name, description, start date, due date, and ending time.\n- View a **single assignment** with its details.\n- Users can **edit and delete assignments**.\n- **⏳ Assignment Deadline Timer**: Tracks due dates, and overdue assignments are displayed separately.\n\n### 🗒️ Notes Management:\n- Users can **add notes** related to a course, including a title, description, etc.\n- Users can upload a **note image** for better understanding\n- View a **single note** with its details.\n- Users can **edit and delete notes**.\n\n### 👤 Profile Management: \n- Users can **upload a profile picture**. \n- Users can **add and edit personal details** (e.g., name, email, age). \n- **User profile image and details persist across app restarts**. \n\n### 🌙 Dark \u0026 Light Mode Support: \n- The app supports **both dark and light modes**. \n- The selected theme **persists across app restarts**. \n\n### 📚 Data Storage \u0026 Real-Time Updates: \n- **Courses, assignments, and notes** are stored in **Firestore** for seamless access across devices. \n- **Note image** is stored in **Firebase Storage**, ensuring secure and scalable storage.\n- The **Home Page** uses **StreamBuilder**, providing **real-time updates** whenever data changes.\n- Other pages utilize **FutureBuilder**, fetching data **only when needed**, ensuring **optimized performance**. \n- **Profile details, including the selected theme**, are stored in **Shared Preferences**, ensuring persistence across app restarts.\n\n### 🎨 Attractive UI Design:\n- The app features a modern and user-friendly interface for a seamless experience.\n\n## 🛠️ Technologies Used:\nThe following technologies are used in this project:\n\n| Technology             | Description |\n|------------------------|-------------|\n| **Flutter**           | UI framework for building cross-platform applications. |\n| **Dart**              | For application logic. |\n| **Firebase Firestore**| NoSQL cloud database for storing courses, assignments, and notes. |\n| **Firebase Storage**  | Used for storing uploaded a note image securely. |\n| **Shared Preferences**| Stores profile details and theme preference locally. |\n| **Provider**          | Manages theme state (dark/light mode) and ensures persistence. |\n| **Go Router**         | For efficient navigation and deep linking. |\n| **Google Fonts**      | Enables custom fonts for enhanced UI design. |\n| **Image Picker**      | Allows users to pick and upload images. |\n| **Flutter SVG**       | For displaying scalable vector graphics. |\n| **Lottie**            | Adds smooth animations to the UI. |\n| **Intl**              | Used for date formatting and localization support. |\n\n## 📦 Dependencies Used:\nThe following dependencies are used in this project:\n```yaml\n  firebase_core: ^3.12.1\n  cloud_firestore: ^5.6.5\n  google_fonts: ^6.2.1\n  go_router: ^14.8.1\n  image_picker: ^1.1.2\n  firebase_storage: ^12.4.4\n  intl: ^0.20.2\n  flutter_svg: ^2.0.17\n  lottie: ^3.3.1\n  shared_preferences: ^2.5.2\n  provider: ^6.1.2\n```\n\n## 🚀 How to Run the Project:\n1. Clone the repository:\n\n```sh\nhttps://github.com/PAIshanMadusha/learn-planner-app.git\n```\n2. Navigate to the project directory:\n\n```sh\ncd learn-planner-app\n```\n3. Install dependencies:\n\n```sh\nflutter pub get\n```\n## 📥 Set up Firebase:\n   \n### ⚠️ If you are unfamiliar with Firebase connecting:\n\n- 📖I’ve written a detailed [Medium](https://medium.com/@ishanmadusha) article explaining the step-by-step process to connect Firebase to Flutter with screenshots.\n\n- 📖**Read my blog on Medium here:** [Link](https://medium.com/@ishanmadusha/how-to-connect-firebase-manually-to-a-flutter-android-project-without-errors-7a2c2a8e2741)\n\n- 📝**Also, you can view my previous project,** [Taskly Firebase App](https://github.com/PAIshanMadusha/taskly-firebase-app.git) I have written clearly on the README how to set up Firebase.\n\n### 📝 To use Firebase services in this project, follow these steps:\n\n- Create a Firebase project at [Firebase Console](https://console.firebase.google.com/).\n- In the Firebase Console, on the left sidebar under the **Build** section, make sure to enable **Firebase Firestore** and **Firebase Storage** in **test mode**.\n- Add Firebase to Your Flutter App: In Firebase Console, select either Android or iOS, depending on your target platform and, Fill the Required details.\n- Download the `google-services.json` file (for Android) and `GoogleService-Info.plist` (for iOS) and place them in the appropriate folders.\n\n### ✅ All setup is complete. Now you can run the app. Make sure there are no errors:\n   ```bash\n   flutter run\n   ```\n\n## 📸 System Screenshots:\n**Below you can view app screenshots related to the Course, Assignment, and Note pages, as well as the Light and Dark themes.**\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/812c1430-341c-4d44-942d-e27808acd1bd\" alt=\"Screenshot 1\" width=\"175\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003cimg src=\"https://github.com/user-attachments/assets/62e7d4c1-8c28-4445-ab49-201bbd971d49\" alt=\"Screenshot 2\" width=\"175\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003cimg src=\"https://github.com/user-attachments/assets/25ac24d0-6a31-489a-9cba-5fa9dd20e07c\" alt=\"Screenshot 3\" width=\"175\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003cimg src=\"https://github.com/user-attachments/assets/b7460e1a-be87-4ce0-a232-6d3ae323bd98\" alt=\"Screenshot 3\" width=\"175\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n\u003c/p\u003e\n\u003cbr\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/650563b2-7257-4200-8b4c-6d00a9cb9baa\" alt=\"Screenshot 1\" width=\"175\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003cimg src=\"https://github.com/user-attachments/assets/3d24e045-ea03-454c-88c8-35caa8de7b26\" alt=\"Screenshot 2\" width=\"175\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003cimg src=\"https://github.com/user-attachments/assets/f17d0311-d503-4ece-a26c-a3a8fe1dc90d\" alt=\"Screenshot 3\" width=\"175\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003cimg src=\"https://github.com/user-attachments/assets/22163e91-202a-4443-a911-cf1c7bd00ee7\" alt=\"Screenshot 3\" width=\"175\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n\u003c/p\u003e\n\u003cbr\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/5b7299f4-c005-4fdc-af92-c8ef3db37fc8\" alt=\"Screenshot 1\" width=\"175\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003cimg src=\"https://github.com/user-attachments/assets/e2c497ef-2730-4d38-8008-178a791eda12\" alt=\"Screenshot 2\" width=\"175\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003cimg src=\"https://github.com/user-attachments/assets/1a312e0d-cfa5-47ad-a978-1b6dcec9a3e7\" alt=\"Screenshot 3\" width=\"175\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003cimg src=\"https://github.com/user-attachments/assets/c2e18fc9-8aa5-4a99-867d-2aa32234ea64\" alt=\"Screenshot 3\" width=\"175\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n\u003c/p\u003e\n\n---\n## 👤 About This Project:\n\nThe **Learn Planner** app is a Flutter-based application designed to help users efficiently manage their courses, assignments, and notes. It provides a streamlined way for users to add, view, edit, and delete their courses, assignments, and notes. With features like real-time updates, profile management, and dark/light theme support, the app offers an organized and user-friendly experience for students and learners.\n\nI created this project to improve my **Flutter** and **Firebase** knowledge, as well as to enhance my development skills. I'm excited to share it with you, and I hope you find it useful!\n\n### 👨‍💻 Created by: \n**Ishan Madhusha**  \nGitHub: [PAIshanMadusha](https://github.com/PAIshanMadusha)\n\nFeel free to explore my work and get in touch if you'd like to collaborate! 🚀\n\n---\n\n## 📝 License:\nThis project is open-source and available under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaishanmadusha%2Flearn-planner-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaishanmadusha%2Flearn-planner-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaishanmadusha%2Flearn-planner-app/lists"}