Skip to content

Latest commit

 

History

112 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TaskDeck Logo

TaskDeck

A Local-First Assignments & Subtask Manager for Students

Flutter Dart SQLite State Management

TaskDeck is a mobile task management engine built using Flutter and Dart. This application is engineered to move away from flat checklists, employing a normalized relational hierarchy (Users -> Subjects -> Assignments -> Subtasks) powered locally by SQLite.


📖 Description

TaskDeck helps students organize their academic workload by grouping assignments under subjects, breaking each assignment down into subtasks, and surfacing progress through a dashboard view. All data is persisted locally on-device via SQLite, with user accounts, subjects, assignments, and subtasks stored in a fully relational schema with cascading deletes and enforced data-integrity constraints.


⚙️ Installation Steps

  1. Install prerequisites
    • Flutter SDK 3.x (includes Dart 3.x)
    • A configured emulator/simulator, or a physical device with USB debugging enabled, or a desktop/web target
  2. Clone the repository
    git clone https://github.com/rhianne-st/taskdeck-assignment-tracker-app.git
    cd taskdeck-assignment-tracker-app
  3. Install dependencies
    flutter pub get
  4. Generate Riverpod/database code (required, since providers and repositories rely on generated .g.dart files)
    dart run build_runner build --delete-conflicting-outputs
  5. Verify your setup
    flutter doctor
  6. Run the app
    flutter run
    Select your target device when prompted, or pass a platform flag directly, e.g. flutter run -d windows.

▶️ Usage

  1. Register a new account or log in with existing (demo) credentials from the login screen.
  2. From the Home Dashboard, review your assignments at a glance, filtered by status (Not started, Ongoing, On hold, Completed) and by subject.
  3. The Assignments tab shows you the complete list of assignments, allowing filtering and sorting.
  4. Use the Subjects tab to view, edit, or archive subjects, and expand a subject card to see its related assignments.
  5. Open an assignment to view or edit its details, due date, type, notes, and manage its subtasks checklist.
  6. Mark assignments or subjects as archived to move them into the Archived tab, which keeps a separate history of completed work without cluttering the active dashboard.
  7. Log out at any time from the dashboard's app bar action.

Mock Accounts for Testing

Use these demo accounts to explore the app without creating new data:

Note: On first launch, the database seeds mock multi-user demo data via seedMockData(db) so the app is immediately explorable.


✨ Features

  • User Authentication — Local email/password registration and login, with validation (name, email format, minimum password length, duplicate-email checks) handled in AuthService.
  • Subject Management — Create, edit, archive, and delete subjects; each subject displays a live count of its active assignments.
  • Assignment Tracking — Create and edit assignments with a name, due date, type (Assignment, Presentation, Test, Homework, Other), status (Not started, Ongoing, On hold, Completed), and optional notes.
  • Subtask Checklists — Break assignments into individually completable subtasks with inline edit/delete support.
  • Dashboard Filtering & Search — Filter assignments by status or subject, and search across assignments from the dashboard search bar.
  • Progress Indicators — Visual progress bars and status-colour coding reflect completion state at a glance.
  • Archived History — Separately browse archived assignments and archived subjects in a dedicated tabbed view.
  • Cross-Platform Persistence — Local SQLite storage on mobile/desktop via sqflite/sqflite_common_ffi, with a web-compatible mock data layer for browser targets.
  • Data Integrity — Foreign keys, ON DELETE CASCADE relationships, boolean and enum CHECK constraints, and indexed lookups enforced at the database layer.

🛠️ Tech Stack & Architecture Overview

  • Framework: Flutter 3.x / Dart 3.x
  • Local Database: SQLite (sqflite, sqflite_common_ffi, sqflite_common_ffi_web for web)
  • Data Access: Repository pattern on top of a singleton DB connector (AppDatabase)
  • State Management: flutter_riverpod with code-generated providers (riverpod_annotation/build_runner) in lib/states/
  • Architecture: Layer-first with feature subfolders (data/models/screens/widgets)

🗺️ Repository Tree Structure

