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