upload project
|
|
@ -0,0 +1,48 @@
|
|||
# Miscellaneous
|
||||
*.class
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
||||
.atom/
|
||||
.build/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
.swiftpm/
|
||||
migrate_working_dir/
|
||||
|
||||
# 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
|
||||
.pub-cache/
|
||||
.pub/
|
||||
/build/
|
||||
|
||||
# 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
|
||||
|
||||
# appconstant
|
||||
# /lib/configs/api_constant.dart
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
# 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: "17025dd88227cd9532c33fa78f5250d548d87e9a"
|
||||
channel: "stable"
|
||||
|
||||
project_type: app
|
||||
|
||||
# Tracks metadata for the flutter migrate command
|
||||
migration:
|
||||
platforms:
|
||||
- platform: root
|
||||
create_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a
|
||||
base_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a
|
||||
- platform: android
|
||||
create_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a
|
||||
base_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a
|
||||
- platform: ios
|
||||
create_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a
|
||||
base_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a
|
||||
- platform: linux
|
||||
create_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a
|
||||
base_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a
|
||||
- platform: macos
|
||||
create_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a
|
||||
base_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a
|
||||
- platform: web
|
||||
create_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a
|
||||
base_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a
|
||||
- platform: windows
|
||||
create_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a
|
||||
base_revision: 17025dd88227cd9532c33fa78f5250d548d87e9a
|
||||
|
||||
# User provided section
|
||||
|
||||
# List of Local paths (relative to this file) that should be
|
||||
# ignored by the migrate tool.
|
||||
#
|
||||
# Files that are not part of the templates will be ignored by default.
|
||||
unmanaged_files:
|
||||
- 'lib/main.dart'
|
||||
- 'ios/Runner.xcodeproj/project.pbxproj'
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
# absensi_qr
|
||||
|
||||
A new Flutter project.
|
||||
|
||||
## Getting Started
|
||||
|
||||
This project is a starting point for a Flutter application.
|
||||
|
||||
A few resources to get you started if this is your first Flutter project:
|
||||
|
||||
- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
|
||||
- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
|
||||
|
||||
For help getting started with Flutter development, view the
|
||||
[online documentation](https://docs.flutter.dev/), which offers tutorials,
|
||||
samples, guidance on mobile development, and a full API reference.
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# 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.dev/lints.
|
||||
#
|
||||
# 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
|
||||
|
|
@ -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/to/reference-keystore
|
||||
key.properties
|
||||
**/*.keystore
|
||||
**/*.jks
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
plugins {
|
||||
id "com.android.application"
|
||||
// START: FlutterFire Configuration
|
||||
id 'com.google.gms.google-services'
|
||||
// END: FlutterFire Configuration
|
||||
id "kotlin-android"
|
||||
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
|
||||
id "dev.flutter.flutter-gradle-plugin"
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "com.example.absensi_qr"
|
||||
compileSdk = flutter.compileSdkVersion
|
||||
ndkVersion = flutter.ndkVersion
|
||||
|
||||
compileOptions {
|
||||
coreLibraryDesugaringEnabled true
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||
applicationId = "com.example.absensi_qr"
|
||||
// You can update the following values to match your application needs.
|
||||
// For more information, see: https://flutter.dev/to/review-gradle-config.
|
||||
|
||||
minSdkVersion = flutter.minSdkVersion
|
||||
targetSdk = 34
|
||||
|
||||
versionCode = flutter.versionCode
|
||||
versionName = flutter.versionName
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
|
||||
}
|
||||
|
||||
flutter {
|
||||
source = "../.."
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"project_info": {
|
||||
"project_number": "499856666003",
|
||||
"project_id": "smartattendance-a30d2",
|
||||
"storage_bucket": "smartattendance-a30d2.firebasestorage.app"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:499856666003:android:9c5dfa348a8457fd7acc66",
|
||||
"android_client_info": {
|
||||
"package_name": "com.example.absensi_qr"
|
||||
}
|
||||
},
|
||||
"oauth_client": [],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyD3OWO-bmRgtkVQdL8t-k5E_t_b1yg_XCQ"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": []
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- The INTERNET permission is required for development. Specifically,
|
||||
the Flutter tool needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
|
||||
</manifest>
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<!-- permission geolocation -->
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
|
||||
<!-- permission camera -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<!-- internet permission check -->
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
|
||||
<!-- permission internet -->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
||||
<!-- permission storage and media image -->
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
|
||||
|
||||
<!-- permission receive notifications from Firebase -->
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
|
||||
<!-- permission POST_NOTIFICATIONS for Android 13+ -->
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
<application
|
||||
android:label="absensi_qr"
|
||||
android:name="${applicationName}"
|
||||
android:usesCleartextTraffic="true"
|
||||
android:icon="@mipmap/ic_launcher">
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true"
|
||||
android:launchMode="singleTop"
|
||||
android:taskAffinity=""
|
||||
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"
|
||||
/>
|
||||
<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>
|
||||
<!-- Required to query activities that can process text, see:
|
||||
https://developer.android.com/training/package-visibility and
|
||||
https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT.
|
||||
|
||||
In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.intent.action.PROCESS_TEXT"/>
|
||||
<data android:mimeType="text/plain"/>
|
||||
</intent>
|
||||
<package android:name="com.google.android.apps.maps" />
|
||||
</queries>
|
||||
</manifest>
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package com.example.absensi_qr
|
||||
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
|
||||
class MainActivity: FlutterActivity()
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
|
@ -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
|
||||
the Flutter engine 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>
|
||||
|
|
@ -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
|
||||
the Flutter engine 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>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- The INTERNET permission is required for development. Specifically,
|
||||
the Flutter tool 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>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
}
|
||||
|
||||
rootProject.buildDir = "../build"
|
||||
subprojects {
|
||||
project.buildDir = "${rootProject.buildDir}/${project.name}"
|
||||
}
|
||||
subprojects {
|
||||
project.evaluationDependsOn(":app")
|
||||
}
|
||||
|
||||
tasks.register("clean", Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
flutter.compileSdkVersion=34
|
||||
flutter.targetSdkVersion=34
|
||||
flutter.minSdkVersion=23
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
pluginManagement {
|
||||
def flutterSdkPath = {
|
||||
def properties = new Properties()
|
||||
file("local.properties").withInputStream { properties.load(it) }
|
||||
def flutterSdkPath = properties.getProperty("flutter.sdk")
|
||||
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
|
||||
return flutterSdkPath
|
||||
}()
|
||||
|
||||
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
|
||||
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||
id "com.android.application" version "8.9.1" apply false
|
||||
id "org.jetbrains.kotlin.android" version "2.2.0" apply false
|
||||
// START: FlutterFire Configuration
|
||||
id "com.google.gms.google-services" version "4.4.2" apply false
|
||||
// END: FlutterFire Configuration
|
||||
}
|
||||
|
||||
include ":app"
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1551_7275)">
|
||||
<path d="M6.46154 0C5.95292 0 5.53846 0.414462 5.53846 0.923077V3.69231C5.53846 4.20092 5.95292 4.61538 6.46154 4.61538C6.97015 4.61538 7.38461 4.20092 7.38461 3.69231V0.923077C7.38461 0.414462 6.97015 0 6.46154 0ZM17.5385 0C17.0298 0 16.6154 0.414462 16.6154 0.923077V3.69231C16.6154 4.20092 17.0298 4.61538 17.5385 4.61538C18.0471 4.61538 18.4615 4.20092 18.4615 3.69231V0.923077C18.4615 0.414462 18.0471 0 17.5385 0ZM2.76923 1.84615C1.24062 1.84615 0 3.08677 0 4.61538V21.2308C0 22.7594 1.24062 24 2.76923 24H21.2308C22.7594 24 24 22.7594 24 21.2308V4.61538C24 3.08677 22.7594 1.84615 21.2308 1.84615H19.3846V3.69231C19.3846 4.18194 19.1901 4.65151 18.8439 4.99774C18.4977 5.34396 18.0281 5.53846 17.5385 5.53846C17.0488 5.53846 16.5793 5.34396 16.233 4.99774C15.8868 4.65151 15.6923 4.18194 15.6923 3.69231V1.84615H8.30769V3.69231C8.30769 4.18194 8.11319 4.65151 7.76697 4.99774C7.42074 5.34396 6.95117 5.53846 6.46154 5.53846C5.97191 5.53846 5.50233 5.34396 5.15611 4.99774C4.80989 4.65151 4.61538 4.18194 4.61538 3.69231V1.84615H2.76923ZM1.84615 8.30769H22.1538V21.2308C22.1538 21.7394 21.7394 22.1538 21.2308 22.1538H2.76923C2.26062 22.1538 1.84615 21.7394 1.84615 21.2308V8.30769ZM15.6055 10.2978C15.5352 10.3108 15.4682 10.3379 15.4087 10.3776C15.3492 10.4172 15.2984 10.4686 15.2594 10.5286L10.7308 17.2209L8.62523 15.144C8.57419 15.0926 8.51349 15.0519 8.44664 15.0241C8.37979 14.9963 8.3081 14.982 8.23569 14.982C8.16329 14.982 8.09159 14.9963 8.02474 15.0241C7.95789 15.0519 7.8972 15.0926 7.84615 15.144L7.03846 15.9231C6.93319 16.0311 6.87428 16.1761 6.87428 16.3269C6.87428 16.4778 6.93319 16.6227 7.03846 16.7308L10.2406 19.9329C10.4206 20.1111 10.7068 20.2495 10.9615 20.2495C11.2163 20.2495 11.4895 20.0871 11.6538 19.8462L17.1055 11.7978C17.1897 11.6754 17.2219 11.5246 17.1949 11.3785C17.1679 11.2324 17.0839 11.103 16.9615 11.0188L16.0385 10.3846C15.9108 10.3008 15.7556 10.2697 15.6055 10.2978ZM832.615 1356V1357.85H856.615V1356H832.615ZM836.308 1360.62V1362.46H852.923V1360.62H836.308ZM832.615 1365.23V1367.08H856.615V1365.23H832.615ZM836.308 1369.85V1371.69H852.923V1369.85H836.308ZM832.615 1374.46V1376.31H856.615V1374.46H832.615Z" fill="#6B778C"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1551_7275">
|
||||
<rect width="24" height="24" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="55" height="55" viewBox="0 0 55 55" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M26.3543 6.875C32.1283 6.875 37.6658 9.16871 41.7486 13.2515C45.8315 17.3344 48.1252 22.8719 48.1252 28.6458C48.1252 34.4198 45.8315 39.9573 41.7486 44.0401C37.6658 48.123 32.1283 50.4167 26.3543 50.4167C20.5803 50.4167 15.0428 48.123 10.96 44.0401C6.8772 39.9573 4.5835 34.4198 4.5835 28.6458C4.5835 22.8719 6.8772 17.3344 10.96 13.2515C15.0428 9.16871 20.5803 6.875 26.3543 6.875ZM26.3543 9.16667C21.1881 9.16667 16.2335 11.2189 12.5805 14.872C8.92743 18.525 6.87516 23.4796 6.87516 28.6458C6.87516 33.812 8.92743 38.7666 12.5805 42.4197C16.2335 46.0727 21.1881 48.125 26.3543 48.125C28.9124 48.125 31.4454 47.6212 33.8087 46.6422C36.172 45.6633 38.3194 44.2285 40.1282 42.4197C41.937 40.6109 43.3718 38.4635 44.3507 36.1002C45.3297 33.7369 45.8335 31.2039 45.8335 28.6458C45.8335 23.4796 43.7812 18.525 40.1282 14.872C36.4751 11.2189 31.5205 9.16667 26.3543 9.16667ZM25.2085 16.0417H27.5002V28.4625L38.271 34.6729L37.1252 36.6667L25.2085 29.7917V16.0417Z" fill="#DADADA"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
|
|
@ -0,0 +1,4 @@
|
|||
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M24.9999 45.8337C27.7362 45.8371 30.4463 45.2997 32.9743 44.2525C35.5024 43.2053 37.7986 41.6689 39.7311 39.7316C41.6684 37.7991 43.2048 35.5029 44.252 32.9748C45.2992 30.4468 45.8366 27.7367 45.8332 25.0003C45.8366 22.264 45.2992 19.5539 44.252 17.0259C43.2048 14.4978 41.6684 12.2016 39.7311 10.2691C37.7986 8.33176 35.5024 6.79536 32.9743 5.74817C30.4463 4.70098 27.7362 4.16363 24.9999 4.16701C22.2635 4.16363 19.5534 4.70098 17.0254 5.74817C14.4973 6.79536 12.2011 8.33176 10.2686 10.2691C8.33127 12.2016 6.79487 14.4978 5.74768 17.0259C4.70049 19.5539 4.16315 22.264 4.16652 25.0003C4.16315 27.7367 4.70049 30.4468 5.74768 32.9748C6.79487 35.5029 8.33127 37.7991 10.2686 39.7316C12.2011 41.6689 14.4973 43.2053 17.0254 44.2525C19.5534 45.2997 22.2635 45.8371 24.9999 45.8337Z" stroke="#36B37E" stroke-width="2" stroke-linejoin="round"/>
|
||||
<path d="M16.6665 25L22.9165 31.25L35.4165 18.75" stroke="#36B37E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
|
@ -0,0 +1,18 @@
|
|||
<svg width="129" height="140" viewBox="0 0 129 140" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g filter="url(#filter0_d_2910_6190)">
|
||||
<path d="M54.3043 110.936L64.8043 130.436L92.8047 65.9336C93.3232 61.8736 93.8671 58.3543 93.3043 55.4336C91.474 45.9336 88.305 40.9336 80.3047 35.4359C69.3047 29.9336 61.3401 28.9113 48.8043 35.4359C40.3596 41.3214 37.1898 45.8675 35.8043 57.4359V100.436C29.701 95.1614 26.3197 91.9921 20.8043 83.4359C16.0216 75.7488 15.2018 71.3382 14.8043 63.4359H21.8043C24.3322 60.8123 23.9337 59.2501 21.8043 56.4359H14.8043C16.2249 44.2704 18.0354 37.5619 27.8043 26.4359C38.7001 14.9215 46.1141 11.9429 60.8043 10.4359V18.4359C63.6932 20.5554 65.1935 20.5273 67.8043 18.4359V10.4359C80.9592 11.6722 88.2436 14.0731 100.804 26.4359C109.374 36.8699 111.953 43.5473 113.804 56.4359H105.804C103.681 58.9639 103.374 60.4805 105.804 63.4359H113.804C112.822 72.4095 111.464 76.8823 107.304 83.4359C99.7323 96.156 93.4722 100.924 79.8043 106.436L74.8043 117.436C89.6625 113.333 97.4073 110.347 107.304 100.436C114.853 91.7697 120.048 85.0908 123.304 64.4358C123.567 60.7329 123.602 58.57 123.304 54.4359C120.566 38.5511 117.572 30.8669 108.304 20.4359C98.2797 10.7175 91.8364 6.0336 75.8043 1.93586C66.5813 -0.0315254 61.3127 0.0750262 51.8043 1.93586C38.7221 5.35737 31.6129 8.79191 19.8043 20.4359C10.9904 30.7184 7.46437 37.9431 4.80432 54.4359C4.38291 58.2638 4.41452 60.467 4.80432 64.4358C7.22631 80.0693 10.0511 88.2193 20.8043 100.436C31.2418 109.618 37.4516 112.935 48.8043 117.436L48.3043 57.4359C49.0433 53.1118 52.5388 48.5376 53.8043 47.4359C55.0698 46.3342 66.1004 40.2076 73.8043 47.4359C81.5083 54.6641 82.8418 64.8543 73.8043 72.4359C66.3871 77.0542 62.2398 76.6938 53.8043 72.4359L54.3043 110.936Z" fill="#0087C1"/>
|
||||
<path d="M54.3043 110.936L64.8043 130.436L92.8047 65.9336C93.3232 61.8736 93.8671 58.3543 93.3043 55.4336C91.474 45.9336 88.305 40.9336 80.3047 35.4359C69.3047 29.9336 61.3401 28.9113 48.8043 35.4359C40.3596 41.3214 37.1898 45.8675 35.8043 57.4359V100.436C29.701 95.1614 26.3197 91.9921 20.8043 83.4359C16.0216 75.7488 15.2018 71.3382 14.8043 63.4359H21.8043C24.3322 60.8123 23.9337 59.2501 21.8043 56.4359H14.8043C16.2249 44.2704 18.0354 37.5619 27.8043 26.4359C38.7001 14.9215 46.1141 11.9429 60.8043 10.4359V18.4359C63.6932 20.5554 65.1935 20.5273 67.8043 18.4359V10.4359C80.9592 11.6722 88.2436 14.0731 100.804 26.4359C109.374 36.8699 111.953 43.5473 113.804 56.4359H105.804C103.681 58.9639 103.374 60.4805 105.804 63.4359H113.804C112.822 72.4095 111.464 76.8823 107.304 83.4359C99.7323 96.156 93.4722 100.924 79.8043 106.436L74.8043 117.436C89.6625 113.333 97.4073 110.347 107.304 100.436C114.853 91.7697 120.048 85.0908 123.304 64.4358C123.567 60.7329 123.602 58.57 123.304 54.4359C120.566 38.5511 117.572 30.8669 108.304 20.4359C98.2797 10.7175 91.8364 6.0336 75.8043 1.93586C66.5813 -0.0315254 61.3127 0.0750262 51.8043 1.93586C38.7221 5.35737 31.6129 8.79191 19.8043 20.4359C10.9904 30.7184 7.46437 37.9431 4.80432 54.4359C4.38291 58.2638 4.41452 60.467 4.80432 64.4358C7.22631 80.0693 10.0511 88.2193 20.8043 100.436C31.2418 109.618 37.4516 112.935 48.8043 117.436L48.3043 57.4359C49.0433 53.1118 52.5388 48.5376 53.8043 47.4359C55.0698 46.3342 66.1004 40.2076 73.8043 47.4359C81.5083 54.6641 82.8418 64.8543 73.8043 72.4359C66.3871 77.0542 62.2398 76.6938 53.8043 72.4359L54.3043 110.936Z" stroke="#0087C1"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_d_2910_6190" x="0" y="0" width="128.015" height="139.58" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="4"/>
|
||||
<feGaussianBlur stdDeviation="2"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_2910_6190"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_2910_6190" result="shape"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
|
@ -0,0 +1,18 @@
|
|||
<svg width="109" height="119" viewBox="0 0 109 119" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g filter="url(#filter0_d_2116_12123)">
|
||||
<path d="M46.3472 93.1419L55.1696 109.5L78.6964 55.3906C79.132 51.9848 79.589 49.0325 79.1162 46.5824C77.5783 38.6131 74.9156 34.4188 68.1935 29.8068C58.9509 25.1911 52.2588 24.3335 41.7259 29.8068C34.6304 34.7441 31.967 38.5577 30.8029 48.2621V84.3337C25.6747 79.9091 22.8336 77.2505 18.1994 70.0729C14.1808 63.6244 13.492 59.9245 13.158 53.2953H19.0396C21.1637 51.0945 20.8288 49.784 19.0396 47.4232H13.158C14.3516 37.2179 15.8729 31.5903 24.081 22.257C33.236 12.5979 39.4655 10.0991 51.8087 8.83495V15.546C54.236 17.324 55.4966 17.3004 57.6903 15.546V8.83495C68.7435 9.87206 74.864 11.8861 85.4179 22.257C92.6183 31.0098 94.7854 36.6113 96.3409 47.4232H89.6191C87.8347 49.5439 87.5773 50.8161 89.6191 53.2953H96.3409C95.5155 60.8231 94.3746 64.5752 90.8794 70.0729C84.5171 80.7434 79.2572 84.7434 67.7731 89.367L63.5719 98.5946C76.0562 95.1526 82.5637 92.6481 90.8794 84.3337C97.2221 77.0639 101.587 71.4611 104.323 54.1342C104.544 51.0279 104.573 49.2135 104.323 45.7455C102.022 32.4202 99.5063 25.9741 91.7197 17.2237C83.2967 9.07118 77.8828 5.14201 64.4121 1.70451C56.6627 0.0541164 52.2358 0.1435 44.2466 1.70451C33.2545 4.57473 27.2811 7.45588 17.3592 17.2237C9.95341 25.8495 6.99076 31.9101 4.7557 45.7455C4.40161 48.9567 4.42818 50.8049 4.7557 54.1342C6.79074 67.2487 9.16419 74.0855 18.1994 84.3337C26.9693 92.0361 32.187 94.819 41.7259 98.5946L41.3058 48.2621C41.9267 44.6347 44.8637 40.7975 45.927 39.8733C46.9904 38.9492 56.2586 33.8098 62.7317 39.8733C69.2048 45.9369 70.3253 54.4852 62.7317 60.8452C56.4995 64.7194 53.0148 64.4171 45.927 60.8452L46.3472 93.1419Z" fill="white"/>
|
||||
<path d="M46.3472 93.1419L55.1696 109.5L78.6964 55.3906C79.132 51.9848 79.589 49.0325 79.1162 46.5824C77.5783 38.6131 74.9156 34.4188 68.1935 29.8068C58.9509 25.1911 52.2588 24.3335 41.7259 29.8068C34.6304 34.7441 31.967 38.5577 30.8029 48.2621V84.3337C25.6747 79.9091 22.8336 77.2505 18.1994 70.0729C14.1808 63.6244 13.492 59.9245 13.158 53.2953H19.0396C21.1637 51.0945 20.8288 49.784 19.0396 47.4232H13.158C14.3516 37.2179 15.8729 31.5903 24.081 22.257C33.236 12.5979 39.4655 10.0991 51.8087 8.83495V15.546C54.236 17.324 55.4966 17.3004 57.6903 15.546V8.83495C68.7435 9.87206 74.864 11.8861 85.4179 22.257C92.6183 31.0098 94.7854 36.6113 96.3409 47.4232H89.6191C87.8347 49.5439 87.5773 50.8161 89.6191 53.2953H96.3409C95.5155 60.8231 94.3746 64.5752 90.8794 70.0729C84.5171 80.7434 79.2572 84.7434 67.7731 89.367L63.5719 98.5946C76.0562 95.1526 82.5637 92.6481 90.8794 84.3337C97.2221 77.0639 101.587 71.4611 104.323 54.1342C104.544 51.0279 104.573 49.2135 104.323 45.7455C102.022 32.4202 99.5063 25.9741 91.7197 17.2237C83.2967 9.07118 77.8828 5.14201 64.4121 1.70451C56.6627 0.0541164 52.2358 0.1435 44.2466 1.70451C33.2545 4.57473 27.2811 7.45588 17.3592 17.2237C9.95341 25.8495 6.99076 31.9101 4.7557 45.7455C4.40161 48.9567 4.42818 50.8049 4.7557 54.1342C6.79074 67.2487 9.16419 74.0855 18.1994 84.3337C26.9693 92.0361 32.187 94.819 41.7259 98.5946L41.3058 48.2621C41.9267 44.6347 44.8637 40.7975 45.927 39.8733C46.9904 38.9492 56.2586 33.8098 62.7317 39.8733C69.2048 45.9369 70.3253 54.4852 62.7317 60.8452C56.4995 64.7194 53.0148 64.4171 45.927 60.8452L46.3472 93.1419Z" stroke="#DADADA"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_d_2116_12123" x="0" y="0" width="109" height="118.643" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="4"/>
|
||||
<feGaussianBlur stdDeviation="2"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_2116_12123"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_2116_12123" result="shape"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 493 KiB |
|
|
@ -0,0 +1,5 @@
|
|||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2.66663 12.6667V3.33333C2.66663 2.97971 2.8071 2.64057 3.05715 2.39052C3.3072 2.14048 3.64634 2 3.99996 2H12.9333C13.0394 2 13.1411 2.04214 13.2161 2.11716C13.2912 2.19217 13.3333 2.29391 13.3333 2.4V11.1427M3.99996 11.3333H13.3333M3.99996 14H13.3333" stroke="#6B778C" stroke-width="1.5" stroke-linecap="round"/>
|
||||
<path d="M3.99996 13.9997C3.64634 13.9997 3.3072 13.8592 3.05715 13.6092C2.8071 13.3591 2.66663 13.02 2.66663 12.6663C2.66663 12.3127 2.8071 11.9736 3.05715 11.7235C3.3072 11.4735 3.64634 11.333 3.99996 11.333" stroke="#6B778C" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M6 4.66699H10" stroke="#6B778C" stroke-width="1.5" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 807 B |
|
|
@ -0,0 +1,5 @@
|
|||
<svg width="26" height="26" viewBox="0 0 26 26" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M4.3335 20.5833V5.41667C4.3335 4.84203 4.56177 4.29093 4.9681 3.8846C5.37443 3.47827 5.92553 3.25 6.50016 3.25H21.0168C21.1892 3.25 21.3546 3.31848 21.4764 3.44038C21.5983 3.56228 21.6668 3.72761 21.6668 3.9V18.1068M6.50016 18.4167H21.6668M6.50016 22.75H21.6668" stroke="#6B778C" stroke-width="1.5" stroke-linecap="round"/>
|
||||
<path d="M6.50016 22.7503C5.92553 22.7503 5.37443 22.5221 4.9681 22.1157C4.56177 21.7094 4.3335 21.1583 4.3335 20.5837C4.3335 20.009 4.56177 19.4579 4.9681 19.0516C5.37443 18.6453 5.92553 18.417 6.50016 18.417" stroke="#6B778C" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M9.75 7.58301H16.25" stroke="#6B778C" stroke-width="1.5" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 823 B |
|
|
@ -0,0 +1,10 @@
|
|||
<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_683_3132)">
|
||||
<path d="M5.9375 4.0625V5.9375H4.0625V4.0625H5.9375ZM6.875 3.125H3.125V6.875H6.875V3.125ZM5.9375 9.0625V10.9375H4.0625V9.0625H5.9375ZM6.875 8.125H3.125V11.875H6.875V8.125ZM10.9375 4.0625V5.9375H9.0625V4.0625H10.9375ZM11.875 3.125H8.125V6.875H11.875V3.125ZM8.125 8.125H9.0625V9.0625H8.125V8.125ZM9.0625 9.0625H10V10H9.0625V9.0625ZM10 8.125H10.9375V9.0625H10V8.125ZM8.125 10H9.0625V10.9375H8.125V10ZM9.0625 10.9375H10V11.875H9.0625V10.9375ZM10 10H10.9375V10.9375H10V10ZM10.9375 9.0625H11.875V10H10.9375V9.0625ZM10.9375 10.9375H11.875V11.875H10.9375V10.9375ZM13.75 4.375H12.5V2.5H10.625V1.25H13.75V4.375ZM13.75 13.75V10.625H12.5V12.5H10.625V13.75H13.75ZM1.25 13.75H4.375V12.5H2.5V10.625H1.25V13.75ZM1.25 1.25V4.375H2.5V2.5H4.375V1.25H1.25Z" fill="#0087C1"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_683_3132">
|
||||
<rect width="15" height="15" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1002 B |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 696 KiB |
|
|
@ -0,0 +1,3 @@
|
|||
description: This file stores settings for Dart & Flutter DevTools.
|
||||
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
|
||||
extensions:
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"flutter":{"platforms":{"android":{"default":{"projectId":"smartattendance-a30d2","appId":"1:499856666003:android:9c5dfa348a8457fd7acc66","fileOutput":"android/app/google-services.json"}},"dart":{"lib/firebase_options.dart":{"projectId":"smartattendance-a30d2","configurations":{"android":"1:499856666003:android:9c5dfa348a8457fd7acc66","ios":"1:499856666003:ios:e472d136fb4321e27acc66"}}}}}}
|
||||
|
|
@ -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
|
||||
|
|
@ -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>12.0</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -0,0 +1 @@
|
|||
#include "Generated.xcconfig"
|
||||
|
|
@ -0,0 +1 @@
|
|||
#include "Generated.xcconfig"
|
||||
|
|
@ -0,0 +1,616 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 54;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
||||
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
|
||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
||||
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 PBXContainerItemProxy section */
|
||||
331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 97C146E61CF9000F007C117D /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 97C146ED1CF9000F007C117D;
|
||||
remoteInfo = Runner;
|
||||
};
|
||||
/* End PBXContainerItemProxy 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 */
|
||||
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>"; };
|
||||
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
|
||||
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; 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>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
97C146EB1CF9000F007C117D /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
331C8082294A63A400263BE5 /* RunnerTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
331C807B294A618700263BE5 /* RunnerTests.swift */,
|
||||
);
|
||||
path = RunnerTests;
|
||||
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 */,
|
||||
331C8082294A63A400263BE5 /* RunnerTests */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
97C146EF1CF9000F007C117D /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
97C146EE1CF9000F007C117D /* Runner.app */,
|
||||
331C8081294A63A400263BE5 /* RunnerTests.xctest */,
|
||||
);
|
||||
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>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
331C8080294A63A400263BE5 /* RunnerTests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
|
||||
buildPhases = (
|
||||
331C807D294A63A400263BE5 /* Sources */,
|
||||
331C807F294A63A400263BE5 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
331C8086294A63A400263BE5 /* PBXTargetDependency */,
|
||||
);
|
||||
name = RunnerTests;
|
||||
productName = RunnerTests;
|
||||
productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
97C146ED1CF9000F007C117D /* Runner */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
|
||||
buildPhases = (
|
||||
9740EEB61CF901F6004384FC /* Run Script */,
|
||||
97C146EA1CF9000F007C117D /* Sources */,
|
||||
97C146EB1CF9000F007C117D /* Frameworks */,
|
||||
97C146EC1CF9000F007C117D /* Resources */,
|
||||
9705A1C41CF9048500538489 /* Embed Frameworks */,
|
||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
|
||||
);
|
||||
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 = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1510;
|
||||
ORGANIZATIONNAME = "";
|
||||
TargetAttributes = {
|
||||
331C8080294A63A400263BE5 = {
|
||||
CreatedOnToolsVersion = 14.0;
|
||||
TestTargetID = 97C146ED1CF9000F007C117D;
|
||||
};
|
||||
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 */,
|
||||
331C8080294A63A400263BE5 /* RunnerTests */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
331C807F294A63A400263BE5 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
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;
|
||||
alwaysOutOfDate = 1;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
|
||||
);
|
||||
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;
|
||||
alwaysOutOfDate = 1;
|
||||
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";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
331C807D294A63A400263BE5 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
97C146EA1CF9000F007C117D /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
|
||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
331C8086294A63A400263BE5 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 97C146ED1CF9000F007C117D /* Runner */;
|
||||
targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency 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;
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||
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;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||
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 = 12.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.example.absensiQr;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
};
|
||||
name = Profile;
|
||||
};
|
||||
331C8088294A63A400263BE5 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.absensiQr.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
331C8089294A63A400263BE5 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.absensiQr.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
331C808A294A63A400263BE5 /* Profile */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.absensiQr.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
};
|
||||
name = Profile;
|
||||
};
|
||||
97C147031CF9000F007C117D /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||
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;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||
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 = 12.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;
|
||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||
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;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||
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 = 12.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SUPPORTED_PLATFORMS = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
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.example.absensiQr;
|
||||
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.example.absensiQr;
|
||||
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 */
|
||||
331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
331C8088294A63A400263BE5 /* Debug */,
|
||||
331C8089294A63A400263BE5 /* Release */,
|
||||
331C808A294A63A400263BE5 /* Profile */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
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 */;
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1510"
|
||||
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">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||
BuildableName = "Runner.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<Testables>
|
||||
<TestableReference
|
||||
skipped = "NO"
|
||||
parallelizable = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "331C8080294A63A400263BE5"
|
||||
BuildableName = "RunnerTests.xctest"
|
||||
BlueprintName = "RunnerTests"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
</Testables>
|
||||
</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>
|
||||
</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>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:Runner.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
import Flutter
|
||||
import UIKit
|
||||
|
||||
@main
|
||||
@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)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"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":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"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":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@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"}}
|
||||
|
After Width: | Height: | Size: 174 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 7.9 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 68 B |
|
After Width: | Height: | Size: 68 B |
|
After Width: | Height: | Size: 68 B |
|
|
@ -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.
|
||||
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
<?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>CFBundleDisplayName</key>
|
||||
<string>Absensi Qr</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>absensi_qr</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>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>UIApplicationSupportsIndirectInputEvents</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -0,0 +1 @@
|
|||
#import "GeneratedPluginRegistrant.h"
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
import Flutter
|
||||
import UIKit
|
||||
import XCTest
|
||||
|
||||
class RunnerTests: XCTestCase {
|
||||
|
||||
func testExample() {
|
||||
// If you add code to the Runner application, consider adding tests here.
|
||||
// See https://developer.apple.com/documentation/xctest for more information about using XCTest.
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,240 @@
|
|||
import 'package:absensi_qr/feature_student/attendance/presentation/attendance_binding.dart';
|
||||
import 'package:absensi_qr/feature_student/attendance/presentation/attendance_page.dart';
|
||||
import 'package:absensi_qr/feature_student/dashboard/presentation/dashboard_binding.dart';
|
||||
import 'package:absensi_qr/feature_student/dashboard/presentation/dashboard_page.dart';
|
||||
import 'package:absensi_qr/feature_student/form_permission/presentation/permission_form_binding.dart';
|
||||
import 'package:absensi_qr/feature_student/form_permission/presentation/permission_form_page.dart';
|
||||
import 'package:absensi_qr/feature_student/navigation/presentation/navigation_binding.dart';
|
||||
import 'package:absensi_qr/feature_student/navigation/presentation/navigation_page.dart';
|
||||
import 'package:absensi_qr/feature_student/notification/presentation/notification_student_binding.dart';
|
||||
import 'package:absensi_qr/feature_student/notification/presentation/notification_student_page.dart';
|
||||
import 'package:absensi_qr/feature_student/permission_detail/presentation/permission_detail_binding.dart';
|
||||
import 'package:absensi_qr/feature_student/permission_detail/presentation/permission_detail_page.dart';
|
||||
import 'package:absensi_qr/feature_student/schedule/presentation/schedule_binding.dart';
|
||||
import 'package:absensi_qr/feature_student/schedule/presentation/schedule_page.dart';
|
||||
import 'package:absensi_qr/feature_teacher/attendance_student/detail/presentation/detail_attendance_student_class_binding.dart';
|
||||
import 'package:absensi_qr/feature_teacher/attendance_student/detail/presentation/detail_attendance_student_class_page.dart';
|
||||
import 'package:absensi_qr/feature_teacher/attendance_student/primary/presentation/attendance_student_class_binding.dart';
|
||||
import 'package:absensi_qr/feature_teacher/attendance_student/primary/presentation/attendance_student_class_page.dart';
|
||||
import 'package:absensi_qr/feature_teacher/navigation/presentation/navigation_teacher_binding.dart';
|
||||
import 'package:absensi_qr/feature_teacher/navigation/presentation/navigation_teacher_page.dart';
|
||||
import 'package:absensi_qr/feature_teacher/permission/presentation/teacher_permission_binding.dart';
|
||||
import 'package:absensi_qr/feature_teacher/permission/presentation/teacher_permission_page.dart';
|
||||
import 'package:absensi_qr/feature_teacher/student_class/announcement/presentation/send_announcement_binding.dart';
|
||||
import 'package:absensi_qr/feature_teacher/student_class/announcement/presentation/send_announcement_page.dart';
|
||||
import 'package:absensi_qr/feature_teacher/dashboard/presentation/teacher_dashboard_binding.dart';
|
||||
import 'package:absensi_qr/feature_teacher/dashboard/presentation/teacher_dashboard_page.dart';
|
||||
import 'package:absensi_qr/feature_teacher/profile/presentation/profile_teacher_binding.dart';
|
||||
import 'package:absensi_qr/feature_teacher/profile/presentation/profile_teacher_page.dart';
|
||||
import 'package:absensi_qr/feature_teacher/shedule/schedule_class/presentation/schedule_class_binding.dart';
|
||||
import 'package:absensi_qr/feature_teacher/shedule/schedule_class/presentation/schedule_class_page.dart';
|
||||
import 'package:absensi_qr/feature_teacher/shedule/schedule_qr/presentation/schedule_qr_teacher_binding.dart';
|
||||
import 'package:absensi_qr/feature_teacher/shedule/schedule_qr/presentation/schedule_qr_teacher_page.dart';
|
||||
import 'package:absensi_qr/feature_teacher/shedule/schedule_teacher/presentation/schedule_teacher_binding.dart';
|
||||
import 'package:absensi_qr/feature_teacher/shedule/schedule_teacher/presentation/schedule_teacher_page.dart';
|
||||
import 'package:absensi_qr/feature_teacher/student_class/info_class/presentation/detail_information_class_binding.dart';
|
||||
import 'package:absensi_qr/feature_teacher/student_class/info_class/presentation/detail_information_class_page.dart';
|
||||
import 'package:absensi_qr/features/others/auth/login/presentation/login_binding.dart';
|
||||
import 'package:absensi_qr/features/others/auth/login/presentation/login_page.dart';
|
||||
import 'package:absensi_qr/features/others/auth/register_student/presentation/register_student_binding.dart';
|
||||
import 'package:absensi_qr/features/others/auth/register_student/presentation/register_student_page.dart';
|
||||
import 'package:absensi_qr/features/others/auth/register_teacher/presentation/register_teacher_binding.dart';
|
||||
import 'package:absensi_qr/features/others/auth/register_teacher/presentation/register_teacher_page.dart';
|
||||
import 'package:absensi_qr/features/others/choose_role/choose_role_binding.dart';
|
||||
import 'package:absensi_qr/features/others/choose_role/choose_role_page.dart';
|
||||
import 'package:absensi_qr/features/others/debug_config/debug_config_page.dart';
|
||||
import 'package:absensi_qr/features/others/splash_screen/presentation/splash_screen_binding.dart';
|
||||
import 'package:absensi_qr/features/others/splash_screen/presentation/splash_screen_page.dart';
|
||||
import 'package:absensi_qr/feature_student/permission/presentation/permission_binding.dart';
|
||||
import 'package:absensi_qr/feature_student/permission/presentation/permission_page.dart';
|
||||
import 'package:absensi_qr/feature_student/profile/presentation/profile_binding.dart';
|
||||
import 'package:absensi_qr/feature_student/profile/presentation/profile_page.dart';
|
||||
import 'package:absensi_qr/feature_student/qr/presentation/qr_binding.dart';
|
||||
import 'package:absensi_qr/feature_student/qr/presentation/qr_page.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
class AppRoutes {
|
||||
// initialize
|
||||
static const initialRoute = splashScreen;
|
||||
|
||||
// general
|
||||
static const login = '/login';
|
||||
static const chooserRoleUser = '/choose-role-user';
|
||||
static const registerStudent = '/register-student';
|
||||
static const registerTeacher = '/register-teacher';
|
||||
static const splashScreen = '/splash_screen';
|
||||
static const debugConfig = '/debug-config';
|
||||
// ==================
|
||||
|
||||
// student
|
||||
static const navigation = '/navigation-student';
|
||||
static const dashboard = '/dashboard-student';
|
||||
static const notificationStudent = '/notification-student';
|
||||
static const schedule = '/schedule-student';
|
||||
static const attendance = '/attendance-student';
|
||||
static const permission = '/permission-student';
|
||||
static const permissionForm = '/permission-form-student';
|
||||
static const permissionDetail = '/permission-detail-student';
|
||||
static const profile = '/profile-student';
|
||||
static const qrscan = '/qrscan-student';
|
||||
// ==================
|
||||
|
||||
// teacher
|
||||
static const navigationTeacher = '/navigation-teacher';
|
||||
static const dashboardTeacher = '/dashboard-teacher';
|
||||
static const scheduleQRTeacher = '/schedule-qr-teacher';
|
||||
static const scheduleTeacher = '/schedule-teacher';
|
||||
static const scheduleClass = '/schedule-class';
|
||||
static const detailInformationClass = '/detail-information-class';
|
||||
static const sendAnnouncement = '/send-announcement';
|
||||
static const permissionTeacher = '/permission-teacher';
|
||||
static const profileTeacher = '/profile-teacher';
|
||||
static const attendanceStudentClass = '/attendance-student-class';
|
||||
static const detailAttendanceStudentClass = '/detail-attendance-student-class';
|
||||
// activity of teacher: accept or reject permission, send announcement, submit report disrepancy student, etc.
|
||||
static const activityTeacher = '/activity-teacher';
|
||||
// ==================
|
||||
|
||||
static final routes = <GetPage>[
|
||||
// Feature Others ----------------
|
||||
GetPage(
|
||||
name: splashScreen,
|
||||
page: () => const SplashScreenPage(),
|
||||
binding: SplashScreenBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: navigation,
|
||||
page: () => const NavigationPage(),
|
||||
binding: NavigationBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: navigationTeacher,
|
||||
page: () => const NavigationTeacherPage(),
|
||||
binding: NavigationTeacherBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: dashboard,
|
||||
page: () => const DashboardPage(),
|
||||
binding: DashboardBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: notificationStudent,
|
||||
page: () => const NotificationStudentPage(),
|
||||
binding: NotificationStudentBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: schedule,
|
||||
page: () => const SchedulePage(),
|
||||
binding: ScheduleBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: attendance,
|
||||
page: () => const AttendancePage(),
|
||||
binding: AttendanceBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: permission,
|
||||
page: () => const PermissionPage(),
|
||||
binding: PermissionBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: permissionForm,
|
||||
page: () => const PermissionFormPage(),
|
||||
binding: PermissionFormBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: permissionDetail,
|
||||
page: () => const PermissionDetailPage(),
|
||||
binding: PermissionDetailBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: profile,
|
||||
page: () => const ProfilePage(),
|
||||
binding: ProfileBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: qrscan,
|
||||
page: () => const QrPage(),
|
||||
binding: QrBinding(),
|
||||
transition: Transition.downToUp),
|
||||
GetPage(
|
||||
name: login,
|
||||
page: () => const LoginPage(),
|
||||
binding: LoginBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: chooserRoleUser,
|
||||
page: () => const ChooseRolePage(),
|
||||
binding: ChooseRoleBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: registerStudent,
|
||||
page: () => const RegisterStudentPage(),
|
||||
binding: RegisterStudentBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: registerTeacher,
|
||||
page: () => const RegisterTeacherPage(),
|
||||
binding: RegisterTeacherBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: dashboardTeacher,
|
||||
page: () => const TeacherDashboardPage(),
|
||||
binding: TeacherDashboardBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: scheduleQRTeacher,
|
||||
page: () => const ScheduleQrTeacherPage(),
|
||||
binding: ScheduleQrTeacherBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: scheduleTeacher,
|
||||
page: () => const ScheduleTeacherPage(),
|
||||
binding: ScheduleTeacherBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: scheduleClass,
|
||||
page: () => const ScheduleClassPage(),
|
||||
binding: ScheduleClassBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: detailInformationClass,
|
||||
page: () => const DetailInformationClassPage(),
|
||||
binding: DetailInformationClassBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: sendAnnouncement,
|
||||
page: () => const SendAnnouncementPage(),
|
||||
binding: SendAnnouncementBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: profileTeacher,
|
||||
page: () => const ProfileTeacherPage(),
|
||||
binding: ProfileTeacherBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: permissionTeacher,
|
||||
page: () => const TeacherPermissionPage(),
|
||||
binding: TeacherPermissionBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: attendanceStudentClass,
|
||||
page: () => const AttendanceStudentClassPage(),
|
||||
binding: AttendanceStudentClassBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: detailAttendanceStudentClass,
|
||||
page: () => const DetailAttendanceStudentClassPage(),
|
||||
binding: DetailAttendanceStudentClassBinding(),
|
||||
),
|
||||
|
||||
|
||||
// testing for ip address changing runtime
|
||||
if (kDebugMode)
|
||||
GetPage(
|
||||
name: debugConfig,
|
||||
page: () => const DebugConfigPage(),
|
||||
),
|
||||
];
|
||||
}
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
/// Holds API endpoints with a runtime-overridable base URL to simplify debugging.
|
||||
class ApiConstant {
|
||||
// static const domain = 'https://gibbon-direct-neatly.ngrok-free.app';
|
||||
static const domain = 'http://presensiku.site';
|
||||
// static const domain = 'http://192.168.1.6:8000';
|
||||
static const _defaultBaseURL = '$domain/api';
|
||||
static const _prefsKeyBaseUrl = 'api_base_url_override';
|
||||
|
||||
|
||||
static String? _runtimeBaseURL;
|
||||
|
||||
/// Current base URL. Falls back to [_defaultBaseURL] if no override is set.
|
||||
// debug mode
|
||||
// static String get baseURL =>
|
||||
// (_runtimeBaseURL != null && _runtimeBaseURL!.trim().isNotEmpty)
|
||||
// ? _runtimeBaseURL!
|
||||
// : _defaultBaseURL;
|
||||
|
||||
// prod mode
|
||||
static String get baseURL => _defaultBaseURL;
|
||||
|
||||
/// Load persisted override from SharedPreferences. Call once on app startup.
|
||||
// static Future<void> loadBaseUrl() async {
|
||||
// final prefs = await SharedPreferences.getInstance();
|
||||
// _runtimeBaseURL = prefs.getString(_prefsKeyBaseUrl);
|
||||
// }
|
||||
|
||||
/// Set (or clear) a runtime base URL override and persist it for future runs.
|
||||
static Future<void> setBaseUrlOverride(String? value) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final normalized = value?.trim();
|
||||
|
||||
if (normalized == null || normalized.isEmpty) {
|
||||
_runtimeBaseURL = null;
|
||||
await prefs.remove(_prefsKeyBaseUrl);
|
||||
return;
|
||||
}
|
||||
|
||||
_runtimeBaseURL = normalized;
|
||||
await prefs.setString(_prefsKeyBaseUrl, normalized);
|
||||
}
|
||||
|
||||
static String get testConnection => '$baseURL/ping';
|
||||
|
||||
/// general
|
||||
|
||||
// login
|
||||
static String get loginURL => '$baseURL/login';
|
||||
// register
|
||||
static String get registerURL => '$baseURL/register';
|
||||
// store fcm token
|
||||
static String get storeFcmTokenURL => '$baseURL/store-fcm';
|
||||
// get all class
|
||||
static String get allClass => '$baseURL/classes';
|
||||
// link url for permission
|
||||
// http://192.168.1.4:8000/storage/permission/evidence/1_mudy-brembo_1772988841.jpg
|
||||
static String get permissionEvidenceURL =>
|
||||
'$domain/storage/permission/evidence';
|
||||
// link url for profile picture
|
||||
static String getProfilePictureURL(String filename, String role) {
|
||||
return '$domain/storage/profile_pictures/$role/$filename';
|
||||
}
|
||||
|
||||
/// student features
|
||||
|
||||
/// dashboard
|
||||
// attendance qrcode
|
||||
static String get qrcodeAttendance => '$baseURL/qrattendance';
|
||||
// attendance user
|
||||
static String get attendanceReport => '$baseURL/attendance/report';
|
||||
static String get attendanceReportClass => '$baseURL/attendance/report/class';
|
||||
|
||||
// permission
|
||||
static String get studentPermission => '$baseURL/attendance/permission';
|
||||
static String get studentPermissionReport =>
|
||||
'$baseURL/attendance/permission/report';
|
||||
|
||||
/// teacher features
|
||||
|
||||
// schedule
|
||||
static String get teacherSchedulePersonal => '$baseURL/teacher/schedules/day';
|
||||
static String get teacherScheduleWeeklyPersonal =>
|
||||
'$baseURL/teacher/schedules';
|
||||
static String get teacherScheduleClass => '$baseURL/schedules';
|
||||
static String get detailInformationClass =>
|
||||
'$baseURL/info/class'; // class id as query parameter
|
||||
static String get reportStudentAttendanceByClass =>
|
||||
'$baseURL/teacher/attendance/class'; // class id as query parameter, date include in payload
|
||||
static String get reportStudentAttendanceDailyByClass =>
|
||||
'$baseURL/teacher/attendance/daily/class/'; // class id as query parameter, date include in payload
|
||||
|
||||
// anouncement feature
|
||||
static String get sendAnnouncement => '$baseURL/fcm/send-announcement';
|
||||
|
||||
// teacher activity
|
||||
static String get teacherActivity => '$baseURL/teacher/activity';
|
||||
|
||||
// permission feature
|
||||
static String get permissionReportByClass =>
|
||||
'$baseURL/teacher/attendance/permission/report'; // class id as query parameter, date include in payload
|
||||
static String get permissionAccept =>
|
||||
'$baseURL/teacher/attendance/permission/accept'; // permission id include in payload
|
||||
static String get permissionReject =>
|
||||
'$baseURL/teacher/attendance/permission/reject'; // permission id include in payload
|
||||
|
||||
// disrepancy report feature
|
||||
static String get discrepancyReport =>
|
||||
'$baseURL/teacher/attendance/disrepancy/report';
|
||||
|
||||
|
||||
// link URL Schedule QR Feature
|
||||
static String get scheduleQrURL => '$baseURL/teacher/attendance/qr/generate';
|
||||
|
||||
/// notes example for login
|
||||
// {
|
||||
// "email": "mudy@example.com",
|
||||
// "password": "password123"
|
||||
// }
|
||||
|
||||
/// exapmple for login teacher
|
||||
/// {
|
||||
/// "email": "alvian@guru.com"
|
||||
/// "password": "alvianguru123"
|
||||
/// }
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class ApiConstant {
|
||||
static const baseURL = 'http://yourdomain.com:8000/api';
|
||||
static const testConnection = '$baseURL/ping';
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
class AppColor {
|
||||
// theme color
|
||||
static const Color primaryColor = Color(0xff0087C1);
|
||||
static const Color primaryLightColor = Color(0xff9EE2FF);
|
||||
static const Color secondaryColorGreen = Color(0xff00B8D9);
|
||||
static const Color softColorPrimary = Color(0xffC3DFED);
|
||||
static const Color thirdColorPurple = Color(0xff9639EC);
|
||||
static const Color fourthColorOrange = Color(0xffED5D0E);
|
||||
|
||||
// color text only
|
||||
static const Color colorTextSubtitle = Color(0xff6B778C);
|
||||
static const Color colorTextHint = Color(0xff9AA0B1);
|
||||
// decoration
|
||||
static const Color colorBackgroundApp = Color(0xffF4F5F7);
|
||||
static const Color colorOutlineBoxinput = Color(0xffC5C6CC);
|
||||
static const Color colorShadowBox = Color(0xffDADADA);
|
||||
static const Color colorHeader = Color(0xffC3DFEC);
|
||||
|
||||
// attendance color theme
|
||||
static const Color colorPresent = Color(0xff36B37E);
|
||||
static const Color colorPermission = Color(0xffFFCA28);
|
||||
static const Color colorAlpha = Color(0xffFF383C);
|
||||
|
||||
// attendance daily color theme
|
||||
static const Color colorOntime = colorPresent;
|
||||
static const Color colorLate = colorAlpha;
|
||||
static const Color colorIzin = colorPermission;
|
||||
|
||||
// general color
|
||||
static const Color successColor = Color(0xff28A745); // success/active
|
||||
static const Color errorColor = Color(0xffED6363); // error/alert
|
||||
static const Color warningColor = Color(0xffFFC107); // pending/caution
|
||||
static const Color infoColor = Color(0xff17A2B8); // informational
|
||||
static const Color inactiveColor = Color(0xffBDBDBD); // inactive/disabled
|
||||
static const Color activeColor = Color(0xff4CAF50); // active/confirmed
|
||||
static const Color pendingColor = Color(0xffFFA726); // pending/waiting
|
||||
static const Color backgroundColor = Color(0xffF4F5F7); // general background
|
||||
static const Color secondaryTextColor = Color(0xFF616161);
|
||||
|
||||
// linear color
|
||||
static const LinearGradient pageBackground = LinearGradient(
|
||||
colors: [Color(0xFFFFFFFF), Color(0xFFE7F6FF)],
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
class AppConfig {
|
||||
// priority level, status level, default language, maxuploadsize, etc...
|
||||
|
||||
|
||||
|
||||
|
||||
// styling configuration
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
import 'package:absensi_qr/constant/app_color.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
|
||||
class AppFontStyle {
|
||||
static TextStyle titleText = GoogleFonts.poppins(
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: Colors.black,
|
||||
);
|
||||
|
||||
static TextStyle subTitleText = GoogleFonts.poppins(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: AppColor.colorTextSubtitle,
|
||||
);
|
||||
|
||||
// content / general text style
|
||||
static TextStyle primaryText = GoogleFonts.poppins(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.normal,
|
||||
color: Colors.black,
|
||||
);
|
||||
|
||||
// button text style
|
||||
static TextStyle textButtonStyle = GoogleFonts.poppins(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.normal,
|
||||
color: Colors.black,
|
||||
);
|
||||
|
||||
static TextStyle blueInfoText = GoogleFonts.poppins(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.normal,
|
||||
color: AppColor.primaryColor,
|
||||
);
|
||||
|
||||
static TextStyle smallText = GoogleFonts.poppins(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.normal,
|
||||
color: Colors.black,
|
||||
);
|
||||
|
||||
static TextStyle secondaryText = GoogleFonts.poppins(
|
||||
fontSize: 10,
|
||||
fontWeight: FontWeight.normal,
|
||||
color: const Color(0xFF757575),
|
||||
);
|
||||
|
||||
static TextStyle whiteText = GoogleFonts.poppins(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.normal,
|
||||
color: Colors.white,
|
||||
);
|
||||
|
||||
static TextStyle whiteBigText = GoogleFonts.poppins(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: Colors.white,
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
class AssetConstant {
|
||||
// base path icon
|
||||
static const String baseImagePath = 'assets/images';
|
||||
static const String baseIconPath = 'assets/icons';
|
||||
|
||||
// icon core general
|
||||
static const String iconApp = '$baseIconPath/icon_app.png';
|
||||
static const String iconAppBlue = '$baseIconPath/ic_app_blue.png';
|
||||
static const String iconAppSVG = '$baseIconPath/icon_app.svg';
|
||||
static const String iconAppBlueSVG = '$baseIconPath/ic_app_blue.svg';
|
||||
static const String iconDailyAttendance = '$baseIconPath/ic-attendance-daily.svg';
|
||||
|
||||
/// icon per feature here...
|
||||
static const String svgIconQR = '$baseIconPath/qr_code_scanner.svg';
|
||||
static const String svgIconSubject = '$baseIconPath/icon_subject.svg';
|
||||
static const String svgIconSubjectThin =
|
||||
'$baseIconPath/icon_subject_thin.svg';
|
||||
|
||||
// image core general
|
||||
static const String imageExamplePermission = '$baseImagePath/example_permission.png';
|
||||
|
||||
// attendance status icons
|
||||
static const String iconAttValid = '$baseIconPath/ic-attendance-valid.svg';
|
||||
static const String iconAttNone = '$baseIconPath/ic-attendance-none.svg';
|
||||
|
||||
// notif or permission icons
|
||||
static const String iconDefaultNotif = '$baseIconPath/ic-notif-default.png';
|
||||
static const String iconAssignment = '$baseIconPath/ic-notif-assignment.png';
|
||||
static const String iconPermission = '$baseIconPath/ic-notif-permission.png';
|
||||
static const String iconPermissionAcc = '$baseIconPath/ic-notif-permit-acc.png';
|
||||
static const String iconPermissionRej = '$baseIconPath/ic-notif-permit-rej.png';
|
||||
|
||||
static String getPermissionIconStatus(String type) {
|
||||
switch (type) {
|
||||
case 'proses':
|
||||
return iconPermission;
|
||||
case 'diterima':
|
||||
return iconPermissionAcc;
|
||||
case 'ditolak':
|
||||
return iconPermissionRej;
|
||||
default:
|
||||
return iconPermission; // fallback.
|
||||
}
|
||||
}
|
||||
|
||||
static String getNotificationIconByType(String type) {
|
||||
switch (type) {
|
||||
case 'assignment':
|
||||
return iconAssignment;
|
||||
case 'permission':
|
||||
return iconPermission;
|
||||
case "permission_accepted":
|
||||
return iconPermissionAcc;
|
||||
case "permission_rejected":
|
||||
return iconPermissionRej;
|
||||
default:
|
||||
return iconDefaultNotif; // fallback
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
/// Spacing constants for consistent spacing throughout the app
|
||||
class SpacingSize {
|
||||
SpacingSize._();
|
||||
|
||||
// Spacing values in pixels
|
||||
static const double xs = 4.0;
|
||||
static const double sm = 8.0;
|
||||
static const double md = 12.0;
|
||||
static const double base = 16.0;
|
||||
static const double lg = 20.0;
|
||||
static const double xl = 24.0;
|
||||
static const double xxl = 32.0;
|
||||
static const double xxxl = 40.0;
|
||||
static const double huge = 48.0;
|
||||
static const double massive = 64.0;
|
||||
|
||||
// Width spacing (horizontal)
|
||||
static const Widget spacingXSWidth = SizedBox(width: xs);
|
||||
static const Widget spacingSMWidth = SizedBox(width: sm);
|
||||
static const Widget spacingMDWidth = SizedBox(width: md);
|
||||
static const Widget spacingBaseWidth = SizedBox(width: base);
|
||||
static const Widget spacingLGWidth = SizedBox(width: lg);
|
||||
static const Widget spacingXLWidth = SizedBox(width: xl);
|
||||
static const Widget spacingXXLWidth = SizedBox(width: xxl);
|
||||
static const Widget spacingXXXLWidth = SizedBox(width: xxxl);
|
||||
static const Widget spacingHugeWidth = SizedBox(width: huge);
|
||||
static const Widget spacingMassiveWidth = SizedBox(width: massive);
|
||||
|
||||
// Height spacing (vertical)
|
||||
static const Widget spacingXSHeight = SizedBox(height: xs);
|
||||
static const Widget spacingSMHeight = SizedBox(height: sm);
|
||||
static const Widget spacingMDHeight = SizedBox(height: md);
|
||||
static const Widget spacingBaseHeight = SizedBox(height: base);
|
||||
static const Widget spacingLGHeight = SizedBox(height: lg);
|
||||
static const Widget spacingXLHeight = SizedBox(height: xl);
|
||||
static const Widget spacingXXLHeight = SizedBox(height: xxl);
|
||||
static const Widget spacingXXXLHeight = SizedBox(height: xxxl);
|
||||
static const Widget spacingHugeHeight = SizedBox(height: huge);
|
||||
static const Widget spacingMassiveHeight = SizedBox(height: massive);
|
||||
|
||||
// EdgeInsets - All sides equal
|
||||
static const EdgeInsets paddingXS = EdgeInsets.all(xs);
|
||||
static const EdgeInsets paddingSM = EdgeInsets.all(sm);
|
||||
static const EdgeInsets paddingMD = EdgeInsets.all(md);
|
||||
static const EdgeInsets paddingBase = EdgeInsets.all(base);
|
||||
static const EdgeInsets paddingLG = EdgeInsets.all(lg);
|
||||
static const EdgeInsets paddingXL = EdgeInsets.all(xl);
|
||||
static const EdgeInsets paddingXXL = EdgeInsets.all(xxl);
|
||||
static const EdgeInsets paddingXXXL = EdgeInsets.all(xxxl);
|
||||
static const EdgeInsets paddingHuge = EdgeInsets.all(huge);
|
||||
static const EdgeInsets paddingMassive = EdgeInsets.all(massive);
|
||||
|
||||
// EdgeInsets - Horizontal only
|
||||
static const EdgeInsets paddingXSHorizontal = EdgeInsets.symmetric(horizontal: xs);
|
||||
static const EdgeInsets paddingSMHorizontal = EdgeInsets.symmetric(horizontal: sm);
|
||||
static const EdgeInsets paddingMDHorizontal = EdgeInsets.symmetric(horizontal: md);
|
||||
static const EdgeInsets paddingBaseHorizontal = EdgeInsets.symmetric(horizontal: base);
|
||||
static const EdgeInsets paddingLGHorizontal = EdgeInsets.symmetric(horizontal: lg);
|
||||
static const EdgeInsets paddingXLHorizontal = EdgeInsets.symmetric(horizontal: xl);
|
||||
static const EdgeInsets paddingXXLHorizontal = EdgeInsets.symmetric(horizontal: xxl);
|
||||
static const EdgeInsets paddingXXXLHorizontal = EdgeInsets.symmetric(horizontal: xxxl);
|
||||
static const EdgeInsets paddingHugeHorizontal = EdgeInsets.symmetric(horizontal: huge);
|
||||
static const EdgeInsets paddingMassiveHorizontal = EdgeInsets.symmetric(horizontal: massive);
|
||||
|
||||
// EdgeInsets - Vertical only
|
||||
static const EdgeInsets paddingXSVertical = EdgeInsets.symmetric(vertical: xs);
|
||||
static const EdgeInsets paddingSMVertical = EdgeInsets.symmetric(vertical: sm);
|
||||
static const EdgeInsets paddingMDVertical = EdgeInsets.symmetric(vertical: md);
|
||||
static const EdgeInsets paddingBaseVertical = EdgeInsets.symmetric(vertical: base);
|
||||
static const EdgeInsets paddingLGVertical = EdgeInsets.symmetric(vertical: lg);
|
||||
static const EdgeInsets paddingXLVertical = EdgeInsets.symmetric(vertical: xl);
|
||||
static const EdgeInsets paddingXXLVertical = EdgeInsets.symmetric(vertical: xxl);
|
||||
static const EdgeInsets paddingXXXLVertical = EdgeInsets.symmetric(vertical: xxxl);
|
||||
static const EdgeInsets paddingHugeVertical = EdgeInsets.symmetric(vertical: huge);
|
||||
static const EdgeInsets paddingMassiveVertical = EdgeInsets.symmetric(vertical: massive);
|
||||
|
||||
// Helper methods for custom spacing
|
||||
static SizedBox widthCustom(double width) => SizedBox(width: width);
|
||||
static SizedBox heightCustom(double height) => SizedBox(height: height);
|
||||
static EdgeInsets paddingCustom(double value) => EdgeInsets.all(value);
|
||||
static EdgeInsets paddingHorizontalCustom(double value) => EdgeInsets.symmetric(horizontal: value);
|
||||
static EdgeInsets paddingVerticalCustom(double value) => EdgeInsets.symmetric(vertical: value);
|
||||
|
||||
// Common padding combinations
|
||||
static const EdgeInsets paddingPageDefault = EdgeInsets.symmetric(horizontal: lg, vertical: md);
|
||||
static const EdgeInsets paddingCardDefault = EdgeInsets.all(base);
|
||||
static const EdgeInsets paddingButtonDefault = EdgeInsets.symmetric(horizontal: xl, vertical: md);
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
import 'package:intl/intl.dart';
|
||||
|
||||
class DateHelper {
|
||||
static DateTime? parseToLocal(dynamic v) {
|
||||
if (v == null) return null;
|
||||
try {
|
||||
// parse and convert UTC timestamp (with 'Z') correctly to local
|
||||
return DateTime.parse(v.toString()).toLocal();
|
||||
} catch (e) {
|
||||
// fallback to tryParse without throwing
|
||||
final parsed = DateTime.tryParse(v.toString());
|
||||
return parsed?.toLocal();
|
||||
}
|
||||
}
|
||||
|
||||
// parse to local non nullable,
|
||||
static DateTime parseToLocalNonNullable(dynamic v) {
|
||||
final parsed = parseToLocal(v);
|
||||
if (parsed == null) {
|
||||
// return current local time if parsing fails
|
||||
return DateTime.now();
|
||||
}
|
||||
return parsed;
|
||||
}
|
||||
|
||||
// format to day, with date and month in indonesian, ex: Senin, 17 Sep 2025
|
||||
static String formatToDayDateMonthIndonesia(DateTime date) {
|
||||
final formatter = DateFormat('EEEE, dd MMMM yyyy', 'id_ID');
|
||||
return formatter.format(date);
|
||||
}
|
||||
|
||||
static String formatToWIBTime(DateTime date) {
|
||||
// format time to indonesian (06:20 WIB)
|
||||
final indonesianHour = date.hour.toString().padLeft(2, '0');
|
||||
final indonesianMinute = date.minute.toString().padLeft(2, '0');
|
||||
return '$indonesianHour:$indonesianMinute WIB';
|
||||
}
|
||||
|
||||
static String statusUpcomingAttendance(DateTime timeStart, DateTime timeEnd) {
|
||||
final now = DateTime.now();
|
||||
if (now.isBefore(timeStart)) {
|
||||
return 'Belum Dimulai';
|
||||
} else if (now.isAfter(timeEnd)) {
|
||||
return 'Sudah Selesai';
|
||||
} else {
|
||||
return 'Sedang Berlangsung';
|
||||
}
|
||||
}
|
||||
|
||||
static String countDownTimer(DateTime timeEnd, {DateTime? customNow}) {
|
||||
final now = customNow ?? DateTime.now();
|
||||
|
||||
/// time in menit, jam, hari
|
||||
final difference = timeEnd.difference(now);
|
||||
if (difference.inSeconds <= 0) {
|
||||
return 'Waktu Habis';
|
||||
} else if (difference.inMinutes < 1) {
|
||||
return '${difference.inSeconds} detik lagi';
|
||||
} else if (difference.inHours < 1) {
|
||||
return '${difference.inMinutes} menit lagi';
|
||||
} else if (difference.inDays < 1) {
|
||||
return '${difference.inHours} jam lagi';
|
||||
} else {
|
||||
return '${difference.inDays} hari lagi';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
import 'package:intl/intl.dart';
|
||||
|
||||
class PermissionHelper {
|
||||
static String formatDisplayPermissionInfo(DateTime datePermission) {
|
||||
// to: senin, 10 April 2023
|
||||
final dateFormat = DateFormat('EEEE, d MMMM yyyy', 'id_ID');
|
||||
return dateFormat.format(datePermission);
|
||||
}
|
||||
|
||||
static String formattedPreviewPermissionInfo(
|
||||
{required int dayCount, required String reason}) {
|
||||
// to: Izin * 3 hari.
|
||||
return "$reason \u2022 $dayCount hari";
|
||||
}
|
||||
|
||||
// permission created.
|
||||
static String formattedDateCreatedPermissionInfo(DateTime dateCreated) {
|
||||
// to: Dibuat pada 10 Sep 2024 15:00
|
||||
final dateFormat = DateFormat('d MMM yyyy HH:mm', 'id_ID');
|
||||
return dateFormat.format(dateCreated);
|
||||
}
|
||||
|
||||
}
|
||||