Browse Source

Bloc

master
jefry 3 years ago
commit
171bf7f45d
100 changed files with 2316 additions and 0 deletions
  1. +46
    -0
      .gitignore
  2. +10
    -0
      .metadata
  3. +0
    -0
      README.md
  4. +29
    -0
      analysis_options.yaml
  5. +13
    -0
      android/.gitignore
  6. +86
    -0
      android/app/build.gradle
  7. +7
    -0
      android/app/src/debug/AndroidManifest.xml
  8. +47
    -0
      android/app/src/main/AndroidManifest.xml
  9. +6
    -0
      android/app/src/main/kotlin/com/thamringroup/unitstocks/MainActivity.kt
  10. +12
    -0
      android/app/src/main/res/drawable-v21/launch_background.xml
  11. +12
    -0
      android/app/src/main/res/drawable/launch_background.xml
  12. BIN
      android/app/src/main/res/mipmap-hdpi/ic_launcher.png
  13. BIN
      android/app/src/main/res/mipmap-hdpi/launcher_icon.png
  14. BIN
      android/app/src/main/res/mipmap-mdpi/ic_launcher.png
  15. BIN
      android/app/src/main/res/mipmap-mdpi/launcher_icon.png
  16. BIN
      android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
  17. BIN
      android/app/src/main/res/mipmap-xhdpi/launcher_icon.png
  18. BIN
      android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  19. BIN
      android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png
  20. BIN
      android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  21. BIN
      android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png
  22. +18
    -0
      android/app/src/main/res/values-night/styles.xml
  23. +18
    -0
      android/app/src/main/res/values/styles.xml
  24. +7
    -0
      android/app/src/profile/AndroidManifest.xml
  25. +29
    -0
      android/build.gradle
  26. +3
    -0
      android/gradle.properties
  27. +6
    -0
      android/gradle/wrapper/gradle-wrapper.properties
  28. +11
    -0
      android/settings.gradle
  29. BIN
      asset/icon.png
  30. +34
    -0
      ios/.gitignore
  31. +26
    -0
      ios/Flutter/AppFrameworkInfo.plist
  32. +2
    -0
      ios/Flutter/Debug.xcconfig
  33. +2
    -0
      ios/Flutter/Release.xcconfig
  34. +41
    -0
      ios/Podfile
  35. +87
    -0
      ios/Podfile.lock
  36. +539
    -0
      ios/Runner.xcodeproj/project.pbxproj
  37. +7
    -0
      ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  38. +8
    -0
      ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  39. +8
    -0
      ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  40. +91
    -0
      ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
  41. +10
    -0
      ios/Runner.xcworkspace/contents.xcworkspacedata
  42. +8
    -0
      ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  43. +8
    -0
      ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  44. +13
    -0
      ios/Runner/AppDelegate.swift
  45. +122
    -0
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
  46. BIN
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
  47. BIN
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
  48. BIN
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
  49. BIN
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
  50. BIN
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
  51. BIN
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
  52. BIN
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
  53. BIN
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
  54. BIN
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
  55. BIN
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
  56. BIN
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
  57. BIN
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
  58. BIN
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
  59. BIN
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
  60. BIN
      ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
  61. +23
    -0
      ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
  62. BIN
      ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
  63. BIN
      ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
  64. BIN
      ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
  65. +5
    -0
      ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
  66. +37
    -0
      ios/Runner/Base.lproj/LaunchScreen.storyboard
  67. +26
    -0
      ios/Runner/Base.lproj/Main.storyboard
  68. +45
    -0
      ios/Runner/Info.plist
  69. +1
    -0
      ios/Runner/Runner-Bridging-Header.h
  70. +67
    -0
      lib/Blocs/Cabang/cabang_bloc.dart
  71. +18
    -0
      lib/Blocs/Cabang/cabang_event.dart
  72. +24
    -0
      lib/Blocs/Cabang/cabang_state.dart
  73. +57
    -0
      lib/Blocs/Login/login_bloc.dart
  74. +46
    -0
      lib/Blocs/Login/login_event.dart
  75. +24
    -0
      lib/Blocs/Login/login_state.dart
  76. +27
    -0
      lib/Blocs/Logout/logout_bloc.dart
  77. +17
    -0
      lib/Blocs/Logout/logout_event.dart
  78. +13
    -0
      lib/Blocs/Logout/logout_state.dart
  79. +22
    -0
      lib/Blocs/Stock_Taking/Backup/backup_bloc.dart
  80. +13
    -0
      lib/Blocs/Stock_Taking/Backup/backup_event.dart
  81. +17
    -0
      lib/Blocs/Stock_Taking/Backup/backup_state.dart
  82. +39
    -0
      lib/Blocs/Stock_Taking/Clear/clear_data_bloc.dart
  83. +13
    -0
      lib/Blocs/Stock_Taking/Clear/clear_data_event.dart
  84. +17
    -0
      lib/Blocs/Stock_Taking/Clear/clear_data_state.dart
  85. +31
    -0
      lib/Blocs/Stock_Taking/Process/process_units_bloc.dart
  86. +9
    -0
      lib/Blocs/Stock_Taking/Process/process_units_event.dart
  87. +17
    -0
      lib/Blocs/Stock_Taking/Process/process_units_state.dart
  88. +52
    -0
      lib/Blocs/Stock_Taking/Restore/restore_bloc.dart
  89. +12
    -0
      lib/Blocs/Stock_Taking/Restore/restore_event.dart
  90. +15
    -0
      lib/Blocs/Stock_Taking/Restore/restore_state.dart
  91. +59
    -0
      lib/Blocs/Stock_Taking/Send/upload_bloc.dart
  92. +11
    -0
      lib/Blocs/Stock_Taking/Send/upload_event.dart
  93. +17
    -0
      lib/Blocs/Stock_Taking/Send/upload_state.dart
  94. +42
    -0
      lib/Blocs/Stock_Taking/State/load_state_bloc.dart
  95. +11
    -0
      lib/Blocs/Stock_Taking/State/load_state_event.dart
  96. +21
    -0
      lib/Blocs/Stock_Taking/State/load_state_state.dart
  97. +31
    -0
      lib/Blocs/Stock_Taking/Submit/submit_unit_bloc.dart
  98. +9
    -0
      lib/Blocs/Stock_Taking/Submit/submit_unit_event.dart
  99. +18
    -0
      lib/Blocs/Stock_Taking/Submit/submit_unit_state.dart
  100. +44
    -0
      lib/Blocs/Stock_Taking/Unit/get_unit_bloc.dart

