Skip to content

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.

Notifications You must be signed in to change notification settings

najeebaslan/AppIssue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

6 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

License: MIT


Logo

Prison Dates

Complete management of prisoners' appointments.

About The Project

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.

Application Screens:(Screens 20+)

Image 2 Image 2 Image 2 Image 2
Image 2 Image 2 Image 2 Image 2
Image 2 Image 2 Image 2 Image 2
Image 2 Image 2 Image 2 Image 2
Image 2 Image 2 Image 2 Image 2
Image 2 Image 2 Image 2 Image 2
Image 2 Image 2 Image 2 Image 2
Image 2 Image 2 Image 2 Image 2
Image 2 Image 2 Image 2 Image 2

Table of contents

✨Features

  • 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.

Technologies Used

  • Frontend: Flutter(version: 3.29.2,Channel stable)

  • Database: Sqflite,cloud_firestore,firebase_storage

  • Authentication: Firebase_auth,Google_sign_in,ign_in_with_apple

Platform Support

Android iOS
βœ”οΈ βœ”οΈ

Application structure

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.

βš™οΈ Libraries and tools used

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.

Installation

1 Clone the repository:

git clone https://github.com/najeebaslan/AppIssue.git

Prerequisites

πŸ•’ 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_version0 and com.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 XCode and then open ios/Runner/AppDelegate.swift
  • Click breakpoint on override func application
  • Run project and the it's when the XCode will stop in your breakpoint
  • open terminal form XCode it'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 Debug and selected Simulate Background Fetch
  • Then pressed icon ▢️ from terminal

⚠️ Important Notes

  • replace com.example.issues_new_version0 by your task identifier

Image 2

Image 2

Image 2

Image 2

-->
  • β‡’ Setup with (Android OS)
  • 1- Go to the following path android/app/src/main/kotlin/com/example/issues_new_version/MainActivity.kt and 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.xml and change android:label="yourAppName"
  • 2- Change application, To avoid inevitable problems use rename

Firebase

β—‰ 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/Password and Google

⚠️ Important Notes

  • 5-When enable the firestore Database choose the location europe-west6 because it's nearly server database for arabic countries

  • 6- Replace your firestore Database Rules by 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 Rules like this
rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read;
      allow write: if true;
    }
  }
}

Logo

β—‰ Setup Google Drive - 1- Enable Google Drive api from google console

β—‰ Setup ENCRYPTION_KEY for using it when do encryption backups

  • 1- Create file by name .env.dev in the root project
  • 2- Add this lineENCRYPTION_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

versions used

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

About

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.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages