Skip to content

πŸ’‘ An offline Flutter todo list app using Dart & SQLite Database with notification reminders & latest UI designs.

License

Notifications You must be signed in to change notification settings

theakhinabraham/doable-todo-list-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

67 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation


Logo

Doable Todo List App

πŸ’‘ An offline Flutter todo list app using Dart & SQLite Database with notification reminders & latest UI designs.


Report Bugs Β· Request Features

GitHub repo size GitHub contributors GitHub stars GitHub forks Twitter Follow
Flutter Dart SQLite License: MIT






Table of Contents
  1. About The Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Contributing
  6. License
  7. Contact
  8. Acknowledgments

About Doable: Todo List App

An offline, single‑device to‑do app built with Flutter and SQLite. Features task management with reminders, date/time pickers, and filtering capabilities.

πŸ“± Features

  • βœ… Task Management - Create, edit, delete tasks with title and optional description
  • ⏰ Smart Scheduling - Date and time pickers with reminder notifications
  • πŸ”„ Repeat Rules - Daily, Weekly, Monthly options with custom weekday selection
  • πŸ” Advanced Filtering - Filter by date, time, completion status, repeat rules, and reminders
  • πŸ“± Intuitive UI - Swipe-to-delete completed tasks, clean Material Design
  • πŸ’Ύ Offline First - Local SQLite storage, no network required
  • πŸ—‘οΈ Data Management - Clear all data option in settings

(back to top)

Built With Flutter

Flutter is an open source framework developed and supported by Google. App Developers use Flutter to build mobile apps for multiple platforms (iOS/android) with a single codebase.

(back to top)

Getting Started

This is an example of how you may give instructions on setting up your project locally. To get a local copy up and running follow these simple example steps.

Prerequisites