+ 46
- 0
.gitignore View File

@@ -0,0 +1,46 @@
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/

# IntelliJ related
*.iml
*.ipr
*.iws
.idea/

# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/

# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/

# Web related
lib/generated_plugin_registrant.dart

# Symbolication related
app.*.symbols

# Obfuscation related
app.*.map.json

# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release

+ 10
- 0
.metadata View File

@@ -0,0 +1,10 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.

version:
revision: 18116933e77adc82f80866c928266a5b4f1ed645
channel: stable

project_type: app

+ 0
- 0
README.md View File


+ 29
- 0
analysis_options.yaml View File

@@ -0,0 +1,29 @@
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.

# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml

linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at
# https://dart-lang.github.io/linter/lints/index.html.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule

# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options

+ 13
- 0
android/.gitignore View File

@@ -0,0 +1,13 @@
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java

# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties
**/*.keystore
**/*.jks

+ 86
- 0
android/app/build.gradle View File

@@ -0,0 +1,86 @@
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}

def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {
compileSdkVersion 31
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}

sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}

defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.thamringroup.unitstocks"
minSdkVersion 18
targetSdkVersion 31
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
multiDexEnabled true
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? rootProject.file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
// signingConfig signingConfigs.debug
// debuggable false
// minifyEnabled false
// shrinkResources false
// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

flutter {
source '../..'
}

dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.multidex:multidex:2.0.1'
}

+ 7
- 0
android/app/src/debug/AndroidManifest.xml View File

@@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.thamringroup.unitstocks">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

+ 47
- 0
android/app/src/main/AndroidManifest.xml View File

@@ -0,0 +1,47 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.thamringroup.unitstocks">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:name="${applicationName}"
android:label="unitstocks"
android:icon="@mipmap/launcher_icon">
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<!-- Displays an Android View that continues showing the launch screen
Drawable until Flutter paints its first frame, then this splash
screen fades out. A splash screen is useful to avoid any visual
gap between the end of Android's launch screen and the painting of
Flutter's first frame. -->
<meta-data
android:name="io.flutter.embedding.android.SplashScreenDrawable"
android:resource="@drawable/launch_background"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>

+ 6
- 0
android/app/src/main/kotlin/com/thamringroup/unitstocks/MainActivity.kt View File

@@ -0,0 +1,6 @@
package com.thamringroup.unitstocks

import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity() {
}

+ 12
- 0
android/app/src/main/res/drawable-v21/launch_background.xml View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="?android:colorBackground" />

<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>

+ 12
- 0
android/app/src/main/res/drawable/launch_background.xml View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />

<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>

BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher.png View File

Before After
Width: 72  |  Height: 72  |  Size: 544 B

BIN
android/app/src/main/res/mipmap-hdpi/launcher_icon.png View File

Before After
Width: 72  |  Height: 72  |  Size: 6.7 KiB

BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher.png View File

Before After
Width: 48  |  Height: 48  |  Size: 442 B

BIN
android/app/src/main/res/mipmap-mdpi/launcher_icon.png View File

Before After
Width: 48  |  Height: 48  |  Size: 3.7 KiB

BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher.png View File

Before After
Width: 96  |  Height: 96  |  Size: 721 B

BIN
android/app/src/main/res/mipmap-xhdpi/launcher_icon.png View File

Before After
Width: 96  |  Height: 96  |  Size: 10 KiB

BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png View File

Before After
Width: 144  |  Height: 144  |  Size: 1.0 KiB

BIN
android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png View File

Before After
Width: 144  |  Height: 144  |  Size: 19 KiB

BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png View File

Before After
Width: 192  |  Height: 192  |  Size: 1.4 KiB

BIN
android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png View File

Before After
Width: 192  |  Height: 192  |  Size: 29 KiB

+ 18
- 0
android/app/src/main/res/values-night/styles.xml View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>

+ 18
- 0
android/app/src/main/res/values/styles.xml View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>

+ 7
- 0
android/app/src/profile/AndroidManifest.xml View File

@@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.thamringroup.unitstocks">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

+ 29
- 0
android/build.gradle View File

@@ -0,0 +1,29 @@
buildscript {
ext.kotlin_version = '1.6.10'
repositories {
google()
mavenCentral()
}

dependencies {
classpath 'com.android.tools.build:gradle:7.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}

allprojects {
repositories {
google()
mavenCentral()
}
}

rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
delete rootProject.buildDir
}

+ 3
- 0
android/gradle.properties View File

@@ -0,0 +1,3 @@
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true

+ 6
- 0
android/gradle/wrapper/gradle-wrapper.properties View File

@@ -0,0 +1,6 @@
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip

+ 11
- 0
android/settings.gradle View File

@@ -0,0 +1,11 @@
include ':app'

def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()

assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }

def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"

BIN
asset/icon.png View File

Before After
Width: 512  |  Height: 512  |  Size: 116 KiB

+ 34
- 0
ios/.gitignore View File

@@ -0,0 +1,34 @@
**/dgph
*.mode1v3
*.mode2v3
*.moved-aside
*.pbxuser
*.perspectivev3
**/*sync/
.sconsign.dblite
.tags*
**/.vagrant/
**/DerivedData/
Icon?
**/Pods/
**/.symlinks/
profile
xcuserdata
**/.generated/
Flutter/App.framework
Flutter/Flutter.framework
Flutter/Flutter.podspec
Flutter/Generated.xcconfig
Flutter/ephemeral/
Flutter/app.flx
Flutter/app.zip
Flutter/flutter_assets/
Flutter/flutter_export_environment.sh
ServiceDefinitions.json
Runner/GeneratedPluginRegistrant.*

# Exceptions to above rules.
!default.mode1v3
!default.mode2v3
!default.pbxuser
!default.perspectivev3

+ 26
- 0
ios/Flutter/AppFrameworkInfo.plist View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>9.0</string>
</dict>
</plist>

+ 2
- 0
ios/Flutter/Debug.xcconfig View File

@@ -0,0 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"

+ 2
- 0
ios/Flutter/Release.xcconfig View File

@@ -0,0 +1,2 @@
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"

+ 41
- 0
ios/Podfile View File

@@ -0,0 +1,41 @@
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'

# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}

def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end

File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end

require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)

flutter_ios_podfile_setup

target 'Runner' do
use_frameworks!
use_modular_headers!

flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end

post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end

+ 87
- 0
ios/Podfile.lock View File

@@ -0,0 +1,87 @@
PODS:
- barcode_scan2 (0.0.1):
- Flutter
- MTBBarcodeScanner
- SwiftProtobuf
- Flutter (1.0.0)
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- image_picker (0.0.1):
- Flutter
- location (0.0.1):
- Flutter
- MTBBarcodeScanner (5.0.11)
- package_info (0.0.1):
- Flutter
- path_provider_ios (0.0.1):
- Flutter
- "permission_handler (5.1.0+2)":
- Flutter
- shared_preferences_ios (0.0.1):
- Flutter
- sqflite (0.0.2):
- Flutter
- FMDB (>= 2.7.5)
- SwiftProtobuf (1.18.0)
- url_launcher_ios (0.0.1):
- Flutter

