A Simple Todo app design in Flutter to keep track of your task on daily basis. Its build on BLoC Pattern. You can add a project, labels, and due-date to your task also you can sort your task on the basis of project, label, and dates

Overview

WhatTodo

Codemagic build status License API Uplabs FlutterWeekly AwesomeAndroid Buy Me A Coffee

logo

Life can feel overwhelming. But it doesn’t have to.

A Simple To-do app design in flutter to keep track of your task on daily basis. You can add project, labels and due-date to your tasks

Features

  • Build on BLoC Architecture Pattern
  • Add Projects by specifying a unique color to it
  • Add Labels by specifying a unique color to it
  • Add Task by defining its priority
  • Swipe to delete or complete the task
  • Sorting Task
  • Works offline using Sqflite database

BLoC Diagram

This diagram show case the dependencies to create a feature specific BLoCs.The HomeBloc is independent and used as communication channel between its child widgets.

Widget-BLoC Relationship

This diagram shows that how each widget uses BLoCs.

Project

The app already has a preloaded Inbox project. You can add more projects by clicking add project button on SideDrawer. From material color list you can specify any single color to the project

You can assign only one project to a single task

Labels

You can add multiple labels by clicking add Labels button on SideDrawer. From material color list you can specify any single color to the label

You can assign multiple labels to a single task

Task

You can add task with multiple attributes. You must assign a project to task if not than by default it will be added in Inbox project. Task can have zero or more to label assing to it

Swipe the Task

You can delete a task by swiping left-to-right or your can mark task as completed by swiping right-to-left. You can also undo a completed task by clicking on options menu where it shows the list of all completed tasks there you can swipe right-to-left to undo the completed task

Sorting

You can sort your task with date i.e today and next 7 days and also acoording to project and labels

How to contribute?

What's next?

  • Editiable Project,label and Task
  • Deletable Project and Label
  • Comment/Description in Task
  • Reminder with notification

Questions? 🤔

Hit me on twitter Twitter Medium Facebook

Credits

License