taskdeck_assignment_tracker_app/
├── assets/                          # Static media assets & UI configuration files
└── lib/                             # Application root source directory
    ├── core/                        # Global system resources & utilities
    │   ├── themes/
    │   └── utils/                   # Shared utility helpers
    ├── data/                        # --- DATA STORAGE MANAGEMENT LAYER ---
    │   ├── database/                # SQLite engine init + mock seeding
    │   ├── repositories/            # CRUD repositories per entity
    ├── models/                      # --- DATA MODEL CONFIGURATION LAYER ---
    │   ├── assignments/             # Task structural objects (assignment_model, subtask_model)
    │   ├── subjects/                # Module structural objects (subject_model)
    │   └── users/                   # User structural object (user_model)
    ├── screens/                     # --- ENTRY POINT VIEW LAYERS (PAGES) ---
    │   ├── auth/                    # Application gateway views (login_screen, register_screen)
    │   ├── dashboard/               # Main analytical landing layout (home_screen)
    │   ├── assignments/             # Detail logs and dynamic submission interfaces
    │   ├── subjects/
    │   └── archived/                # Historical completed record interfaces
    ├── services/                    # --- DATA SERVICES ---
    │   └── auth_service.dart
    ├── states/                      # --- CENTRAL LOGIC & STATE LIFECYCLE LAYER ---
    │   ├── auth/                    # Auth session state
    │   ├── layout/                  # Shell/navigation state
    │   ├── assignments/             # Sorting, filtering, and CRUD state streams
    │   └── subjects/                # Dropdown lifecycle and selection managers
    ├── utils/                       # Shared helpers (colour conversion, status colours)
    ├── widgets/                     # --- REUSABLE MICRO-INTERFACE OBJECTS ---
    │   ├── assignments/             # Cards, indicators, and checklist tiles
    │   ├── auth/                    # Auth screen widgets
    │   ├── layout/                  # App shell, search, filter bar
    │   └── subjects/                # Grid circles and layout sheet overlays
    └── main.dart                    # Application bootstrap initialization root

💾 Local Database Schema Reference

  +-----------------------+
  |         USERS         |
  +-----------------------+
  | PK | id      (TEXT)   |
  |    | name    (TEXT)   |
  |    | email   (TEXT UQ)|
  |    | pass    (TEXT)   |
  +-----------------------+
              |
             1:N (ON DELETE CASCADE)
              |
              v
  +--------------------------------------------+
  |                  SUBJECTS                  |
  +--------------------------------------------+
  | PK | subject_id   (TEXT)                   |
  | FK | user_id      (TEXT) -> users.id       |
  |    | name         (TEXT)                   |
  |    | color_hex    (TEXT, DEFAULT '#A3A29C')|
  |    | is_archived  (0/1 CHECK)              |
  +--------------------------------------------+
  | INDEX: idx_subjects_user (user_id)         |
  +--------------------------------------------+
              |
             1:N (ON DELETE CASCADE)
              |
              v
  +-------------------------------------------------------------+
  |                         ASSIGNMENTS                         |
  +-------------------------------------------------------------+
  | PK | assignment_id           (TEXT)                         |
  | FK | subject_id              (TEXT) -> subjects.subject_id  |
  |    | name                    (TEXT)                         |
  |    | due_date                (TEXT)                         |
  |    | assignment_type         (ENUM CHECK)                   |
  |    | status                  (ENUM CHECK)                   |
  |    | status_before_completion(TEXT, nullable)               |
  |    | notes                   (TEXT, nullable)               |
  |    | is_archived             (0/1 CHECK)                    |
  +-------------------------------------------------------------+
  | INDEXES: idx_assignments_subject (subject_id)               |
  |          idx_assignments_status (status)                    |
  +-------------------------------------------------------------+
              |
             1:N (ON DELETE CASCADE)
              |
              v
  +-------------------------------------------------------------+
  |                          SUBTASKS                           |
  +-------------------------------------------------------------+
  | PK | subtask_id    (TEXT)                                   |
  | FK | assignment_id (TEXT) -> assignments.assignment_id      |
  |    | title         (TEXT)                                   |
  |    | is_completed  (0/1 CHECK)                              |
  +-------------------------------------------------------------+
  | INDEX: idx_subtasks_assignment (assignment_id)              |
  +-------------------------------------------------------------+

About

A local-first Flutter assignment tracker for students featuring a relational SQLite architecture, Riverpod state management, and subtask breakdowns.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages