Skip to content

Poetlum is a user-friendly mobile app that revolutionizes poetry engagement, offering seamless search, creation, and sharing of poems, coupled with cloud storage for a personalized, accessible poetic experience

License

Notifications You must be signed in to change notification settings

tortamque/Poetlum

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Poetlum

Before you read...

Poetlum is my coursework, with its theme being a mobile application designed for searching poetry on a given topic. So, enjoy reading through this lengthy documentation 👀

Description

Poetlum is a mobile application designed to offer users the ability to search, save, and share poems based on specific themes, simplifying and automating the process of engaging with poetry through mobile devices. This application not only eases access to poetic works but also allows users to create their own poems, save them in the cloud for secure storage, and manage their personal collections with ease, thus increasing the accessibility and comfort of reading poetry and fulfilling their creative needs.
Designed with the user in mind, Poetlum integrates a Clean architecture pattern, combining Repository, Separation of Conserns, Dependency Injection and Bloc patterns, to ensure efficient data management and an intuitive experience.

Table of Contents

Used Technologies

Poetlum utilizes Firebase Realtime Database as its primary database, along with Firebase Authentication for user registration and login. Additionally, it leverages Firebase Crashlytics for swift crash reports and Firebase Analytics for analyzing user preferences.
The program also integrates PoetryDB API for fetching poems.

Architecture

Poetlum fully embraces the Clean Architecture pattern, incorporating Bloc, Repository, Separation of Concerns, and Dependency Injection patterns.
Clean Architecture consists of the following layers:

  1. Data Layer
  2. Domain Layer (Business Logic)
  3. Presentation Layer (UI)

Call Flow Diagram:
Call Flow Diagram

Onion Diagram:
Onion Diagram

Features

  • Advanced poem search filters, allowing criteria selection such as author, poem title, line count, and the number of poems displayed.
  • Capability to write and manage your own poems within the application.
  • Captivating animations that will leave a lasting impression 😎
  • Creation and management of collections for organizing your favorite poems, ensuring easy access.
  • Saving favorite poems to your profile and the cloud database for seamless retrieval.
  • Viewing personal and saved poems directly within the app.
  • Sharing personal and saved poems using various external applications.
  • Customizing the app with a variety of selectable color themes.
  • Updating account details, including nickname, email, and password, within the app settings.

Supported platforms

Poetlum is a mobile application that supports Android platform.

Usage

  1. Upon first launch of the app, you will be directed to the registration page.
  2. If you are already registered, you can navigate to the login page.
  3. After registration or login, you will be taken to the main page.
  4. On the main page, you can:
    • Update poems.
    • Access the settings menu.
    • Go to the poem search menu.
    • Navigate to the saved collections menu.
    • View a poem.
  5. In the poem viewing menu, you can:
    • Add the poem to your library.
    • Share the poem.
  6. On the collections viewing page, you can:
    • Delete a collection.
    • Create a new collection.
    • Write your own poem.
    • View a collection.
  7. In the collection creation menu, you can create a collection.
  8. In the poem writing menu, you can create a poem.
  9. In the collection viewing menu, you can:
    • View a poem.
    • Delete a poem.

Deployment

To deploy the Poetlum app, follow these steps:

  1. Ensure that the Flutter SDK is installed. If not, install it.
  2. Clone the source code repository of the application.
  3. Navigate to the development environment, open the terminal, and execute the command flutter pub get to install the necessary packages.
  4. For deploying the Firebase part, go to the Firebase console and create a new project.
  5. In the platform selection menu, choose the Android platform and enter the package name from the AndroidManifest.xml file.
  6. To generate the google-services.json file, add the Android application to the Firebase console project by specifying the package name.
  7. Download the configuration file google-services.json and place it in the android/app folder.
  8. Update the build.gradle file at both project and app levels.
  9. In the project-level build.gradle, add plugins com.google.gms:google-services:4.3.10 and com.android.tools.build:gradle:7.1.2.
  10. For the app-level build.gradle, set up plugins com.google.firebase:firebase-bom:32.4.0, com.google.firebase:firebase-analytics-ktx, and com.android.installreferrer:installreferrer:2.2.
  11. Generate the firebase_options.dart file, which will contain configuration parameters for initializing Firebase in Flutter.
  12. Use FlutterFire CLI for generation. Install it by running the command dart pub global activate flutterfire_cli.
  13. After installing FlutterFire CLI, execute flutterfire configure and follow the instructions. This will generate the firebase_options.dart file.
  14. To integrate Firebase into the project, add the code WidgetsFlutterBinding.ensureInitialized(); and await Firebase.initializeApp(); before running the main function to initialize Firebase before the app starts.

Screenshots and Demo

Screenshots

Click here to view a lot of screenshots 👀 Screenshot_1 Screenshot_2 Screenshot_3 Screenshot_4 Screenshot_5 Screenshot_6 Screenshot_7 Screenshot_8 Screenshot_9 Screenshot_10 Screenshot_11 Screenshot_12 Screenshot_13 Screenshot_14 Screenshot_15 Screenshot_16

Demo

video_2023-12-28_21-48-53.mp4

Changelog

[1.0] - 26.12.2023

Added

  • Initial release.

Firebase Realtime Database

Database Schema

  • User ID String (Primary Key)
    • collections Collection
      • Collection ID String (Primary Key)
        • name String
        • poems Collection
          • Poem ID String (Primary Key)
            • author String
            • linecount Integer
            • text String
            • title String
    • poems Collection
      • Poem ID String (Primary Key)
        • author String
        • linecount Integer
        • text String
        • title String

Database Example

Database

Diagrams

Usecase Diagram

Usecase

Sequence Diagram

Sequence

Used Packages

The Poetlum app utilizes the following packages:

Name Version Link on pub.dev
firebase_core 2.19.0 Link
firebase_analytics 10.6.1 Link
firebase_crashlytics 3.4.1 Link
firebase_auth 4.11.1 Link
firebase_database 10.3.1 Link
get_it 7.6.4 Link
equatable 2.0.5 Link
connectivity_plus 5.0.1 Link
get 4.6.6 Link
dio 5.3.3 Link
retrofit 4.0.3 Link
json_annotation 4.8.1 Link
flutter_bloc 8.1.3 Link
email_validator 2.1.17 Link
fluttertoast 8.0.9 Link
google_nav_bar 5.0.6 Link
like_button 2.0.5 Link
multi_dropdown 2.1.1 Link
shared_preferences 2.2.2 Link
share_plus 7.2.1 Link

License

Apache License Version 2.0