Make sure you have git installed, type git --version in your cmd. (git official download page: https://git-scm.com/downloads)

git --version

Installation

Steps to install code and app into your local device (and run app on emulator or mobile device)

  1. Fork this repository (and leave a star if you like) by click on the fork button on the top right side.
  2. From your copy of this repo located yourname/doable-todo-list-app, copy the code link: https://github.com/your-user-name/doable-todo-list-app.git
  3. Create a folder named doable in your local device to store these files.
  4. Open terminal and type cd path/to/doable (replace /path/to/doable with the real path to the new doable folder we created in step 3)
cd path/to/doable

5. Clone your copy of this repo using `git clone link-you-copied-in-step-2`
git clone https://github.com/your_username_/doable-todo-list-app.git

  1. Open the folder doable/doable-todo-list-app in your code editor (I use VS Code) & start coding.
  2. Run emulator or connect your mobile device with cable to run app on mobile.

(back to top)

πŸ—οΈ Tech Stack

Technology Purpose Version
Flutter UI Framework 3.0+
SQLite Local Database via sqflite ^2.4.0
SharedPreferences Settings Storage ^2.3.2
flutter_svg Vector Graphics ^2.0.10
intl Date Formatting ^0.20.2
url_launcher External Links ^6.3.0

πŸ“‚ Project Structure

lib/
β”œβ”€β”€ main.dart # App entry point
β”œβ”€β”€ screens/ # UI screens
β”‚ β”œβ”€β”€ home_page.dart # Main task list
β”‚ β”œβ”€β”€ add_task_page.dart # Create new tasks
β”‚ β”œβ”€β”€ edit_task_page.dart # Modify existing tasks
β”‚ └── settings_page.dart # App settings
β”œβ”€β”€ data/ # Data layer
β”‚ β”œβ”€β”€ database_service.dart # SQLite management
β”‚ └── task_dao.dart # Database operations
β”œβ”€β”€ models/ # Data models
β”‚ └── task_entity.dart # Task data structure
└── task_repository.dart # Repository pattern facade

πŸ—„οΈ Database Schema

Tasks Table

CREATE TABLE tasks(
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
description TEXT,
time TEXT, -- Display format: "11:30 AM"
date TEXT, -- Display format: "26/11/24"
has_notification INTEGER NOT NULL DEFAULT 0,
repeat_rule TEXT, -- "Daily" | "Weekly" | "Monthly" | "Weekly:"
completed INTEGER NOT NULL DEFAULT 0,
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
updated_at TEXT
);

🎨 Architecture

The app follows a clean layered architecture:

graph TB
A[Presentation Layer] --> B[Repository Layer]
B --> C[Data Access Layer]
C --> D[SQLite Database]
A --> E[SharedPreferences]

subgraph "Presentation Layer"
    A1[HomePage]
    A2[AddTaskPage]
    A3[EditTaskPage]
    A4[SettingsPage]
end

subgraph "Data Layer"
    C1[TaskDao]
    C2[DatabaseService]
end

Key Components

  • Presentation Layer: Stateful/Stateless widgets managing UI state
  • Repository Layer: TaskRepository as a facade for future extensibility
  • Data Access Layer: TaskDao + DatabaseService for SQLite operations
  • Domain Model: TaskEntity for data serialization

πŸ”§ Configuration

Android Setup

android {
compileSdk 34
defaultConfig {
minSdk 21
targetSdk 34
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
}

Build Variants

  • Debug: Development with debug symbols
  • Release: Optimized production build

🎯 Usage Examples

Creating a Task

final task = TaskEntity(
title: "Complete project documentation",
description: "Write comprehensive README",
time: "2:30 PM",
date: "27/01/25",
hasNotification: true,
repeatRule: "Daily",
completed: false,
);

await TaskDao.insert(task);

Filtering Tasks

// Filter by completion status
final incompleteTasks = tasks.where((t) => !t.completed).toList();

// Filter by date
final todayTasks = tasks.where((t) => t.date == "27/01/25").toList();

// Filter by repeat rule
final weeklyTasks = tasks.where((t) =>
t.repeatRule?.startsWith("Weekly") == true
).toList();

πŸ“± Screenshots

Roadmap

Version 1.1.0

  • Add, edit and remove tasks
  • Complete task and undo completion
  • Display tasks on home screen
  • Completed tasks are striked through, swipe to delete
  • Completed tasks move to the bottom
  • Repeat feature (daily, weekly, monthly, no repeat)
  • Set date and time for task
  • Notification reminders

Version 2.0

  • Cloud Sync - Optional cloud backup and sync
  • Rich Notifications - Local notification scheduling
  • Advanced Repeats - Custom repeat patterns
  • Categories & Tags - Task organization
  • Dark Mode - Theme customization

Version 2.1

  • Collaboration - Shared task lists
  • Analytics - Productivity insights
  • Export/Import - JSON backup functionality
  • Widget Support - Home screen widgets

See the open issues for a full list of proposed features (and known issues).

(back to top)

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!

How to get access to my project:

  1. Fork this repository (and leave a star if you like) by click on the fork button on the top right side.
  2. From your copy of this repo located yourname/doable-todo-list-app, copy the code link: https://github.com/your-user-name/doable-todo-list-app.git
  3. Create a folder named doable in your local device to store these files.
  4. Open terminal and type cd path/to/doable (replace /path/to/doable with the real path to the new doable folder we created in step 3)
cd path/to/doable

  1. Clone your copy of this repo using git clone [link you copied in step 2]
git clone https://github.com/your_username_/doable-todo-list-app.git

  1. Navigate to the root folder of this project
cd /path/to/doable-todo-list-app

  1. DO NOT MAKE CHANGES TO THE main BRANCH, create your own branch and name it your name
git branch my-user-name

  1. Confirm that your new branch my-user-name is created
git branch

  1. Select your new branch my-user-name and work on that branch only
git checkout my-user-name

  1. Confirm that you are in your branch my-user-name and NOT on main
git branch

Staying up-to-date with original code:

  1. You have to shift to main branch first but do NOT push to main branch
git checkout main

  1. Perform a pull to stay updated. It must show Already up-to-date
git pull

  1. Now you have to shift back to your branch my-user-name again before you can continue editing code
git checkout my-user-name

  1. Perform a pull again in my-user-name your own branch
git pull

Once you are ready to push the changes, follow these steps:

  1. Confirm you are in my-user-name your own branch
git branch

  1. Push the changes
git add .
git commit -m "issue #24 fixed"

  1. Choose git push origin HEAD, do NOT choose git push origin HEAD:master
git push
git push origin HEAD

(back to top)

License

Distributed under the MIT License. Click LICENSE.md for more information.

(back to top)

πŸ™ Acknowledgments

πŸ“ž Support

Akhin Abraham - instagram.com/akhinabr - theakhinabraham@gmail.com

Repository Link: https://github.com/theakhinabraham/doable-todo-list-app

(back to top)

Acknowledgments

Here are some resource links to help with this project and it's contribution:

(back to top)

About

πŸ’‘ An offline Flutter todo list app using Dart & SQLite Database with notification reminders & latest UI designs.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Contributors 4

  •  
  •  
  •  
  •  

Languages