DEPENDENCIES:
- barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`)
- Flutter (from `Flutter`)
- image_picker (from `.symlinks/plugins/image_picker/ios`)
- location (from `.symlinks/plugins/location/ios`)
- package_info (from `.symlinks/plugins/package_info/ios`)
- path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
- permission_handler (from `.symlinks/plugins/permission_handler/ios`)
- shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`)
- sqflite (from `.symlinks/plugins/sqflite/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)

SPEC REPOS:
trunk:
- FMDB
- MTBBarcodeScanner
- SwiftProtobuf

EXTERNAL SOURCES:
barcode_scan2:
:path: ".symlinks/plugins/barcode_scan2/ios"
Flutter:
:path: Flutter
image_picker:
:path: ".symlinks/plugins/image_picker/ios"
location:
:path: ".symlinks/plugins/location/ios"
package_info:
:path: ".symlinks/plugins/package_info/ios"
path_provider_ios:
:path: ".symlinks/plugins/path_provider_ios/ios"
permission_handler:
:path: ".symlinks/plugins/permission_handler/ios"
shared_preferences_ios:
:path: ".symlinks/plugins/shared_preferences_ios/ios"
sqflite:
:path: ".symlinks/plugins/sqflite/ios"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"

SPEC CHECKSUMS:
barcode_scan2: 0af2bb63c81b4565aab6cd78278e4c0fa136dbb0
Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
image_picker: 9aa50e1d8cdacdbed739e925b7eea16d014367e6
location: 3a2eed4dd2fab25e7b7baf2a9efefe82b512d740
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
path_provider_ios: 7d7ce634493af4477d156294792024ec3485acd5
permission_handler: ccb20a9fad0ee9b1314a52b70b76b473c5f8dab0
shared_preferences_ios: aef470a42dc4675a1cdd50e3158b42e3d1232b32
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
SwiftProtobuf: c3c12645230d9b09c72267e0de89468c5543bd86
url_launcher_ios: 02f1989d4e14e998335b02b67a7590fa34f971af

PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c

COCOAPODS: 1.11.2

+ 539
- 0
ios/Runner.xcodeproj/project.pbxproj View File

@@ -0,0 +1,539 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {

/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
69397765FFFFA1BA6362EA4B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E08104BAAD3056C48BDF5EE3 /* Pods_Runner.framework */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
0501EB5CBC7531739408FD72 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
57F20BC6CF6E6D6B67DC1552 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
B7FFDF13C26510059A9B9116 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
E08104BAAD3056C48BDF5EE3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
69397765FFFFA1BA6362EA4B /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
1E2EBAB5ED4DD3D3A2A11AC8 /* Pods */ = {
isa = PBXGroup;
children = (
0501EB5CBC7531739408FD72 /* Pods-Runner.debug.xcconfig */,
B7FFDF13C26510059A9B9116 /* Pods-Runner.release.xcconfig */,
57F20BC6CF6E6D6B67DC1552 /* Pods-Runner.profile.xcconfig */,
);
name = Pods;
path = Pods;
sourceTree = "<group>";
};
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
9740EEB31CF90195004384FC /* Generated.xcconfig */,
);
name = Flutter;
sourceTree = "<group>";
};
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
1E2EBAB5ED4DD3D3A2A11AC8 /* Pods */,
B22B7682CA04E9426C3AC3CF /* Frameworks */,
);
sourceTree = "<group>";
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
);
name = Products;
sourceTree = "<group>";
};
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
);
path = Runner;
sourceTree = "<group>";
};
B22B7682CA04E9426C3AC3CF /* Frameworks */ = {
isa = PBXGroup;
children = (
E08104BAAD3056C48BDF5EE3 /* Pods_Runner.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
97C146ED1CF9000F007C117D /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
EC10BB94B8F198D49E183BDD /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
EFB4DCC5315D54E9F1DC5BEF /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = Runner;
productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1020;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
LastSwiftMigration = 1100;
};
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
);
};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */

/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Thin Binary";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
EC10BB94B8F198D49E183BDD /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
EFB4DCC5315D54E9F1DC5BEF /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */

/* Begin PBXVariantGroup section */
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C146FB1CF9000F007C117D /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C147001CF9000F007C117D /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */

/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Profile;
};
249021D4217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.thamringroup.unitstocks;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
97C147061CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.thamringroup.unitstocks;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
97C147071CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.thamringroup.unitstocks;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147031CF9000F007C117D /* Debug */,
97C147041CF9000F007C117D /* Release */,
249021D3217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147061CF9000F007C117D /* Debug */,
97C147071CF9000F007C117D /* Release */,
249021D4217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}

+ 7
- 0
ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>

+ 8
- 0
ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

+ 8
- 0
ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>

+ 91
- 0
ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme View File

@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1020"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

+ 10
- 0
ios/Runner.xcworkspace/contents.xcworkspacedata View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>

+ 8
- 0
ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

+ 8
- 0
ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>

+ 13
- 0
ios/Runner/AppDelegate.swift View File

@@ -0,0 +1,13 @@
import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}

+ 122
- 0
ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json View File

@@ -0,0 +1,122 @@
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon-App-1024x1024@1x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

BIN
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png View File

Before After
Width: 1024  |  Height: 1024  |  Size: 258 KiB

BIN
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png View File

Before After
Width: 20  |  Height: 20  |  Size: 1.2 KiB

BIN
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png View File

Before After
Width: 40  |  Height: 40  |  Size: 2.9 KiB

BIN
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png View File

Before After
Width: 60  |  Height: 60  |  Size: 5.3 KiB

BIN
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png View File

Before After
Width: 29  |  Height: 29  |  Size: 1.9 KiB

BIN
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png View File

Before After
Width: 58  |  Height: 58  |  Size: 4.9 KiB

BIN
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png View File

Before After
Width: 87  |  Height: 87  |  Size: 8.9 KiB

BIN
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png View File

Before After
Width: 40  |  Height: 40  |  Size: 2.9 KiB

BIN
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png View File

Before After
Width: 80  |  Height: 80  |  Size: 7.9 KiB

BIN
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png View File

Before After
Width: 120  |  Height: 120  |  Size: 14 KiB

BIN
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png View File

Before After
Width: 120  |  Height: 120  |  Size: 14 KiB

BIN
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png View File

Before After
Width: 180  |  Height: 180  |  Size: 26 KiB

BIN
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png View File

Before After
Width: 76  |  Height: 76  |  Size: 7.4 KiB

BIN
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png View File

Before After
Width: 152  |  Height: 152  |  Size: 20 KiB

BIN
ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png View File

Before After
Width: 167  |  Height: 167  |  Size: 24 KiB

+ 23
- 0
ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json View File

@@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "LaunchImage.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

BIN
ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png View File

Before After
Width: 1  |  Height: 1  |  Size: 68 B

BIN
ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png View File

Before After
Width: 1  |  Height: 1  |  Size: 68 B

BIN
ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png View File

Before After
Width: 1  |  Height: 1  |  Size: 68 B

+ 5
- 0
ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md View File

@@ -0,0 +1,5 @@
# Launch Screen Assets

You can customize the launch screen with your own desired assets by replacing the image files in this directory.

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.

+ 37
- 0
ios/Runner/Base.lproj/LaunchScreen.storyboard View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
</imageView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="LaunchImage" width="168" height="185"/>
</resources>
</document>

+ 26
- 0
ios/Runner/Base.lproj/Main.storyboard View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--Flutter View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>

+ 45
- 0
ios/Runner/Info.plist View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>unitstocks</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
</dict>
</plist>

+ 1
- 0
ios/Runner/Runner-Bridging-Header.h View File

@@ -0,0 +1 @@
#import "GeneratedPluginRegistrant.h"

+ 67
- 0
lib/Blocs/Cabang/cabang_bloc.dart View File

@@ -0,0 +1,67 @@
import 'dart:async';
import 'dart:io';

import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
import 'package:unitstocks/Utils/keys.dart';

import '../../main.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart';

part 'cabang_event.dart';
part 'cabang_state.dart';

class CabangBloc extends Bloc<CabangEvent, CabangState> {
CabangBloc() : super(CabangInitial()) {
on<CabangEvent>((event, emit) async {
if(event is CabangInit){
emit(CabangLoading());
List<dynamic> cabangs = event.cabangList??[];
if(cabangs.isEmpty){
var cabangList = await util.JsonDataPostRaw({"company":event.company,"User":event.userId}, '${prefs.getString(Keys.hostAddress)}/user/cabangs/',timeout: true);
if(cabangList['STATUS']==1){
cabangs = cabangList['DATA'];
emit(CabangDisplay(cabangList: cabangs));
}
else {
emit(CabangError(err: "Gagal mengambil akses cabang. Pastikan anda memiliki akses!!"));
}
}
else emit(CabangDisplay(cabangList: cabangs));
}
else if (event is CabangPicked){
String lastCabang = prefs.getString(Keys.cabangId)??'';
if(lastCabang!=event.cabangId){
prefs.setString(Keys.cabangId, event.cabangId);
await Future.sync(()async{
try{
Directory? documentsDirectory = await getApplicationDocumentsDirectory();
String path = join(documentsDirectory.path, "UnitStocking.db");
File db = File(path);
if(db.existsSync()){
db.deleteSync();
}
await prefs.remove(Keys.lastDownload);
await prefs.remove(Keys.lastUpload);
await prefs.remove(Keys.targetProccess);
await prefs.remove(Keys.submitProccess);
emit(CabangFinished(cabangChanged: lastCabang!=event.cabangId));
}
catch(e){
// print(e);
prefs.setString(Keys.cabangId, lastCabang);
emit(const CabangFinished(cabangChanged: false));
}
});
}
else {
emit(const CabangFinished(cabangChanged: false));
}
}
else if (event is CabangCanceled){
emit(CabangInitial());
}
});
}
}

+ 18
- 0
lib/Blocs/Cabang/cabang_event.dart View File

@@ -0,0 +1,18 @@
part of 'cabang_bloc.dart';

@immutable
abstract class CabangEvent {
const CabangEvent();
@override
List<Object> get props => [];
}
class CabangInit extends CabangEvent{
const CabangInit({this.cabangList,this.company,this.userId});
final List<dynamic>? cabangList;
final String? company,userId;
}
class CabangPicked extends CabangEvent{
const CabangPicked({required this.cabangId});
final String cabangId;
}
class CabangCanceled extends CabangEvent{}

+ 24
- 0
lib/Blocs/Cabang/cabang_state.dart View File

@@ -0,0 +1,24 @@
part of 'cabang_bloc.dart';

@immutable
abstract class CabangState {
const CabangState();
@override
List<Object> get props => [];
}

class CabangInitial extends CabangState {
}
class CabangLoading extends CabangState{}
class CabangDisplay extends CabangState{
const CabangDisplay({required this.cabangList});
final List<dynamic> cabangList;
}
class CabangFinished extends CabangState{
const CabangFinished({required this.cabangChanged});
final bool cabangChanged;
}
class CabangError extends CabangState{
const CabangError({required this.err});
final String err;
}

+ 57
- 0
lib/Blocs/Login/login_bloc.dart View File

@@ -0,0 +1,57 @@
import 'dart:async';
import 'package:flutter/material.dart';

import '../../main.dart';
import '../../Utils/keys.dart';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';

part 'login_event.dart';
part 'login_state.dart';


class LoginBloc extends Bloc<LoginEvent, LoginState> {
LoginBloc() : super(LoginInit()) {
on<LoginEvent>((event, emit) async {
if(event is LoginInitiated){
emit(LoginLoading());
var result = await util.JsonDataPostRaw({"User":event.email,"Pass":event.password}, '${prefs.getString(Keys.hostAddress)}/user//login/');
Map<String,dynamic> obj = {};
obj["SUCCESS"] = (result["STATUS"]==1&&result["DATA"]['status'] =='OK');
if(result["STATUS"]==1&&obj["SUCCESS"]){
prefs.setString(Keys.loginId, result['DATA'][Keys.loginId.toLowerCase()]);
prefs.setString(Keys.company, result['DATA'][Keys.company.toLowerCase()]);
obj[Keys.company] = result["DATA"][Keys.company.toLowerCase()];
obj[Keys.loginId] = result["DATA"][Keys.loginId.toLowerCase()];
}
else{
obj["MESSAGE"] = (result["DATA"] is String)?result["DATA"]:result["DATA"]['info'];
}
emit(LoginFinish(data: obj));
}
else if(event is LoginError){
prefs.setBool(Keys.loggedIn, false);
prefs.remove(Keys.cabangId);
prefs.remove(Keys.company);
prefs.remove(Keys.loginId);
if(event.err != ''){
util.showFlushbar(event.context, event.err);
}
emit(LoginInit());
}
else if (event is LoginSuccess){
prefs.setBool(Keys.loggedIn, true);
var cabangList = await util.JsonDataPostRaw({"company":event.company,"User":event.userId}, '${prefs.getString(Keys.hostAddress)}/user/cabangs/');
if(cabangList['STATUS']==1){
emit(LoginFinalize(cabangList: cabangList['DATA']));
}
else{
Map<String,dynamic> obj = {};
obj["SUCCESS"] = false;
obj["MESSAGE"] = cabangList['DATA'];
emit(LoginFinish(data: obj));
}
}
});
}
}

+ 46
- 0
lib/Blocs/Login/login_event.dart View File

@@ -0,0 +1,46 @@
part of 'login_bloc.dart';

abstract class LoginEvent extends Equatable {
const LoginEvent();
@override
List<Object> get props => [];
}

class LoginInitiated extends LoginEvent {
const LoginInitiated({required this.email,required this.password});

final String email;
final String password;

@override
List<Object> get props => [email,password];
}

// class LoginDone extends LoginEvent{
// const LoginDone({required this.data});
// final Map<String,dynamic> data;
// @override
// List<Object> get props => [data];
// }
// class LoginSuccess extends LoginState{
// const LoginSuccess({required this.data});
// final Map<String,dynamic> data;
// }
// class LoginError extends LoginState{
// const LoginError({required this.err});
// final String err;
// }

class LoginSuccess extends LoginEvent{
const LoginSuccess({required this.userId,required this.company});
final String userId,company;
}
class LoginError extends LoginEvent{
const LoginError({required this.context,required this.err});
final BuildContext context;
final String err;
@override
List<Object> get props => [context,err];
}



+ 24
- 0
lib/Blocs/Login/login_state.dart View File

@@ -0,0 +1,24 @@
part of 'login_bloc.dart';

abstract class LoginState extends Equatable {
// final String email;
// final String password;
// final String err;
// final Map<String,dynamic> data;

const LoginState();
@override
List<Object> get props => [];
}

class LoginInit extends LoginState {}
class LoginLoading extends LoginState {}
class LoginFinish extends LoginState{
const LoginFinish({required this.data});
final Map<String,dynamic> data;
}
class LoginFinalize extends LoginState{
const LoginFinalize({required this.cabangList});
final List<dynamic> cabangList;
}


+ 27
- 0
lib/Blocs/Logout/logout_bloc.dart View File

@@ -0,0 +1,27 @@
import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:flutter/cupertino.dart';
import 'package:meta/meta.dart';
import 'package:unitstocks/Utils/keys.dart';

import '../../main.dart';

part 'logout_event.dart';
part 'logout_state.dart';

class LogoutBloc extends Bloc<LogoutEvent, LogoutState> {
LogoutBloc() : super(LogoutInitial()) {
on<LogoutEvent>((event, emit) {
if(event is LogoutInitiate){
emit(LogoutLoading());
// prefs.remove(Keys.cabangId);
prefs.remove(Keys.company);
prefs.remove(Keys.loginId);
prefs.setBool(Keys.loggedIn, false);
emit(LogoutFinish());
Navigator.pushReplacementNamed(event.context, '/login');
}
});
}
}

+ 17
- 0
lib/Blocs/Logout/logout_event.dart View File

@@ -0,0 +1,17 @@
part of 'logout_bloc.dart';

@immutable
abstract class LogoutEvent {
const LogoutEvent();

@override
List<Object> get props => [];
}
class LogoutInitiate extends LogoutEvent{
const LogoutInitiate({required this.context});
final BuildContext context;
}
// class LogoutInit extends LogoutEvent{}
// class LogoutLoading extends LogoutEvent{}
// class LogoutFinish extends LogoutEvent{}


+ 13
- 0
lib/Blocs/Logout/logout_state.dart View File

@@ -0,0 +1,13 @@
part of 'logout_bloc.dart';

@immutable
abstract class LogoutState {
const LogoutState();
@override
List<Object> get props => [];
}

class LogoutInitial extends LogoutState {}
class LogoutLoading extends LogoutState {}
class LogoutFinish extends LogoutState {}


+ 22
- 0
lib/Blocs/Stock_Taking/Backup/backup_bloc.dart View File

@@ -0,0 +1,22 @@
import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/cupertino.dart';
import 'package:meta/meta.dart';
import '../../../Utils/db_helper.dart';

part 'backup_event.dart';
part 'backup_state.dart';

class BackupBloc extends Bloc<BackupEvent, BackupState> {
BackupBloc() : super(BackupInitial()) {
on<BackupEvent>((event, emit)async {
if (event is BackupInit){
emit(BackupLoading());
var result = await DBHelper.database.backupDb(context:event.context);
emit(BackupFinish(success: result["STATUS"]==1,msg: result['MSG']));
}
});
}
}

+ 13
- 0
lib/Blocs/Stock_Taking/Backup/backup_event.dart View File

@@ -0,0 +1,13 @@
part of 'backup_bloc.dart';

abstract class BackupEvent extends Equatable {
const BackupEvent();
@override
List<Object> get props => [];
}
class BackupInit extends BackupEvent{
const BackupInit({required this.context});
final BuildContext context;
}



+ 17
- 0
lib/Blocs/Stock_Taking/Backup/backup_state.dart View File

@@ -0,0 +1,17 @@
part of 'backup_bloc.dart';

abstract class BackupState extends Equatable {
const BackupState();
@override
List<Object> get props => [];
}

class BackupInitial extends BackupState {}

class BackupLoading extends BackupState {}

class BackupFinish extends BackupState{
const BackupFinish({this.success=false,required this.msg});
final bool success;
final String msg;
}

+ 39
- 0
lib/Blocs/Stock_Taking/Clear/clear_data_bloc.dart View File

@@ -0,0 +1,39 @@
import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'dart:io';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart';
import 'package:unitstocks/main.dart';
import '../../../Utils/keys.dart';

part 'clear_data_event.dart';
part 'clear_data_state.dart';

class ClearDataBloc extends Bloc<ClearDataEvent, ClearDataState> {
ClearDataBloc() : super(ClearDataInitial()) {
on<ClearDataEvent>((event, emit) async{
if(event is ClearDataInit){
emit(ClearDataLoading());
try{
Directory? documentsDirectory = await getExternalStorageDirectory();
String path = join(documentsDirectory!.path, "UnitStocking.db");
File db = File(path);
if(db.existsSync()){
db.deleteSync();
}
await prefs.remove(Keys.lastDownload);
await prefs.remove(Keys.lastUpload);
await prefs.remove(Keys.targetProccess);
await prefs.remove(Keys.submitProccess);
await prefs.remove(Keys.stockId);
emit(ClearDataFinish(msg: 'Data Cleared'));
}
catch(e){
emit(ClearDataFinish(cleared: false, msg: 'Failed to delete database file'));
}
}
});
}
}

+ 13
- 0
lib/Blocs/Stock_Taking/Clear/clear_data_event.dart View File

@@ -0,0 +1,13 @@
part of 'clear_data_bloc.dart';

abstract class ClearDataEvent extends Equatable {
const ClearDataEvent();
@override
List<Object> get props => [];
}


class ClearDataInit extends ClearDataEvent{

}


+ 17
- 0
lib/Blocs/Stock_Taking/Clear/clear_data_state.dart View File

@@ -0,0 +1,17 @@
part of 'clear_data_bloc.dart';

abstract class ClearDataState extends Equatable {
const ClearDataState();
@override
List<Object> get props => [];
}

class ClearDataInitial extends ClearDataState {}

class ClearDataLoading extends ClearDataState {}

class ClearDataFinish extends ClearDataState {
const ClearDataFinish({this.cleared=true,required this.msg});
final bool cleared;
final String msg;
}

+ 31
- 0
lib/Blocs/Stock_Taking/Process/process_units_bloc.dart View File

@@ -0,0 +1,31 @@
import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../Utils/keys.dart';
import '../../../main.dart';

part 'process_units_event.dart';
part 'process_units_state.dart';

class ProcessUnitsBloc extends Bloc<ProcessUnitsEvent, ProcessUnitsState> {
ProcessUnitsBloc() : super(ProcessUnitsInitial()) {
on<ProcessUnitsEvent>((event, emit)async {
if(event is ProcessUnit){
emit(ProcessLoading());
var unpack = await util.JsonDataPutRaw({
"userId": prefs.getString(Keys.loginId),
"cabangId": prefs.getString(Keys.cabangId),
"company": prefs.getString(Keys.company),
"dbPath":
prefs.getString(Keys.targetProccess)
}, '${prefs.getString(Keys.hostAddress)}/stock_taking/add_collection/');
emit(ProcessFinish(success: unpack['STATUS'] == 1,msg:unpack['DATA'] ));
if (unpack['STATUS'] == 1) {
prefs.remove(Keys.targetProccess);
prefs.setBool(Keys.submitProccess, true);
}
}
});
}
}

+ 9
- 0
lib/Blocs/Stock_Taking/Process/process_units_event.dart View File

@@ -0,0 +1,9 @@
part of 'process_units_bloc.dart';

abstract class ProcessUnitsEvent extends Equatable {
const ProcessUnitsEvent();
@override
List<Object> get props => [];
}

class ProcessUnit extends ProcessUnitsEvent{}

+ 17
- 0
lib/Blocs/Stock_Taking/Process/process_units_state.dart View File

@@ -0,0 +1,17 @@
part of 'process_units_bloc.dart';

abstract class ProcessUnitsState extends Equatable {
const ProcessUnitsState();
@override
List<Object> get props => [];
}

class ProcessUnitsInitial extends ProcessUnitsState {}

class ProcessLoading extends ProcessUnitsState {}

class ProcessFinish extends ProcessUnitsState{
const ProcessFinish({required this.msg, this.success=true});
final bool success;
final String msg;
}

+ 52
- 0
lib/Blocs/Stock_Taking/Restore/restore_bloc.dart View File

@@ -0,0 +1,52 @@
import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/cupertino.dart';
import 'package:meta/meta.dart';
import 'package:unitstocks/Model/unit.dart';
import 'package:unitstocks/Utils/db_helper.dart';
import '../../../main.dart';
import '../../../Utils/keys.dart';
import '../../../Model/unit.dart';
import 'package:intl/intl.dart';

part 'restore_event.dart';
part 'restore_state.dart';

class RestoreBloc extends Bloc<RestoreEvent, RestoreState> {
RestoreBloc() : super(RestoreInitial()) {
on<RestoreEvent>((event, emit) async {
if(event is RestoreInit){
if(defaultTargetPlatform == TargetPlatform.android){
emit(RestoreLoading());
var result = await DBHelper.database.restoreDb(event.context);
if(result["STATUS"]==1){
await prefs.remove(Keys.lastDownload);
await prefs.remove(Keys.lastUpload);
await prefs.remove(Keys.targetProccess);
await prefs.remove(Keys.submitProccess);
var value = await DBHelper.database.getValue(Keys.startDate);
if(value != null) await prefs.setString(Keys.lastDownload, DateFormat('dd-MM-yyyy HH:mm:ss').parse(value.value).toIso8601String());
else {
await prefs.setString(Keys.lastDownload, DateTime.now().toIso8601String());
}
value = await DBHelper.database.getValue(Keys.stockId);
if(value != null) await prefs.setString(Keys.stockId,value.value);
else {
await prefs.setString(Keys.stockId,prefs.getString(Keys.backupStockId));
}
emit(RestoreFinish(msg: result["MSG"]));
}
else{
emit(RestoreFinish(success:false,msg: result["MSG"]));
}
}
else {
emit(RestoreFinish(success:false,msg: "OS ini tidak mendukung fitur backup"));
}
}
});
}
}

+ 12
- 0
lib/Blocs/Stock_Taking/Restore/restore_event.dart View File

@@ -0,0 +1,12 @@
part of 'restore_bloc.dart';

abstract class RestoreEvent extends Equatable {
const RestoreEvent();
@override
List<Object> get props => [];
}

class RestoreInit extends RestoreEvent{
const RestoreInit({required this.context});
final BuildContext context;
}

+ 15
- 0
lib/Blocs/Stock_Taking/Restore/restore_state.dart View File

@@ -0,0 +1,15 @@
part of 'restore_bloc.dart';

abstract class RestoreState extends Equatable {
const RestoreState();
@override
List<Object> get props => [];
}

class RestoreInitial extends RestoreState {}
class RestoreLoading extends RestoreState{}
class RestoreFinish extends RestoreState{
const RestoreFinish({this.success=true,required this.msg});
final bool success;
final String msg;
}

+ 59
- 0
lib/Blocs/Stock_Taking/Send/upload_bloc.dart View File

@@ -0,0 +1,59 @@
import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../Utils/db_helper.dart';
import '../../../Model/unit.dart';
import '../../../Utils/download_upload_handler.dart';
import '../../../Utils/keys.dart';
import '../../../main.dart';
import 'package:intl/intl.dart';
import 'package:flutter/cupertino.dart';



part 'upload_event.dart';
part 'upload_state.dart';

class UploadBloc extends Bloc<UploadEvent, UploadState> {
UploadBloc() : super(UploadInitial()) {
on<UploadEvent>((event, emit) async{
if(event is Upload){
emit(UploadLoading());
if(await prefs.getString(Keys.lastDownload)!=null){
var unitsInserted = await DBHelper.database.getAllUnits(inserted: true);
if(unitsInserted.isNotEmpty){
await DBHelper.database.insertUpdateValue(Value(name: 'TGL_SELESAI',value: DateFormat('dd-MM-yyyy HH:mm:ss').format(new DateTime.now())));
await DBHelper.database.closeDb();
file_Trans_Handler trans = new file_Trans_Handler();
bool popped = false;
// util.showLoading(event.context,onwillpop:()async{
// await trans.cancel();
// popped = true;
// return true;
// },dissmissable: true);
util.showLoading(event.context);
var upload = await trans.uploadFile('UnitStocking.db',"${prefs.getString(Keys.hostAddress)}/stock_taking/upload/",prefs.getString(Keys.company),prefs.getString(Keys.cabangId));
if(!popped){
Navigator.pop(event.context);
if(upload['STATUS']==1){
prefs.setString(Keys.lastUpload, DateTime.now().toIso8601String());
prefs.setString(Keys.targetProccess, upload[Keys.targetProccess]);
emit(const UploadFinish(msg: "Upload selesai!"));
}
else{
emit(UploadFinish(success: false,msg: upload['DATA']));
}
}
}
else{
emit(UploadFinish(success: false,msg: "Belum ada data yang disimpan"));
}
}
else{
emit(UploadFinish(success: false,msg: "Data unit tidak ditemukan. Tarik data terlebih dahulu!"));
}
}
});
}
}

+ 11
- 0
lib/Blocs/Stock_Taking/Send/upload_event.dart View File

@@ -0,0 +1,11 @@
part of 'upload_bloc.dart';

abstract class UploadEvent extends Equatable {
const UploadEvent();
@override
List<Object> get props => [];
}
class Upload extends UploadEvent{
const Upload({required this.context});
final BuildContext context;
}

+ 17
- 0
lib/Blocs/Stock_Taking/Send/upload_state.dart View File

@@ -0,0 +1,17 @@
part of 'upload_bloc.dart';

abstract class UploadState extends Equatable {
const UploadState();
@override
List<Object> get props => [];
}

class UploadInitial extends UploadState {}

class UploadFinish extends UploadState{
const UploadFinish({this.success=true,required this.msg});
final String msg;
final bool success;
}
class UploadLoading extends UploadState{}


+ 42
- 0
lib/Blocs/Stock_Taking/State/load_state_bloc.dart View File

@@ -0,0 +1,42 @@
import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../Utils/keys.dart';
import 'package:unitstocks/main.dart';
import '../../../Utils/db_helper.dart';
import '../../../Model/unit.dart';
part 'load_state_event.dart';
part 'load_state_state.dart';

class LoadStateBloc extends Bloc<LoadStateEvent, LoadStateState> {
LoadStateBloc() : super(LoadStateInitial()) {
on<LoadStateEvent>( (event, emit)async {
if(event is LoadState){
emit(StateLoading());
if(prefs.getString(Keys.lastDownload)== null){
emit(LoadFailed(err: "Tarik data terlebih dahulu!"));
}
else{
String company = prefs.getString(Keys.company);
if(prefs.getString(Keys.stockId) == null)
{
var value = await DBHelper.database.getValue(Keys.stockId);
if(value != null)await prefs.setString(Keys.stockId, value.value);
}
String stock_taking_id = prefs.getString(Keys.stockId);
if(prefs.getString(Keys.backupStockId) == null) prefs.setString(Keys.backupStockId,stock_taking_id);
if(company!=null&&stock_taking_id!=null){
var result = await util.JsonDataPostRaw({"company":company,"stockTakingId":stock_taking_id}, '${prefs.getString(Keys.hostAddress)}/stock_taking/state/');
if(result['STATUS']==1){
emit(LoadSuccess(state: result['DATA']));
}
}
else{
emit(LoadFailed(err: "Error mengecek state Stoking Unit."));
}
}
}
});
}
}

+ 11
- 0
lib/Blocs/Stock_Taking/State/load_state_event.dart View File

@@ -0,0 +1,11 @@
part of 'load_state_bloc.dart';

abstract class LoadStateEvent extends Equatable {
const LoadStateEvent();
@override
List<Object> get props => [];
}

class LoadState extends LoadStateEvent{
const LoadState();
}

+ 21
- 0
lib/Blocs/Stock_Taking/State/load_state_state.dart View File

@@ -0,0 +1,21 @@
part of 'load_state_bloc.dart';

abstract class LoadStateState extends Equatable {
const LoadStateState();
@override
List<Object> get props => [];
}

class LoadStateInitial extends LoadStateState {

}
class StateLoading extends LoadStateState{}
class LoadFailed extends LoadStateState{
const LoadFailed({required this.err});
final String err;
}
class LoadSuccess extends LoadStateState{
const LoadSuccess({required this.state});
final String state;
}


+ 31
- 0
lib/Blocs/Stock_Taking/Submit/submit_unit_bloc.dart View File

@@ -0,0 +1,31 @@
import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../main.dart';
import '../../../Utils/db_helper.dart';
import '../../../Utils/keys.dart';
import '../../../Model/unit.dart';

part 'submit_unit_event.dart';
part 'submit_unit_state.dart';

class SubmitUnitBloc extends Bloc<SubmitUnitEvent, SubmitUnitState> {
SubmitUnitBloc() : super(SubmitUnitInitial()) {
on<SubmitUnitEvent>((event, emit) async{
if(event is Submit){
emit(SubmitLoading());
if(prefs.getString(Keys.stockId) == null)
{
Value value = await DBHelper.database.getValue(Keys.stockId);
await prefs.setString(Keys.stockId, value.value);
}
var submits = await util.JsonDataPostRaw({"stockTakingId":prefs.getString(Keys.stockId),"company":prefs.getString(Keys.company),"user_id":prefs.getString(Keys.loginId)}, '${prefs.getString(Keys.hostAddress)}/stock_taking/submit/');
emit(SubmitFinish(msg: submits['DATA'],success: submits['STATUS']==1));
if(submits['STATUS']==1){
prefs.remove(Keys.submitProccess);
}
}
});
}
}

+ 9
- 0
lib/Blocs/Stock_Taking/Submit/submit_unit_event.dart View File

@@ -0,0 +1,9 @@
part of 'submit_unit_bloc.dart';

abstract class SubmitUnitEvent extends Equatable {
const SubmitUnitEvent();
@override
List<Object> get props => [];
}

class Submit extends SubmitUnitEvent{}

+ 18
- 0
lib/Blocs/Stock_Taking/Submit/submit_unit_state.dart View File

@@ -0,0 +1,18 @@
part of 'submit_unit_bloc.dart';

abstract class SubmitUnitState extends Equatable {
const SubmitUnitState();
@override
List<Object> get props => [];
}

class SubmitUnitInitial extends SubmitUnitState {}

class SubmitLoading extends SubmitUnitState{}

class SubmitFinish extends SubmitUnitState{
const SubmitFinish({required this.msg,this.success=true});
final bool success;
final String msg;
}


+ 44
- 0
lib/Blocs/Stock_Taking/Unit/get_unit_bloc.dart View File

@@ -0,0 +1,44 @@
import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import '../../../Utils/keys.dart';
import '../../../Model/unit.dart';
import '../../../Utils/db_helper.dart';
import 'package:unitstocks/main.dart';
import 'package:intl/intl.dart';
import '../../../Utils/download_upload_handler.dart';
part 'get_unit_event.dart';
part 'get_unit_state.dart';

class GetUnitBloc extends Bloc<GetUnitEvent, GetUnitState> {
GetUnitBloc() : super(GetUnitInitial()) {
on<GetUnitEvent>((event, emit) async {
if(event is GetUnitInit){
if(prefs.getString(Keys.cabangId) != null && prefs.getString(Keys.company) != null){
emit(GetUnitLoading(percent: 0.0));
file_Trans_Handler trans = new file_Trans_Handler();
trans.downloadFile('UnitStocking.db',"${prefs.getString(Keys.hostAddress)}/stock_taking/get_units/${prefs.getString(Keys.company)}/${prefs.getString(Keys.cabangId)}");
await for (double? value in await trans.progress){
if(value != null){
emit(GetUnitLoading(percent:value));
if(value >= 1.0) {
await prefs.setString(Keys.lastDownload, DateTime.now().toIso8601String());
await DBHelper.database.insertUpdateValue(Value(name: 'TGL_START',value: DateFormat('dd-MM-yyyy HH:mm:ss').format(DateTime.parse(DateTime.now().toIso8601String()))));
await DBHelper.database.insertUpdateValue(Value(name: 'TGL_STOCK_TAKING',value: DateFormat('dd-MM-yyyy').format(DateTime.parse(DateTime.now().toIso8601String()))));
await DBHelper.database.closeDb();
emit(GetUnitFinish(respond: 'Data terdownload'));
}
if(value==-1.0){
emit(GetUnitFinish(respond: 'Data download gagal',success: false));
}
}
}
}
else{
emit(GetUnitFinish(respond: 'Belum ada cabang yang dipilih!',success: false));
}
}
});
}
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save