This application allows you to add the accused and manage all his data in terms of modification, deletion, etc. It shows alerts when the time available for the accused expires and the time specified for alerting is the first week from the date of adding the accused, then after forty-five days, then also after another forty-five days.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
- Features
- Technologies Used
- Application structure
- Support
- Libraries and tools used
- Prerequisites
- Installation
- Alerts after one week of adding the accused, known as the first alert.
- An alert after forty-five days from the first alert, known as the second alert.
- An additional alert after forty-five days from the second alert, known as the third alert, which is the final notification to inform you of the complete end of the charge.
- Ability to add a new accused.
- Modify the accused's details when necessary.
- End the charge against the accused.
- Delete the accused from the system.
- Share the charge as file PDF π.
- Search - Filter - Sort Details π.
- Manage backups (add,delete,restore) and support auto backup [daily-weekly-monthly].
- Manage notifications enable or disable it,and deleted from Database[daily-weekly-monthly] π.
- Support two languages Arabic - English (πΈπ¦,πΊπΈ).
- Support Dark and Light Mode (β½,βοΈ).
- Able to change profile and delete account.
- The application provides strong protection when logging in via fingerprint or iris scanner, ensuring your data is secure from tampering.
-
Frontend: Flutter(version: 3.29.2,Channel stable)
-
Database: Sqflite,cloud_firestore,firebase_storage
-
Authentication: Firebase_auth,Google_sign_in,ign_in_with_apple
| Android | iOS |
|---|---|
| βοΈ | βοΈ |
After successful build, your application structure should look like this:
βββ android - Contains the necessary files to run the application on an Android
βββ assets - Stores all images,fonts and translations used in the application.
βββ ios - Includes the files required to run the application on an iOS platform.
βββ lib - The core folder for writing the majority of the Dart code.
βββ main.dart - The entry point of the application.
βββ core
β βββ extensions - Holds commonly used file extensions for enhanced functionality.
β βββ helper - Contains commonly used file imports to assist in development.
β βββ networking - Includes commonly used imports for networking tasks.
β βββ router - Manages commonly used imports for routing within the application.
β βββ services - Handles commonly used imports for various services.
β βββ theme - Handles theme-related configurations for consistent visual styling.
β βββ constants - Stores commonly used constants like asset paths, icons, and default settings.
β βββ widgets - Provides commonly used imports for reusable widgets.
βββ data
β βββ database - Manages the app's local database configuration.
β βββ models - Defines data models that represent the structure of data used throughout the app.
β βββ repositories- Encapsulates data access logic, providing a clean API for data retrieval.
βββ features - Contains the application's feature modules for organized development.
β ββββ auth feature - Manages authentication-related functionality,
β ββββ accused feature - Handles to managing accused individuals, including adding, editing.
β ββββ backup feature - Implements functionality for backing up user data securely.
β ββββ filter feature - Provides filtering options for displaying lists of accused individuals.
β ββββ home feature - Manages displaying relevant information and navigation options.
β ββββ settings feature - Handles application settings, allowing for customization and configuration.
β ββββ onboarding feature - Manages the onboarding process for new users,show them initial features.
β ββββ notifications feature -Implements push notifications and in-app alerts to keep users informed.
βββ app.dart -The main application file that initializes the app and sets up the entry point.
I will explain the packages that are important to know before starting the project.
- flutter_bloc:-as State Management.
- workmanager:-Schedule tasks in the background on Android and IOS
- sqflite:- Local database.
- googleapis:-manage backups with
Google Drive - firebase_auth:- use it for manage auth like Email/Password and google and apple sign-in.
- cloud_firestore:-save user details like image name and other information.
- firebase_storage:-store images application.
- easy_localization:-Easy and Fast internationalizing and localization.
- get_it:-This for injection dependency.
- local_auth:-Allow local authentication via fingerprint, touch ID, face ID, passcode, pin, or pattern.
- google_sign_in:- To able to connect with your google drive should allow application to connect with your account by this package.
- envied:-Explicitly reads environment variables into a dart file from a .env file for more security and faster start up times.
- encrypt:-Use it for encrypted and decrypted backups.
1 Clone the repository:
git clone https://github.com/najeebaslan/AppIssue.gitπ Setup Work Manager
- β’ Setup with (IOS OS):
- 1- Go to file ios/Runner/AppDelegate.swift and add
import workmanager. - 2- Add this code
Bool{
UNUserNotificationCenter.current().delegate = self
WorkmanagerPlugin.setPluginRegistrantCallback {
registry in GeneratedPluginRegistrant.register(with: registry)
} }
- 3- Add outside the
Bool{}breakpoint this code for show notification in foreground
override func userNotificationCenter(
_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
completionHandler(.alert) // shows banner even if app is in foreground
}
For more information open this link here
- 4- Add this code in ios/Runner/Info.plist
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>processing</string>
</array>
<!-- If you want know why do this look the link https://poe.com/s/oMOikdWDl6F5svpSgdzg -->
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
<string>task-identifier</string>
<string>com.example.issues_new_version0</string><!-- First task at 8:00 AM -->
<string>com.example.issues_new_version1<!-- Second task at 8:00 PM -->
</array>
- Note==> Replace [
com.example.issues_new_version0andcom.example.issues_new_version1] by your task identifier
- 5- Add file sound like this:-
ios/notification_sound.wav
- Note:- now you are ready for test task with
Iphone. But if you using ios simulator should by do some steps below
- Open ios folder with
XCodeand then open ios/Runner/AppDelegate.swift - Click breakpoint on
override func application - Run project and the it's when the
XCodewill stop in your breakpoint - open terminal form
XCodeit's found it in the bottom screen - Paste this code and click enter
e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.issues_new_version0"]
- Click button
Debugand selectedSimulate Background Fetch - Then pressed icon
βΆοΈ fromterminal
- replace
com.example.issues_new_version0by your task identifier
- β’ Setup with (Android OS)
- 1- Go to the following path
android/app/src/main/kotlin/com/example/issues_new_version/MainActivity.ktand Replace it by this code
import io.flutter.embedding.android.FlutterFragmentActivity
class MainActivity: FlutterFragmentActivity() {
}
- 2- Add permission in file path
android/app/src/main/AndroidManifest.xml<uses-permission android:name="android.permission.USE_BIOMETRIC"/>
β Setup splash screen images
- 1-The create the box by size 640*640.
- 2-After that make the radius 320... and so i do that because the android 12 required the steps.
- 3-And after that add it inside box by size 960*960 in the center position
β Change App Name And PackageID
- 1- Change application name rename or go to
android/app/src/main/AndroidManifest.xmland changeandroid:label="yourAppName" - 2- Change application, To avoid inevitable problems use rename
β Setup Firebase
- 1- Use cli for integration with firebase
- 2- Make sure change app name and PackageID
- 3- Make sure to add sha1 and sha254
- 4- Enable Sign-in method
Email/PasswordandGoogle
-
5-When enable the
firestore Databasechoose the locationeurope-west6because it's nearly server database for arabic countries -
6- Replace your
firestore Database Rulesby this Rules
service cloud.firestore {
match /databases/{database}/documents {
// Allow anyone to read data
match /{document=**} {
allow read;
}
// Allow authenticated users to write data
match /{document=**} {
allow write: if request.auth != null;
}
}
}
- 7- Enable firebase storage and update
Ruleslike this
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read;
allow write: if true;
}
}
}
β Setup ENCRYPTION_KEY for using it when do encryption backups
- 1- Create file by name
.env.devin the root project - 2- Add this line
ENCRYPTION_KEY =(Add here key base64) - 3- Run this code in root project terminal
dart run build_runner clean
dart run build_runner build --delete-conflicting-outputs
Doctor output
Doctor summary (to see all details, run flutter doctor -v):
[β] Flutter (Channel stable, 3.29.2, on macOS 14.5 23F79 darwin-arm64, locale en-YE)
[β] Android toolchain - develop for Android devices (Android SDK version 35.0.0)
[β] Xcode - develop for iOS and macOS (Xcode 16.2)
[β] Chrome - develop for the web
[β] Android Studio (version 2025.1)
[β] VS Code (version 1.103.2)
[β] Connected device (3 available)
[β] Network resources
β’ No issues found!MIT: https://mit-license.org.
Copyright (c) 2025 Najeeb Aslan. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Minor update







































