Skip to content

drianmr/remindee-gc

Repository files navigation

Remindee

GitHub Repository: https://github.com/drianmr/remindee-gc

All Screens Preview

Screen Description Preview
Empty State
Permission Required
List View
Create Single
Create Multiple
Reminder Detail
Completed State
Action Menu

Environment Requirements

This project is built using Flutter and requires the following environment setup for development and testing.

  • Flutter SDK: 3.38.7
  • Dart SDK: 3.7.0 (or version compatible with Flutter 3.38.7)
  • Java SDK: JDK 17 (required for Android Gradle toolchain)
  • Android Studio: Ladybug or newer (recommended)
  • Xcode: 15.0 or newer (required for iOS and macOS development)

Setup Instructions

  1. Clone the repository using the GitHub link provided above.
  2. Navigate to the project root directory in your terminal.
  3. Ensure your global Flutter version matches 3.38.7 or use a version manager like FVM.
  4. Run "flutter pub get" to install all necessary dependencies.
  5. Connect a physical device or start an emulator.
  6. Run "flutter run" to launch the application.

Dependencies and Plugins

The following primary plugins and tools are used in this project:

  • flutter_bloc: Core state management library used to implement the BLoC pattern.
  • objectbox: High performance local database for persistence.
  • flutter_local_notifications: Handles local scheduling and display of reminders.
  • go_router: Declarative routing for navigation between screens.
  • get_it & injectable: Dependency injection containers for service management.
  • freezed & json_annotation: Data modeling with code generation for type safety.
  • forui: A custom UI framework for consistent component styling.
  • permission_handler: Manages system level permission requests for notifications.
  • fpdart: Functional programming tools for cleaner logic flow.

Architectural Notes

This project follows a BLoC (Business Logic Component) structure to maintain a strict separation of concerns:

  • Presentation Layer: Stateless and Stateful widgets handle the UI and dispatch events to the BLoC. It listens to state changes to rebuild parts of the widget tree.
  • Logic Layer (BLoC): Acts as the intermediary. It processes incoming events, triggers business logic, and emits immutable states back to the presentation layer.
  • Data Layer: Utilizes ObjectBox for local storage and Repositories to abstract data sources from the business logic.

A key implementation detail involves the use of ObjectKey associated with persistent TextEditingController instances. By tying the key to the controller object rather than the list index, the application maintains validation integrity and focus even when items are dynamically removed from the view.

Assumptions and Limitations

  • Notifications require manual permission from the user to function correctly as per platform security policies.
  • The application assumes a mobile portrait orientation for the best user experience.
  • Local storage is used for data persistence; no cloud synchronization or remote backup is currently implemented.
  • Background task execution for reminders relies on the system alarm manager and may be subject to OS level battery optimization.

Bonus Features

  • Dynamic Multi Scheduling: Users can add several reminder times for a single task within a single creation flow without losing context.
  • State Persistence Logic: Custom implementation ensures that form data, including validation errors and text input, remains intact during list manipulation.
  • Permission Handling Flow: A dedicated onboarding screen guides users to system settings if notification permissions are denied, providing a smoother UX than a standard system dialog.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published