Assume: Plan & Do

Assume App is an open source mobile application where you can manage your plans and see the statistics of the tasks you have done. In addition, there are areas in the application that you can customize according to your own taste.

The application is currently only published in the google play store.

Google Play Store

Official Website

Features

  • Light/dark mode toggle
  • App main color changeable (Color palette has 16 color)
  • Language support (as English/Turkish for now)
  • Authentication contains
  • Email service for forgot password
  • Notifications of tasks
  • Statistic of tasks
  • Create task operation
  • Plan-Run-Done operation of tasks
  • Archive operation of tasks

Technologies Used

Programming Languages: Dart

Frameworks: Flutter SDK

Backend Services: Firebase (Firebase Cloud Firestore and Firebase Authentication)

State Managements: Provider

Configuration: Flavor, Flutter Dotenv

Notifications: Flutter Local Notifications

Caching Services: Hive

UI Tools: Figma, Canva

All Packages and Libraries:

Name Version Description
build_runner ^2.3.3 A tool to compile and package Dart code.
cloud_firestore ^4.4.3 A library for using Firebase Cloud Firestore.
cupertino_icons ^1.0.2 A library to use Cupertino icons, which are iOS-style icons.
encrypt ^5.0.1 A library for encrypting data.
firebase_auth ^4.2.10 A library for authenticating users with Firebase.
firebase_core ^2.7.0 A library for using base Firebase features.
fl_chart ^0.61.0 A library for creating charts.
flavor ^2.0.0 A tool for creating different flavors of an app.
flutter_colorpicker ^1.0.3 A widget for picking colors in Flutter.
flutter_datetime_picker ^1.5.1 A library for picking dates and times.
flutter_dotenv ^5.0.2 A library to load environment variables from a .env file.
flutter_gen_runner ^5.1.0+1 A tool for generating Dart code.
flutter_local_notifications ^13.0.0 A library for displaying local notifications.
font_awesome_flutter ^10.4.0 A library to use Font Awesome icons.
google_sign_in ^6.0.2 A library for signing in with Google.
hive ^2.2.3 A lightweight and fast key-value database for mobile devices.
hive_flutter ^1.1.0 Hive’s official Flutter integration.
intl ^0.17.0 A library for internationalizing Flutter apps.
logger ^1.3.0 A logging utility for Dart and Flutter.
mailer ^6.0.0 A library for sending emails.
permission_handler ^10.2.0 A library for requesting and checking permissions on mobile devices.
pin_code_fields ^7.4.0 A widget for creating and validating pin codes.
provider ^6.0.5 A state management solution for Flutter.
share_plus ^6.3.1 A library for sharing content from Flutter apps.
showcaseview ^2.0.3 A widget for showcasing app features with a step-by-step guide.
table_calendar ^3.0.8 A widget for displaying a calendar with events.
timezone ^0.9.1 A library for working with time zones in Dart.
url_launcher ^6.1.10 A library for launching URLs.

Run Locally

Clone the project

  git clone https://github.com/metecoban/assume_app

Install dependencies

  flutter pub get

Start the app

  flutter run lib/flavors/main_dev.dart

Environment Variables

  • To run this project, you will need to add the following environment variables to your .env file:

    MY_EMAIL (to email service)

    MY_PASSWORD (to email service)

    CRYPTO_KEY (to encrypt and decrypt)

  • Also you will need to connect the with Firebase:

    android/app/google-services.json (Generate the file from Firebase)

    and

    ios/Runner/GoogleService-Info.plist (Generate the file from Firebase)

Screenshots

Splash View Sign In View
Create Task View Done View
Statistic View App Settings View
Main Color Change View

Lessons Learned

  • I used an boilerplate which has MVVM structure and base classes. It had base view for stateless widgets. I added dynamic base view for StatefulWidget.

  • I used L10n to localization. I made the error messages suitable for l10n by using static methods without depending on context.

  • I used Firebase as backend service. I solved the user verification process from within the application using the mail service. (Because there is no custom mail operation like OTP mail in Firebase.) Read the case from Medium

Feedback

If you have any feedback, please reach out to us at [email protected]

Thanks

License

MIT

GitHub

View Github