├── .gitignore
├── .metadata
├── LICENSE
├── README.md
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ ├── google-services.json
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── example
│ │ │ │ └── library_system
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ │ └── values
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
├── settings.gradle
└── settings_aar.gradle
├── assets
├── images
│ ├── Group 2.png
│ ├── book.png
│ ├── books123.png
│ ├── done.png
│ ├── library.png
│ ├── logo.png
│ ├── splash.svg
│ └── splashbg.png
├── logo.png
├── roboto1.ttf
├── roboto2.ttf
└── roboto3.ttf
├── download (1).png
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
└── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── Icon-App-1024x1024@1x.png
│ │ ├── Icon-App-20x20@1x.png
│ │ ├── Icon-App-20x20@2x.png
│ │ ├── Icon-App-20x20@3x.png
│ │ ├── Icon-App-29x29@1x.png
│ │ ├── Icon-App-29x29@2x.png
│ │ ├── Icon-App-29x29@3x.png
│ │ ├── Icon-App-40x40@1x.png
│ │ ├── Icon-App-40x40@2x.png
│ │ ├── Icon-App-40x40@3x.png
│ │ ├── Icon-App-60x60@2x.png
│ │ ├── Icon-App-60x60@3x.png
│ │ ├── Icon-App-76x76@1x.png
│ │ ├── Icon-App-76x76@2x.png
│ │ └── Icon-App-83.5x83.5@2x.png
│ └── LaunchImage.imageset
│ │ ├── Contents.json
│ │ ├── LaunchImage.png
│ │ ├── LaunchImage@2x.png
│ │ ├── LaunchImage@3x.png
│ │ └── README.md
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ └── Runner-Bridging-Header.h
├── lib
├── invoice.dart
├── main.dart
├── models
│ └── Book_model.dart
├── pages
│ ├── addNewBookPage.dart
│ ├── editProfilePage.dart
│ ├── homePage.dart
│ ├── inventoryPage.dart
│ ├── issueBookPage.dart
│ ├── loginSignupPage.dart
│ ├── profilepage.dart
│ ├── returnBookPage.dart
│ └── splashScreen.dart
└── viewpdf.dart
├── online_library@2x.png
├── pubspec.lock
├── pubspec.yaml
└── test
└── widget_test.dart
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 |
12 | # IntelliJ related
13 | *.iml
14 | *.ipr
15 | *.iws
16 | .idea/
17 |
18 | lib/details.dart
19 |
20 | # The .vscode folder contains launch configuration and tasks you configure in
21 | # VS Code which you may wish to be included in version control, so this line
22 | # is commented out by default.
23 | #.vscode/
24 |
25 | # Flutter/Dart/Pub related
26 | **/doc/api/
27 | **/ios/Flutter/.last_build_id
28 | .dart_tool/
29 | .flutter-plugins
30 | .flutter-plugins-dependencies
31 | .packages
32 | .pub-cache/
33 | .pub/
34 | /build/
35 |
36 | # Web related
37 | lib/generated_plugin_registrant.dart
38 |
39 | # Symbolication related
40 | app.*.symbols
41 |
42 | # Obfuscation related
43 | app.*.map.json
44 |
45 | # Exceptions to above rules.
46 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
47 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: bbfbf1770cca2da7c82e887e4e4af910034800b6
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 DSC KIIT
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # Library Management App 📚📚
3 |
4 | 
5 |
6 |
7 | 
8 | 
9 | 
10 | 
11 | 
12 |
13 |
14 |
15 |
16 |
17 | [](https://github.com/all-contributors/all-contributors/stargazers)
18 | [](#contributors-)
19 |
20 |
21 |
22 |
23 | # 𝔸𝕓𝕠𝕦𝕥 -
24 | This flutter application is for the users who are in charge of the library i.e. the admins. The whole system is
25 | going digital, so the tedious job of writing everything in paper will be sorted with this app. This app will help
26 | them to add books by scanning the barcodes and the title of the book. After adding their books, there will be a
27 | section in that app where they can give out the books to others and also keep track of when they are returned
28 | making things more organised.
29 |
30 |
31 | # App Preview -
32 | 
33 |
34 |
35 |
36 | # Table of Content -
37 |
38 | - [Description. ](#title)
39 | - [About.](#about)
40 | - [App Preview.](#preview)
41 | - [Table of contents.](#contents)
42 | - [Getting Started.](#getting-started)
43 | - [Application.](#application)
44 | - [Contributers.](#contributors)
45 |
46 |
47 | ## Getting Started -
48 |
49 | To clone this repo and look into the source code, go to the terminal in your workspace and then type -
50 | ```
51 | git clone https://github.com/sayannath/Libaray-Management-System-Flutter.git
52 | ```
53 |
54 | ## Application -
55 | ```
56 | flutter run
57 | ```
58 | #### [import the project in Android Studio or Visual Studio Code as you wish and add your ideas to improve the app.]
59 |
60 |
61 |
62 |
63 | # Lincense -
64 | This project is under [MIT Licence](https://github.com/Sayak11/Libaray-Management-System-Flutter/blob/master/LICENSE).
65 |
66 |
67 | # Contributors -
68 | 1.) [Sayan Nath](https://github.com/sayannath)
69 | 2.) [Sambit Majhi](https://github.com/sambitraze?tab=overview&from=2019-12-01&to=2019-12-31)
70 | 3.) [Rohan Roy Chowdhury](https://github.com/Rohan2309)
71 | 4.) [Aditya Das](https://github.com/ThatOneTallKid)
72 | 5.) [Ayushi Das](https://github.com/Ayushi673)
73 | 6.) [Aman Verma](https://github.com/amanv8060)
74 | 7.) [Taranpreet Singh Chabbra](https://github.com/singhtaran1005)
75 | 8.) [Rupanshi Chawda](https://github.com/rupanshi-chawda)
76 | 9.) [Sayak Roy Chowdhury](https://github.com/Sayak11)
77 |
78 | [Back to Start](#title)
79 |
80 | # A [DSC KIIT](https://github.com/DSC-KIIT) ℙ𝕣𝕠𝕛𝕖𝕔𝕥
81 | .png)
82 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | def localProperties = new Properties()
2 | def localPropertiesFile = rootProject.file('local.properties')
3 | if (localPropertiesFile.exists()) {
4 | localPropertiesFile.withReader('UTF-8') { reader ->
5 | localProperties.load(reader)
6 | }
7 | }
8 |
9 | def flutterRoot = localProperties.getProperty('flutter.sdk')
10 | if (flutterRoot == null) {
11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 | }
13 |
14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
15 | if (flutterVersionCode == null) {
16 | flutterVersionCode = '1'
17 | }
18 |
19 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
20 | if (flutterVersionName == null) {
21 | flutterVersionName = '1.0'
22 | }
23 |
24 | apply plugin: 'com.android.application'
25 | apply plugin: 'com.google.gms.google-services'
26 | apply plugin: 'kotlin-android'
27 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
28 |
29 | android {
30 | compileSdkVersion 30
31 |
32 | sourceSets {
33 | main.java.srcDirs += 'src/main/kotlin'
34 | }
35 |
36 | lintOptions {
37 | disable 'InvalidPackage'
38 | }
39 |
40 | defaultConfig {
41 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
42 | applicationId "com.example.library_system"
43 | minSdkVersion 21
44 | targetSdkVersion 30
45 | versionCode flutterVersionCode.toInteger()
46 | versionName flutterVersionName
47 | }
48 |
49 | buildTypes {
50 | release {
51 | // TODO: Add your own signing config for the release build.
52 | // Signing with the debug keys for now, so `flutter run --release` works.
53 | signingConfig signingConfigs.debug
54 | }
55 | }
56 | }
57 |
58 | flutter {
59 | source '../..'
60 | }
61 |
62 | dependencies {
63 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
64 | implementation 'com.google.firebase:firebase-analytics:17.5.0'
65 | }
--------------------------------------------------------------------------------
/android/app/google-services.json:
--------------------------------------------------------------------------------
1 | {
2 | "project_info": {
3 | "project_number": "594226211439",
4 | "firebase_url": "https://library-management-syste-94f1b.firebaseio.com",
5 | "project_id": "library-management-syste-94f1b",
6 | "storage_bucket": "library-management-syste-94f1b.appspot.com"
7 | },
8 | "client": [
9 | {
10 | "client_info": {
11 | "mobilesdk_app_id": "1:594226211439:android:4e74a465a3352015ccfb9a",
12 | "android_client_info": {
13 | "package_name": "com.example.library_system"
14 | }
15 | },
16 | "oauth_client": [
17 | {
18 | "client_id": "594226211439-73bfabsjod5fp6dk2g26fflkg502020v.apps.googleusercontent.com",
19 | "client_type": 3
20 | }
21 | ],
22 | "api_key": [
23 | {
24 | "current_key": "AIzaSyC58SgejOPzAYGrKgMA9rNInqznvlnC5r4"
25 | }
26 | ],
27 | "services": {
28 | "appinvite_service": {
29 | "other_platform_oauth_client": [
30 | {
31 | "client_id": "594226211439-73bfabsjod5fp6dk2g26fflkg502020v.apps.googleusercontent.com",
32 | "client_type": 3
33 | }
34 | ]
35 | }
36 | }
37 | }
38 | ],
39 | "configuration_version": "1"
40 | }
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
8 |
12 |
19 |
23 |
27 |
32 |
36 |
37 |
38 |
39 |
40 |
41 |
43 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/example/library_system/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.example.library_system
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.3.50'
3 | repositories {
4 | google()
5 | jcenter()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:3.5.0'
10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 | classpath 'com.google.gms:google-services:4.3.3'
12 | }
13 | }
14 |
15 | allprojects {
16 | repositories {
17 | google()
18 | jcenter()
19 | }
20 | }
21 |
22 | rootProject.buildDir = '../build'
23 | subprojects {
24 | project.buildDir = "${rootProject.buildDir}/${project.name}"
25 | }
26 | subprojects {
27 | project.evaluationDependsOn(':app')
28 | }
29 |
30 | task clean(type: Delete) {
31 | delete rootProject.buildDir
32 | }
33 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.enableR8=true
3 | android.useAndroidX=true
4 | android.enableJetifier=true
5 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
7 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
4 | def properties = new Properties()
5 |
6 | assert localPropertiesFile.exists()
7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
8 |
9 | def flutterSdkPath = properties.getProperty("flutter.sdk")
10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
12 |
13 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
14 |
15 | def plugins = new Properties()
16 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
17 | if (pluginsFile.exists()) {
18 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
19 | }
20 |
21 | plugins.each { name, path ->
22 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
23 | include ":$name"
24 | project(":$name").projectDir = pluginDirectory
25 | }
--------------------------------------------------------------------------------
/android/settings_aar.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------
/assets/images/Group 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/assets/images/Group 2.png
--------------------------------------------------------------------------------
/assets/images/book.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/assets/images/book.png
--------------------------------------------------------------------------------
/assets/images/books123.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/assets/images/books123.png
--------------------------------------------------------------------------------
/assets/images/done.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/assets/images/done.png
--------------------------------------------------------------------------------
/assets/images/library.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/assets/images/library.png
--------------------------------------------------------------------------------
/assets/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/assets/images/logo.png
--------------------------------------------------------------------------------
/assets/images/splash.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/images/splashbg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/assets/images/splashbg.png
--------------------------------------------------------------------------------
/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/assets/logo.png
--------------------------------------------------------------------------------
/assets/roboto1.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/assets/roboto1.ttf
--------------------------------------------------------------------------------
/assets/roboto2.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/assets/roboto2.ttf
--------------------------------------------------------------------------------
/assets/roboto3.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/assets/roboto3.ttf
--------------------------------------------------------------------------------
/download (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/download (1).png
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | *.mode1v3
2 | *.mode2v3
3 | *.moved-aside
4 | *.pbxuser
5 | *.perspectivev3
6 | **/*sync/
7 | .sconsign.dblite
8 | .tags*
9 | **/.vagrant/
10 | **/DerivedData/
11 | Icon?
12 | **/Pods/
13 | **/.symlinks/
14 | profile
15 | xcuserdata
16 | **/.generated/
17 | Flutter/App.framework
18 | Flutter/Flutter.framework
19 | Flutter/Flutter.podspec
20 | Flutter/Generated.xcconfig
21 | Flutter/app.flx
22 | Flutter/app.zip
23 | Flutter/flutter_assets/
24 | Flutter/flutter_export_environment.sh
25 | ServiceDefinitions.json
26 | Runner/GeneratedPluginRegistrant.*
27 |
28 | # Exceptions to above rules.
29 | !default.mode1v3
30 | !default.mode2v3
31 | !default.pbxuser
32 | !default.perspectivev3
33 |
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 8.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
12 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
13 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
14 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
15 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
16 | /* End PBXBuildFile section */
17 |
18 | /* Begin PBXCopyFilesBuildPhase section */
19 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
20 | isa = PBXCopyFilesBuildPhase;
21 | buildActionMask = 2147483647;
22 | dstPath = "";
23 | dstSubfolderSpec = 10;
24 | files = (
25 | );
26 | name = "Embed Frameworks";
27 | runOnlyForDeploymentPostprocessing = 0;
28 | };
29 | /* End PBXCopyFilesBuildPhase section */
30 |
31 | /* Begin PBXFileReference section */
32 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
33 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
34 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
35 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
36 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
37 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
38 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
39 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
40 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
41 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
42 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
43 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
44 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
45 | /* End PBXFileReference section */
46 |
47 | /* Begin PBXFrameworksBuildPhase section */
48 | 97C146EB1CF9000F007C117D /* Frameworks */ = {
49 | isa = PBXFrameworksBuildPhase;
50 | buildActionMask = 2147483647;
51 | files = (
52 | );
53 | runOnlyForDeploymentPostprocessing = 0;
54 | };
55 | /* End PBXFrameworksBuildPhase section */
56 |
57 | /* Begin PBXGroup section */
58 | 9740EEB11CF90186004384FC /* Flutter */ = {
59 | isa = PBXGroup;
60 | children = (
61 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
62 | 9740EEB21CF90195004384FC /* Debug.xcconfig */,
63 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
64 | 9740EEB31CF90195004384FC /* Generated.xcconfig */,
65 | );
66 | name = Flutter;
67 | sourceTree = "";
68 | };
69 | 97C146E51CF9000F007C117D = {
70 | isa = PBXGroup;
71 | children = (
72 | 9740EEB11CF90186004384FC /* Flutter */,
73 | 97C146F01CF9000F007C117D /* Runner */,
74 | 97C146EF1CF9000F007C117D /* Products */,
75 | );
76 | sourceTree = "";
77 | };
78 | 97C146EF1CF9000F007C117D /* Products */ = {
79 | isa = PBXGroup;
80 | children = (
81 | 97C146EE1CF9000F007C117D /* Runner.app */,
82 | );
83 | name = Products;
84 | sourceTree = "";
85 | };
86 | 97C146F01CF9000F007C117D /* Runner */ = {
87 | isa = PBXGroup;
88 | children = (
89 | 97C146FA1CF9000F007C117D /* Main.storyboard */,
90 | 97C146FD1CF9000F007C117D /* Assets.xcassets */,
91 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
92 | 97C147021CF9000F007C117D /* Info.plist */,
93 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
94 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
95 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
96 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
97 | );
98 | path = Runner;
99 | sourceTree = "";
100 | };
101 | /* End PBXGroup section */
102 |
103 | /* Begin PBXNativeTarget section */
104 | 97C146ED1CF9000F007C117D /* Runner */ = {
105 | isa = PBXNativeTarget;
106 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
107 | buildPhases = (
108 | 9740EEB61CF901F6004384FC /* Run Script */,
109 | 97C146EA1CF9000F007C117D /* Sources */,
110 | 97C146EB1CF9000F007C117D /* Frameworks */,
111 | 97C146EC1CF9000F007C117D /* Resources */,
112 | 9705A1C41CF9048500538489 /* Embed Frameworks */,
113 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
114 | );
115 | buildRules = (
116 | );
117 | dependencies = (
118 | );
119 | name = Runner;
120 | productName = Runner;
121 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
122 | productType = "com.apple.product-type.application";
123 | };
124 | /* End PBXNativeTarget section */
125 |
126 | /* Begin PBXProject section */
127 | 97C146E61CF9000F007C117D /* Project object */ = {
128 | isa = PBXProject;
129 | attributes = {
130 | LastUpgradeCheck = 1020;
131 | ORGANIZATIONNAME = "";
132 | TargetAttributes = {
133 | 97C146ED1CF9000F007C117D = {
134 | CreatedOnToolsVersion = 7.3.1;
135 | LastSwiftMigration = 1100;
136 | };
137 | };
138 | };
139 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
140 | compatibilityVersion = "Xcode 9.3";
141 | developmentRegion = en;
142 | hasScannedForEncodings = 0;
143 | knownRegions = (
144 | en,
145 | Base,
146 | );
147 | mainGroup = 97C146E51CF9000F007C117D;
148 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
149 | projectDirPath = "";
150 | projectRoot = "";
151 | targets = (
152 | 97C146ED1CF9000F007C117D /* Runner */,
153 | );
154 | };
155 | /* End PBXProject section */
156 |
157 | /* Begin PBXResourcesBuildPhase section */
158 | 97C146EC1CF9000F007C117D /* Resources */ = {
159 | isa = PBXResourcesBuildPhase;
160 | buildActionMask = 2147483647;
161 | files = (
162 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
163 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
164 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
165 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
166 | );
167 | runOnlyForDeploymentPostprocessing = 0;
168 | };
169 | /* End PBXResourcesBuildPhase section */
170 |
171 | /* Begin PBXShellScriptBuildPhase section */
172 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
173 | isa = PBXShellScriptBuildPhase;
174 | buildActionMask = 2147483647;
175 | files = (
176 | );
177 | inputPaths = (
178 | );
179 | name = "Thin Binary";
180 | outputPaths = (
181 | );
182 | runOnlyForDeploymentPostprocessing = 0;
183 | shellPath = /bin/sh;
184 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
185 | };
186 | 9740EEB61CF901F6004384FC /* Run Script */ = {
187 | isa = PBXShellScriptBuildPhase;
188 | buildActionMask = 2147483647;
189 | files = (
190 | );
191 | inputPaths = (
192 | );
193 | name = "Run Script";
194 | outputPaths = (
195 | );
196 | runOnlyForDeploymentPostprocessing = 0;
197 | shellPath = /bin/sh;
198 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
199 | };
200 | /* End PBXShellScriptBuildPhase section */
201 |
202 | /* Begin PBXSourcesBuildPhase section */
203 | 97C146EA1CF9000F007C117D /* Sources */ = {
204 | isa = PBXSourcesBuildPhase;
205 | buildActionMask = 2147483647;
206 | files = (
207 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
208 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
209 | );
210 | runOnlyForDeploymentPostprocessing = 0;
211 | };
212 | /* End PBXSourcesBuildPhase section */
213 |
214 | /* Begin PBXVariantGroup section */
215 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
216 | isa = PBXVariantGroup;
217 | children = (
218 | 97C146FB1CF9000F007C117D /* Base */,
219 | );
220 | name = Main.storyboard;
221 | sourceTree = "";
222 | };
223 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
224 | isa = PBXVariantGroup;
225 | children = (
226 | 97C147001CF9000F007C117D /* Base */,
227 | );
228 | name = LaunchScreen.storyboard;
229 | sourceTree = "";
230 | };
231 | /* End PBXVariantGroup section */
232 |
233 | /* Begin XCBuildConfiguration section */
234 | 249021D3217E4FDB00AE95B9 /* Profile */ = {
235 | isa = XCBuildConfiguration;
236 | buildSettings = {
237 | ALWAYS_SEARCH_USER_PATHS = NO;
238 | CLANG_ANALYZER_NONNULL = YES;
239 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
240 | CLANG_CXX_LIBRARY = "libc++";
241 | CLANG_ENABLE_MODULES = YES;
242 | CLANG_ENABLE_OBJC_ARC = YES;
243 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
244 | CLANG_WARN_BOOL_CONVERSION = YES;
245 | CLANG_WARN_COMMA = YES;
246 | CLANG_WARN_CONSTANT_CONVERSION = YES;
247 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
248 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
249 | CLANG_WARN_EMPTY_BODY = YES;
250 | CLANG_WARN_ENUM_CONVERSION = YES;
251 | CLANG_WARN_INFINITE_RECURSION = YES;
252 | CLANG_WARN_INT_CONVERSION = YES;
253 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
254 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
255 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
256 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
257 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
258 | CLANG_WARN_STRICT_PROTOTYPES = YES;
259 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
260 | CLANG_WARN_UNREACHABLE_CODE = YES;
261 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
262 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
263 | COPY_PHASE_STRIP = NO;
264 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
265 | ENABLE_NS_ASSERTIONS = NO;
266 | ENABLE_STRICT_OBJC_MSGSEND = YES;
267 | GCC_C_LANGUAGE_STANDARD = gnu99;
268 | GCC_NO_COMMON_BLOCKS = YES;
269 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
270 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
271 | GCC_WARN_UNDECLARED_SELECTOR = YES;
272 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
273 | GCC_WARN_UNUSED_FUNCTION = YES;
274 | GCC_WARN_UNUSED_VARIABLE = YES;
275 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
276 | MTL_ENABLE_DEBUG_INFO = NO;
277 | SDKROOT = iphoneos;
278 | SUPPORTED_PLATFORMS = iphoneos;
279 | TARGETED_DEVICE_FAMILY = "1,2";
280 | VALIDATE_PRODUCT = YES;
281 | };
282 | name = Profile;
283 | };
284 | 249021D4217E4FDB00AE95B9 /* Profile */ = {
285 | isa = XCBuildConfiguration;
286 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
287 | buildSettings = {
288 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
289 | CLANG_ENABLE_MODULES = YES;
290 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
291 | ENABLE_BITCODE = NO;
292 | FRAMEWORK_SEARCH_PATHS = (
293 | "$(inherited)",
294 | "$(PROJECT_DIR)/Flutter",
295 | );
296 | INFOPLIST_FILE = Runner/Info.plist;
297 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
298 | LIBRARY_SEARCH_PATHS = (
299 | "$(inherited)",
300 | "$(PROJECT_DIR)/Flutter",
301 | );
302 | PRODUCT_BUNDLE_IDENTIFIER = com.example.librarySystem;
303 | PRODUCT_NAME = "$(TARGET_NAME)";
304 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
305 | SWIFT_VERSION = 5.0;
306 | VERSIONING_SYSTEM = "apple-generic";
307 | };
308 | name = Profile;
309 | };
310 | 97C147031CF9000F007C117D /* Debug */ = {
311 | isa = XCBuildConfiguration;
312 | buildSettings = {
313 | ALWAYS_SEARCH_USER_PATHS = NO;
314 | CLANG_ANALYZER_NONNULL = YES;
315 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
316 | CLANG_CXX_LIBRARY = "libc++";
317 | CLANG_ENABLE_MODULES = YES;
318 | CLANG_ENABLE_OBJC_ARC = YES;
319 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
320 | CLANG_WARN_BOOL_CONVERSION = YES;
321 | CLANG_WARN_COMMA = YES;
322 | CLANG_WARN_CONSTANT_CONVERSION = YES;
323 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
324 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
325 | CLANG_WARN_EMPTY_BODY = YES;
326 | CLANG_WARN_ENUM_CONVERSION = YES;
327 | CLANG_WARN_INFINITE_RECURSION = YES;
328 | CLANG_WARN_INT_CONVERSION = YES;
329 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
330 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
331 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
332 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
333 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
334 | CLANG_WARN_STRICT_PROTOTYPES = YES;
335 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
336 | CLANG_WARN_UNREACHABLE_CODE = YES;
337 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
338 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
339 | COPY_PHASE_STRIP = NO;
340 | DEBUG_INFORMATION_FORMAT = dwarf;
341 | ENABLE_STRICT_OBJC_MSGSEND = YES;
342 | ENABLE_TESTABILITY = YES;
343 | GCC_C_LANGUAGE_STANDARD = gnu99;
344 | GCC_DYNAMIC_NO_PIC = NO;
345 | GCC_NO_COMMON_BLOCKS = YES;
346 | GCC_OPTIMIZATION_LEVEL = 0;
347 | GCC_PREPROCESSOR_DEFINITIONS = (
348 | "DEBUG=1",
349 | "$(inherited)",
350 | );
351 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
352 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
353 | GCC_WARN_UNDECLARED_SELECTOR = YES;
354 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
355 | GCC_WARN_UNUSED_FUNCTION = YES;
356 | GCC_WARN_UNUSED_VARIABLE = YES;
357 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
358 | MTL_ENABLE_DEBUG_INFO = YES;
359 | ONLY_ACTIVE_ARCH = YES;
360 | SDKROOT = iphoneos;
361 | TARGETED_DEVICE_FAMILY = "1,2";
362 | };
363 | name = Debug;
364 | };
365 | 97C147041CF9000F007C117D /* Release */ = {
366 | isa = XCBuildConfiguration;
367 | buildSettings = {
368 | ALWAYS_SEARCH_USER_PATHS = NO;
369 | CLANG_ANALYZER_NONNULL = YES;
370 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
371 | CLANG_CXX_LIBRARY = "libc++";
372 | CLANG_ENABLE_MODULES = YES;
373 | CLANG_ENABLE_OBJC_ARC = YES;
374 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
375 | CLANG_WARN_BOOL_CONVERSION = YES;
376 | CLANG_WARN_COMMA = YES;
377 | CLANG_WARN_CONSTANT_CONVERSION = YES;
378 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
379 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
380 | CLANG_WARN_EMPTY_BODY = YES;
381 | CLANG_WARN_ENUM_CONVERSION = YES;
382 | CLANG_WARN_INFINITE_RECURSION = YES;
383 | CLANG_WARN_INT_CONVERSION = YES;
384 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
385 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
386 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
387 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
388 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
389 | CLANG_WARN_STRICT_PROTOTYPES = YES;
390 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
391 | CLANG_WARN_UNREACHABLE_CODE = YES;
392 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
393 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
394 | COPY_PHASE_STRIP = NO;
395 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
396 | ENABLE_NS_ASSERTIONS = NO;
397 | ENABLE_STRICT_OBJC_MSGSEND = YES;
398 | GCC_C_LANGUAGE_STANDARD = gnu99;
399 | GCC_NO_COMMON_BLOCKS = YES;
400 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
401 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
402 | GCC_WARN_UNDECLARED_SELECTOR = YES;
403 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
404 | GCC_WARN_UNUSED_FUNCTION = YES;
405 | GCC_WARN_UNUSED_VARIABLE = YES;
406 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
407 | MTL_ENABLE_DEBUG_INFO = NO;
408 | SDKROOT = iphoneos;
409 | SUPPORTED_PLATFORMS = iphoneos;
410 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
411 | TARGETED_DEVICE_FAMILY = "1,2";
412 | VALIDATE_PRODUCT = YES;
413 | };
414 | name = Release;
415 | };
416 | 97C147061CF9000F007C117D /* Debug */ = {
417 | isa = XCBuildConfiguration;
418 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
419 | buildSettings = {
420 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
421 | CLANG_ENABLE_MODULES = YES;
422 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
423 | ENABLE_BITCODE = NO;
424 | FRAMEWORK_SEARCH_PATHS = (
425 | "$(inherited)",
426 | "$(PROJECT_DIR)/Flutter",
427 | );
428 | INFOPLIST_FILE = Runner/Info.plist;
429 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
430 | LIBRARY_SEARCH_PATHS = (
431 | "$(inherited)",
432 | "$(PROJECT_DIR)/Flutter",
433 | );
434 | PRODUCT_BUNDLE_IDENTIFIER = com.example.librarySystem;
435 | PRODUCT_NAME = "$(TARGET_NAME)";
436 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
437 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
438 | SWIFT_VERSION = 5.0;
439 | VERSIONING_SYSTEM = "apple-generic";
440 | };
441 | name = Debug;
442 | };
443 | 97C147071CF9000F007C117D /* Release */ = {
444 | isa = XCBuildConfiguration;
445 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
446 | buildSettings = {
447 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
448 | CLANG_ENABLE_MODULES = YES;
449 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
450 | ENABLE_BITCODE = NO;
451 | FRAMEWORK_SEARCH_PATHS = (
452 | "$(inherited)",
453 | "$(PROJECT_DIR)/Flutter",
454 | );
455 | INFOPLIST_FILE = Runner/Info.plist;
456 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
457 | LIBRARY_SEARCH_PATHS = (
458 | "$(inherited)",
459 | "$(PROJECT_DIR)/Flutter",
460 | );
461 | PRODUCT_BUNDLE_IDENTIFIER = com.example.librarySystem;
462 | PRODUCT_NAME = "$(TARGET_NAME)";
463 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
464 | SWIFT_VERSION = 5.0;
465 | VERSIONING_SYSTEM = "apple-generic";
466 | };
467 | name = Release;
468 | };
469 | /* End XCBuildConfiguration section */
470 |
471 | /* Begin XCConfigurationList section */
472 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
473 | isa = XCConfigurationList;
474 | buildConfigurations = (
475 | 97C147031CF9000F007C117D /* Debug */,
476 | 97C147041CF9000F007C117D /* Release */,
477 | 249021D3217E4FDB00AE95B9 /* Profile */,
478 | );
479 | defaultConfigurationIsVisible = 0;
480 | defaultConfigurationName = Release;
481 | };
482 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
483 | isa = XCConfigurationList;
484 | buildConfigurations = (
485 | 97C147061CF9000F007C117D /* Debug */,
486 | 97C147071CF9000F007C117D /* Release */,
487 | 249021D4217E4FDB00AE95B9 /* Profile */,
488 | );
489 | defaultConfigurationIsVisible = 0;
490 | defaultConfigurationName = Release;
491 | };
492 | /* End XCConfigurationList section */
493 | };
494 | rootObject = 97C146E61CF9000F007C117D /* Project object */;
495 | }
496 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
43 |
44 |
54 |
56 |
62 |
63 |
64 |
65 |
66 |
67 |
73 |
75 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-App-20x20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-App-20x20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-App-29x29@1x.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-App-29x29@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-App-29x29@3x.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-App-40x40@2x.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-App-40x40@3x.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-App-60x60@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "Icon-App-60x60@3x.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-App-20x20@1x.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-App-20x20@2x.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-App-29x29@1x.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-App-29x29@2x.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-App-40x40@1x.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-App-40x40@2x.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-App-76x76@1x.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-App-76x76@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "Icon-App-83.5x83.5@2x.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "Icon-App-1024x1024@1x.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | library_system
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | $(FLUTTER_BUILD_NAME)
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(FLUTTER_BUILD_NUMBER)
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UISupportedInterfaceOrientations
30 |
31 | UIInterfaceOrientationPortrait
32 | UIInterfaceOrientationLandscapeLeft
33 | UIInterfaceOrientationLandscapeRight
34 |
35 | UISupportedInterfaceOrientations~ipad
36 |
37 | UIInterfaceOrientationPortrait
38 | UIInterfaceOrientationPortraitUpsideDown
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 | UIViewControllerBasedStatusBarAppearance
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/lib/invoice.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 | import 'dart:typed_data';
3 | import 'package:cloud_firestore/cloud_firestore.dart';
4 | import 'package:firebase_auth/firebase_auth.dart';
5 | import 'package:flutter/services.dart';
6 | import 'package:intl/intl.dart';
7 | import 'package:library_system/models/Book_model.dart';
8 | import 'package:pdf/pdf.dart';
9 | import 'package:pdf/widgets.dart' as pw;
10 |
11 | Future generateInvoice(
12 | // PdfPageFormat pageFormat,
13 | String inviceno,
14 | DocumentSnapshot snp,
15 | String issuerName,
16 | String issuerPhone,
17 | String issuerEmail,
18 | DateTime issued,
19 | DateTime due) async {
20 | final book = Books.fromSnapshot(snp);
21 |
22 | final invoice = Invoice(
23 | issueDate: issued,
24 | duedate: due,
25 | invoiceNumber: inviceno,
26 | customerPhone: issuerPhone,
27 | book: book,
28 | customerName: issuerName,
29 | customerEmail: issuerEmail,
30 | baseColor: PdfColors.teal,
31 | accentColor: PdfColors.blueGrey900,
32 | );
33 |
34 | return await invoice.buildPdf(
35 | // pageFormat
36 | );
37 | }
38 |
39 | class Invoice {
40 | Invoice({
41 | this.customerPhone,
42 | this.issueDate,
43 | this.duedate,
44 | this.book,
45 | this.customerName,
46 | this.customerEmail,
47 | this.invoiceNumber,
48 | this.baseColor,
49 | this.accentColor,
50 | });
51 |
52 | final Books book;
53 | final String customerName;
54 | final String customerEmail;
55 | final String invoiceNumber;
56 | final PdfColor baseColor;
57 | final PdfColor accentColor;
58 | final String customerPhone;
59 | final DateTime issueDate;
60 | final DateTime duedate;
61 |
62 | static const _darkColor = PdfColors.blueGrey800;
63 | static const _lightColor = PdfColors.white;
64 |
65 | // PdfColor get _baseTextColor =>
66 | // baseColor.luminance < 0.5 ? _lightColor : _darkColor;
67 |
68 | PdfColor get _accentTextColor =>
69 | baseColor.luminance < 0.5 ? _lightColor : _darkColor;
70 |
71 | PdfImage _logo;
72 |
73 | Future buildPdf(
74 | // PdfPageFormat pageFormat
75 | ) async {
76 | final doc = pw.Document();
77 | PdfPageFormat pageFormat = PdfPageFormat.a4;
78 | final font1 = await rootBundle.load('assets/roboto1.ttf');
79 | final font2 = await rootBundle.load('assets/roboto2.ttf');
80 | final font3 = await rootBundle.load('assets/roboto3.ttf');
81 |
82 | _logo = PdfImage.file(
83 | doc.document,
84 | bytes: (await rootBundle.load('assets/logo.png')).buffer.asUint8List(),
85 | );
86 | doc.addPage(
87 | pw.MultiPage(
88 | pageTheme: _buildTheme(
89 | pageFormat,
90 | font1 != null ? pw.Font.ttf(font1) : null,
91 | font2 != null ? pw.Font.ttf(font2) : null,
92 | font3 != null ? pw.Font.ttf(font3) : null,
93 | ),
94 | header: _buildHeader,
95 | build: (context) => [
96 | _contentHeader(context),
97 | _contentTable(context),
98 | pw.SizedBox(height: 20),
99 | _contentFooter(context),
100 | pw.SizedBox(height: 20),
101 | _termsAndConditions(context),
102 | ],
103 | ),
104 | );
105 |
106 | // Return the PDF file content
107 | return doc.save();
108 | }
109 |
110 | pw.Widget _buildHeader(pw.Context context) {
111 | return pw.Column(
112 | children: [
113 | pw.Row(
114 | crossAxisAlignment: pw.CrossAxisAlignment.start,
115 | children: [
116 | pw.Expanded(
117 | child: pw.Column(
118 | children: [
119 | pw.Container(
120 | height: 50,
121 | padding: const pw.EdgeInsets.only(left: 20),
122 | alignment: pw.Alignment.centerLeft,
123 | child: pw.Text(
124 | 'ISSUED',
125 | style: pw.TextStyle(
126 | color: baseColor,
127 | fontWeight: pw.FontWeight.bold,
128 | fontSize: 40,
129 | ),
130 | ),
131 | ),
132 | pw.Container(
133 | decoration: pw.BoxDecoration(
134 | borderRadius: 2,
135 | color: accentColor,
136 | ),
137 | padding: const pw.EdgeInsets.only(
138 | left: 40, top: 10, bottom: 10, right: 20),
139 | alignment: pw.Alignment.centerLeft,
140 | height: 50,
141 | child: pw.DefaultTextStyle(
142 | style: pw.TextStyle(
143 | color: _accentTextColor,
144 | fontSize: 12,
145 | ),
146 | child: pw.GridView(
147 | crossAxisCount: 2,
148 | children: [
149 | pw.Text('Invoice #'),
150 | pw.Text(invoiceNumber),
151 | pw.Text('Issue Date:'),
152 | pw.Text(_formatDate(this.issueDate)),
153 | ],
154 | ),
155 | ),
156 | ),
157 | ],
158 | ),
159 | ),
160 | pw.Expanded(
161 | child: pw.Column(
162 | mainAxisSize: pw.MainAxisSize.min,
163 | children: [
164 | pw.Container(
165 | alignment: pw.Alignment.topRight,
166 | padding: const pw.EdgeInsets.only(bottom: 8, left: 30),
167 | height: 72,
168 | child: _logo != null ? pw.Image(_logo) : pw.PdfLogo(),
169 | ),
170 | ],
171 | ),
172 | ),
173 | ],
174 | ),
175 | if (context.pageNumber > 1) pw.SizedBox(height: 20)
176 | ],
177 | );
178 | }
179 |
180 | pw.PageTheme _buildTheme(
181 | PdfPageFormat pageFormat, pw.Font base, pw.Font bold, pw.Font italic) {
182 | return pw.PageTheme(
183 | pageFormat: pageFormat,
184 | theme: pw.ThemeData.withFont(
185 | base: base,
186 | bold: bold,
187 | italic: italic,
188 | ),
189 | buildBackground: (context) => pw.FullPage(
190 | ignoreMargins: true,
191 | child: pw.Stack(
192 | children: [
193 | pw.Positioned(
194 | bottom: 0,
195 | left: 0,
196 | child: pw.Container(
197 | height: 20,
198 | width: pageFormat.width / 2,
199 | decoration: pw.BoxDecoration(
200 | gradient: pw.LinearGradient(
201 | colors: [baseColor, PdfColors.white],
202 | ),
203 | ),
204 | ),
205 | ),
206 | pw.Positioned(
207 | bottom: 20,
208 | left: 0,
209 | child: pw.Container(
210 | height: 20,
211 | width: pageFormat.width / 4,
212 | decoration: pw.BoxDecoration(
213 | gradient: pw.LinearGradient(
214 | colors: [accentColor, PdfColors.white],
215 | ),
216 | ),
217 | ),
218 | ),
219 | pw.Positioned(
220 | top: pageFormat.marginTop + 72,
221 | left: 0,
222 | right: 0,
223 | child: pw.Container(
224 | height: 3,
225 | color: baseColor,
226 | ),
227 | ),
228 | ],
229 | ),
230 | ),
231 | );
232 | }
233 |
234 | pw.Widget _contentHeader(pw.Context context) {
235 | return pw.Row(
236 | crossAxisAlignment: pw.CrossAxisAlignment.start,
237 | children: [
238 | pw.Expanded(
239 | child: pw.Container(
240 | margin: const pw.EdgeInsets.symmetric(horizontal: 20),
241 | height: 70,
242 | child: pw.FittedBox(
243 | child: pw.Text(
244 | 'Due : ' + _formatDate(this.duedate),
245 | style: pw.TextStyle(
246 | color: baseColor,
247 | fontStyle: pw.FontStyle.italic,
248 | ),
249 | ),
250 | ),
251 | ),
252 | ),
253 | pw.Expanded(
254 | child: pw.Row(
255 | children: [
256 | pw.Container(
257 | margin: const pw.EdgeInsets.only(left: 10, right: 10),
258 | height: 70,
259 | child: pw.Text(
260 | 'Invoice to:',
261 | style: pw.TextStyle(
262 | color: _darkColor,
263 | fontWeight: pw.FontWeight.bold,
264 | fontSize: 12,
265 | ),
266 | ),
267 | ),
268 | pw.Expanded(
269 | child: pw.Container(
270 | height: 70,
271 | child: pw.RichText(
272 | text: pw.TextSpan(
273 | text: '$customerName\n',
274 | style: pw.TextStyle(
275 | color: _darkColor,
276 | fontWeight: pw.FontWeight.bold,
277 | fontSize: 12,
278 | ),
279 | children: [
280 | const pw.TextSpan(
281 | text: '\n',
282 | style: pw.TextStyle(
283 | fontSize: 5,
284 | ),
285 | ),
286 | pw.TextSpan(
287 | text: customerEmail,
288 | style: pw.TextStyle(
289 | fontWeight: pw.FontWeight.normal,
290 | fontSize: 10,
291 | ),
292 | ),
293 | const pw.TextSpan(
294 | text: '\n',
295 | style: pw.TextStyle(
296 | fontSize: 5,
297 | ),
298 | ),
299 | pw.TextSpan(
300 | text: customerPhone,
301 | style: pw.TextStyle(
302 | fontWeight: pw.FontWeight.normal,
303 | fontSize: 10,
304 | ),
305 | ),
306 | ])),
307 | ),
308 | ),
309 | ],
310 | ),
311 | ),
312 | ],
313 | );
314 | }
315 |
316 | pw.Widget _contentFooter(pw.Context context) {
317 | return pw.Row(
318 | crossAxisAlignment: pw.CrossAxisAlignment.start,
319 | children: [
320 | pw.Expanded(
321 | flex: 2,
322 | child: pw.Column(
323 | crossAxisAlignment: pw.CrossAxisAlignment.start,
324 | children: [
325 | pw.Text(
326 | 'Thank you for Visiting',
327 | style: pw.TextStyle(
328 | color: _darkColor,
329 | fontWeight: pw.FontWeight.bold,
330 | fontSize: 20),
331 | ),
332 | pw.Container(
333 | margin: const pw.EdgeInsets.only(top: 20, bottom: 8),
334 | child: pw.Text(
335 | "IssuedBy",
336 | style: pw.TextStyle(
337 | fontSize: 15,
338 | color: baseColor,
339 | fontWeight: pw.FontWeight.bold,
340 | ),
341 | ),
342 | ),
343 | pw.Text(
344 | FirebaseAuth.instance.currentUser.email,
345 | style: const pw.TextStyle(
346 | fontSize: 12,
347 | lineSpacing: 5,
348 | color: _darkColor,
349 | ),
350 | ),
351 | ],
352 | ),
353 | ),
354 | ],
355 | );
356 | }
357 |
358 | pw.Widget _termsAndConditions(pw.Context context) {
359 | return pw.Row(
360 | crossAxisAlignment: pw.CrossAxisAlignment.end,
361 | children: [
362 | pw.Expanded(
363 | child: pw.Column(
364 | crossAxisAlignment: pw.CrossAxisAlignment.start,
365 | children: [
366 | pw.Container(
367 | decoration: pw.BoxDecoration(
368 | border: pw.BoxBorder(
369 | top: true,
370 | color: accentColor,
371 | ),
372 | ),
373 | padding: const pw.EdgeInsets.only(top: 10, bottom: 4),
374 | child: pw.Text(
375 | 'Terms & Conditions',
376 | style: pw.TextStyle(
377 | fontSize: 15,
378 | color: baseColor,
379 | fontWeight: pw.FontWeight.bold,
380 | ),
381 | ),
382 | ),
383 | pw.Text(
384 | "* Return On Time",
385 | textAlign: pw.TextAlign.justify,
386 | style: const pw.TextStyle(
387 | fontSize: 12,
388 | lineSpacing: 2,
389 | color: _darkColor,
390 | ),
391 | ),
392 | ],
393 | ),
394 | ),
395 | pw.Expanded(
396 | child: pw.SizedBox(),
397 | ),
398 | ],
399 | );
400 | }
401 |
402 | pw.Widget _contentTable(pw.Context context) {
403 | return pw.Column(
404 | crossAxisAlignment: pw.CrossAxisAlignment.start,
405 | children: [
406 | pw.Text(
407 | "Book Details ",
408 | style: pw.TextStyle(
409 | color: baseColor,
410 | fontWeight: pw.FontWeight.bold,
411 | fontSize: 30,
412 | ),
413 | ),
414 | pw.Text(
415 | "Name : " + book.name,
416 | style: pw.TextStyle(
417 | color: PdfColors.cyan,
418 | fontWeight: pw.FontWeight.bold,
419 | fontSize: 15,
420 | ),
421 | ),
422 | pw.Text(
423 | "Author :" + book.author,
424 | style: pw.TextStyle(
425 | color: PdfColors.cyan,
426 | fontWeight: pw.FontWeight.bold,
427 | fontSize: 15,
428 | ),
429 | ),
430 | pw.Text(
431 | "Genre : " + book.genre,
432 | style: pw.TextStyle(
433 | color: PdfColors.cyan,
434 | fontWeight: pw.FontWeight.bold,
435 | fontSize: 15,
436 | ),
437 | ),
438 | pw.Text(
439 | "Unique ID : " + book.uId,
440 | style: pw.TextStyle(
441 | color: PdfColors.cyan,
442 | fontWeight: pw.FontWeight.bold,
443 | fontSize: 15,
444 | ),
445 | ),
446 | pw.Text(
447 | book.isbn == null
448 | ? "ISBN : Not Availble"
449 | : "ISBN : " + book.isbn,
450 | style: pw.TextStyle(
451 | color: PdfColors.cyan,
452 | fontWeight: pw.FontWeight.bold,
453 | fontSize: 15,
454 | ),
455 | ),
456 | ]);
457 | }
458 | }
459 |
460 | String _formatDate(DateTime date) {
461 | final format = DateFormat.yMMMd('en_US');
462 | return format.format(date);
463 | }
464 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:firebase_core/firebase_core.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:library_system/pages/homePage.dart';
4 | import 'package:library_system/pages/loginSignupPage.dart';
5 | import 'package:library_system/pages/splashScreen.dart';
6 |
7 | void main() async {
8 | WidgetsFlutterBinding.ensureInitialized();
9 | await Firebase.initializeApp();
10 | runApp(Library());
11 | }
12 |
13 | class Library extends StatelessWidget {
14 | @override
15 | Widget build(BuildContext context) {
16 | return MaterialApp(
17 | debugShowCheckedModeBanner: false,
18 | home: SplashScreen(),
19 | routes: {
20 | LoginSignupPage.id: (context) => LoginSignupPage(),
21 | HomePage.id: (context) => HomePage(),
22 | },
23 | );
24 | }
25 | }
26 |
27 |
--------------------------------------------------------------------------------
/lib/models/Book_model.dart:
--------------------------------------------------------------------------------
1 | //Books is defined here as a class
2 |
3 | import 'package:cloud_firestore/cloud_firestore.dart';
4 |
5 | class Books {
6 | String name;
7 | String author;
8 | String uId;
9 | String publisher;
10 | String genre;
11 | String isbn;
12 | String status;
13 |
14 | Books(
15 | {this.name,
16 | this.status,
17 | this.author,
18 | this.uId,
19 | this.publisher,
20 | this.genre,
21 | this.isbn});
22 |
23 | Books.fromSnapshot(DocumentSnapshot snapshot)
24 | : name = snapshot.data()["name"],
25 | author = snapshot.data()["author"],
26 | uId = snapshot.id,
27 | publisher = snapshot.data()["publisher"],
28 | genre = snapshot.data()["genre"],
29 | isbn = snapshot.data()["isbn"],
30 | status = snapshot.data()["status"];
31 | toJson() {
32 | return {
33 | "name": name,
34 | "author": author,
35 | "uId": uId,
36 | "publisher": publisher,
37 | "genre": genre,
38 | "isbn": isbn,
39 | "status": status,
40 | };
41 | }
42 | }
43 |
44 | String result = "";
45 | String reResult = "";
46 |
--------------------------------------------------------------------------------
/lib/pages/addNewBookPage.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_svg/flutter_svg.dart';
2 | import 'package:cloud_firestore/cloud_firestore.dart';
3 | import 'package:flutter/material.dart';
4 | import 'package:firebase_database/firebase_database.dart';
5 | import 'package:library_system/models/Book_model.dart';
6 | import 'package:barcode/barcode.dart';
7 | // import 'package:firebase_database/ui/firebase_animated_list.dart';
8 |
9 | class AddNewBookPage extends StatefulWidget {
10 | AddNewBookPage({this.isbn});
11 | final String isbn;
12 | @override
13 | _AddNewBookPageState createState() => _AddNewBookPageState();
14 | }
15 |
16 | class _AddNewBookPageState extends State {
17 | List books = List();
18 | Books book;
19 |
20 | DatabaseReference itemRef;
21 |
22 | final GlobalKey formKey = GlobalKey();
23 |
24 | @override
25 | void initState() {
26 | super.initState();
27 | book = Books();
28 | book.isbn = widget.isbn;
29 | book.status = "IN";
30 | }
31 |
32 | void _handleSubmit() {
33 | final FormState form = formKey.currentState;
34 | // ignore: non_constant_identifier_names
35 | final firestoreInstance = FirebaseFirestore.instance;
36 | if (form.validate()) {
37 | form.save();
38 | form.reset();
39 | firestoreInstance.collection("books").add(book.toJson()).then(
40 | (value) {
41 | print(value.id);
42 | setState(() {
43 | code = bc.toSvg(
44 | value.id,
45 | );
46 | });
47 | showDialog(
48 | context: context,
49 | child: new SimpleDialog(
50 | title: new Text("Book Added"),
51 | children: [
52 | Container(
53 | height: 100,
54 | width: 200,
55 | child: SvgPicture.string(
56 | code,
57 | fit: BoxFit.contain,
58 | ),
59 | ),
60 | SizedBox(
61 | height: 10,
62 | ),
63 | Icon(
64 | Icons.check_circle,
65 | color: Colors.green,
66 | size: 25,
67 | )
68 | ],
69 | ),
70 | );
71 | },
72 | );
73 | }
74 | }
75 |
76 | /*Future _scanQR() async {
77 | try {
78 | String qrResult = await BarcodeScanner.scan();
79 | setState(() {
80 | result = qrResult;
81 |
82 | });
83 | } on PlatformException catch (ex) {
84 | if (ex.code == BarcodeScanner.CameraAccessDenied) {
85 | setState(() {
86 | result = "Camera permission was denied";
87 | });
88 | } else {
89 | setState(() {
90 | result = "Unknown Error $ex";
91 | });
92 | }
93 | } on FormatException {
94 | setState(() {
95 | result = "You pressed the back button before scanning anything";
96 | });
97 | } catch (ex) {
98 | setState(() {
99 | result = "Unknown Error $ex";
100 | });
101 | }
102 | }*/
103 |
104 | Barcode bc = Barcode.code128();
105 | String code;
106 |
107 | @override
108 | Widget build(BuildContext context) {
109 | return Scaffold(
110 | backgroundColor: Colors.white,
111 | appBar: AppBar(
112 | backgroundColor: Colors.white,
113 | elevation: 0.0,
114 | ),
115 | resizeToAvoidBottomPadding: false,
116 | body: SingleChildScrollView(
117 | child: Column(
118 | children: [
119 | SizedBox(
120 | height: 20,
121 | ),
122 | Center(
123 | child: Column(children: [
124 | Container(
125 | padding: EdgeInsets.only(right: 190),
126 | child: Text("ADD A NEW BOOK ",
127 | style: TextStyle(
128 | fontWeight: FontWeight.w700,
129 | color: Color(0xFF584846),
130 | fontSize: 20,
131 | fontFamily: 'Roboto',
132 | )),
133 | ),
134 | SizedBox(
135 | height: 50,
136 | ),
137 | Center(
138 | child: Column(children: [
139 | SizedBox(
140 | height: 15,
141 | ),
142 | Image.asset(
143 | "assets/images/books123.png",
144 | width: 200,
145 | height: 100,
146 | ),
147 | ]),
148 | ),
149 | ]),
150 | ),
151 | SizedBox(
152 | height: 45,
153 | ),
154 | Flexible(
155 | flex: 0,
156 | child: Center(
157 | child: Form(
158 | key: formKey,
159 | child: Flex(
160 | direction: Axis.vertical,
161 | children: [
162 | ListTile(
163 | title: Container(
164 | height: 65,
165 | padding:
166 | EdgeInsets.symmetric(horizontal: 10, vertical: 7),
167 | child: TextFormField(
168 | initialValue: result,
169 | decoration: InputDecoration(
170 | filled: true,
171 | fillColor: Colors.grey[200],
172 | hintText: "Enter ISBN",
173 | border: OutlineInputBorder(
174 | borderRadius: BorderRadius.circular(25.0),
175 | borderSide: const BorderSide(),
176 | ),
177 | ),
178 | onSaved: (val) => book.isbn = val,
179 | validator: (val) => val == "" ? val : null,
180 | ),
181 | ),
182 | ),
183 | ListTile(
184 | title: Container(
185 | height: 65,
186 | padding:
187 | EdgeInsets.symmetric(horizontal: 10, vertical: 7),
188 | child: TextFormField(
189 | initialValue: "",
190 | decoration: InputDecoration(
191 | filled: true,
192 | fillColor: Colors.grey[200],
193 | hintText: "Enter Title of the book",
194 | border: OutlineInputBorder(
195 | borderRadius: BorderRadius.circular(25.0),
196 | borderSide: const BorderSide(),
197 | ),
198 | ),
199 | onSaved: (val) => book.name = val,
200 | validator: (val) => val == "" ? val : null,
201 | ),
202 | ),
203 | ),
204 | ListTile(
205 | title: Container(
206 | height: 65,
207 | padding:
208 | EdgeInsets.symmetric(horizontal: 10, vertical: 7),
209 | child: TextFormField(
210 | initialValue: '',
211 | decoration: InputDecoration(
212 | filled: true,
213 | fillColor: Colors.grey[200],
214 | hintText: "Enter Author Name",
215 | border: OutlineInputBorder(
216 | borderRadius: BorderRadius.circular(25.0),
217 | borderSide: const BorderSide(),
218 | ),
219 | ),
220 | onSaved: (val) => book.author = val,
221 | validator: (val) => val == "" ? val : null,
222 | ),
223 | ),
224 | ),
225 | ListTile(
226 | title: Container(
227 | height: 65,
228 | padding:
229 | EdgeInsets.symmetric(horizontal: 10, vertical: 7),
230 | child: TextFormField(
231 | initialValue: '',
232 | decoration: InputDecoration(
233 | filled: true,
234 | fillColor: Colors.grey[200],
235 | hintText: "Enter Publisher Name",
236 | border: OutlineInputBorder(
237 | borderRadius: BorderRadius.circular(25.0),
238 | borderSide:
239 | const BorderSide(color: Colors.white),
240 | ),
241 | ),
242 | onSaved: (val) => book.publisher = val,
243 | validator: (val) => val == "" ? val : null,
244 | ),
245 | ),
246 | ),
247 | ListTile(
248 | title: Container(
249 | height: 65,
250 | padding:
251 | EdgeInsets.symmetric(horizontal: 10, vertical: 7),
252 | child: TextFormField(
253 | initialValue: '',
254 | decoration: InputDecoration(
255 | filled: true,
256 | fillColor: Colors.grey[200],
257 | hintText: "Enter Genre",
258 | border: OutlineInputBorder(
259 | borderRadius: BorderRadius.circular(25.0),
260 | borderSide: const BorderSide(),
261 | ),
262 | ),
263 | onSaved: (val) => book.genre = val,
264 | validator: (val) => val == "" ? val : null,
265 | ),
266 | ),
267 | ),
268 | Container(
269 | width: 245,
270 | child: FlatButton(
271 | color: Color(0xFF584846),
272 | shape: RoundedRectangleBorder(
273 | borderRadius: BorderRadius.circular(9.0),
274 | ),
275 | child: Text("ADD",
276 | style: TextStyle(
277 | color: Color(0xFFF3BB84), fontSize: 15)),
278 | onPressed: () async {
279 | _handleSubmit();
280 | },
281 | ),
282 | ),
283 | ],
284 | ),
285 | ),
286 | ),
287 | ),
288 | ],
289 | ),
290 | ),
291 | );
292 | }
293 | }
294 |
--------------------------------------------------------------------------------
/lib/pages/editProfilePage.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:library_system/pages/profilepage.dart';
3 |
4 | class EditProfilePage extends StatefulWidget {
5 | EditProfilePage({Key key}) : super(key: key);
6 |
7 | @override
8 | _EditProfilePageState createState() => _EditProfilePageState();
9 | }
10 |
11 | class _EditProfilePageState extends State {
12 | @override
13 | Widget build(BuildContext context) {
14 | return Scaffold(
15 | backgroundColor: Colors.white,
16 | body: SafeArea(
17 | child: SingleChildScrollView(
18 | child: Column(
19 | mainAxisSize: MainAxisSize.min,
20 | children: [
21 | Container(
22 | height: 500,
23 | child: Stack(
24 | alignment: Alignment.center,
25 | children: [
26 | Container(
27 | width: MediaQuery.of(context).size.width,
28 | height: 499,
29 | decoration: BoxDecoration(
30 | color: Color(0xFFE0B485),
31 | borderRadius: BorderRadius.only(
32 | topLeft: Radius.circular(0.0),
33 | bottomLeft: Radius.circular(27.0),
34 | bottomRight: Radius.circular(27.0),
35 | topRight: Radius.circular(0.0),
36 | ),
37 | ),
38 | ),
39 | Container(
40 | child: CircleAvatar(
41 | radius: 80,
42 | backgroundColor: Color(0xFFE0B485),
43 | child: Opacity(
44 | opacity: 0.8,
45 | child: CircleAvatar(
46 | radius: 80,
47 | backgroundImage: NetworkImage(
48 | 'https://images.pexels.com/photos/220453/pexels-photo-220453.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500'),
49 | ),
50 | ),
51 | ),
52 | ),
53 | Container(
54 | height: 150,
55 | width: 150,
56 | child: Container(
57 | alignment: Alignment.bottomRight,
58 | child: Icon(
59 | Icons.add_a_photo,
60 | size: 40,
61 | color: Colors.black54,
62 | ),
63 | ),
64 | ),
65 | Container(
66 | alignment: Alignment.bottomCenter,
67 | height: 225,
68 | child: Text(
69 | 'Remove',
70 | style: TextStyle(
71 | fontFamily: 'Montserrat',
72 | color: Colors.white,
73 | fontSize: 12,
74 | fontWeight: FontWeight.bold),
75 | ),
76 | ),
77 | Container(
78 | alignment: Alignment.bottomCenter,
79 | height: 335,
80 | child: Row(
81 | mainAxisAlignment: MainAxisAlignment.center,
82 | children: [
83 | Text(
84 | 'FULL NAME',
85 | style: TextStyle(
86 | color: Colors.white,
87 | fontSize: 30,
88 | fontFamily: 'Montserrat',
89 | ),
90 | ),
91 | SizedBox(
92 | width: 10,
93 | ),
94 | Icon(
95 | Icons.edit,
96 | color: Colors.white,
97 | ),
98 | ],
99 | ),
100 | ),
101 | Container(
102 | alignment: Alignment.bottomCenter,
103 | height: 390,
104 | child: Row(
105 | mainAxisAlignment: MainAxisAlignment.center,
106 | children: [
107 | Opacity(
108 | opacity: 0.7,
109 | child: Text(
110 | 'Admin',
111 | style: TextStyle(
112 | color: Colors.white,
113 | fontSize: 14,
114 | fontFamily: 'Montserrat',
115 | fontWeight: FontWeight.bold),
116 | ),
117 | ),
118 | SizedBox(
119 | width: 10,
120 | ),
121 | Icon(
122 | Icons.edit,
123 | color: Colors.white,
124 | size: 10,
125 | ),
126 | ],
127 | ),
128 | ),
129 | ],
130 | ),
131 | ),
132 | Column(
133 | mainAxisSize: MainAxisSize.min,
134 | children: [
135 | ListTile(
136 | leading: Icon(
137 | Icons.call,
138 | color: Color(0xFF584846),
139 | ),
140 | title: Text(
141 | 'Phone Number',
142 | style: TextStyle(
143 | color: Color(0xFF584846),
144 | fontFamily: 'Montserrat',
145 | fontSize: 17,
146 | fontWeight: FontWeight.bold),
147 | ),
148 | subtitle: Text(
149 | '+ 91 0000000000',
150 | style: TextStyle(
151 | fontFamily: 'Montserrat',
152 | fontSize: 15,
153 | ),
154 | ),
155 | trailing: Icon(
156 | Icons.edit,
157 | color: Color(0xFF584846),
158 | size: 22,
159 | ),
160 | ),
161 | ListTile(
162 | leading: Icon(
163 | Icons.mail,
164 | color: Color(0xFF584846),
165 | ),
166 | title: Text(
167 | 'Email',
168 | style: TextStyle(
169 | color: Color(0xFF584846),
170 | fontFamily: 'Montserrat',
171 | fontSize: 17,
172 | fontWeight: FontWeight.bold),
173 | ),
174 | subtitle: Text(
175 | 'admin@gmail.com',
176 | style: TextStyle(
177 | fontFamily: 'Montserrat',
178 | fontSize: 15,
179 | ),
180 | ),
181 | trailing: Icon(
182 | Icons.edit,
183 | color: Color(0xFF584846),
184 | size: 22,
185 | ),
186 | ),
187 | Row(
188 | children: [
189 | SizedBox(
190 | width: 30,
191 | ),
192 | Expanded(
193 | child: MaterialButton(
194 | shape: RoundedRectangleBorder(
195 | borderRadius: BorderRadius.circular(12)),
196 | color: Color(0xFF584846),
197 | child: Text("Previous",
198 | style: TextStyle(color: Colors.white)),
199 | onPressed: () {
200 | Navigator.push(
201 | context,
202 | MaterialPageRoute(
203 | builder: (context) => ProfilePage()),
204 | );
205 | },
206 | ),
207 | ),
208 | SizedBox(
209 | width: 30,
210 | ),
211 | SizedBox(
212 | width: 30,
213 | ),
214 | Expanded(
215 | child: MaterialButton(
216 | shape: RoundedRectangleBorder(
217 | borderRadius: BorderRadius.circular(12)),
218 | color: Color(0xFF584846),
219 | child: Text("Save",
220 | style: TextStyle(color: Colors.white)),
221 | onPressed: () {},
222 | ),
223 | ),
224 | SizedBox(
225 | width: 30,
226 | ),
227 | ],
228 | ),
229 | ],
230 | )
231 | ],
232 | ),
233 | ),
234 | ),
235 | );
236 | }
237 | }
238 |
--------------------------------------------------------------------------------
/lib/pages/homePage.dart:
--------------------------------------------------------------------------------
1 |
2 |
3 | import 'package:barcode_scan/barcode_scan.dart';
4 | import 'package:flutter/material.dart';
5 | import 'package:flutter/services.dart';
6 | import 'package:library_system/models/Book_model.dart';
7 | import 'package:library_system/pages/addNewBookPage.dart';
8 | import 'package:fluttertoast/fluttertoast.dart';
9 | import 'package:library_system/pages/inventoryPage.dart';
10 | import 'package:library_system/pages/issueBookPage.dart';
11 | import 'package:library_system/pages/profilepage.dart';
12 | import 'package:library_system/pages/returnBookPage.dart';
13 | class HomePage extends StatefulWidget {
14 | static String id = 'homepage';
15 | @override
16 | _HomePageState createState() => _HomePageState();
17 | }
18 |
19 | class _HomePageState extends State {
20 | Future _scanQR() async {
21 | try {
22 | String qrResult = await BarcodeScanner.scan();
23 | setState(() {
24 | result = qrResult;
25 | });
26 | Navigator.push(
27 | context,
28 | MaterialPageRoute(
29 | builder: (context) => AddNewBookPage(
30 | isbn: result,
31 | ),
32 | ));
33 | } on PlatformException catch (ex) {
34 | if (ex.code == BarcodeScanner.CameraAccessDenied) {
35 | setState(() {
36 | result = null;
37 | });
38 | Fluttertoast.showToast(
39 | msg: "Camera permission was denied",
40 | toastLength: Toast.LENGTH_SHORT,
41 | gravity: ToastGravity.CENTER,
42 | timeInSecForIosWeb: 1,
43 | backgroundColor: Colors.red,
44 | textColor: Colors.white,
45 | fontSize: 16.0);
46 | Navigator.push(
47 | context,
48 | MaterialPageRoute(
49 | builder: (context) => AddNewBookPage(
50 | isbn: result,
51 | ),
52 | ));
53 | } else {
54 | setState(() {
55 | result = null;
56 | });
57 | Fluttertoast.showToast(
58 | msg: "Unknown Error $ex",
59 | toastLength: Toast.LENGTH_SHORT,
60 | gravity: ToastGravity.CENTER,
61 | timeInSecForIosWeb: 1,
62 | backgroundColor: Colors.red,
63 | textColor: Colors.white,
64 | fontSize: 16.0);
65 | Navigator.push(
66 | context,
67 | MaterialPageRoute(
68 | builder: (context) => AddNewBookPage(
69 | isbn: result,
70 | ),
71 | ));
72 | }
73 | } on FormatException {
74 | setState(() {
75 | result = null;
76 | });
77 | Fluttertoast.showToast(
78 | msg: "You pressed the back button before scanning anything",
79 | toastLength: Toast.LENGTH_SHORT,
80 | gravity: ToastGravity.CENTER,
81 | timeInSecForIosWeb: 1,
82 | backgroundColor: Colors.red,
83 | textColor: Colors.white,
84 | fontSize: 16.0);
85 | } catch (ex) {
86 | setState(() {
87 | result = null;
88 | });
89 | Fluttertoast.showToast(
90 | msg: "Unknown Error $ex",
91 | toastLength: Toast.LENGTH_SHORT,
92 | gravity: ToastGravity.CENTER,
93 | timeInSecForIosWeb: 1,
94 | backgroundColor: Colors.red,
95 | textColor: Colors.white,
96 | fontSize: 16.0);
97 | Navigator.push(
98 | context,
99 | MaterialPageRoute(
100 | builder: (context) => AddNewBookPage(
101 | isbn: result,
102 | ),
103 | ));
104 | }
105 | }
106 |
107 | Future _scannerQR() async {
108 | try {
109 | String mainResult = await BarcodeScanner.scan();
110 | setState(() {
111 | reResult = mainResult;
112 | });
113 | Navigator.push(
114 | context,
115 | MaterialPageRoute(
116 | builder: (context) => ReturnBookPage(),
117 | ));
118 | } on PlatformException catch (ex) {
119 | if (ex.code == BarcodeScanner.CameraAccessDenied) {
120 | setState(() {});
121 | } else {
122 | setState(() {});
123 | }
124 | } on FormatException {
125 | setState(() {});
126 | } catch (ex) {
127 | setState(() {});
128 | }
129 | }
130 |
131 | @override
132 | Widget build(BuildContext context) {
133 | return Scaffold(
134 | body: ListView(
135 | children: [
136 | Container(
137 | padding: EdgeInsets.all(20),
138 | width: MediaQuery.of(context).size.width,
139 | child: Row(
140 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
141 | children: [
142 | Column(
143 | mainAxisSize: MainAxisSize.min,
144 | mainAxisAlignment: MainAxisAlignment.start,
145 | crossAxisAlignment: CrossAxisAlignment.start,
146 | children: [
147 | IconButton(
148 | onPressed: () async {
149 | },
150 | icon: Icon(
151 | Icons.apps,
152 | color: Color(0xFF584846),
153 | size: 40,
154 | ),
155 | ),
156 | ],
157 | ),
158 | IconButton(
159 | icon: Icon(
160 | Icons.account_circle,
161 | size: 50,
162 | color: Color(0xFFDD3617),
163 | ),
164 | onPressed: () {
165 | Navigator.push(
166 | context,
167 | MaterialPageRoute(builder: (context) => ProfilePage()),
168 | );
169 | },
170 | ),
171 | ],
172 | ),
173 | ),
174 | Row(
175 | children: [
176 | Padding(padding: EdgeInsets.only(left: 20)),
177 | Text(
178 | 'Welcome!',
179 | style: TextStyle(
180 | fontSize: 20,
181 | color: Color(0xFF584846),
182 | fontWeight: FontWeight.bold,
183 | ),
184 | ),
185 | ],
186 | ),
187 | display1(
188 | context,
189 | () {
190 | _scannerQR();
191 | },
192 | "RETURN BOOK",
193 | Colors.white38,
194 | Colors.white70,
195 | Color(0xFF584846),
196 | ),
197 | display1(
198 | context,
199 | () {
200 | Navigator.push(
201 | context,
202 | MaterialPageRoute(
203 | builder: (context) => InventoryPage(),
204 | ),
205 | );
206 | },
207 | "INVENTORY",
208 | Colors.white38,
209 | Colors.white70,
210 | Color(0xFF584846),
211 | ),
212 | display1(
213 | context,
214 | () {
215 | _scanQR();
216 | },
217 | "ADD NEW BOOK",
218 | Colors.white38,
219 | Colors.white70,
220 | Color(0xFF584846),
221 | ),
222 | display1(
223 | context,
224 | () {
225 | Navigator.push(
226 | context,
227 | MaterialPageRoute(
228 | builder: (context) =>
229 | // IssueBookPage(barcode:"P2ToQVbmmq1zyX5uV05J")
230 | DummyIssueBook(),
231 | ),
232 | );
233 | },
234 | "ISSUE BOOK",
235 | Colors.white38,
236 | Colors.white70,
237 | Color(0xFF584846),
238 | ),
239 | ],
240 | ),
241 | );
242 | }
243 | }
244 |
245 | display1(BuildContext context, onTap, String title, Color c1, Color c2,
246 | Color textc) {
247 | return Padding(
248 | padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
249 | child: GestureDetector(
250 | onTap: onTap,
251 | child: Card(
252 | shape: RoundedRectangleBorder(
253 | borderRadius: BorderRadius.circular(15),
254 | ),
255 | shadowColor: Colors.black,
256 | elevation: 8,
257 | child: Container(
258 | decoration: BoxDecoration(
259 | gradient: LinearGradient(
260 | colors: [c1, c2],
261 | begin: Alignment.topLeft,
262 | end: Alignment.bottomRight),
263 | borderRadius: BorderRadius.circular(15),
264 | ),
265 | width: MediaQuery.of(context).size.width - 40,
266 | height: 105,
267 | child: Column(
268 | mainAxisAlignment: MainAxisAlignment.center,
269 | children: [
270 | Row(
271 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
272 | children: [
273 | Padding(
274 | padding: const EdgeInsets.all(20.0),
275 | child: Text(
276 | title,
277 | style: TextStyle(
278 | fontSize: 27,
279 | color: textc,
280 | fontWeight: FontWeight.bold,
281 | ),
282 | ),
283 | ),
284 | ],
285 | )
286 | ],
287 | ),
288 | ),
289 | ),
290 | ),
291 | );
292 | }
293 |
--------------------------------------------------------------------------------
/lib/pages/inventoryPage.dart:
--------------------------------------------------------------------------------
1 | import 'package:cloud_firestore/cloud_firestore.dart';
2 | import 'package:flutter/material.dart';
3 |
4 | class InventoryPage extends StatefulWidget {
5 | InventoryPage({Key key}) : super(key: key);
6 |
7 | @override
8 | _InventoryPageState createState() => _InventoryPageState();
9 | }
10 |
11 | class _InventoryPageState extends State {
12 | @override
13 | Widget build(BuildContext context) {
14 | return Container(
15 | child: Scaffold(
16 | backgroundColor: Colors.grey[200],
17 | appBar: AppBar(
18 | title: Text("Inventory Page"),
19 | ),
20 | body: StreamBuilder(
21 | stream: FirebaseFirestore.instance.collection("books").snapshots(),
22 | builder: (context, snapshot) {
23 | if(!snapshot.hasData){
24 | return Center(child: CircularProgressIndicator());
25 | }
26 | return Padding(
27 | padding: const EdgeInsets.all(8.0),
28 | child: ListView.builder(
29 | itemCount: snapshot.data.documents.length,
30 | itemBuilder: (context, index) {
31 | DocumentSnapshot books =
32 | snapshot.data.documents[index];
33 | return Card(
34 | child: ListTile(
35 | title: Text(books['name']),
36 | subtitle: Column(
37 | crossAxisAlignment: CrossAxisAlignment.start,
38 | mainAxisSize: MainAxisSize.min,
39 | children: [
40 | Text(books['author']),
41 | Text(books['genre']),
42 | Text(books['isbn']),
43 | ],
44 | ),
45 | trailing: Text(books['publisher']),
46 | ),
47 | );
48 | },
49 | ),
50 | );
51 | },
52 | ),
53 | ),
54 | );
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/lib/pages/issueBookPage.dart:
--------------------------------------------------------------------------------
1 | import 'dart:io';
2 | import 'dart:typed_data';
3 |
4 | import 'package:barcode_scan/barcode_scan.dart';
5 | import 'package:cloud_firestore/cloud_firestore.dart';
6 | import 'package:flutter/cupertino.dart';
7 | import 'package:flutter/material.dart';
8 | import 'package:flutter/services.dart';
9 | import 'package:flutter_datetime_formfield/flutter_datetime_formfield.dart';
10 | import 'package:fluttertoast/fluttertoast.dart';
11 | import 'package:library_system/pages/homePage.dart';
12 | import 'package:mailer2/mailer.dart';
13 | import 'package:path_provider/path_provider.dart';
14 | import '../details.dart';
15 | import '../invoice.dart';
16 |
17 | //wrote by amanv8060
18 | class DummyIssueBook extends StatefulWidget {
19 | const DummyIssueBook({Key key}) : super(key: key);
20 |
21 | @override
22 | _DummyIssueBookState createState() => _DummyIssueBookState();
23 | }
24 |
25 | class _DummyIssueBookState extends State {
26 | Future _scanBarcode() async {
27 | try {
28 | String qrResult = await BarcodeScanner.scan();
29 | return qrResult;
30 | } on PlatformException catch (e) {
31 | if (e.code == BarcodeScanner.CameraAccessDenied) {
32 | throw Exception("Camera permission was denied");
33 | } else {
34 | throw Exception("Unknown Error $e occurred");
35 | }
36 | } on FormatException {
37 | throw Exception("You pressed the back button before scanning anything");
38 | } catch (ex) {
39 | throw Exception("Unknown Error $ex occurred");
40 | }
41 | }
42 |
43 | @override
44 | Widget build(BuildContext context) {
45 | return FutureBuilder(
46 | future: _scanBarcode(),
47 | builder: (context, snapshot) {
48 | if (snapshot.connectionState == ConnectionState.done) {
49 | if (snapshot.hasError) {
50 | Fluttertoast.showToast(
51 | msg: snapshot.error.toString(),
52 | toastLength: Toast.LENGTH_SHORT,
53 | gravity: ToastGravity.CENTER,
54 | timeInSecForIosWeb: 1,
55 | backgroundColor: Colors.red,
56 | textColor: Colors.white,
57 | fontSize: 16.0);
58 |
59 |
60 | return HomePage();
61 | }
62 | if (snapshot.hasData) {
63 |
64 | return IssueBookPage(
65 | barcode: snapshot.data,
66 | );
67 | }
68 | return Center(child: CircularProgressIndicator());
69 | } else {
70 | return Center(child: CircularProgressIndicator());
71 | }
72 | });
73 | }
74 | }
75 |
76 | class IssueBookPage extends StatefulWidget {
77 | final String barcode;
78 |
79 | const IssueBookPage({Key key, this.barcode}) : super(key: key);
80 | @override
81 | _IssueBookPageState createState() => _IssueBookPageState();
82 | }
83 |
84 | class _IssueBookPageState extends State {
85 | final _formKey = GlobalKey();
86 | CollectionReference log = FirebaseFirestore.instance.collection("log");
87 | CollectionReference books = FirebaseFirestore.instance.collection("books");
88 |
89 | DateTime issueDate;
90 | DateTime dueDate;
91 |
92 | int invoiceno; //Used to set invoice Number in pdf
93 | int currentIndex; //Defines Current Index of visibility
94 | String dir; //Stores Directory
95 | String path;
96 |
97 | final smtpServer = GmailSmtpOptions()
98 | ..username = username
99 | ..password = password;
100 | var emailTransport;
101 | TextEditingController issuerEmail = TextEditingController();
102 | TextEditingController issuerPhone = TextEditingController();
103 | TextEditingController issuerName = TextEditingController();
104 | @override
105 | void initState() {
106 | super.initState();
107 | init();
108 | currentIndex = 0;
109 | emailTransport = new SmtpTransport(smtpServer);
110 | }
111 |
112 | @override
113 | Widget build(BuildContext context) {
114 | return SafeArea(
115 | child: Scaffold(
116 | appBar: AppBar(
117 | elevation: 0,
118 | backgroundColor: Colors.white,
119 | title: Text(
120 | "Issue Book Page",
121 | ), //Not Meant to be visible
122 | ),
123 | body: FutureBuilder(
124 | future: books.doc(widget.barcode).get(),
125 | builder: (context, snapshot) {
126 | if (snapshot.connectionState == ConnectionState.done) {
127 | if (snapshot.hasError) {
128 | return Container(
129 | child: Center(child: Text(snapshot.error.toString())));
130 | }
131 | if (snapshot.hasData) {
132 | if (!snapshot.data.exists) {
133 | Fluttertoast.showToast(
134 | msg: "Book Doesn't exist",
135 | gravity: ToastGravity.CENTER,
136 | toastLength: Toast.LENGTH_SHORT,
137 | timeInSecForIosWeb: 1,
138 | backgroundColor: Colors.red,
139 | textColor: Colors.white,
140 | fontSize: 16.0);
141 | return HomePage();
142 | } else {
143 | return IndexedStack(
144 | index: currentIndex,
145 | children: [
146 | Container(
147 | child: Form(
148 | key: _formKey,
149 | child: ListView(
150 | padding: const EdgeInsets.symmetric(
151 | horizontal: 20, vertical: 10),
152 | children: [
153 | Column(
154 | mainAxisAlignment: MainAxisAlignment.start,
155 | children: [
156 | Image.asset(
157 | "assets/images/books123.png",
158 | width: 200,
159 | height: 100,
160 | ),
161 | SizedBox(
162 | height: 20,
163 | ),
164 | Material(
165 | shape: RoundedRectangleBorder(
166 | borderRadius: BorderRadius.all(
167 | Radius.circular(10))),
168 | color: Colors.grey,
169 | child: ListTile(
170 | title: TextFormField(
171 | decoration: InputDecoration.collapsed(
172 | hintText: ""),
173 | initialValue: widget.barcode,
174 | enabled: false,
175 | ),
176 | ),
177 | ),
178 | ],
179 | ),
180 | Container(
181 | margin: const EdgeInsets.all(10),
182 | child: DateTimeFormField(
183 | onlyDate: true,
184 | initialValue: issueDate ?? DateTime.now(),
185 | label: "Issue Date",
186 | validator: (DateTime dateTime) {
187 | if (dateTime == null) {
188 | return "Issue Date Required";
189 | }
190 | return null;
191 | },
192 | firstDate: DateTime.now()
193 | .subtract(Duration(days: 3)),
194 | lastDate:
195 | DateTime.now().add(Duration(days: 15)),
196 | onSaved: (DateTime dateTime) {
197 | setState(() {
198 | this.issueDate = dateTime;
199 | });
200 | },
201 | ),
202 | ),
203 | Container(
204 | margin: const EdgeInsets.all(10),
205 | child: DateTimeFormField(
206 | onlyDate: true,
207 | initialValue: dueDate ??
208 | DateTime.now().add(Duration(days: 15)),
209 | label: "Due Date",
210 | validator: (DateTime dateTime) {
211 | if (dateTime == null) {
212 | return "Due Date Required";
213 | }
214 | return null;
215 | },
216 | firstDate: DateTime.now(),
217 | lastDate:
218 | DateTime.now().add(Duration(days: 45)),
219 | onSaved: (DateTime dateTime) {
220 | setState(() {
221 | this.dueDate = dateTime;
222 | });
223 | },
224 | ),
225 | ),
226 | Padding(
227 | padding: const EdgeInsets.symmetric(
228 | horizontal: 10, vertical: 5),
229 | child: TextFormField(
230 | // onChanged: (value) {},
231 | validator: (value) => validateEmail(value),
232 | controller: issuerEmail,
233 | decoration: InputDecoration(
234 | prefixIcon: Icon(
235 | Icons.email,
236 | color: Color(0xFF584846),
237 | ),
238 | enabledBorder: OutlineInputBorder(
239 | borderSide:
240 | BorderSide(color: Color(0xFF584846)),
241 | ),
242 | hintText: '\tEnter Email-id',
243 | ),
244 | keyboardType: TextInputType.emailAddress,
245 | ),
246 | ),
247 | Padding(
248 | padding: const EdgeInsets.symmetric(
249 | horizontal: 10, vertical: 5),
250 | child: TextFormField(
251 | // onChanged: (value) {},
252 | validator: (value) => validateMobile(value),
253 | controller: issuerPhone,
254 | decoration: InputDecoration(
255 | prefixIcon: Icon(
256 | Icons.email,
257 | color: Color(0xFF584846),
258 | ),
259 | enabledBorder: OutlineInputBorder(
260 | borderSide:
261 | BorderSide(color: Color(0xFF584846)),
262 | ),
263 | hintText: '\tEnter Phone Number',
264 | ),
265 | keyboardType: TextInputType.phone,
266 | ),
267 | ),
268 | Padding(
269 | padding: const EdgeInsets.symmetric(
270 | horizontal: 10, vertical: 5),
271 | child: TextFormField(
272 | // onChanged: (value) {},
273 | validator: (value) {
274 | if (value.length > 4) {
275 | return null;
276 | } else {
277 | return "Too Short";
278 | }
279 | },
280 | controller: issuerName,
281 | decoration: InputDecoration(
282 | prefixIcon: Icon(
283 | Icons.person,
284 | color: Color(0xFF584846),
285 | ),
286 | enabledBorder: OutlineInputBorder(
287 | borderSide:
288 | BorderSide(color: Color(0xFF584846)),
289 | ),
290 | hintText: '\tEnter Name',
291 | ),
292 | ),
293 | ),
294 | Padding(
295 | padding: const EdgeInsets.symmetric(
296 | horizontal: 40.0, vertical: 20),
297 | child: FlatButton(
298 | color: Colors.blue,
299 | disabledColor: Colors.blue,
300 | onPressed: () async {
301 | _formKey.currentState.save();
302 | _handleSubmit(snapshot.data);
303 | },
304 | child: Text("Issue")),
305 | )
306 | ],
307 | ),
308 | )),
309 | Center(
310 | child: CircularProgressIndicator(),
311 | )
312 | ],
313 | );
314 | }
315 | } else
316 | return CircularProgressIndicator();
317 | } else {
318 | return Container(
319 | child: Center(child: CircularProgressIndicator()));
320 | }
321 | },
322 | )),
323 | );
324 | }
325 |
326 | void init() async {
327 | this.dir = (await getApplicationDocumentsDirectory()).path;
328 | this.path = '$dir/invoice.pdf';
329 | }
330 |
331 | void _handleSubmit(DocumentSnapshot snp) async {
332 | if (_formKey.currentState.validate()) {
333 | setState(() {
334 | currentIndex = 1;
335 | });
336 | final File file = File(path);
337 | await FirebaseFirestore.instance
338 | .collection("invoice")
339 | .doc("invoice")
340 | .get()
341 | .then((value) {
342 | setState(() {
343 | invoiceno = value.data()["invoiceNo"];
344 | });
345 | });
346 | Uint8List bytes = await generateInvoice(
347 | this.invoiceno.toString(),
348 | snp,
349 | issuerName.text,
350 | issuerPhone.text,
351 | issuerEmail.text,
352 | this.issueDate,
353 | this.dueDate);
354 |
355 | await file.writeAsBytes(bytes);
356 | final message = Envelope()
357 | ..from = username
358 | ..recipients.add(issuerEmail.text)
359 | ..subject = 'Book Issued 😀 '
360 | ..attachments.add(Attachment(file: file))
361 | ..text =
362 | 'Please see the below attached pdf for details '; //body of the email
363 |
364 | await books.doc(widget.barcode).update({"status": "OUT"});
365 | await FirebaseFirestore.instance
366 | .collection("invoice")
367 | .doc("invoice")
368 | .update({"invoiceNo": FieldValue.increment(1)});
369 | log.doc().set({
370 | "date": this.issueDate,
371 | "issuerName": issuerName.text,
372 | "issuerEmail": issuerEmail.text,
373 | "issuerPhone": issuerPhone.text,
374 | "bookuid": widget.barcode,
375 | "duedate": this.dueDate
376 | }).whenComplete(() {
377 | setState(() {
378 | currentIndex = 0;
379 | });
380 | Navigator.popUntil(context, ModalRoute.withName(HomePage.id));
381 | Fluttertoast.showToast(msg: "Issued");
382 | });
383 | try {
384 | await emailTransport
385 | .send(message)
386 | .whenComplete(() => Fluttertoast.showToast(msg: 'Email sent: '));
387 | } catch (e) {
388 | Fluttertoast.showToast(
389 | msg: "Book Issued but Email not sent due to: " + e.toString());
390 | }
391 | } else {
392 | Fluttertoast.showToast(
393 | gravity: ToastGravity.CENTER,
394 | msg: "Fill Form properly",
395 | );
396 | }
397 | }
398 |
399 | String validateMobile(String value) {
400 | RegExp regExp = RegExp(r'^[0-9]{10}$');
401 | if (value.length == 0) {
402 | return 'Please enter mobile number';
403 | } else if (!regExp.hasMatch(value)) {
404 | return 'Please enter valid mobile number';
405 | }
406 | return null;
407 | }
408 |
409 | String validateEmail(String value) {
410 | RegExp regExp = RegExp(r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$');
411 | if (value.length == 0) {
412 | return 'Please enter Email Address';
413 | } else if (!regExp.hasMatch(value)) {
414 | return 'Please enter valid email Address';
415 | }
416 | return null;
417 | }
418 | }
419 |
--------------------------------------------------------------------------------
/lib/pages/loginSignupPage.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:library_system/pages/homePage.dart';
3 | import 'package:firebase_auth/firebase_auth.dart';
4 |
5 | class LoginSignupPage extends StatefulWidget {
6 | static String id = 'login_page';
7 | @override
8 | _LoginSignupPageState createState() => _LoginSignupPageState();
9 | }
10 |
11 | class _LoginSignupPageState extends State {
12 | RegExp regExp = RegExp(
13 | r"^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9][a-zA-Z0-9-]{0,253}\.)*[a-zA-Z0-9][a-zA-Z0-9-]{0,253}\.[a-zA-Z0-9]{2,}$");
14 | final _auth = FirebaseAuth.instance;
15 | String email;
16 | String password;
17 | String emailError = "";
18 | String passwordError = "";
19 | String loginSignUpError = "";
20 | bool busy = false;
21 | @override
22 | Widget build(BuildContext context) {
23 | return Scaffold(
24 | backgroundColor: Color(0xFFFFFFFF),
25 | body: SafeArea(
26 | child: Stack(
27 | children: [
28 | Padding(
29 | padding: const EdgeInsets.only(left: 8.0, right: 8.0),
30 | child: ListView(
31 | children: [
32 | SizedBox(
33 | height: 15,
34 | ),
35 | Image.asset('assets/images/library.png'),
36 | SizedBox(height: 40),
37 | (loginSignUpError == "")
38 | ? SizedBox(height: 0)
39 | : Center(child: Text(loginSignUpError)),
40 | Padding(
41 | padding: const EdgeInsets.only(left: 10, right: 10),
42 | child: TextFormField(
43 | onChanged: (value) {
44 | if (value.length <= 0) {
45 | setState(() {
46 | emailError = "Enter Email";
47 | });
48 | } else if (!regExp.hasMatch(value)) {
49 | setState(() {
50 | emailError = "Invalid Email";
51 | });
52 | } else {
53 | setState(() {
54 | emailError = "";
55 | email = value;
56 | });
57 | }
58 | },
59 | decoration: InputDecoration(
60 | prefixIcon: Icon(
61 | Icons.email,
62 | color: Color(0xFF584846),
63 | ),
64 | enabledBorder: UnderlineInputBorder(
65 | borderSide: BorderSide(color: Colors.brown),
66 | ),
67 | hintText: '\tEnter Email-id',
68 | errorText: emailError != "" ? emailError : null,
69 | ),
70 | ),
71 | ),
72 | SizedBox(height: 14),
73 | Padding(
74 | padding: const EdgeInsets.only(left: 10, right: 10),
75 | child: TextField(
76 | onChanged: (value) {
77 | if (value.length < 6) {
78 | setState(() {
79 | passwordError = "Too Short";
80 | });
81 | } else {
82 | setState(() {
83 | passwordError = "";
84 | password = value;
85 | });
86 | }
87 | },
88 | decoration: InputDecoration(
89 | prefixIcon: Icon(
90 | Icons.lock,
91 | color: Color(0xFF584846),
92 | ),
93 | enabledBorder: UnderlineInputBorder(
94 | borderSide: BorderSide(color: Color(0xFF584846)),
95 | ),
96 | hintText: 'Enter Password',
97 | errorText: passwordError == "" ? null : passwordError,
98 | ),
99 | obscureText: true,
100 | ),
101 | ),
102 | Padding(
103 | padding: const EdgeInsets.only(top: 10.0),
104 | child: Row(
105 | mainAxisAlignment: MainAxisAlignment.center,
106 | children: [
107 | SizedBox(
108 | width: 30,
109 | ),
110 | RaisedButton(
111 | padding: EdgeInsets.only(left: 40, right: 40),
112 | shape: RoundedRectangleBorder(
113 | borderRadius: BorderRadius.circular(14.0),
114 | ),
115 | color: Color(0xFF584846),
116 | onPressed: (emailError==""&&passwordError=="") ?() async {
117 | setState(() {
118 | busy = true;
119 | });
120 | await _auth
121 | .signInWithEmailAndPassword(
122 | email: email, password: password)
123 | .catchError((e) {
124 | setState(() {
125 | busy = false;
126 | });
127 | if (e.code == "invalid-email") {
128 | setState(() {
129 | loginSignUpError = "Invalid Email";
130 | });
131 | } else if (e.code == "user-disabled") {
132 | setState(() {
133 | loginSignUpError = "Account Disabled";
134 | });
135 | } else if (e.code == "user-not-found") {
136 | setState(() {
137 | loginSignUpError = "User Not Registered";
138 | });
139 | } else if (e.code == "wrong-password") {
140 | setState(() {
141 | loginSignUpError = "Wrong Password Entered";
142 | });
143 | } else {
144 | setState(() {
145 | loginSignUpError = e.toString();
146 | });
147 | }
148 | }).then((temp) {
149 | if (temp != null) {
150 | if (temp.user != null) {
151 | setState(() {
152 | loginSignUpError = "";
153 | });
154 | Navigator.pushReplacementNamed(context, HomePage.id);
155 | }
156 | }
157 | });
158 | }:null,
159 | child: Text('LOGIN',
160 | style: TextStyle(color: Colors.white)),
161 | ),
162 | SizedBox(
163 | width: 30,
164 | ),
165 | RaisedButton(
166 | padding: EdgeInsets.only(left: 40, right: 40),
167 | shape: RoundedRectangleBorder(
168 | borderRadius: BorderRadius.circular(14.0),
169 | ),
170 | color: Color(0xFF584846),
171 | onPressed: (emailError==""&&passwordError=="") ?(){
172 | setState(() {
173 | busy = true;
174 | });
175 | _auth
176 | .createUserWithEmailAndPassword(
177 | email: email, password: password)
178 | .catchError((e) {
179 | setState(() {
180 | busy = false;
181 | });
182 | if (e.code == "invalid-email") {
183 | setState(() {
184 | loginSignUpError = "Invalid Email";
185 | });
186 | } else if (e.code == "email-already-in-use") {
187 | setState(() {
188 | loginSignUpError =
189 | "Account Already Exists , please login";
190 | });
191 | } else if (e.code == "weak-password") {
192 | setState(() {
193 | loginSignUpError = "User Not Registered";
194 | });
195 | } else if (e.code == "operation-not-allowed") {
196 | setState(() {
197 | loginSignUpError =
198 | "Signups are temporarily disabled";
199 | });
200 | } else {
201 | setState(() {
202 | loginSignUpError = e.toString();
203 | });
204 | }
205 | }).then((value) {
206 | if (value != null) {
207 | if (value.user != null) {
208 | setState(() {
209 | loginSignUpError = "";
210 | });
211 | Navigator.pushReplacementNamed(context, HomePage.id);
212 | }
213 | }
214 | });
215 | print('push');
216 | }:null,
217 | child: Text(
218 | 'SIGN UP',
219 | style: TextStyle(color: Colors.white),
220 | ),
221 | ),
222 | ],
223 | ),
224 | ),
225 | ],
226 | ),
227 | ),
228 | busy
229 | ? Container(
230 | color: Colors.white54,
231 | child: Center(
232 | child: CircularProgressIndicator(),
233 | ),
234 | )
235 | : SizedBox(height: 0)
236 | ],
237 | ),
238 | ),
239 | );
240 | }
241 | }
242 |
--------------------------------------------------------------------------------
/lib/pages/profilepage.dart:
--------------------------------------------------------------------------------
1 | import 'package:firebase_auth/firebase_auth.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:library_system/pages/editProfilePage.dart';
4 | import 'package:library_system/pages/homePage.dart';
5 | import 'package:library_system/pages/loginSignupPage.dart';
6 |
7 | class ProfilePage extends StatefulWidget {
8 | ProfilePage({Key key}) : super(key: key);
9 |
10 | @override
11 | _ProfilePageState createState() => _ProfilePageState();
12 | }
13 |
14 | class _ProfilePageState extends State {
15 | @override
16 | Widget build(BuildContext context) {
17 | return Scaffold(
18 | backgroundColor: Colors.white,
19 | body: SafeArea(
20 | child: SingleChildScrollView(
21 | child: Column(
22 | mainAxisSize: MainAxisSize.min,
23 | children: [
24 | Container(
25 | height: 500,
26 | child: Stack(
27 | alignment: Alignment.center,
28 | children: [
29 | Container(
30 | width: MediaQuery.of(context).size.width,
31 | height: 499,
32 | decoration: BoxDecoration(
33 | color: Color(0xFFE0B485),
34 | borderRadius: BorderRadius.only(
35 | topLeft: Radius.circular(0.0),
36 | bottomLeft: Radius.circular(27.0),
37 | bottomRight: Radius.circular(27.0),
38 | topRight: Radius.circular(0.0),
39 | ),
40 | ),
41 | ),
42 | Container(
43 | child: CircleAvatar(
44 | radius: 80,
45 | backgroundColor: Color(0xFFE0B485),
46 | child: Opacity(
47 | opacity: 0.8,
48 | child: CircleAvatar(
49 | radius: 80,
50 | backgroundImage: NetworkImage(
51 | 'https://images.pexels.com/photos/220453/pexels-photo-220453.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500'),
52 | ),
53 | ),
54 | ),
55 | ),
56 | Container(
57 | alignment: Alignment.bottomCenter,
58 | height: 335,
59 | child: Row(
60 | mainAxisAlignment: MainAxisAlignment.center,
61 | children: [
62 | Text(
63 | 'FULL NAME',
64 | style: TextStyle(
65 | color: Colors.white,
66 | fontSize: 30,
67 | fontFamily: 'Montserrat',
68 | ),
69 | ),
70 | ],
71 | ),
72 | ),
73 | Container(
74 | alignment: Alignment.bottomCenter,
75 | height: 390,
76 | child: Opacity(
77 | opacity: 0.7,
78 | child: Text(
79 | 'Admin',
80 | style: TextStyle(
81 | color: Colors.white,
82 | fontSize: 14,
83 | fontFamily: 'Montserrat',
84 | fontWeight: FontWeight.bold),
85 | ),
86 | ),
87 | ),
88 | ],
89 | ),
90 | ),
91 | Column(
92 | mainAxisSize: MainAxisSize.min,
93 | children: [
94 | ListTile(
95 | leading: Icon(
96 | Icons.call,
97 | color: Color(0xFF584846),
98 | ),
99 | title: Text(
100 | 'Phone Number',
101 | style: TextStyle(
102 | color: Color(0xFF584846),
103 | fontFamily: 'Montserrat',
104 | fontSize: 17,
105 | fontWeight: FontWeight.bold),
106 | ),
107 | subtitle: Text(
108 | '+ 91 0000000000',
109 | style: TextStyle(
110 | fontFamily: 'Montserrat',
111 | fontSize: 15,
112 | ),
113 | ),
114 | ),
115 | ListTile(
116 | leading: Icon(
117 | Icons.mail,
118 | color: Color(0xFF584846),
119 | ),
120 | title: Text(
121 | 'Email',
122 | style: TextStyle(
123 | color: Color(0xFF584846),
124 | fontFamily: 'Montserrat',
125 | fontSize: 17,
126 | fontWeight: FontWeight.bold),
127 | ),
128 | subtitle: Text(
129 | 'admin@gmail.com',
130 | style: TextStyle(
131 | fontFamily: 'Montserrat',
132 | fontSize: 15,
133 | ),
134 | ),
135 | ),
136 | Row(
137 | children: [
138 | SizedBox(
139 | width: 30,
140 | ),
141 | Expanded(
142 | child: MaterialButton(
143 | shape: RoundedRectangleBorder(
144 | borderRadius: BorderRadius.circular(12)),
145 | color: Color(0xFF584846),
146 | child: Text("Edit",
147 | style: TextStyle(color: Colors.white)),
148 | onPressed: () {
149 | Navigator.push(
150 | context,
151 | MaterialPageRoute(
152 | builder: (context) => EditProfilePage()),
153 | );
154 | },
155 | ),
156 | ),
157 | SizedBox(
158 | width: 30,
159 | ),
160 | GestureDetector(
161 | onTap: () {
162 | Navigator.push(
163 | context,
164 | MaterialPageRoute(
165 | builder: (context) => HomePage(),
166 | ),
167 | );
168 | },
169 | child: Icon(
170 | Icons.home,
171 | color: Color(0xFF584846),
172 | ),
173 | ),
174 | SizedBox(
175 | width: 30,
176 | ),
177 | Expanded(
178 | child: MaterialButton(
179 | shape: RoundedRectangleBorder(
180 | borderRadius: BorderRadius.circular(12)),
181 | color: Color(0xFF584846),
182 | child: Text("Logout",
183 | style: TextStyle(color: Colors.white)),
184 | onPressed: () {
185 | FirebaseAuth.instance.signOut();
186 | Navigator.pushReplacement(
187 | context,
188 | MaterialPageRoute(
189 | builder: (context) => LoginSignupPage()));
190 | },
191 | ),
192 | ),
193 | SizedBox(
194 | width: 30,
195 | ),
196 | ],
197 | ),
198 | // Row(
199 | // children: [
200 | // Container(
201 | // child: MaterialButton(
202 | // shape: RoundedRectangleBorder(
203 | // borderRadius: BorderRadius.circular(12)),
204 | // color: Colors.red,
205 | // child: Text('Logout'),
206 | // onPressed: () {},
207 | // ),
208 | // ),
209 | // ],
210 | // )
211 | ],
212 | )
213 | ],
214 | ),
215 | ),
216 | ),
217 | );
218 | }
219 | }
220 |
--------------------------------------------------------------------------------
/lib/pages/returnBookPage.dart:
--------------------------------------------------------------------------------
1 | import 'package:cloud_firestore/cloud_firestore.dart';
2 | import 'package:fluttertoast/fluttertoast.dart';
3 | import 'package:library_system/models/Book_model.dart';
4 | import 'package:flutter/material.dart';
5 | import 'package:library_system/pages/homePage.dart';
6 |
7 | class ReturnBookPage extends StatefulWidget {
8 | @override
9 | _ReturnBookPageState createState() => _ReturnBookPageState();
10 | }
11 |
12 | class _ReturnBookPageState extends State {
13 | void _onScanned(BuildContext context) async {
14 | print(reResult);
15 | // ignore: non_constant_identifier_names
16 | final firestoreInstance = FirebaseFirestore.instance;
17 | final temp =
18 | await firestoreInstance.collection("books").doc(reResult.trim()).get();
19 | if (!temp.exists) {
20 | Navigator.of(context).pop();
21 | Fluttertoast.showToast(
22 | msg: "Book doesnt Exists ",
23 | toastLength: Toast.LENGTH_LONG,
24 | gravity: ToastGravity.CENTER);
25 | } else if (temp.data()["status"] != "OUT") {
26 | print("reached");
27 | Navigator.of(context).pop();
28 | Fluttertoast.showToast(
29 | msg: "Book isnt issued so cant be returned ",
30 | toastLength: Toast.LENGTH_LONG,
31 | gravity: ToastGravity.CENTER);
32 | } else {
33 | final tempquery = await FirebaseFirestore.instance
34 | .collection("log")
35 | .where("bookuid", isEqualTo: reResult.trim())
36 | .orderBy("date", descending: true)
37 | .limit(1)
38 | .get();
39 | firestoreInstance
40 | .collection("log")
41 | .doc(tempquery.docs[0].id)
42 | .update({"returned": DateTime.now()});
43 | firestoreInstance
44 | .collection("books")
45 | .doc(reResult.trim())
46 | .update({"status": " IN"}).then((_) {
47 | showDialog(
48 | context: context,
49 | builder: (context) {
50 | return AlertDialog(
51 | title: new Text("Book Returned",
52 | style: TextStyle(color: Colors.greenAccent[500]),
53 | textAlign: TextAlign.center),
54 | content: Column(
55 | mainAxisSize: MainAxisSize.min,
56 | children: [
57 | SizedBox(
58 | height: 5,
59 | ),
60 | Image.asset(
61 | "assets/images/done.png",
62 | width: 200,
63 | height: 100,
64 | ),
65 | ],
66 | ),
67 | actions: [
68 | FlatButton(
69 | onPressed: () {
70 | Navigator.pushNamedAndRemoveUntil(
71 | context, HomePage.id, (route) => false);
72 | },
73 | child: Text("Ok"),
74 | )
75 | ],
76 | );
77 | });
78 | });
79 | }
80 | }
81 |
82 | @override
83 | Widget build(BuildContext context) {
84 | return Scaffold(
85 | backgroundColor: Colors.white,
86 | appBar: AppBar(
87 | backgroundColor: Colors.white,
88 | elevation: 0.0,
89 | ),
90 | resizeToAvoidBottomPadding: false,
91 | body: SingleChildScrollView(
92 | child: Column(
93 | children: [
94 | SizedBox(
95 | height: 20,
96 | ),
97 | Center(
98 | child: Column(children: [
99 | Container(
100 | child: Text("RETURN A BOOK",
101 | style: TextStyle(
102 | fontWeight: FontWeight.w700,
103 | color: Color(0xFF584846),
104 | fontSize: 20,
105 | fontFamily: 'Roboto',
106 | )),
107 | ),
108 | SizedBox(
109 | height: 50,
110 | ),
111 | Center(
112 | child: Column(children: [
113 | SizedBox(
114 | height: 15,
115 | ),
116 | Image.asset(
117 | "assets/images/Group 2.png",
118 | width: 200,
119 | height: 100,
120 | ),
121 | ]),
122 | ),
123 | ]),
124 | ),
125 | SizedBox(
126 | height: 45,
127 | ),
128 | Flexible(
129 | flex: 0,
130 | child: Center(
131 | child: Form(
132 | child: Flex(
133 | direction: Axis.vertical,
134 | children: [
135 | ListTile(
136 | title: Container(
137 | height: 65,
138 | padding:
139 | EdgeInsets.symmetric(horizontal: 10, vertical: 7),
140 | child: TextFormField(
141 | initialValue: reResult,
142 | decoration: InputDecoration(
143 | filled: true,
144 | // fillColor: Colors.grey[200],
145 | hintText: " U-ID ",
146 | border: OutlineInputBorder(
147 | borderRadius: BorderRadius.circular(20.0),
148 | borderSide: const BorderSide(
149 | color: Colors.grey,
150 | ),
151 | ),
152 | ),
153 | ),
154 | ),
155 | ),
156 | Container(
157 | width: 245,
158 | child: FlatButton(
159 | color: Color(0xFF584846),
160 | shape: RoundedRectangleBorder(
161 | borderRadius: BorderRadius.circular(9.0),
162 | ),
163 | child: Text("RETURN",
164 | style: TextStyle(
165 | color: Color(0xFFF3BB84), fontSize: 15)),
166 | onPressed: () async {
167 | _onScanned(context);
168 | },
169 | ),
170 | ),
171 | ],
172 | ),
173 | ),
174 | ),
175 | ),
176 | ],
177 | ),
178 | ),
179 | );
180 | }
181 | }
182 |
--------------------------------------------------------------------------------
/lib/pages/splashScreen.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 | import 'package:firebase_auth/firebase_auth.dart';
3 | import 'package:flutter/material.dart';
4 | import 'package:library_system/pages/homePage.dart';
5 | import 'package:library_system/pages/loginSignupPage.dart';
6 |
7 | class UIConstants {
8 | static const double ASSUMED_SCREEN_HEIGHT = 640.0;
9 | static const double ASSUMED_SCREEN_WIDTH = 360.0;
10 |
11 | static _fitContext(BuildContext context, assumedValue, currentValue, value) =>
12 | (value / assumedValue) * currentValue;
13 |
14 | static fitToWidth(value, BuildContext context) => _fitContext(
15 | context, ASSUMED_SCREEN_WIDTH, MediaQuery.of(context).size.width, value);
16 |
17 | static fitToHeight(value, BuildContext context) => _fitContext(context,
18 | ASSUMED_SCREEN_HEIGHT, MediaQuery.of(context).size.height, value);
19 |
20 | static const splashScreenLogo = 'assets/images/logo.png';
21 | }
22 |
23 | class SplashScreen extends StatefulWidget {
24 | static String id = 'splash';
25 | @override
26 | _SplashScreenState createState() => _SplashScreenState();
27 | }
28 |
29 | class _SplashScreenState extends State {
30 | @override
31 | void initState() {
32 | startTime();
33 | super.initState();
34 | }
35 |
36 | startTime() async {
37 | var duration = new Duration(seconds: 3);
38 | return new Timer(duration, navigate);
39 | }
40 |
41 | void navigate() {
42 | if (FirebaseAuth.instance.currentUser != null) {
43 | Navigator.pushNamedAndRemoveUntil(
44 | context, HomePage.id, ModalRoute.withName('/'));
45 | } else
46 | Navigator.push(
47 | context, MaterialPageRoute(builder: (context) => LoginSignupPage()));
48 | }
49 |
50 | @override
51 | Widget build(BuildContext context) {
52 | return Scaffold(
53 | backgroundColor: Color(0xFFE0B485),
54 | body: Center(
55 | child: Container(
56 | height: MediaQuery.of(context).size.height,
57 | width: MediaQuery.of(context).size.width,
58 | decoration: BoxDecoration(
59 | image: DecorationImage(
60 | image: AssetImage(
61 | 'assets/images/splashbg.png',
62 | ),
63 | fit: BoxFit.cover,
64 | ),
65 | ),
66 | child: ListView(
67 | children: [
68 | Column(
69 | children: [
70 | SizedBox(
71 | height: 180,
72 | ),
73 | Container(
74 | height: 220,
75 | width: 220,
76 | decoration: BoxDecoration(
77 | image: DecorationImage(
78 | image: AssetImage(UIConstants.splashScreenLogo),
79 | ),
80 | ),
81 | ),
82 | SizedBox(
83 | height: 15,
84 | ),
85 | Row(
86 | mainAxisAlignment: MainAxisAlignment.center,
87 | children: [
88 | Text(
89 | 'LIBRARY',
90 | style: TextStyle(
91 | color: Color(0xFFDD3617),
92 | fontSize: 28,
93 | ),
94 | ),
95 | SizedBox(
96 | width: 8,
97 | ),
98 | Text(
99 | 'MANAGED',
100 | style: TextStyle(
101 | color: Color(0xFF584846),
102 | fontSize: 28,
103 | ),
104 | ),
105 | ],
106 | )
107 | ],
108 | )
109 | ],
110 | ),
111 | ),
112 | ),
113 | );
114 | }
115 | }
116 |
--------------------------------------------------------------------------------
/lib/viewpdf.dart:
--------------------------------------------------------------------------------
1 | ///[Dont Remove it ]
2 | ///
3 | ///It is a File that helps to view the pdf which is being sent
4 | ///
5 | ///Before using it make sure that you add printing ,open_file as a dependency
6 | ///
7 | ///
8 | // import 'dart:async';
9 | // import 'dart:io';
10 | // import 'dart:typed_data';
11 | // import 'package:flutter/foundation.dart';
12 | // import 'package:flutter/material.dart';
13 | // import 'package:open_file/open_file.dart';
14 | // import 'package:path_provider/path_provider.dart';
15 | // import 'package:pdf/pdf.dart';
16 | // import 'package:pdf/widgets.dart' as pw;
17 |
18 | // import 'package:printing/printing.dart';
19 |
20 | // import 'invoice.dart';
21 |
22 | // class MyApp extends StatefulWidget {
23 | // @override
24 | // MyAppState createState() {
25 | // return MyAppState();
26 | // }
27 | // }
28 |
29 | // class MyAppState extends State with SingleTickerProviderStateMixin {
30 | // Future _saveAsFile(
31 | // BuildContext context,
32 | // LayoutCallback build,
33 | // PdfPageFormat pageFormat,
34 | // ) async {
35 | // final Uint8List bytes = await build(pageFormat);
36 |
37 | // final Directory appDocDir = await getApplicationDocumentsDirectory();
38 | // final String appDocPath = appDocDir.path;
39 | // final File file = File(appDocPath + '/' + 'document.pdf');
40 | // print('Save as file ${file.path} ...');
41 | // await file.writeAsBytes(bytes);
42 | // OpenFile.open(file.path);
43 | // }
44 |
45 | // @override
46 | // Widget build(BuildContext context) {
47 | // pw.RichText.debug = true;
48 |
49 | // final actions = [
50 | // if (!kIsWeb)
51 | // PdfPreviewAction(
52 | // icon: const Icon(Icons.save),
53 | // onPressed: _saveAsFile,
54 | // )
55 | // ];
56 |
57 | // return Scaffold(
58 | // appBar: AppBar(
59 | // title: const Text('Pdf Printing Example'),
60 | // ),
61 | // body: PdfPreview(
62 | // maxPageWidth: 700,
63 | // build: generateInvoice,
64 | // actions: actions,
65 | // ),
66 | // );
67 | // }
68 | // }
69 |
--------------------------------------------------------------------------------
/online_library@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/online_library@2x.png
--------------------------------------------------------------------------------
/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://dart.dev/tools/pub/glossary#lockfile
3 | packages:
4 | archive:
5 | dependency: transitive
6 | description:
7 | name: archive
8 | url: "https://pub.dartlang.org"
9 | source: hosted
10 | version: "2.0.13"
11 | args:
12 | dependency: transitive
13 | description:
14 | name: args
15 | url: "https://pub.dartlang.org"
16 | source: hosted
17 | version: "1.6.0"
18 | async:
19 | dependency: transitive
20 | description:
21 | name: async
22 | url: "https://pub.dartlang.org"
23 | source: hosted
24 | version: "2.5.0-nullsafety.1"
25 | barcode:
26 | dependency: "direct main"
27 | description:
28 | name: barcode
29 | url: "https://pub.dartlang.org"
30 | source: hosted
31 | version: "1.17.0"
32 | barcode_scan:
33 | dependency: "direct main"
34 | description:
35 | name: barcode_scan
36 | url: "https://pub.dartlang.org"
37 | source: hosted
38 | version: "1.0.0"
39 | boolean_selector:
40 | dependency: transitive
41 | description:
42 | name: boolean_selector
43 | url: "https://pub.dartlang.org"
44 | source: hosted
45 | version: "2.1.0-nullsafety.1"
46 | characters:
47 | dependency: transitive
48 | description:
49 | name: characters
50 | url: "https://pub.dartlang.org"
51 | source: hosted
52 | version: "1.1.0-nullsafety.3"
53 | charcode:
54 | dependency: transitive
55 | description:
56 | name: charcode
57 | url: "https://pub.dartlang.org"
58 | source: hosted
59 | version: "1.2.0-nullsafety.1"
60 | clock:
61 | dependency: transitive
62 | description:
63 | name: clock
64 | url: "https://pub.dartlang.org"
65 | source: hosted
66 | version: "1.1.0-nullsafety.1"
67 | cloud_firestore:
68 | dependency: "direct main"
69 | description:
70 | name: cloud_firestore
71 | url: "https://pub.dartlang.org"
72 | source: hosted
73 | version: "0.14.1+2"
74 | cloud_firestore_platform_interface:
75 | dependency: transitive
76 | description:
77 | name: cloud_firestore_platform_interface
78 | url: "https://pub.dartlang.org"
79 | source: hosted
80 | version: "2.1.1"
81 | cloud_firestore_web:
82 | dependency: transitive
83 | description:
84 | name: cloud_firestore_web
85 | url: "https://pub.dartlang.org"
86 | source: hosted
87 | version: "0.2.0+3"
88 | collection:
89 | dependency: transitive
90 | description:
91 | name: collection
92 | url: "https://pub.dartlang.org"
93 | source: hosted
94 | version: "1.15.0-nullsafety.3"
95 | convert:
96 | dependency: transitive
97 | description:
98 | name: convert
99 | url: "https://pub.dartlang.org"
100 | source: hosted
101 | version: "2.1.1"
102 | crypto:
103 | dependency: transitive
104 | description:
105 | name: crypto
106 | url: "https://pub.dartlang.org"
107 | source: hosted
108 | version: "2.1.5"
109 | cupertino_icons:
110 | dependency: "direct main"
111 | description:
112 | name: cupertino_icons
113 | url: "https://pub.dartlang.org"
114 | source: hosted
115 | version: "1.0.0"
116 | custom_splash:
117 | dependency: "direct main"
118 | description:
119 | name: custom_splash
120 | url: "https://pub.dartlang.org"
121 | source: hosted
122 | version: "0.0.2"
123 | dart2_constant:
124 | dependency: transitive
125 | description:
126 | name: dart2_constant
127 | url: "https://pub.dartlang.org"
128 | source: hosted
129 | version: "1.0.2+dart2"
130 | fake_async:
131 | dependency: transitive
132 | description:
133 | name: fake_async
134 | url: "https://pub.dartlang.org"
135 | source: hosted
136 | version: "1.2.0-nullsafety.1"
137 | ffi:
138 | dependency: transitive
139 | description:
140 | name: ffi
141 | url: "https://pub.dartlang.org"
142 | source: hosted
143 | version: "0.1.3"
144 | file:
145 | dependency: transitive
146 | description:
147 | name: file
148 | url: "https://pub.dartlang.org"
149 | source: hosted
150 | version: "5.2.1"
151 | firebase:
152 | dependency: transitive
153 | description:
154 | name: firebase
155 | url: "https://pub.dartlang.org"
156 | source: hosted
157 | version: "7.3.0"
158 | firebase_auth:
159 | dependency: "direct main"
160 | description:
161 | name: firebase_auth
162 | url: "https://pub.dartlang.org"
163 | source: hosted
164 | version: "0.18.1+1"
165 | firebase_auth_platform_interface:
166 | dependency: transitive
167 | description:
168 | name: firebase_auth_platform_interface
169 | url: "https://pub.dartlang.org"
170 | source: hosted
171 | version: "2.1.0"
172 | firebase_auth_web:
173 | dependency: transitive
174 | description:
175 | name: firebase_auth_web
176 | url: "https://pub.dartlang.org"
177 | source: hosted
178 | version: "0.3.1"
179 | firebase_core:
180 | dependency: "direct main"
181 | description:
182 | name: firebase_core
183 | url: "https://pub.dartlang.org"
184 | source: hosted
185 | version: "0.5.0"
186 | firebase_core_platform_interface:
187 | dependency: transitive
188 | description:
189 | name: firebase_core_platform_interface
190 | url: "https://pub.dartlang.org"
191 | source: hosted
192 | version: "2.0.0"
193 | firebase_core_web:
194 | dependency: transitive
195 | description:
196 | name: firebase_core_web
197 | url: "https://pub.dartlang.org"
198 | source: hosted
199 | version: "0.2.0"
200 | firebase_database:
201 | dependency: "direct main"
202 | description:
203 | name: firebase_database
204 | url: "https://pub.dartlang.org"
205 | source: hosted
206 | version: "4.1.0"
207 | flutter:
208 | dependency: "direct main"
209 | description: flutter
210 | source: sdk
211 | version: "0.0.0"
212 | flutter_datetime_formfield:
213 | dependency: "direct main"
214 | description:
215 | name: flutter_datetime_formfield
216 | url: "https://pub.dartlang.org"
217 | source: hosted
218 | version: "0.1.2"
219 | flutter_svg:
220 | dependency: "direct main"
221 | description:
222 | name: flutter_svg
223 | url: "https://pub.dartlang.org"
224 | source: hosted
225 | version: "0.19.0"
226 | flutter_test:
227 | dependency: "direct dev"
228 | description: flutter
229 | source: sdk
230 | version: "0.0.0"
231 | flutter_web_plugins:
232 | dependency: transitive
233 | description: flutter
234 | source: sdk
235 | version: "0.0.0"
236 | fluttertoast:
237 | dependency: "direct main"
238 | description:
239 | name: fluttertoast
240 | url: "https://pub.dartlang.org"
241 | source: hosted
242 | version: "7.1.1"
243 | http:
244 | dependency: transitive
245 | description:
246 | name: http
247 | url: "https://pub.dartlang.org"
248 | source: hosted
249 | version: "0.12.2"
250 | http_parser:
251 | dependency: transitive
252 | description:
253 | name: http_parser
254 | url: "https://pub.dartlang.org"
255 | source: hosted
256 | version: "3.1.4"
257 | image:
258 | dependency: transitive
259 | description:
260 | name: image
261 | url: "https://pub.dartlang.org"
262 | source: hosted
263 | version: "2.1.18"
264 | intl:
265 | dependency: transitive
266 | description:
267 | name: intl
268 | url: "https://pub.dartlang.org"
269 | source: hosted
270 | version: "0.16.1"
271 | js:
272 | dependency: transitive
273 | description:
274 | name: js
275 | url: "https://pub.dartlang.org"
276 | source: hosted
277 | version: "0.6.2"
278 | logging:
279 | dependency: transitive
280 | description:
281 | name: logging
282 | url: "https://pub.dartlang.org"
283 | source: hosted
284 | version: "0.11.4"
285 | mailer2:
286 | dependency: "direct main"
287 | description:
288 | name: mailer2
289 | url: "https://pub.dartlang.org"
290 | source: hosted
291 | version: "1.2.5"
292 | matcher:
293 | dependency: transitive
294 | description:
295 | name: matcher
296 | url: "https://pub.dartlang.org"
297 | source: hosted
298 | version: "0.12.10-nullsafety.1"
299 | meta:
300 | dependency: transitive
301 | description:
302 | name: meta
303 | url: "https://pub.dartlang.org"
304 | source: hosted
305 | version: "1.3.0-nullsafety.3"
306 | mime:
307 | dependency: transitive
308 | description:
309 | name: mime
310 | url: "https://pub.dartlang.org"
311 | source: hosted
312 | version: "0.9.7"
313 | path:
314 | dependency: transitive
315 | description:
316 | name: path
317 | url: "https://pub.dartlang.org"
318 | source: hosted
319 | version: "1.8.0-nullsafety.1"
320 | path_drawing:
321 | dependency: transitive
322 | description:
323 | name: path_drawing
324 | url: "https://pub.dartlang.org"
325 | source: hosted
326 | version: "0.4.1+1"
327 | path_parsing:
328 | dependency: transitive
329 | description:
330 | name: path_parsing
331 | url: "https://pub.dartlang.org"
332 | source: hosted
333 | version: "0.1.4"
334 | path_provider:
335 | dependency: "direct main"
336 | description:
337 | name: path_provider
338 | url: "https://pub.dartlang.org"
339 | source: hosted
340 | version: "1.6.18"
341 | path_provider_linux:
342 | dependency: transitive
343 | description:
344 | name: path_provider_linux
345 | url: "https://pub.dartlang.org"
346 | source: hosted
347 | version: "0.0.1+2"
348 | path_provider_macos:
349 | dependency: transitive
350 | description:
351 | name: path_provider_macos
352 | url: "https://pub.dartlang.org"
353 | source: hosted
354 | version: "0.0.4+4"
355 | path_provider_platform_interface:
356 | dependency: transitive
357 | description:
358 | name: path_provider_platform_interface
359 | url: "https://pub.dartlang.org"
360 | source: hosted
361 | version: "1.0.3"
362 | path_provider_windows:
363 | dependency: transitive
364 | description:
365 | name: path_provider_windows
366 | url: "https://pub.dartlang.org"
367 | source: hosted
368 | version: "0.0.4+1"
369 | pdf:
370 | dependency: "direct main"
371 | description:
372 | name: pdf
373 | url: "https://pub.dartlang.org"
374 | source: hosted
375 | version: "1.11.2"
376 | pedantic:
377 | dependency: transitive
378 | description:
379 | name: pedantic
380 | url: "https://pub.dartlang.org"
381 | source: hosted
382 | version: "1.9.2"
383 | petitparser:
384 | dependency: transitive
385 | description:
386 | name: petitparser
387 | url: "https://pub.dartlang.org"
388 | source: hosted
389 | version: "3.1.0"
390 | platform:
391 | dependency: transitive
392 | description:
393 | name: platform
394 | url: "https://pub.dartlang.org"
395 | source: hosted
396 | version: "2.2.1"
397 | plugin_platform_interface:
398 | dependency: transitive
399 | description:
400 | name: plugin_platform_interface
401 | url: "https://pub.dartlang.org"
402 | source: hosted
403 | version: "1.0.3"
404 | process:
405 | dependency: transitive
406 | description:
407 | name: process
408 | url: "https://pub.dartlang.org"
409 | source: hosted
410 | version: "3.0.13"
411 | qr:
412 | dependency: transitive
413 | description:
414 | name: qr
415 | url: "https://pub.dartlang.org"
416 | source: hosted
417 | version: "1.3.0"
418 | quiver:
419 | dependency: transitive
420 | description:
421 | name: quiver
422 | url: "https://pub.dartlang.org"
423 | source: hosted
424 | version: "2.1.3"
425 | sky_engine:
426 | dependency: transitive
427 | description: flutter
428 | source: sdk
429 | version: "0.0.99"
430 | source_span:
431 | dependency: transitive
432 | description:
433 | name: source_span
434 | url: "https://pub.dartlang.org"
435 | source: hosted
436 | version: "1.8.0-nullsafety.2"
437 | splashscreen:
438 | dependency: "direct main"
439 | description:
440 | name: splashscreen
441 | url: "https://pub.dartlang.org"
442 | source: hosted
443 | version: "1.2.0"
444 | stack_trace:
445 | dependency: transitive
446 | description:
447 | name: stack_trace
448 | url: "https://pub.dartlang.org"
449 | source: hosted
450 | version: "1.10.0-nullsafety.1"
451 | stream_channel:
452 | dependency: transitive
453 | description:
454 | name: stream_channel
455 | url: "https://pub.dartlang.org"
456 | source: hosted
457 | version: "2.1.0-nullsafety.1"
458 | string_scanner:
459 | dependency: transitive
460 | description:
461 | name: string_scanner
462 | url: "https://pub.dartlang.org"
463 | source: hosted
464 | version: "1.1.0-nullsafety.1"
465 | term_glyph:
466 | dependency: transitive
467 | description:
468 | name: term_glyph
469 | url: "https://pub.dartlang.org"
470 | source: hosted
471 | version: "1.2.0-nullsafety.1"
472 | test_api:
473 | dependency: transitive
474 | description:
475 | name: test_api
476 | url: "https://pub.dartlang.org"
477 | source: hosted
478 | version: "0.2.19-nullsafety.2"
479 | typed_data:
480 | dependency: transitive
481 | description:
482 | name: typed_data
483 | url: "https://pub.dartlang.org"
484 | source: hosted
485 | version: "1.3.0-nullsafety.3"
486 | utf:
487 | dependency: transitive
488 | description:
489 | name: utf
490 | url: "https://pub.dartlang.org"
491 | source: hosted
492 | version: "0.9.0+5"
493 | uuid:
494 | dependency: "direct main"
495 | description:
496 | name: uuid
497 | url: "https://pub.dartlang.org"
498 | source: hosted
499 | version: "2.2.2"
500 | vector_math:
501 | dependency: transitive
502 | description:
503 | name: vector_math
504 | url: "https://pub.dartlang.org"
505 | source: hosted
506 | version: "2.1.0-nullsafety.3"
507 | win32:
508 | dependency: transitive
509 | description:
510 | name: win32
511 | url: "https://pub.dartlang.org"
512 | source: hosted
513 | version: "1.7.3"
514 | xdg_directories:
515 | dependency: transitive
516 | description:
517 | name: xdg_directories
518 | url: "https://pub.dartlang.org"
519 | source: hosted
520 | version: "0.1.2"
521 | xml:
522 | dependency: transitive
523 | description:
524 | name: xml
525 | url: "https://pub.dartlang.org"
526 | source: hosted
527 | version: "4.5.1"
528 | sdks:
529 | dart: ">=2.10.0-110 <2.11.0"
530 | flutter: ">=1.18.0-6.0.pre <2.0.0"
531 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: library_system
2 | description: A new Flutter project.
3 |
4 | publish_to: "none"
5 | version: 1.0.0+1
6 |
7 | environment:
8 | sdk: ">=2.7.0 <3.0.0"
9 |
10 | dependencies:
11 | flutter:
12 | sdk: flutter
13 |
14 | firebase_auth: ^0.18.1+1
15 | cloud_firestore: ^0.14.1+2
16 | firebase_database: ^4.1.0
17 | firebase_core: ^0.5.0
18 | fluttertoast: ^7.1.1
19 | cupertino_icons: ^1.0.0
20 | custom_splash: ^0.0.2
21 | splashscreen: ^1.2.0
22 | barcode_scan: ^1.0.0
23 | uuid: ^2.2.2
24 | barcode: ^1.17.0
25 | flutter_svg: ^0.19.0
26 | flutter_datetime_formfield: ^0.1.2
27 | pdf: ^1.11.2
28 | mailer2: ^1.2.5
29 | path_provider: ^1.6.18
30 |
31 | dev_dependencies:
32 | flutter_test:
33 | sdk: flutter
34 |
35 | flutter:
36 | uses-material-design: true
37 | assets:
38 | - assets/images/
39 | - assets/
40 |
--------------------------------------------------------------------------------
/test/widget_test.dart:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GDSC-KIIT/Library-Management-System-Flutter/9843cb7f8ba9a0939e78e3c83e3d3ebfdea81fa3/test/widget_test.dart
--------------------------------------------------------------------------------