Copyright 2020 Burhanuddin Rashid

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Comments
  • Prepare for null-safety

    Prepare for null-safety

    Description

    Update sample to target new stable release of Flutter. Migrated to android embedding v2.

    Notes

    There is only one blocker for sound null safety migration, that Integration test hasn't been migrated to null safety on stable branch of Flutter. Do you want me to proceed and migrate to unsound null safety?

    opened by AyushBherwani1998 18
  • [Suggestion] New Logo for WhatTodo

    [Suggestion] New Logo for WhatTodo

    Hello @burhanrashid52 , I want to contribute to your project, I want to create a new logo and icon for this application with material design style and it's free. Do you want it?

    enhancement 
    opened by zularizal 7
  • delete label and delete project functionality added

    delete label and delete project functionality added

    I have added delete label and delete project functionality at any time from drawer by clicking delete icon . on pressing delete icon that label or that project can be deleted

    opened by gourav1486 4
  • When run

    When run "flutter run" error!

    Exception in thread "main" java.util.zip.ZipException: error in opening zip file at java.util.zip.ZipFile.open(Native Method) at java.util.zip.ZipFile.(ZipFile.java:219) at java.util.zip.ZipFile.(ZipFile.java:149) at java.util.zip.ZipFile.(ZipFile.java:163) at org.gradle.wrapper.Install.unzip(Install.java:214) at org.gradle.wrapper.Install.access$600(Install.java:27) at org.gradle.wrapper.Install$1.call(Install.java:74) at org.gradle.wrapper.Install$1.call(Install.java:48) at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65) at org.gradle.wrapper.Install.createDist(Install.java:48) at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128) at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)".

    opened by DoubleDa 3
  • remove status bar odd color

    remove status bar odd color

    when I open the sidebar , I found that drawer color is not changing the status bar color which is Odd. This was because of there are some default padding of ListView

    Output

    opened by nitishk72 3
  • line 95 of home.dart - Failed assertion: boolean expression must not be null - isDataChanged

    line 95 of home.dart - Failed assertion: boolean expression must not be null - isDataChanged

    Debugging on iPhone 5s, when I click to add a task, it opens the Add Task route. And when then I press the upper "back" button, on home.dart line 95 (if (isDataChanged) {) It shows "Failed assertion: boolean expression must not be null"

    It seems that you are not using the right way to get the value of "isDataChanged".

    opened by marcelmenezes 2
  • Settings and correction

    Settings and correction

    • lib\pages\about: correction link git hub and add settings part

    image

    • change dependencies of project to be up to date

    I did this work as part of a student project so feel free to accept it or not.

    opened by BNouailhac 1
  • Unhandled exception logged when adding a new project

    Unhandled exception logged when adding a new project

    Steps to reproduce: Open side panel Expand Projects sublist Click "Add Project" list entry Create a new project

    The console log displays: E/flutter (26554): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception: E/flutter (26554): Bad state: Cannot add new events after calling close E/flutter (26554): #0 _BroadcastStreamController.add (dart:async/broadcast_stream_controller.dart:253:24) E/flutter (26554): #1 _StreamSinkWrapper.add (dart:async/stream_controller.dart:858:13) E/flutter (26554): #2 ProjectBloc._loadProjects. (package:flutter_app/pages/projects/project_bloc.dart:34:31) E/flutter (26554): #3 _RootZone.runUnary (dart:async/zone.dart:1379:54) E/flutter (26554): #4 _FutureListener.handleValue (dart:async/future_impl.dart:129:18) E/flutter (26554): #5 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:642:45) E/flutter (26554): #6 Future._propagateToListeners (dart:async/future_impl.dart:671:32) E/flutter (26554): #7 Future._complete (dart:async/future_impl.dart:476:7) E/flutter (26554): #8 _SyncCompleter.complete (dart:async/future_impl.dart:51:12) E/flutter (26554): #9 _AsyncAwaitCompleter.complete (dart:async/runtime/libasync_patch.dart:28:18) E/flutter (26554): #10 _completeOnAsyncReturn (dart:async/runtime/libasync_patch.dart:295:13) E/flutter (26554): #11 ProjectDB.getProjects (package:flutter_app/pages/projects/project_db.dart) E/flutter (26554): E/flutter (26554): #12 ProjectBloc._loadProjects (package:flutter_app/pages/projects/project_bloc.dart:33:16) E/flutter (26554): #13 ProjectBloc.refresh (package:flutter_app/pages/projects/project_bloc.dart:50:5) E/flutter (26554): #14 ProjectExpansionTileWidget.buildProjects. (package:flutter_app/pages/projects/project_widget.dart:61:21) E/flutter (26554): E/flutter (26554): #15 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)

    I'm studying this project to learn more about Flutter and using the BLoC pattern. Looking at the onTap() handler (which is somehow causing this exception), it's more complicated than I expected. Can you add some comments about why it's creating a second ProjectBloc object and why it's calling projectBloc.refresh(). IMHO, the point of Flutter and the BLoC pattern was to avoid things like refresh().

    opened by neilweber 1
  • Adaptive design

    Adaptive design

    • [x] Make Drawer Adaptive on Home Page
    • [x] On click of date filter tasks
    • [x] Adaptive about us page
    • [x] Adaptive create task page
    • [x] Adaptive completed task page
    • [x] Maintain Drawer selection on layout change. Currently changing layout changes reset state to inbox.
    • [x] Stream emitting filter and task multiple times issue.
    • [x] Adaptive Text size and buttons.
    • [x] Adaptive Add label and project page
    • [x] Refactor structure.
    • [x] Fast type in keyboard in edit text issue.
    • [x] Swipe to dismiss go outside scafold.
    opened by burhanrashid52 0
  • Edit and Delete Label and Projects

    Edit and Delete Label and Projects

    • [ ] Allow and ability to delete projects and labels. This will show a warning message before deleting. This will also delete tasks by cascade operation.
    • [ ] Rename label name and color.
    • [ ] Rename project name and color
    good first issue 
    opened by burhanrashid52 0
  • want to contribute

    want to contribute

    Hello, Myself Siyona Lodha! I wanted to contribute to your project for my college open source lab. Can you please assign me some tasks and give me an opportunity to become a contributor?

    Thank you.

    opened by SiyonaL 1
  • Exchangeable backends

    Exchangeable backends

    Hi @burhanrashid52,

    I'm currently in the process of switching from Todoist to org-mode as project management solution. One thing where org-mode is a bit behind is a good-looking UI for Android. There's orgzly and it does its job, but it's far from being intuitive. Now I'm wondering if it would be possible to use WhatTodo as a frontend to org-mode. In order to do that, one would have to hide the current *Database classes behind abstract classes and provide another implementation of those classes using org-mode (potentially based on code from orgro).

    I'm not a 100% how much effort this would be and if I want to invest the effort, but I wanted to ask in advance if this is a direction you could see the project evolving to, i.e. WhatTodo being really nice UI for different "storage mechanisms", with a built-in DB being the default.

    opened by nightscape 4
  • More Edge cases test

    More Edge cases test

    Integration Test (Flutter Driver)

    • [ ] Add Task Screen with different project and label selection

    Widget Test

    • [ ] Add Task Screen with different project and label selection
    • [ ] Project and label dialog test.
    • [ ] Completed Screen with Dismissable Row.
    • [ ] Side Drawer Test.

    Unit Test

    • [ ] TaskBloc
    • [ ] AddTaskBloc
    test 
    opened by burhanrashid52 0
Releases(v.1.0.1)
Owner
Burhanuddin Rashid
Software Engineer, Open Source enthusiast, Google Developer Expert in Flutter
Burhanuddin Rashid
A Flutter plugin thats support share files to social media like TikTok, Instagram, Facebook, WhatsApp, Telegram and more others...

Social Share Kit A Flutter plugin that's support share files to social media like Tiktok, Instagram, Facebook, WhatsApp, Telegram and more. This plugi

Kaique Gazola 2 Sep 2, 2022
Material Design text field that comes in a box, based on (OLD) Google Material Design guidelines.

TextFieldBoxes A new Material Design text field that comes in a box, based on Google Material Design guidelines. ???? 中文看这里 UPDATE NOTICE 1.4.5 Releas

Mark Wang 769 Jan 7, 2023
With MVVM Architecture pattern using Android Architecture Components This is a sample app demonstrating Youtube player animation using constraint layout

Youtube UI/UX Animation This is a sample app demonstrating Youtube UX/UI animation using ConstraintLayout.It implements the Keyframe Animation feature

Burhanuddin Rashid 866 Dec 29, 2022
Navigation pattern like in Google News Stand app with transitions

Google-NewsStand-Animation-Android Navigation pattern like in Google News Stand app with transitions Getting Started In your build.gradle dependencies

Hariprasanth S 129 Nov 11, 2022
Group of libraries to help you build better animations with Jetpack Compose

Group of libraries to help you build better animations with Jetpack Compose

null 36 May 12, 2022
Library provides an easy way to a add shimmer effect in Android Compose project.

Add a shimmer effect to the layout in Android Compose

Valery 66 Dec 14, 2022
An Android library to build form and form validations easily.

FormBuilder An Android library to build form and form validations easily. Example COMING SOON Requirements Android 4.3+ Installation Add edit your bui

Dario Pellegrini 48 Jun 30, 2022
EtsyBlur is an Android library that allows developers to easily add a glass-like blur effect implemented in the Etsy app.

EtsyBlur EtsyBlur is an Android library that allows developers to easily add a glass-like blur effect implemented in the past Etsy app. Try out the sa

Manabu S. 755 Dec 29, 2022
An easy, flexible way to add a shimmering effect to any view in an Android app.

Shimmer for Android Shimmer is an Android library that provides an easy way to add a shimmer effect to any view in your Android app. It is useful as a

Facebook 5.1k Dec 26, 2022
This library provides easy ways to add onboarding or pager screens with different animation and indicators.

WalkThroughAndroid Make amazing OnBoarding Screens easily for your app with different colorful animations, fonts, styles, and many more. Customize you

MindInventory 33 Sep 9, 2022
[] An Android library which allows developers to easily add animations to ListView items

DEPRECATED ListViewAnimations is deprecated in favor of new RecyclerView solutions. No new development will be taking place, but the existing versions

Niek Haarman 5.6k Dec 30, 2022
A Toggling Add/Remove button

Cross View Add a CrossView to your layout <cdflynn.android.library.crossview.CrossView android:id="@+id/sample_cross_view" android

Collin Flynn 321 Nov 25, 2022
Easily add slide to dismiss functionality to an Activity

Slidr Easily add slide-to-dismiss functionality to your Activity by calling Slidr.attach(this) in your onCreate(..) method. Usage An example usage: pu

Drew Heavner 2.7k Jan 6, 2023
💠Metaphor is the library to easily add Material Motion animations

Metaphor Metaphor is the library to easily add Material Motion animations. Who's using Metaphor? ?? Check out who's using Metaphor Include in your pro

Ranbir Singh 132 Dec 25, 2022
Add Animatable Material Components in Android Jetpack Compose. Create jetpack compose animations painless.

AnimatableCompose Add Animatable Material Components in Android Jetpack Compose. Create jetpack compose animation painless. What you can create from M

Emir Demirli 12 Jan 2, 2023
PassCode is the Android app made by using Jetpack Compose. Created for the test task submission.

PassCode PassCode is the Android app made by using the Jetpack Compose. Created for the test task submission. Showcase Dark Theme Light Theme ACs The

Basil Miller 1 May 25, 2022
💪 Rich Android Path. 🤡 Draw as you want. 🎉 Animate much as you can.

?? Rich Android Path. ?? Draw as you want. ?? Animate much as you can. Download sample app: Features Full Animation Control on Paths and VectorDrawabl

Ahmed Tarek 2.3k Dec 20, 2022
An android project presenting some transitions you can use between activities

ActivityTransition An android project presenting some transitions you can use between activities #Integration Add the anim folder to your Android proj

null 260 Nov 29, 2022
Implementation of Ripple effect from Material Design for Android API 9+

RippleEffect ExpandableLayout provides an easy way to create a view called header with an expandable view. Both view are external layout to allow a ma

Robin Chutaux 4.9k Dec 30, 2022