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 👀
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.
- Used Technologies
- Architecture
- Features
- Supported platforms
- Usage
- Deployment
- Screenshots and Demo
- Changelog
- Firebase Database
- Diagrams
- Used Packages
- License
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.
Poetlum fully embraces the Clean Architecture pattern, incorporating Bloc, Repository, Separation of Concerns, and Dependency Injection patterns.
Clean Architecture consists of the following layers:
- Data Layer
- Domain Layer (Business Logic)
- Presentation Layer (UI)
- 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.
Poetlum is a mobile application that supports Android platform.
- Upon first launch of the app, you will be directed to the registration page.
- If you are already registered, you can navigate to the login page.
- After registration or login, you will be taken to the main page.
- 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.
- In the poem viewing menu, you can:
- Add the poem to your library.
- Share the poem.
- On the collections viewing page, you can:
- Delete a collection.
- Create a new collection.
- Write your own poem.
- View a collection.
- In the collection creation menu, you can create a collection.
- In the poem writing menu, you can create a poem.
- In the collection viewing menu, you can:
- View a poem.
- Delete a poem.
To deploy the Poetlum app, follow these steps:
- Ensure that the Flutter SDK is installed. If not, install it.
- Clone the source code repository of the application.
- Navigate to the development environment, open the terminal, and execute the command
flutter pub get
to install the necessary packages. - For deploying the Firebase part, go to the Firebase console and create a new project.
- In the platform selection menu, choose the Android platform and enter the package name from the AndroidManifest.xml file.
- To generate the google-services.json file, add the Android application to the Firebase console project by specifying the package name.
- Download the configuration file google-services.json and place it in the android/app folder.
- Update the build.gradle file at both project and app levels.
- In the project-level build.gradle, add plugins
com.google.gms:google-services:4.3.10
andcom.android.tools.build:gradle:7.1.2
. - For the app-level build.gradle, set up plugins
com.google.firebase:firebase-bom:32.4.0
,com.google.firebase:firebase-analytics-ktx
, andcom.android.installreferrer:installreferrer:2.2
. - Generate the firebase_options.dart file, which will contain configuration parameters for initializing Firebase in Flutter.
- Use FlutterFire CLI for generation. Install it by running the command
dart pub global activate flutterfire_cli
. - After installing FlutterFire CLI, execute
flutterfire configure
and follow the instructions. This will generate the firebase_options.dart file. - To integrate Firebase into the project, add the code
WidgetsFlutterBinding.ensureInitialized();
andawait Firebase.initializeApp();
before running the main function to initialize Firebase before the app starts.
video_2023-12-28_21-48-53.mp4
- 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
- author
- Poem ID
- name
- Collection ID
- poems
Collection
- Poem ID
String
(Primary Key)- author
String
- linecount
Integer
- text
String
- title
String
- author
- Poem ID
- collections
![Database](https://private-user-images.githubusercontent.com/90132962/293269491-b53469de-a12d-43c5-95b3-f4443e4d18b6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjUwOTYyMDMsIm5iZiI6MTcyNTA5NTkwMywicGF0aCI6Ii85MDEzMjk2Mi8yOTMyNjk0OTEtYjUzNDY5ZGUtYTEyZC00M2M1LTk1YjMtZjQ0NDNlNGQxOGI2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MzElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODMxVDA5MTgyM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE2MmM2OTI4YTdlNWNkOWQyMjA2MTIzOGMzNzc4OGZkOWE5NGQwYmQwN2MzNjBmZmVjNGQzMjllZDM1YjVkNDImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Yh_qGwsZmGhGL92j1K7-IYonB1e2KvjLlymC44EqQSI)
![Usecase](https://private-user-images.githubusercontent.com/90132962/293417211-5aa37a34-c709-4086-af24-de068a537276.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjUwOTYyMDMsIm5iZiI6MTcyNTA5NTkwMywicGF0aCI6Ii85MDEzMjk2Mi8yOTM0MTcyMTEtNWFhMzdhMzQtYzcwOS00MDg2LWFmMjQtZGUwNjhhNTM3Mjc2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MzElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODMxVDA5MTgyM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTI5ZmU4NmY2Zjk3NzQ1Nzk4ZjA5ZDFjMDE4YzljMzg4MDg3ZjUzN2ZiNjk0MGNjZTQ5MTMwZGRiMGM2ZTc3ZmEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.N2Mg655ZQnpMJBJGEmAba328zV-lV1_hVIqqWfpT9P4)
![Sequence](https://private-user-images.githubusercontent.com/90132962/293420966-4e953809-7d65-44f7-8423-4e4535907ec5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjUwOTYyMDMsIm5iZiI6MTcyNTA5NTkwMywicGF0aCI6Ii85MDEzMjk2Mi8yOTM0MjA5NjYtNGU5NTM4MDktN2Q2NS00NGY3LTg0MjMtNGU0NTM1OTA3ZWM1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MzElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODMxVDA5MTgyM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU3MTAwNGE0ZWU3N2I4Yjc2NmYzYzMyYTIzNjdmMzM3YzJjOTBhYjdkM2U4NzI4OThiZmY5MTk3MmE4ZjJlYTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.kT8AUhCyJC77G39SpsytgAB6OsPEsrmUXRloKIu5JH0)
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 |
Apache License Version 2.0