first commit
43
.gitignore
vendored
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# Miscellaneous
|
||||||
|
*.class
|
||||||
|
*.log
|
||||||
|
*.pyc
|
||||||
|
*.swp
|
||||||
|
.DS_Store
|
||||||
|
.atom/
|
||||||
|
.buildlog/
|
||||||
|
.history
|
||||||
|
.svn/
|
||||||
|
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
|
33
.metadata
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# 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: "4cf269e36de2573851eaef3c763994f8f9be494d"
|
||||||
|
channel: "stable"
|
||||||
|
|
||||||
|
project_type: app
|
||||||
|
|
||||||
|
# Tracks metadata for the flutter migrate command
|
||||||
|
migration:
|
||||||
|
platforms:
|
||||||
|
- platform: root
|
||||||
|
create_revision: 4cf269e36de2573851eaef3c763994f8f9be494d
|
||||||
|
base_revision: 4cf269e36de2573851eaef3c763994f8f9be494d
|
||||||
|
- platform: android
|
||||||
|
create_revision: 4cf269e36de2573851eaef3c763994f8f9be494d
|
||||||
|
base_revision: 4cf269e36de2573851eaef3c763994f8f9be494d
|
||||||
|
- platform: ios
|
||||||
|
create_revision: 4cf269e36de2573851eaef3c763994f8f9be494d
|
||||||
|
base_revision: 4cf269e36de2573851eaef3c763994f8f9be494d
|
||||||
|
|
||||||
|
# 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'
|
6
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"cSpell.words": [
|
||||||
|
"المحرك",
|
||||||
|
"المراجعة"
|
||||||
|
]
|
||||||
|
}
|
28
analysis_options.yaml
Normal file
@ -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
|
13
android/.gitignore
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
gradle-wrapper.jar
|
||||||
|
/.gradle
|
||||||
|
/captures/
|
||||||
|
/gradlew
|
||||||
|
/gradlew.bat
|
||||||
|
/local.properties
|
||||||
|
GeneratedPluginRegistrant.java
|
||||||
|
|
||||||
|
# Remember to never publicly share your keystore.
|
||||||
|
# See https://flutter.dev/to/reference-keystore
|
||||||
|
key.properties
|
||||||
|
**/*.keystore
|
||||||
|
**/*.jks
|
44
android/app/build.gradle
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
plugins {
|
||||||
|
id "com.android.application"
|
||||||
|
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.gascom"
|
||||||
|
compileSdk = flutter.compileSdkVersion
|
||||||
|
ndkVersion = flutter.ndkVersion
|
||||||
|
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||||
|
targetCompatibility = JavaVersion.VERSION_1_8
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = JavaVersion.VERSION_1_8
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||||
|
applicationId = "com.example.gascom"
|
||||||
|
// You can update the following values to match your application needs.
|
||||||
|
// For more information, see: https://flutter.dev/to/review-gradle-config.
|
||||||
|
minSdk = 26
|
||||||
|
targetSdk = flutter.targetSdkVersion
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
flutter {
|
||||||
|
source = "../.."
|
||||||
|
}
|
7
android/app/src/debug/AndroidManifest.xml
Normal file
@ -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>
|
47
android/app/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<application
|
||||||
|
android:label="gascom"
|
||||||
|
android:name="${applicationName}"
|
||||||
|
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>
|
||||||
|
</queries>
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.NFC" />
|
||||||
|
</manifest>
|
@ -0,0 +1,5 @@
|
|||||||
|
package com.example.gascom
|
||||||
|
|
||||||
|
import io.flutter.embedding.android.FlutterActivity
|
||||||
|
|
||||||
|
class MainActivity: FlutterActivity()
|
12
android/app/src/main/res/drawable-v21/launch_background.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Modify this file to customize your launch splash screen -->
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:drawable="?android:colorBackground" />
|
||||||
|
|
||||||
|
<!-- You can insert your own image assets here -->
|
||||||
|
<!-- <item>
|
||||||
|
<bitmap
|
||||||
|
android:gravity="center"
|
||||||
|
android:src="@mipmap/launch_image" />
|
||||||
|
</item> -->
|
||||||
|
</layer-list>
|
12
android/app/src/main/res/drawable/launch_background.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Modify this file to customize your launch splash screen -->
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:drawable="@android:color/white" />
|
||||||
|
|
||||||
|
<!-- You can insert your own image assets here -->
|
||||||
|
<!-- <item>
|
||||||
|
<bitmap
|
||||||
|
android:gravity="center"
|
||||||
|
android:src="@mipmap/launch_image" />
|
||||||
|
</item> -->
|
||||||
|
</layer-list>
|
BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 544 B |
BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 442 B |
BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 721 B |
BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
18
android/app/src/main/res/values-night/styles.xml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
|
||||||
|
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
|
||||||
|
<!-- Show a splash screen on the activity. Automatically removed when
|
||||||
|
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>
|
18
android/app/src/main/res/values/styles.xml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
|
||||||
|
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
|
||||||
|
<!-- Show a splash screen on the activity. Automatically removed when
|
||||||
|
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>
|
7
android/app/src/profile/AndroidManifest.xml
Normal file
@ -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>
|
18
android/build.gradle
Normal file
@ -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
|
||||||
|
}
|
3
android/gradle.properties
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
|
||||||
|
android.useAndroidX=true
|
||||||
|
android.enableJetifier=true
|
5
android/gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
@ -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.3-all.zip
|
25
android/settings.gradle
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
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.1.0" apply false
|
||||||
|
id "org.jetbrains.kotlin.android" version "1.8.22" apply false
|
||||||
|
}
|
||||||
|
|
||||||
|
include ":app"
|
BIN
assets/fonts/NotoSansArabic-Bold.ttf
Normal file
BIN
assets/fonts/NotoSansArabic-Light.ttf
Normal file
BIN
assets/fonts/NotoSansArabic-Medium.ttf
Normal file
BIN
assets/fonts/NotoSansArabic-Regular.ttf
Normal file
BIN
assets/fonts/NotoSansArabic-SemiBold.ttf
Normal file
3
assets/languages/ar.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
|
||||||
|
}
|
13
assets/svgs/arrow_left.svg
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<svg width="67" height="67" viewBox="0 0 67 67" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_92_1340)">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||||
|
d="M65.2628 5.73518C67.3001 7.41889 67.5872 10.4354 65.9032 12.4728L27.4262 59.0343L27.4146 59.0481C26.5394 60.0991 25.441 60.9418 24.1993 61.5147C22.9575 62.088 21.6036 62.3771 20.2361 62.3613C18.8461 62.3441 17.4739 62.0119 16.2306 61.3903C14.9915 60.771 13.9083 59.8794 13.0617 58.783C13.0589 58.7792 13.056 58.7758 13.0532 58.772L1.00808 43.2855C-0.614615 41.1992 -0.238774 38.1924 1.84754 36.5697C3.93387 34.947 6.94063 35.3229 8.56332 37.4092L20.3533 52.5678L58.525 6.3757C60.2086 4.33829 63.2256 4.05152 65.2628 5.73518Z"
|
||||||
|
fill="white" />
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_92_1340">
|
||||||
|
<rect width="67" height="67" fill="white" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 917 B |
9
assets/svgs/camera.svg
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<svg width="33" height="33" viewBox="0 0 33 33" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path
|
||||||
|
d="M31.8213 11.7857C31.8213 11.1606 31.5729 10.561 31.1309 10.119C30.689 9.67693 30.0893 9.42858 29.4642 9.42858H24.7499L21.2142 4.71429H11.7856L8.2499 9.42858H3.53561C2.91045 9.42858 2.31091 9.67693 1.86886 10.119C1.42681 10.561 1.17847 11.1606 1.17847 11.7857V25.9286C1.17847 26.5537 1.42681 27.1534 1.86886 27.5953C2.31091 28.0373 2.91045 28.2857 3.53561 28.2857H29.4642C30.0893 28.2857 30.689 28.0373 31.1309 27.5953C31.5729 27.1534 31.8213 26.5537 31.8213 25.9286V11.7857Z"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path
|
||||||
|
d="M16.4999 22.9821C19.4289 22.9821 21.8034 20.6077 21.8034 17.6786C21.8034 14.7495 19.4289 12.375 16.4999 12.375C13.5708 12.375 11.1963 14.7495 11.1963 17.6786C11.1963 20.6077 13.5708 22.9821 16.4999 22.9821Z"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 1013 B |
23
assets/svgs/dollar_flag.svg
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<svg width="42" height="42" viewBox="0 0 42 42" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_52_71)">
|
||||||
|
<path
|
||||||
|
d="M31.5 6V16.5H40.5V6C40.5 4.80654 40.026 3.66192 39.1821 2.81802C38.3382 1.97411 37.1934 1.5 36 1.5C34.8066 1.5 33.6618 1.97411 32.8179 2.81802C31.974 3.66192 31.5 4.80654 31.5 6Z"
|
||||||
|
fill="#F1CC83" />
|
||||||
|
<path
|
||||||
|
d="M36 1.5H7.5C5.90871 1.5 4.38258 2.13214 3.25737 3.25737C2.13214 4.38258 1.5 5.90871 1.5 7.5V40.5L9 36L16.5 40.5L24 36L31.5 40.5V6C31.5 4.80654 31.974 3.66192 32.8179 2.81802C33.6618 1.97411 34.8066 1.5 36 1.5ZM36 1.5C37.1934 1.5 38.3382 1.97411 39.1821 2.81802C40.026 3.66192 40.5 4.80654 40.5 6V16.5H31.5"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path
|
||||||
|
d="M21.6058 14.1671C21.4302 13.6703 21.1592 13.2185 20.8149 12.8338C20.0824 12.0155 19.0181 11.5005 17.8334 11.5005H14.7373C12.7653 11.5005 11.1667 13.0991 11.1667 15.071C11.1667 16.7489 12.3351 18.2005 13.9743 18.5591L18.6882 19.5902C20.5245 19.9919 21.8334 21.6192 21.8334 23.499C21.8334 25.7082 20.0425 27.5005 17.8334 27.5005H15.1667C13.4251 27.5005 11.9435 26.3874 11.3944 24.8338"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path d="M16.5 11.5V7.5" stroke="white" stroke-width="2" stroke-linecap="round"
|
||||||
|
stroke-linejoin="round" />
|
||||||
|
<path d="M16.5 31.5003V27.5002" stroke="white" stroke-width="2" stroke-linecap="round"
|
||||||
|
stroke-linejoin="round" />
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_52_71">
|
||||||
|
<rect width="42" height="42" fill="white" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 1.7 KiB |
13
assets/svgs/done.svg
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<svg width="67" height="67" viewBox="0 0 67 67" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_92_1340)">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||||
|
d="M65.2628 5.73518C67.3001 7.41889 67.5872 10.4354 65.9032 12.4728L27.4262 59.0343L27.4146 59.0481C26.5394 60.0991 25.441 60.9418 24.1993 61.5147C22.9575 62.088 21.6036 62.3771 20.2361 62.3613C18.8461 62.3441 17.4739 62.0119 16.2306 61.3903C14.9915 60.771 13.9083 59.8794 13.0617 58.783C13.0589 58.7792 13.056 58.7758 13.0532 58.772L1.00808 43.2855C-0.614615 41.1992 -0.238774 38.1924 1.84754 36.5697C3.93387 34.947 6.94063 35.3229 8.56332 37.4092L20.3533 52.5678L58.525 6.3757C60.2086 4.33829 63.2256 4.05152 65.2628 5.73518Z"
|
||||||
|
fill="white" />
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_92_1340">
|
||||||
|
<rect width="67" height="67" fill="white" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 917 B |
18
assets/svgs/gas_station.svg
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<svg width="47" height="47" viewBox="0 0 47 47" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M1.67847 25.1786V15.1072H28.5356V25.1786H1.67847Z" fill="#F1CC83" />
|
||||||
|
<path
|
||||||
|
d="M1.67847 11.7501V41.9643C1.67847 43.8185 3.18151 45.3215 5.03561 45.3215H25.1785C27.0326 45.3215 28.5356 43.8185 28.5356 41.9643V11.7501C28.5356 8.04185 25.5295 5.03577 21.8213 5.03577H8.39275C4.68455 5.03577 1.67847 8.04185 1.67847 11.7501Z"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path d="M1.67847 15.1072H28.5356" stroke="white" stroke-width="2" stroke-linecap="round"
|
||||||
|
stroke-linejoin="round" />
|
||||||
|
<path d="M1.67847 25.1786H28.5356" stroke="white" stroke-width="2" stroke-linecap="round"
|
||||||
|
stroke-linejoin="round" />
|
||||||
|
<path
|
||||||
|
d="M28.5356 38.6072H38.6071C42.3154 38.6072 45.3214 35.6012 45.3214 31.8929C45.3214 28.1847 42.3154 25.1786 38.6071 25.1786C36.7529 25.1786 35.2499 23.6755 35.2499 21.8215V13.4286L45.3214 3.35718"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path d="M35.25 18.4644L41.9643 16.7858V6.71436" stroke="white" stroke-width="2"
|
||||||
|
stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path d="M20.1428 33.5715V36.9286" stroke="white" stroke-width="2" stroke-linecap="round"
|
||||||
|
stroke-linejoin="round" />
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 1.3 KiB |
18
assets/svgs/generator.svg
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<svg width="48" height="34" viewBox="0 0 48 34" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path
|
||||||
|
d="M1.6739 30.1539H2.46224V31.9811H1.6739C1.19277 31.9811 0.8 32.3681 0.8 32.8493C0.8 33.3305 1.19277 33.7176 1.6739 33.7176H46.3261C46.8072 33.7176 47.2 33.3305 47.2 32.8493C47.2 32.3681 46.8072 31.9811 46.3261 31.9811H45.5378V30.1539H46.3261C46.8072 30.1539 47.2 29.7668 47.2 29.2857V7.01376C47.2 5.55093 46.0006 4.36369 44.5291 4.36369H43.6061V3.45007C43.6061 1.98725 42.4067 0.8 40.9352 0.8H28.3572C26.8861 0.8 25.6863 1.98689 25.6863 3.45007V4.36369H3.47086H3.47081C1.99943 4.36404 0.8 5.55089 0.8 7.01376V29.2857C0.8 29.7668 1.19277 30.1539 1.6739 30.1539ZM27.4345 3.4504C27.4345 2.9483 27.847 2.53679 28.3575 2.53679H40.9356C41.4461 2.53679 41.8586 2.9483 41.8586 3.4504V15.9226C41.8586 16.4247 41.4461 16.8363 40.9356 16.8363H28.3575C27.847 16.8363 27.4345 16.4247 27.4345 15.9226V3.4504ZM2.5478 7.01376C2.5478 6.51166 2.96036 6.10015 3.47086 6.10015H25.687V15.9226C25.687 17.3855 26.8864 18.5727 28.3578 18.5727H40.9359C42.407 18.5727 43.6067 17.3858 43.6067 15.9226V6.10015H44.5298C45.0403 6.10015 45.4529 6.51166 45.4529 7.01376V28.4177H2.5478V7.01376ZM43.7903 31.9811H4.20971V30.1539H43.7903V31.9811Z"
|
||||||
|
fill="#668D7B" stroke="#668D7B" stroke-width="0.4" />
|
||||||
|
<path
|
||||||
|
d="M32.2608 10.4477H33.4811C33.9376 10.4477 34.3195 10.7976 34.3525 11.2533M32.2608 10.4477L34.2738 12.9239L34.4569 12.6858M32.2608 10.4477L33.5734 5.2096H36.2762L35.2026 8.8358L35.2026 8.8358C35.1247 9.09892 35.1766 9.38254 35.3417 9.60166L35.3418 9.60181C35.507 9.82058 35.766 9.94912 36.041 9.94912H36.5623M32.2608 10.4477L36.5623 9.94912M34.3525 11.2533L34.153 11.2677L34.3525 11.2532L34.3525 11.2533ZM34.3525 11.2533L34.4569 12.6858M34.4569 12.6858L36.5623 9.94912M34.4569 12.6858L34.4788 12.9854L36.5623 9.94912M38.3305 8.21299H37.2091L38.2827 4.58679L38.2827 4.58678C38.3606 4.32367 38.3087 4.04005 38.1436 3.82092L38.1434 3.82078C37.9783 3.60201 37.7193 3.47346 37.4443 3.47346H32.8906C32.4905 3.47346 32.1399 3.744 32.0428 4.13181C32.0428 4.13181 32.0428 4.13182 32.0428 4.13183L30.2951 11.1064L30.2951 11.1064C30.2301 11.366 30.2892 11.6412 30.4553 11.8517C30.6212 12.0618 30.875 12.1845 31.1433 12.1845H31.629L31.6284 12.1838H32.6682L32.8804 15.0944C32.8804 15.0945 32.8804 15.0945 32.8804 15.0945C32.9066 15.4554 33.1552 15.7613 33.5029 15.8641C33.5851 15.8886 33.6693 15.9003 33.7522 15.9003C34.0194 15.9003 34.278 15.7782 34.4465 15.5595L34.4466 15.5594L39.0249 9.60815C39.2269 9.34556 39.2613 8.99148 39.1133 8.69541C38.9655 8.39926 38.6619 8.21299 38.3305 8.21299Z"
|
||||||
|
fill="#668D7B" stroke="#668D7B" stroke-width="0.4" />
|
||||||
|
<path
|
||||||
|
d="M21.1699 8.37294H7.06436C5.59326 8.37294 4.39351 9.55982 4.39351 11.023L4.39351 22.5C4.39351 23.9628 5.5929 25.1501 7.06437 25.1501H21.1699C22.641 25.1501 23.8408 23.9632 23.8408 22.5L23.8408 11.023C23.8408 9.56018 22.6414 8.37294 21.1699 8.37294ZM22.093 22.5C22.093 23.0021 21.6804 23.4136 21.1699 23.4136H7.06437C6.55387 23.4136 6.14131 23.0021 6.14131 22.5L6.14131 11.023C6.14131 10.5209 6.55387 10.1094 7.06436 10.1094H21.1699C21.6804 10.1094 22.093 10.5209 22.093 11.023L22.093 22.5Z"
|
||||||
|
fill="#668D7B" stroke="#668D7B" stroke-width="0.4" />
|
||||||
|
<path
|
||||||
|
d="M39.5877 19.9544C37.8689 19.9544 36.4677 21.341 36.4677 23.0499C36.4677 24.7587 37.8685 26.1453 39.5877 26.1453C41.3069 26.1453 42.7078 24.7587 42.7078 23.0499C42.7078 21.341 41.3069 19.9544 39.5877 19.9544ZM39.5877 24.4089C38.8295 24.4089 38.2155 23.7973 38.2155 23.0499C38.2155 22.3024 38.8298 21.6909 39.5877 21.6909C40.3456 21.6909 40.96 22.3024 40.96 23.0499C40.96 23.7973 40.3456 24.4089 39.5877 24.4089Z"
|
||||||
|
fill="#668D7B" stroke="#668D7B" stroke-width="0.4" />
|
||||||
|
<path
|
||||||
|
d="M29.7049 19.9544C27.9861 19.9544 26.5849 21.341 26.5849 23.0499C26.5849 24.7587 27.9857 26.1453 29.7049 26.1453C31.4241 26.1453 32.8249 24.7587 32.8249 23.0499C32.8249 21.341 31.4241 19.9544 29.7049 19.9544ZM29.7049 24.4089C28.9467 24.4089 28.3327 23.7973 28.3327 23.0499C28.3327 22.3024 28.947 21.6909 29.7049 21.6909C30.4628 21.6909 31.0771 22.3024 31.0771 23.0499C31.0771 23.7973 30.4628 24.4089 29.7049 24.4089Z"
|
||||||
|
fill="#668D7B" stroke="#668D7B" stroke-width="0.4" />
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 4.1 KiB |
15
assets/svgs/generator_filled.svg
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<svg width="48" height="34" viewBox="0 0 48 34" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path
|
||||||
|
d="M20.9036 9.24207H6.37227C5.73421 9.24207 5.21531 9.76057 5.21531 10.3974V23.2331C5.21531 23.8703 5.73421 24.3884 6.37227 24.3884H20.9036C21.5414 24.3884 22.0606 23.8703 22.0606 23.2331V10.3974C22.0606 9.76057 21.5414 9.24207 20.9036 9.24207ZM36.2234 9.07577C36.0047 9.07577 35.7989 8.97268 35.6679 8.79793C35.5366 8.62319 35.4956 8.39706 35.5572 8.1875L36.7416 4.15881H33.5205L32.065 10.008H33.5862C33.9501 10.008 34.2523 10.2889 34.2787 10.6512L34.4253 12.6803L37.1793 9.07577H36.2234ZM36.2234 9.07577C36.0047 9.07577 35.7989 8.97268 35.6679 8.79793C35.5366 8.62319 35.4956 8.39706 35.5572 8.1875L36.7416 4.15881H33.5205L32.065 10.008H33.5862C33.9501 10.008 34.2523 10.2889 34.2787 10.6512L34.4253 12.6803L37.1793 9.07577H36.2234ZM20.9036 9.24207H6.37227C5.73421 9.24207 5.21531 9.76057 5.21531 10.3974V23.2331C5.21531 23.8703 5.73421 24.3884 6.37227 24.3884H20.9036C21.5414 24.3884 22.0606 23.8703 22.0606 23.2331V10.3974C22.0606 9.76057 21.5414 9.24207 20.9036 9.24207ZM46.8191 30.0375C47.2026 30.0375 47.5134 29.7272 47.5134 29.3442V6.23856C47.5134 4.83685 46.3716 3.69676 44.9679 3.69676H43.811V2.54146C43.811 1.14009 42.6692 0 41.2658 0H28.3081C26.9047 0 25.7627 1.14009 25.7627 2.54146V3.69676H2.6702C1.26648 3.69676 0.124756 4.83685 0.124756 6.23856V29.3442C0.124756 29.7272 0.43549 30.0375 0.818999 30.0375H1.83718V32.3481H0.818999C0.43549 32.3481 0.124756 32.6584 0.124756 33.0413C0.124756 33.4243 0.43549 33.7343 0.818999 33.7343H46.8191C47.2026 33.7343 47.5134 33.424 47.5134 33.0413C47.5134 32.6587 47.2026 32.3481 46.8191 32.3481H45.8009V30.0375H46.8191ZM3.82716 10.3974C3.82716 8.996 4.96889 7.85591 6.37227 7.85591H20.9036C22.307 7.85591 23.4487 8.996 23.4487 10.3974V23.2331C23.4487 24.6348 22.307 25.7749 20.9036 25.7749H6.37227C4.96889 25.7749 3.82716 24.6348 3.82716 23.2331V10.3974ZM30.5036 10.5343L32.304 3.29859C32.3808 2.98965 32.6587 2.77266 32.9776 2.77266H37.6687C37.8874 2.77266 38.0935 2.87541 38.2245 3.0505C38.3555 3.22524 38.3965 3.45137 38.3349 3.66093L37.1505 7.68928H38.5816C38.8456 7.68928 39.0866 7.83901 39.2038 8.07528C39.3209 8.31154 39.2938 8.59344 39.1337 8.803L34.4172 14.977C34.2835 15.1518 34.078 15.2498 33.8651 15.2498C33.7991 15.2498 33.7324 15.2403 33.6667 15.2207C33.3902 15.1386 33.1935 14.8939 33.1729 14.6066L32.9403 11.3945H31.1772C30.9636 11.3945 30.7622 11.2961 30.6305 11.1281C30.4988 10.9602 30.4521 10.7411 30.5036 10.5343ZM31.3159 22.8745C31.3159 23.7665 30.5895 24.4922 29.6963 24.4922C28.803 24.4922 28.0766 23.7665 28.0766 22.8745C28.0766 21.9825 28.8033 21.2571 29.6963 21.2571C30.5892 21.2571 31.3159 21.9828 31.3159 22.8745ZM39.8774 21.2571C40.7706 21.2571 41.4974 21.9828 41.4974 22.8745C41.4974 23.7661 40.7706 24.4922 39.8774 24.4922C38.9841 24.4922 38.2577 23.7665 38.2577 22.8745C38.2577 21.9825 38.9844 21.2571 39.8774 21.2571ZM44.4128 32.3481H3.22532V30.0375H44.4128V32.3481ZM34.2787 10.6512L34.4253 12.6803L37.1793 9.07577H36.2234C36.0047 9.07577 35.7989 8.97268 35.6679 8.79793C35.5366 8.62319 35.4956 8.39706 35.5572 8.1875L36.7416 4.15881H33.5205L32.065 10.008H33.5862C33.9501 10.008 34.2523 10.2889 34.2787 10.6512ZM6.37227 24.3884H20.9036C21.5414 24.3884 22.0606 23.8703 22.0606 23.2331V10.3974C22.0606 9.76057 21.5414 9.24207 20.9036 9.24207H6.37227C5.73421 9.24207 5.21531 9.76057 5.21531 10.3974V23.2331C5.21531 23.8703 5.73421 24.3884 6.37227 24.3884ZM36.2234 9.07577C36.0047 9.07577 35.7989 8.97268 35.6679 8.79793C35.5366 8.62319 35.4956 8.39706 35.5572 8.1875L36.7416 4.15881H33.5205L32.065 10.008H33.5862C33.9501 10.008 34.2523 10.2889 34.2787 10.6512L34.4253 12.6803L37.1793 9.07577H36.2234ZM36.2234 9.07577C36.0047 9.07577 35.7989 8.97268 35.6679 8.79793C35.5366 8.62319 35.4956 8.39706 35.5572 8.1875L36.7416 4.15881H33.5205L32.065 10.008H33.5862C33.9501 10.008 34.2523 10.2889 34.2787 10.6512L34.4253 12.6803L37.1793 9.07577H36.2234Z"
|
||||||
|
fill="#668D7B" />
|
||||||
|
<path
|
||||||
|
d="M46.6497 30.0518C47.0328 30.0518 47.3432 29.7414 47.3432 29.3582V6.24153C47.3432 4.83915 46.2026 3.69852 44.8002 3.69852H43.6444V2.54267C43.6444 1.14063 42.5037 0 41.1017 0H28.1564C26.7543 0 25.6134 1.14063 25.6134 2.54267V3.69852H2.54301C1.14063 3.69852 0 4.83915 0 6.24153V29.3582C0 29.7414 0.310436 30.0518 0.693578 30.0518H1.71078V32.3635H0.693578C0.310436 32.3635 0 32.6739 0 33.0571C0 33.4402 0.310436 33.7503 0.693578 33.7503H46.6497C47.0328 33.7503 47.3432 33.4399 47.3432 33.0571C47.3432 32.6743 47.0328 32.3635 46.6497 32.3635H45.6325V30.0518H46.6497ZM27.0005 2.54267C27.0005 1.90557 27.5189 1.38682 28.1564 1.38682H41.1017C41.7391 1.38682 42.2576 1.90557 42.2576 2.54267V15.488C42.2576 16.1254 41.7391 16.6439 41.1017 16.6439H28.1564C27.5189 16.6439 27.0005 16.1254 27.0005 15.488V2.54267ZM44.2456 32.3635H3.0976V30.0518H44.2456V32.3635ZM1.38716 28.6646V6.24153C1.38716 5.60409 1.90557 5.08568 2.54301 5.08568H25.6134V15.488C25.6134 16.8904 26.7543 18.031 28.1564 18.031H41.1017C42.5037 18.031 43.6444 16.8904 43.6444 15.488V5.08568H44.8002C45.4377 5.08568 45.9561 5.60409 45.9561 6.24153V28.6646H1.38716Z"
|
||||||
|
fill="#668D7B" />
|
||||||
|
<path
|
||||||
|
d="M39.7147 19.8804C38.0576 19.8804 36.7097 21.2283 36.7097 22.8853C36.7097 24.5423 38.0576 25.8906 39.7147 25.8906C41.3717 25.8906 42.7199 24.5427 42.7199 22.8853C42.7199 21.228 41.372 19.8804 39.7147 19.8804ZM39.7147 24.5038C38.8226 24.5038 38.0965 23.7777 38.0965 22.8853C38.0965 21.9929 38.8226 21.2672 39.7147 21.2672C40.6067 21.2672 41.3331 21.9932 41.3331 22.8853C41.3331 23.7774 40.6071 24.5038 39.7147 24.5038Z"
|
||||||
|
fill="#668D7B" />
|
||||||
|
<path
|
||||||
|
d="M29.543 19.8804C27.886 19.8804 26.5381 21.2283 26.5381 22.8853C26.5381 24.5423 27.886 25.8906 29.543 25.8906C31.2 25.8906 32.5483 24.5427 32.5483 22.8853C32.5483 21.228 31.2004 19.8804 29.543 19.8804ZM29.543 24.5038C28.6509 24.5038 27.9249 23.7777 27.9249 22.8853C27.9249 21.9929 28.6509 21.2672 29.543 21.2672C30.4351 21.2672 31.1612 21.9932 31.1612 22.8853C31.1612 23.7774 30.4354 24.5038 29.543 24.5038Z"
|
||||||
|
fill="#668D7B" />
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 5.9 KiB |
16
assets/svgs/headphone.svg
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<svg width="47" height="56" viewBox="0 0 47 56" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M1.75 33.25V44.8125C1.75 49.7831 5.77944 53.8125 10.75 53.8125H19.6875" stroke="white"
|
||||||
|
stroke-width="2" />
|
||||||
|
<path
|
||||||
|
d="M4.91669 23.1292H4.91673L4.91665 23.1246C4.82308 18.0532 6.71264 13.2649 10.2292 9.67329C13.7459 6.10067 18.4589 4.13647 23.5302 4.13647C33.8951 4.13647 42.3334 12.5748 42.3334 22.9396V33.7458C42.3334 34.3851 41.8007 34.9177 41.1615 34.9177C40.5223 34.9177 39.9896 34.3851 39.9896 33.7458V22.9396C39.9896 13.8723 32.6168 6.48022 23.5302 6.48022C19.085 6.48022 14.9632 8.19362 11.901 11.3136C8.82002 14.4524 7.18405 18.6306 7.26044 23.0934V33.9165C7.26044 34.579 6.74244 35.1073 6.08856 35.1073C5.44934 35.1073 4.91669 34.5747 4.91669 33.9354V23.1292Z"
|
||||||
|
fill="white" stroke="#668D7B" stroke-width="0.5" />
|
||||||
|
<path
|
||||||
|
d="M12.1619 24.625H12.3381C14.669 24.625 16.5 26.4406 16.5 28.5847V37.0403C16.5 39.1844 14.669 41 12.3381 41H12.1619C9.83102 41 8 39.1844 8 37.0403V28.5847C8 26.4406 9.83102 24.625 12.1619 24.625Z"
|
||||||
|
fill="#F1CC83" stroke="white" stroke-width="2" />
|
||||||
|
<path
|
||||||
|
d="M34.9119 24.625H35.0881C37.419 24.625 39.25 26.4406 39.25 28.5847V37.0403C39.25 39.1844 37.419 41 35.0881 41H34.9119C32.581 41 30.75 39.1844 30.75 37.0403V28.5847C30.75 26.4406 32.581 24.625 34.9119 24.625Z"
|
||||||
|
fill="#F1CC83" stroke="white" stroke-width="2" />
|
||||||
|
<rect x="17.125" y="52.125" width="5.125" height="3.375" rx="1.5" fill="#F1CC83" stroke="white" />
|
||||||
|
<rect y="29.75" width="6.125" height="4.375" rx="2" fill="white" />
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 1.6 KiB |
15
assets/svgs/home.svg
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<svg width="34" height="34" viewBox="0 0 34 34" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_59_168)">
|
||||||
|
<path
|
||||||
|
d="M32.7857 16.8543C32.7881 16.5172 32.7201 16.1833 32.5863 15.8739C32.4525 15.5645 32.2557 15.2864 32.0085 15.0572L17 1.21429L1.99143 15.0572C1.74426 15.2864 1.54752 15.5645 1.41372 15.8739C1.27993 16.1833 1.21201 16.5172 1.21429 16.8543V30.3572C1.21429 31.0012 1.47016 31.619 1.9256 32.0744C2.38105 32.5298 2.99877 32.7857 3.64285 32.7857H30.3571C31.0011 32.7857 31.619 32.5298 32.0743 32.0744C32.5299 31.619 32.7857 31.0012 32.7857 30.3572V16.8543Z"
|
||||||
|
stroke="#668D7B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path d="M17 32.7857V23.0714" stroke="#668D7B" stroke-width="2" stroke-linecap="round"
|
||||||
|
stroke-linejoin="round" />
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_59_168">
|
||||||
|
<rect width="34" height="34" fill="white" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 1001 B |
13
assets/svgs/home_filled.svg
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<svg width="31" height="31" viewBox="0 0 31 31" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_38_8)">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||||
|
d="M0.704546 13.3851C0.255183 13.804 0 14.3906 0 15.0049V27.6786C0 29.5129 1.48705 31 3.32143 31H13.2857V24.3571C13.2857 23.1342 14.2771 22.1429 15.5 22.1429C16.7229 22.1429 17.7143 23.1342 17.7143 24.3571V31H27.6786C29.5129 31 31 29.5129 31 27.6786V15.0049C31 14.3906 30.7449 13.804 30.2954 13.3851L16.2205 0.266538C15.8059 -0.0888457 15.1941 -0.0888462 14.7795 0.266538L0.704546 13.3851Z"
|
||||||
|
fill="#668D7B" />
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_38_8">
|
||||||
|
<rect width="31" height="31" fill="white" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 775 B |
22
assets/svgs/location_pin.svg
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<svg width="41" height="41" viewBox="0 0 41 41" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_52_79)">
|
||||||
|
<path d="M5.85721 29.2856L1.46436 39.5356H39.5358L35.1429 29.2856H5.85721Z" fill="#F1CC83" />
|
||||||
|
<path
|
||||||
|
d="M20.5 19.0357C22.9262 19.0357 24.8929 17.069 24.8929 14.6429C24.8929 12.2167 22.9262 10.25 20.5 10.25C18.0739 10.25 16.1072 12.2167 16.1072 14.6429C16.1072 17.069 18.0739 19.0357 20.5 19.0357Z"
|
||||||
|
fill="#F1CC83" />
|
||||||
|
<path
|
||||||
|
d="M33.6787 14.6428C33.6787 23.4285 20.5001 33.6785 20.5001 33.6785C20.5001 33.6785 7.32153 23.4285 7.32153 14.6428C7.32153 7.46488 13.3222 1.46423 20.5001 1.46423C27.678 1.46423 33.6787 7.46488 33.6787 14.6428Z"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path
|
||||||
|
d="M20.5 19.0357C22.9262 19.0357 24.8929 17.069 24.8929 14.6429C24.8929 12.2167 22.9262 10.25 20.5 10.25C18.0739 10.25 16.1072 12.2167 16.1072 14.6429C16.1072 17.069 18.0739 19.0357 20.5 19.0357Z"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path d="M32.4407 29.2856H35.1429L39.5358 39.5356H1.46436L5.85721 29.2856H8.5594"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_52_79">
|
||||||
|
<rect width="41" height="41" fill="white" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 1.4 KiB |
22
assets/svgs/logo.svg
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<svg width="203" height="60" viewBox="0 0 203 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_221_62)">
|
||||||
|
<path
|
||||||
|
d="M195.058 59.9993H0L2.0123 49.656H186.524L190.417 30.5208H178.331L175.573 44.4843H139.758L148.335 0.00793457H183.913L193.298 10.3513L185.751 17.3417L179.407 10.3513H156.826L152.219 34.141H167.118L169.765 20.1775H202.909L195.058 59.9993Z"
|
||||||
|
fill="white" />
|
||||||
|
<path
|
||||||
|
d="M130.724 44.485H110.408L112.424 34.1416H122.275L125.911 15.4598H136.367L130.724 44.485Z"
|
||||||
|
fill="#F1CC83" />
|
||||||
|
<path d="M137.367 10.352H126.906L128.919 0.00866699H139.523L137.367 10.352Z" fill="#F1CC83" />
|
||||||
|
<path
|
||||||
|
d="M121.801 10.352L123.818 0.00866699H64.0469L59.0785 25.867H98.4574L96.7676 34.1417H50.5121L57.1498 0.00866699H11.7801L3.13525 44.485H13.6388L20.2833 10.352H25.1289L18.5765 44.485H105.346L110.913 15.5237H71.4748L72.4818 10.352H121.801ZM30.8944 34.1417L35.646 10.352H44.6954L40.0666 34.1417H30.8944Z"
|
||||||
|
fill="#F1CC83" />
|
||||||
|
<path
|
||||||
|
d="M196.317 3.47191C196.317 1.41359 197.802 0 199.622 0C201.441 0 202.909 1.41359 202.909 3.47191C202.909 5.53024 201.424 6.94383 199.622 6.94383C197.819 6.94383 196.317 5.53024 196.317 3.47191ZM202.192 3.47191C202.192 1.82043 201.084 0.65163 199.622 0.65163C198.159 0.65163 197.034 1.82043 197.034 3.47191C197.034 5.1234 198.159 6.27496 199.622 6.27496C201.084 6.27496 202.192 5.13892 202.192 3.47191ZM198.34 1.64804H199.681C200.419 1.64804 201.061 1.95144 201.061 2.7927C201.061 3.21333 200.805 3.61327 200.403 3.75808L201.199 5.20787H200.378L199.775 3.99081H199.079V5.20787H198.342V1.64804H198.34ZM199.521 3.41847C199.982 3.41847 200.253 3.20644 200.253 2.8289C200.253 2.50136 200.062 2.2583 199.555 2.2583H199.077V3.41675H199.521V3.41847Z"
|
||||||
|
fill="white" />
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_221_62">
|
||||||
|
<rect width="202.909" height="60" fill="white" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
9
assets/svgs/notification.svg
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<svg width="34" height="34" viewBox="0 0 34 34" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path
|
||||||
|
d="M27.3983 20.5275L25.9817 18.1759C25.6842 17.6517 25.415 16.66 25.415 16.0792V12.495C25.415 9.16587 23.46 6.29004 20.6408 4.94421C19.9042 3.64087 18.5442 2.83337 16.9858 2.83337C15.4417 2.83337 14.0533 3.66921 13.3167 4.98671C10.5542 6.36087 8.64167 9.20837 8.64167 12.495V16.0792C8.64167 16.66 8.3725 17.6517 8.075 18.1617L6.64417 20.5275C6.0775 21.4767 5.95 22.525 6.30417 23.4884C6.64417 24.4375 7.45167 25.1742 8.5 25.5284C11.2483 26.4634 14.1383 26.9167 17.0283 26.9167C19.9183 26.9167 22.8083 26.4634 25.5567 25.5425C26.5483 25.2167 27.3133 24.4659 27.6817 23.4884C28.05 22.5109 27.9508 21.4342 27.3983 20.5275Z"
|
||||||
|
fill="#A2CCC1" />
|
||||||
|
<path
|
||||||
|
d="M21.009 28.3475C20.414 29.9909 18.8415 31.1667 16.9999 31.1667C15.8807 31.1667 14.7757 30.7134 13.9965 29.9059C13.5432 29.4809 13.2032 28.9142 13.0049 28.3334C13.189 28.3617 13.3732 28.3759 13.5715 28.4042C13.8974 28.4467 14.2374 28.4892 14.5774 28.5175C15.3849 28.5884 16.2065 28.6309 17.0282 28.6309C17.8357 28.6309 18.6432 28.5884 19.4365 28.5175C19.734 28.4892 20.0315 28.475 20.3149 28.4325C20.5415 28.4042 20.7682 28.3759 21.009 28.3475Z"
|
||||||
|
fill="#A2CCC1" />
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 1.2 KiB |
20
assets/svgs/profile_paper.svg
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<svg width="45" height="45" viewBox="0 0 45 45" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path
|
||||||
|
d="M40.1787 40.1785C40.1787 41.031 39.8399 41.8487 39.2372 42.4514C38.6345 43.054 37.8168 43.3928 36.9644 43.3928H8.03582C7.18333 43.3928 6.36577 43.054 5.76297 42.4514C5.16019 41.8487 4.82153 41.031 4.82153 40.1785V4.8214C4.82153 3.96891 5.16019 3.15136 5.76297 2.54856C6.36577 1.94576 7.18333 1.60712 8.03582 1.60712H28.9287L40.1787 12.8571V40.1785Z"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path
|
||||||
|
d="M13.1711 11.7341C13.1711 13.7762 14.8266 15.4317 16.8687 15.4317C17.385 15.4317 17.8765 15.3259 18.3229 15.1348C19.6421 14.5699 20.5663 13.2599 20.5663 11.7341C20.5663 9.69192 18.9109 8.03644 16.8687 8.03644C14.8266 8.03644 13.1711 9.69192 13.1711 11.7341Z"
|
||||||
|
fill="#F1CC83" />
|
||||||
|
<path
|
||||||
|
d="M11.25 19.093C11.8375 17.9755 12.6633 17.0518 13.6479 16.4109C14.6325 15.77 15.7428 15.4334 16.8721 15.4334C18.0014 15.4334 19.1118 15.77 20.0964 16.4109C21.081 17.0518 21.9067 17.9755 22.4943 19.093"
|
||||||
|
fill="#F1CC83" />
|
||||||
|
<path
|
||||||
|
d="M11.25 19.093C11.8375 17.9755 12.6633 17.0518 13.6479 16.4109C14.6325 15.77 15.7428 15.4334 16.8721 15.4334C18.0014 15.4334 19.1118 15.77 20.0964 16.4109C21.081 17.0518 21.9067 17.9755 22.4943 19.093"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path
|
||||||
|
d="M13.1711 11.7341C13.1711 13.7762 14.8266 15.4317 16.8687 15.4317C17.385 15.4317 17.8765 15.3259 18.3229 15.1348C19.6421 14.5699 20.5663 13.2599 20.5663 11.7341C20.5663 9.69192 18.9109 8.03644 16.8687 8.03644C14.8266 8.03644 13.1711 9.69192 13.1711 11.7341Z"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path d="M11.25 27.3214H33.75" stroke="white" stroke-width="2" stroke-linecap="round" />
|
||||||
|
<path d="M11.25 35.3571H24.1071" stroke="white" stroke-width="2" stroke-linecap="round" />
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 1.9 KiB |
7
assets/svgs/settings.svg
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<svg width="42" height="42" viewBox="0 0 42 42" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle cx="21" cy="21" r="7" fill="#F1CC83" />
|
||||||
|
<path
|
||||||
|
d="M15.69 6.75L16.98 3.42C17.1976 2.85619 17.5803 2.37123 18.0781 2.02864C18.576 1.68604 19.1657 1.50178 19.77 1.5H22.23C22.8343 1.50178 23.424 1.68604 23.9218 2.02864C24.4197 2.37123 24.8024 2.85619 25.02 3.42L26.31 6.75L30.6901 9.27L34.2301 8.73C34.8196 8.64999 35.4193 8.74701 35.9536 9.00876C36.4879 9.27051 36.9322 9.68514 37.2301 10.2L38.4301 12.3C38.7376 12.823 38.8792 13.427 38.8363 14.0323C38.7934 14.6375 38.5681 15.2155 38.1901 15.69L36.0001 18.48V23.52L38.2501 26.31C38.6281 26.7845 38.8534 27.3625 38.8963 27.9677C38.9392 28.573 38.7976 29.1769 38.4901 29.7L37.2901 31.8C36.9922 32.3148 36.5479 32.7294 36.0136 32.9913C35.4793 33.2529 34.8796 33.3501 34.2901 33.27L30.7501 32.73L26.37 35.25L25.08 38.58C24.8624 39.1437 24.4797 39.6288 23.9818 39.9714C23.484 40.314 22.8943 40.4982 22.29 40.5H19.77C19.1657 40.4982 18.576 40.314 18.0781 39.9714C17.5803 39.6288 17.1976 39.1437 16.98 38.58L15.69 35.25L11.31 32.73L7.77 33.27C7.18056 33.3501 6.58062 33.2529 6.04644 32.9913C5.51229 32.7294 5.06796 32.3148 4.77 31.8L3.57 29.7C3.2625 29.1769 3.12084 28.573 3.16368 27.9677C3.20652 27.3625 3.43188 26.7845 3.81 26.31L6 23.52V18.48L3.75 15.69C3.37188 15.2155 3.14652 14.6375 3.10368 14.0323C3.06084 13.427 3.2025 12.823 3.51 12.3L4.71 10.2C5.00796 9.68514 5.45229 9.27051 5.98644 9.00876C6.52062 8.74701 7.12056 8.64999 7.71 8.73L11.25 9.27L15.69 6.75ZM15 21C15 22.1867 15.3519 23.3467 16.0112 24.3334C16.6705 25.3201 17.6075 26.0891 18.7039 26.5433C19.8003 26.9974 21.0067 27.1162 22.1705 26.8847C23.3344 26.6532 24.4035 26.0818 25.2426 25.2426C26.0818 24.4035 26.6532 23.3344 26.8847 22.1705C27.1162 21.0067 26.9974 19.8003 26.5433 18.7039C26.0891 17.6075 25.3201 16.6705 24.3334 16.0112C23.3467 15.3519 22.1867 15 21 15C19.4087 15 17.8826 15.6321 16.7574 16.7574C15.6321 17.8826 15 19.4087 15 21Z"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 2.0 KiB |
32
assets/svgs/user_sync.svg
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<svg width="46" height="46" viewBox="0 0 46 46" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_52_101)">
|
||||||
|
<path
|
||||||
|
d="M22.9995 26.2858C19.6311 26.2858 16.7363 28.3132 15.4688 31.2143H30.5303C29.2627 28.3132 26.3679 26.2858 22.9995 26.2858Z"
|
||||||
|
fill="#F1CC83" />
|
||||||
|
<path d="M6.70166 44.1876V36.0387H14.8507" stroke="white" stroke-width="2"
|
||||||
|
stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path
|
||||||
|
d="M43.828 19.1065C45.8556 29.8892 39.2572 40.5789 28.4841 43.4657C20.2387 45.675 11.8256 42.7031 6.70166 36.5457"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path
|
||||||
|
d="M2.1724 26.8934C0.144778 16.1108 6.74331 5.42101 17.5165 2.53433C25.7613 0.325136 34.1738 3.29653 39.2979 9.45307"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path d="M39.2978 1.8125V9.96158H31.1487" stroke="white" stroke-width="2"
|
||||||
|
stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path
|
||||||
|
d="M23 21.3571C25.2683 21.3571 27.1071 19.5183 27.1071 17.25C27.1071 14.9817 25.2683 13.1428 23 13.1428C20.7317 13.1428 18.8928 14.9817 18.8928 17.25C18.8928 19.5183 20.7317 21.3571 23 21.3571Z"
|
||||||
|
fill="#F1CC83" />
|
||||||
|
<path
|
||||||
|
d="M23 21.3571C25.2683 21.3571 27.1071 19.5183 27.1071 17.25C27.1071 14.9817 25.2683 13.1428 23 13.1428C20.7317 13.1428 18.8928 14.9817 18.8928 17.25C18.8928 19.5183 20.7317 21.3571 23 21.3571Z"
|
||||||
|
stroke="white" stroke-width="2" />
|
||||||
|
<path
|
||||||
|
d="M15.4688 31.2143C16.7363 28.3132 19.6311 26.2858 22.9995 26.2858C26.3679 26.2858 29.2627 28.3132 30.5303 31.2143"
|
||||||
|
stroke="white" stroke-width="2" stroke-linecap="round" />
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_52_101">
|
||||||
|
<rect width="46" height="46" fill="white" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 1.9 KiB |
19
assets/svgs/van.svg
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<svg width="38" height="38" viewBox="0 0 38 38" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path
|
||||||
|
d="M24.8595 29.558V11.1401C24.8595 9.64105 23.6443 8.42584 22.1452 8.42584H4.62077C3.12173 8.42584 1.90649 9.64105 1.90649 11.1401V29.124C1.90649 30.6231 3.12173 31.8383 4.62077 31.8383H6.65649"
|
||||||
|
stroke="#668D7B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path d="M36.0935 21.271H24.8633" stroke="#668D7B" stroke-width="2" stroke-linecap="round"
|
||||||
|
stroke-linejoin="round" />
|
||||||
|
<path
|
||||||
|
d="M32.441 31.3318H33.3766C34.8757 31.3318 36.0909 30.1166 36.0909 28.6175V20.4721L32.3115 12.7341C31.8563 11.8021 30.9098 11.211 29.8724 11.211H25.3491"
|
||||||
|
stroke="#668D7B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path
|
||||||
|
d="M10.5804 35.7091C12.6731 35.7091 14.3695 34.0127 14.3695 31.92C14.3695 29.8273 12.6731 28.1309 10.5804 28.1309C8.48772 28.1309 6.79126 29.8273 6.79126 31.92C6.79126 34.0127 8.48772 35.7091 10.5804 35.7091Z"
|
||||||
|
stroke="#668D7B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path
|
||||||
|
d="M27.7806 35.7091C29.8733 35.7091 31.5697 34.0127 31.5697 31.92C31.5697 29.8273 29.8733 28.1309 27.7806 28.1309C25.6879 28.1309 23.9915 29.8273 23.9915 31.92C23.9915 34.0127 25.6879 35.7091 27.7806 35.7091Z"
|
||||||
|
stroke="#668D7B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
||||||
|
<path d="M23.2808 31.8378H15.3076" stroke="#668D7B" stroke-width="2" stroke-linecap="round"
|
||||||
|
stroke-linejoin="round" />
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 1.5 KiB |
6
assets/svgs/van_filled.svg
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<svg width="37" height="37" viewBox="0 0 37 37" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||||
|
d="M36.1842 19.0593L32.6478 11.8186C31.9831 10.4574 30.6006 9.59415 29.0857 9.59415H27.9282V19.0593H36.1842ZM24.6246 8.32933C23.8975 7.44572 22.7955 6.88226 21.5619 6.88226H4.49859C2.30917 6.88226 0.534302 8.65713 0.534302 10.8465V28.3571C0.534302 30.5464 2.30918 32.3214 4.49859 32.3214H5.30181C5.47304 34.9335 7.64613 36.9995 10.3017 36.9995C12.9572 36.9995 15.1303 34.9335 15.3016 32.3214H22.0494C22.2206 34.9335 24.3937 36.9995 27.0492 36.9995C29.8165 36.9995 32.06 34.7559 32.06 31.9886C32.06 31.935 32.0592 31.8816 32.0574 31.8282H32.4977C34.687 31.8282 36.462 30.0535 36.462 27.8639V22.3629H26.2763C25.3641 22.3629 24.6246 21.6234 24.6246 20.7111V8.32933Z"
|
||||||
|
fill="#668D7B" />
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 855 B |
7
assets/svgs/x.svg
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M22 2L2 22" stroke="white" stroke-width="3" stroke-linecap="round"
|
||||||
|
stroke-linejoin="round" />
|
||||||
|
<path d="M2 2L22 22" stroke="white" stroke-width="3" stroke-linecap="round"
|
||||||
|
stroke-linejoin="round" />
|
||||||
|
</svg>
|
||||||
|
|
After Width: | Height: | Size: 337 B |
34
ios/.gitignore
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
**/dgph
|
||||||
|
*.mode1v3
|
||||||
|
*.mode2v3
|
||||||
|
*.moved-aside
|
||||||
|
*.pbxuser
|
||||||
|
*.perspectivev3
|
||||||
|
**/*sync/
|
||||||
|
.sconsign.dblite
|
||||||
|
.tags*
|
||||||
|
**/.vagrant/
|
||||||
|
**/DerivedData/
|
||||||
|
Icon?
|
||||||
|
**/Pods/
|
||||||
|
**/.symlinks/
|
||||||
|
profile
|
||||||
|
xcuserdata
|
||||||
|
**/.generated/
|
||||||
|
Flutter/App.framework
|
||||||
|
Flutter/Flutter.framework
|
||||||
|
Flutter/Flutter.podspec
|
||||||
|
Flutter/Generated.xcconfig
|
||||||
|
Flutter/ephemeral/
|
||||||
|
Flutter/app.flx
|
||||||
|
Flutter/app.zip
|
||||||
|
Flutter/flutter_assets/
|
||||||
|
Flutter/flutter_export_environment.sh
|
||||||
|
ServiceDefinitions.json
|
||||||
|
Runner/GeneratedPluginRegistrant.*
|
||||||
|
|
||||||
|
# Exceptions to above rules.
|
||||||
|
!default.mode1v3
|
||||||
|
!default.mode2v3
|
||||||
|
!default.pbxuser
|
||||||
|
!default.perspectivev3
|
26
ios/Flutter/AppFrameworkInfo.plist
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>en</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>App</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>io.flutter.flutter.app</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>App</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>FMWK</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>MinimumOSVersion</key>
|
||||||
|
<string>12.0</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
1
ios/Flutter/Debug.xcconfig
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "Generated.xcconfig"
|
1
ios/Flutter/Release.xcconfig
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "Generated.xcconfig"
|
616
ios/Runner.xcodeproj/project.pbxproj
Normal file
@ -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.gascom;
|
||||||
|
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.gascom.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.gascom.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.gascom.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 = 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;
|
||||||
|
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 = 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;
|
||||||
|
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.gascom;
|
||||||
|
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.gascom;
|
||||||
|
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 */;
|
||||||
|
}
|
7
ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
@ -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>
|
98
ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
Normal file
@ -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>
|
7
ios/Runner.xcworkspace/contents.xcworkspacedata
generated
Normal file
@ -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>
|
13
ios/Runner/AppDelegate.swift
Normal file
@ -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)
|
||||||
|
}
|
||||||
|
}
|
122
ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"size" : "20x20",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"filename" : "Icon-App-20x20@2x.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "20x20",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"filename" : "Icon-App-20x20@3x.png",
|
||||||
|
"scale" : "3x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "29x29",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"filename" : "Icon-App-29x29@1x.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "29x29",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"filename" : "Icon-App-29x29@2x.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "29x29",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"filename" : "Icon-App-29x29@3x.png",
|
||||||
|
"scale" : "3x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "40x40",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"filename" : "Icon-App-40x40@2x.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "40x40",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"filename" : "Icon-App-40x40@3x.png",
|
||||||
|
"scale" : "3x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "60x60",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"filename" : "Icon-App-60x60@2x.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "60x60",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"filename" : "Icon-App-60x60@3x.png",
|
||||||
|
"scale" : "3x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "20x20",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"filename" : "Icon-App-20x20@1x.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "20x20",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"filename" : "Icon-App-20x20@2x.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "29x29",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"filename" : "Icon-App-29x29@1x.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "29x29",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"filename" : "Icon-App-29x29@2x.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "40x40",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"filename" : "Icon-App-40x40@1x.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "40x40",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"filename" : "Icon-App-40x40@2x.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "76x76",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"filename" : "Icon-App-76x76@1x.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "76x76",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"filename" : "Icon-App-76x76@2x.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "83.5x83.5",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"filename" : "Icon-App-83.5x83.5@2x.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "1024x1024",
|
||||||
|
"idiom" : "ios-marketing",
|
||||||
|
"filename" : "Icon-App-1024x1024@1x.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"version" : 1,
|
||||||
|
"author" : "xcode"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 295 B |
After Width: | Height: | Size: 406 B |
After Width: | Height: | Size: 450 B |
After Width: | Height: | Size: 282 B |
After Width: | Height: | Size: 462 B |
After Width: | Height: | Size: 704 B |
After Width: | Height: | Size: 406 B |
After Width: | Height: | Size: 586 B |
After Width: | Height: | Size: 862 B |
After Width: | Height: | Size: 862 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 762 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
23
ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"filename" : "LaunchImage.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"filename" : "LaunchImage@2x.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"filename" : "LaunchImage@3x.png",
|
||||||
|
"scale" : "3x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"version" : 1,
|
||||||
|
"author" : "xcode"
|
||||||
|
}
|
||||||
|
}
|
BIN
ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
vendored
Normal file
After Width: | Height: | Size: 68 B |
BIN
ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
vendored
Normal file
After Width: | Height: | Size: 68 B |
BIN
ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
vendored
Normal file
After Width: | Height: | Size: 68 B |
5
ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Launch Screen Assets
|
||||||
|
|
||||||
|
You can customize the launch screen with your own desired assets by replacing the image files in this directory.
|
||||||
|
|
||||||
|
You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
|
37
ios/Runner/Base.lproj/LaunchScreen.storyboard
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
|
||||||
|
</dependencies>
|
||||||
|
<scenes>
|
||||||
|
<!--View Controller-->
|
||||||
|
<scene sceneID="EHf-IW-A2E">
|
||||||
|
<objects>
|
||||||
|
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||||
|
<layoutGuides>
|
||||||
|
<viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
|
||||||
|
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
|
||||||
|
</layoutGuides>
|
||||||
|
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
|
||||||
|
</imageView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
|
||||||
|
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="53" y="375"/>
|
||||||
|
</scene>
|
||||||
|
</scenes>
|
||||||
|
<resources>
|
||||||
|
<image name="LaunchImage" width="168" height="185"/>
|
||||||
|
</resources>
|
||||||
|
</document>
|
26
ios/Runner/Base.lproj/Main.storyboard
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
|
||||||
|
</dependencies>
|
||||||
|
<scenes>
|
||||||
|
<!--Flutter View Controller-->
|
||||||
|
<scene sceneID="tne-QT-ifu">
|
||||||
|
<objects>
|
||||||
|
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
|
||||||
|
<layoutGuides>
|
||||||
|
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
|
||||||
|
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
|
||||||
|
</layoutGuides>
|
||||||
|
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||||
|
</view>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
</scene>
|
||||||
|
</scenes>
|
||||||
|
</document>
|
64
ios/Runner/Info.plist
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<?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>Gascom</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>gascom</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/>
|
||||||
|
<key>NSCameraUsageDescription</key>
|
||||||
|
<string>To detect faces when completing a legal action, to scan national ids</string>
|
||||||
|
|
||||||
|
<key>NSLocationWhenInUseUsageDescription</key>
|
||||||
|
<string>To enable GPS location access for Exif data</string>
|
||||||
|
|
||||||
|
<key>NFCReaderUsageDescription</key>
|
||||||
|
<string>Need NFC permission for reading NFC tags</string>
|
||||||
|
|
||||||
|
<key>com.apple.developer.nfc.readersession.formats</key>
|
||||||
|
<array>
|
||||||
|
<string>NDEF</string>
|
||||||
|
<string>TAG</string>
|
||||||
|
</array>
|
||||||
|
|
||||||
|
</dict>
|
||||||
|
</plist>
|
1
ios/Runner/Runner-Bridging-Header.h
Normal file
@ -0,0 +1 @@
|
|||||||
|
#import "GeneratedPluginRegistrant.h"
|
12
ios/RunnerTests/RunnerTests.swift
Normal file
@ -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.
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
87
lib/constants/app_theme.dart
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class AppTheme {
|
||||||
|
|
||||||
|
static const primaryColor = Color(0xFF668D7B);
|
||||||
|
static const secondaryColor = Color(0xFFBEDDCC);
|
||||||
|
static const cardColor = Color(0xFF93B5A4);
|
||||||
|
static const yellowColor = Color(0xFFF1CC83);
|
||||||
|
static const redColor = Colors.red;
|
||||||
|
static const brownColor = Color(0xFF6B6148);
|
||||||
|
static const blackColor = Color(0xFF444444);
|
||||||
|
static const textColor = Color(0xFFFFFFFF);
|
||||||
|
|
||||||
|
static get theme => ThemeData(
|
||||||
|
useMaterial3: true,
|
||||||
|
colorScheme: ColorScheme.fromSeed(
|
||||||
|
seedColor: primaryColor,
|
||||||
|
surface: primaryColor,
|
||||||
|
),
|
||||||
|
scaffoldBackgroundColor: primaryColor,
|
||||||
|
textTheme: const TextTheme(
|
||||||
|
bodySmall: bodySmall,
|
||||||
|
bodyMedium: bodyMedium,
|
||||||
|
bodyLarge: bodyLarge,
|
||||||
|
titleLarge: titleLarge,
|
||||||
|
headlineLarge: headlineLarge,
|
||||||
|
),
|
||||||
|
elevatedButtonTheme: ElevatedButtonThemeData(
|
||||||
|
style: ButtonStyle(
|
||||||
|
elevation: WidgetStateProperty.all(0),
|
||||||
|
backgroundColor: WidgetStateProperty.all(textColor),
|
||||||
|
padding: WidgetStateProperty.all(const EdgeInsets.symmetric(vertical: 0, horizontal: 4)),
|
||||||
|
foregroundColor: WidgetStateProperty.all(primaryColor),
|
||||||
|
textStyle: WidgetStateProperty.all(
|
||||||
|
bodyMedium
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
outlinedButtonTheme: OutlinedButtonThemeData(
|
||||||
|
style: ButtonStyle(
|
||||||
|
elevation: WidgetStateProperty.all(0),
|
||||||
|
backgroundColor: WidgetStateProperty.all(primaryColor),
|
||||||
|
padding: WidgetStateProperty.all(const EdgeInsets.symmetric(vertical: 0, horizontal: 4)),
|
||||||
|
foregroundColor: WidgetStateProperty.all(textColor),
|
||||||
|
textStyle: WidgetStateProperty.all(
|
||||||
|
bodyMedium
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
cardColor: cardColor,
|
||||||
|
);
|
||||||
|
|
||||||
|
static const bodySmall = TextStyle(
|
||||||
|
color: textColor,
|
||||||
|
fontSize: 14,
|
||||||
|
fontWeight: FontWeight.w300,
|
||||||
|
fontFamily: 'NotoSansArabic',
|
||||||
|
);
|
||||||
|
|
||||||
|
static const bodyMedium = TextStyle(
|
||||||
|
color: textColor,
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
fontFamily: 'NotoSansArabic',
|
||||||
|
);
|
||||||
|
|
||||||
|
static const bodyLarge = TextStyle(
|
||||||
|
color: textColor,
|
||||||
|
fontSize: 18,
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
fontFamily: 'NotoSansArabic',
|
||||||
|
);
|
||||||
|
|
||||||
|
static const titleLarge = TextStyle(
|
||||||
|
color: textColor,
|
||||||
|
fontSize: 22,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
fontFamily: 'NotoSansArabic',
|
||||||
|
);
|
||||||
|
|
||||||
|
static const headlineLarge = TextStyle(
|
||||||
|
color: textColor,
|
||||||
|
fontSize: 32,
|
||||||
|
fontWeight: FontWeight.w700,
|
||||||
|
fontFamily: 'NotoSansArabic',
|
||||||
|
);
|
||||||
|
}
|
47
lib/extensions/face_detection_extension.dart
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
|
||||||
|
import 'package:camerawesome/camerawesome_plugin.dart';
|
||||||
|
import 'package:google_mlkit_commons/google_mlkit_commons.dart';
|
||||||
|
|
||||||
|
extension MLKitUtils on AnalysisImage {
|
||||||
|
InputImage toInputImage() {
|
||||||
|
|
||||||
|
return when(
|
||||||
|
nv21: (image) {
|
||||||
|
return InputImage.fromBytes(
|
||||||
|
bytes: image.bytes,
|
||||||
|
metadata: InputImageMetadata(
|
||||||
|
rotation: inputImageRotation,
|
||||||
|
format: InputImageFormat.nv21,
|
||||||
|
size: image.size,
|
||||||
|
bytesPerRow: image.planes.first.bytesPerRow,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
bgra8888: (image) {
|
||||||
|
return InputImage.fromBytes(
|
||||||
|
bytes: image.bytes,
|
||||||
|
metadata: InputImageMetadata(
|
||||||
|
size: size,
|
||||||
|
rotation: inputImageRotation,
|
||||||
|
format: InputImageFormat.nv21,
|
||||||
|
bytesPerRow: image.planes.first.bytesPerRow,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
)!;
|
||||||
|
}
|
||||||
|
|
||||||
|
InputImageRotation get inputImageRotation =>
|
||||||
|
InputImageRotation.values.byName(rotation.name);
|
||||||
|
|
||||||
|
InputImageFormat get inputImageFormat {
|
||||||
|
switch (format) {
|
||||||
|
case InputAnalysisImageFormat.bgra8888:
|
||||||
|
return InputImageFormat.bgra8888;
|
||||||
|
case InputAnalysisImageFormat.nv21:
|
||||||
|
return InputImageFormat.nv21;
|
||||||
|
default:
|
||||||
|
return InputImageFormat.yuv420;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
37
lib/main.dart
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gascom/constants/app_theme.dart';
|
||||||
|
import 'package:gascom/screens/log_in_screen.dart';
|
||||||
|
|
||||||
|
void main() async {
|
||||||
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
|
|
||||||
|
await EasyLocalization.ensureInitialized();
|
||||||
|
const List<Locale> supportedLocales = [Locale("ar")];
|
||||||
|
|
||||||
|
runApp(EasyLocalization(
|
||||||
|
supportedLocales: supportedLocales,
|
||||||
|
path: 'assets/languages',
|
||||||
|
startLocale: const Locale("ar"),
|
||||||
|
fallbackLocale: const Locale("ar"),
|
||||||
|
saveLocale: true,
|
||||||
|
child: const MyApp(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyApp extends StatelessWidget {
|
||||||
|
const MyApp({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return MaterialApp(
|
||||||
|
title: 'Gascom',
|
||||||
|
debugShowCheckedModeBanner: false,
|
||||||
|
theme: AppTheme.theme,
|
||||||
|
localizationsDelegates: context.localizationDelegates,
|
||||||
|
supportedLocales: context.supportedLocales,
|
||||||
|
locale: context.locale,
|
||||||
|
home: const LogInScreen(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
118
lib/screens/change_engine_screen.dart
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
import 'package:auto_size_text/auto_size_text.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gascom/screens/success_screen.dart';
|
||||||
|
import 'package:gascom/widgets/app_button.dart';
|
||||||
|
import 'package:gascom/widgets/app_text_field.dart';
|
||||||
|
import 'package:gascom/widgets/custom_app_bar.dart';
|
||||||
|
import 'package:persistent_bottom_nav_bar_v2/persistent_bottom_nav_bar_v2.dart';
|
||||||
|
|
||||||
|
class ChangeEngineScreen extends StatefulWidget {
|
||||||
|
const ChangeEngineScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<ChangeEngineScreen> createState() => _ChangeEngineScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ChangeEngineScreenState extends State<ChangeEngineScreen> {
|
||||||
|
TextEditingController reasonController = TextEditingController();
|
||||||
|
TextEditingController countryController = TextEditingController();
|
||||||
|
TextEditingController engineNumberController = TextEditingController();
|
||||||
|
TextEditingController enginePowerController = TextEditingController();
|
||||||
|
TextEditingController engineTypeController = TextEditingController();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: const CustomAppBar(
|
||||||
|
title: "تبديل المحرك",
|
||||||
|
),
|
||||||
|
body: SafeArea(
|
||||||
|
child: ListView(
|
||||||
|
padding: const EdgeInsets.all(20.0),
|
||||||
|
children: [
|
||||||
|
AutoSizeText(
|
||||||
|
"لتبديل المحرك يرجى تزويدنا بمعلومات المحرك الجديد الجديد.",
|
||||||
|
maxLines: 3,
|
||||||
|
style: Theme.of(context).textTheme.bodyLarge,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 20.0),
|
||||||
|
AutoSizeText(
|
||||||
|
"سبب التبديل",
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 5.0),
|
||||||
|
AppTextField(
|
||||||
|
controller: reasonController,
|
||||||
|
keyboardType: TextInputType.multiline,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15.0),
|
||||||
|
AutoSizeText(
|
||||||
|
"منشأ المحرك الجديد",
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 5.0),
|
||||||
|
AppTextField(
|
||||||
|
controller: countryController,
|
||||||
|
keyboardType: TextInputType.multiline,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15.0),
|
||||||
|
AutoSizeText(
|
||||||
|
"رقم المحرك",
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 5.0),
|
||||||
|
AppTextField(
|
||||||
|
controller: engineNumberController,
|
||||||
|
keyboardType: TextInputType.multiline,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15.0),
|
||||||
|
AutoSizeText(
|
||||||
|
"القدرة التوليدية (KV.A)",
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 5.0),
|
||||||
|
AppTextField(
|
||||||
|
controller: enginePowerController,
|
||||||
|
keyboardType: TextInputType.multiline,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15.0),
|
||||||
|
AutoSizeText(
|
||||||
|
"نوع المحرك",
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 5.0),
|
||||||
|
AppTextField(
|
||||||
|
controller: engineTypeController,
|
||||||
|
keyboardType: TextInputType.multiline,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 25.0),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
width: 200,
|
||||||
|
child: AppButton(
|
||||||
|
onPressed: handleSendRequest,
|
||||||
|
label: "تاكيد",
|
||||||
|
isElevated: true),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleSendRequest() {
|
||||||
|
// handle request
|
||||||
|
|
||||||
|
pushScreenWithoutNavBar(
|
||||||
|
context,
|
||||||
|
const SuccessScreen(
|
||||||
|
title: "تم تقديم الطلب بنجاح",
|
||||||
|
subtitle: "سيتم مراجعة طلبك، واعلامك بالموافقة قريباً"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
127
lib/screens/change_location.dart
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
import 'package:auto_size_text/auto_size_text.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gascom/screens/document_camera_screen.dart';
|
||||||
|
import 'package:gascom/widgets/app_button.dart';
|
||||||
|
import 'package:gascom/widgets/app_text_field.dart';
|
||||||
|
import 'package:gascom/widgets/custom_app_bar.dart';
|
||||||
|
|
||||||
|
class ChangeLocationScreen extends StatefulWidget {
|
||||||
|
const ChangeLocationScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<ChangeLocationScreen> createState() => _ChangeLocationScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ChangeLocationScreenState extends State<ChangeLocationScreen> {
|
||||||
|
|
||||||
|
TextEditingController reasonController = TextEditingController();
|
||||||
|
TextEditingController districtController = TextEditingController();
|
||||||
|
TextEditingController mahalaController = TextEditingController();
|
||||||
|
TextEditingController streetController = TextEditingController();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: const CustomAppBar(
|
||||||
|
title: "تحويل موقع المولدة",
|
||||||
|
),
|
||||||
|
body: SafeArea(
|
||||||
|
child: ListView(
|
||||||
|
padding: const EdgeInsets.all(20.0),
|
||||||
|
children: [
|
||||||
|
AutoSizeText(
|
||||||
|
"لتحويل الموقع يرجى تزويدنا بمعلومات دقيقة للموقع الجديد بالاضافة الى سند ملكية للارض الجديدة.",
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium,
|
||||||
|
maxLines: 2,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 20.0),
|
||||||
|
|
||||||
|
AutoSizeText(
|
||||||
|
"سبب التحويل",
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 5.0),
|
||||||
|
AppTextField(
|
||||||
|
controller: reasonController,
|
||||||
|
keyboardType: TextInputType.multiline,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15.0),
|
||||||
|
|
||||||
|
AutoSizeText(
|
||||||
|
"المنطقة",
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 5.0),
|
||||||
|
AppTextField(
|
||||||
|
controller: districtController,
|
||||||
|
keyboardType: TextInputType.multiline,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15.0),
|
||||||
|
|
||||||
|
AutoSizeText(
|
||||||
|
"المحلة",
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 5.0),
|
||||||
|
AppTextField(
|
||||||
|
controller: mahalaController,
|
||||||
|
keyboardType: TextInputType.multiline,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15.0),
|
||||||
|
|
||||||
|
AutoSizeText(
|
||||||
|
"الزقاق",
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 5.0),
|
||||||
|
AppTextField(
|
||||||
|
controller: streetController,
|
||||||
|
keyboardType: TextInputType.multiline,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15.0),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
width: 200,
|
||||||
|
child: AppButton(
|
||||||
|
onPressed: handleSetLocationOnMap,
|
||||||
|
label: "تحديد على الخريطة",
|
||||||
|
isElevated: false
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const SizedBox(height: 25.0),
|
||||||
|
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
width: 200,
|
||||||
|
child: AppButton(
|
||||||
|
onPressed: handleSendRequest,
|
||||||
|
label: "تاكيد",
|
||||||
|
isElevated: true
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleSendRequest() {
|
||||||
|
// handle request
|
||||||
|
|
||||||
|
Navigator.push(context, MaterialPageRoute(
|
||||||
|
fullscreenDialog: true,
|
||||||
|
builder: (context) => const DocumentCameraScreen(title: "سند ملكية", description: "ضع سند ملكية الارض الجديدة في المربع، وتاكد من وجود اضاءة مناسبة",),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleSetLocationOnMap() {
|
||||||
|
}
|
||||||
|
}
|
126
lib/screens/document_camera_screen.dart
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
import 'package:auto_size_text/auto_size_text.dart';
|
||||||
|
import 'package:camerawesome/camerawesome_plugin.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gascom/constants/app_theme.dart';
|
||||||
|
import 'package:gascom/screens/success_screen.dart';
|
||||||
|
import 'package:gascom/widgets/app_button.dart';
|
||||||
|
import 'package:gascom/widgets/custom_app_bar.dart';
|
||||||
|
|
||||||
|
class DocumentCameraScreen extends StatefulWidget {
|
||||||
|
const DocumentCameraScreen({
|
||||||
|
super.key,
|
||||||
|
required this.title,
|
||||||
|
required this.description,
|
||||||
|
});
|
||||||
|
|
||||||
|
final String title;
|
||||||
|
final String description;
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<DocumentCameraScreen> createState() => _DocumentCameraScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _DocumentCameraScreenState extends State<DocumentCameraScreen> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: CustomAppBar(
|
||||||
|
title: widget.title,
|
||||||
|
),
|
||||||
|
body: SafeArea(
|
||||||
|
child: CameraAwesomeBuilder.custom(
|
||||||
|
sensorConfig: SensorConfig.single(
|
||||||
|
aspectRatio: CameraAspectRatios.ratio_16_9,
|
||||||
|
flashMode: FlashMode.none,
|
||||||
|
sensor: Sensor.position(SensorPosition.back),
|
||||||
|
zoom: 0.0,
|
||||||
|
),
|
||||||
|
saveConfig: SaveConfig.photo(
|
||||||
|
|
||||||
|
),
|
||||||
|
builder: (state, previewSize) {
|
||||||
|
return Stack(
|
||||||
|
children: [
|
||||||
|
Center(
|
||||||
|
child: ClipPath(
|
||||||
|
clipper: HoleClipper(),
|
||||||
|
child: Container(
|
||||||
|
color: AppTheme.primaryColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
bottom: 130,
|
||||||
|
left: 20,
|
||||||
|
right: 20,
|
||||||
|
child: AutoSizeText(
|
||||||
|
widget.description,
|
||||||
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
maxLines: 2,
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
bottom: 70,
|
||||||
|
left: 20,
|
||||||
|
right: 20,
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
width: 200,
|
||||||
|
child: AppButton(
|
||||||
|
onPressed: () {
|
||||||
|
// save image as bytes in a variable using the state object
|
||||||
|
// state.when(
|
||||||
|
// onPhotoMode:(s) => s.takePhoto(
|
||||||
|
// onPhoto: (request) => request.when(
|
||||||
|
// single: (r) => r.path,
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// );
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => const SuccessScreen(title: 'تم تقديم الطلب بنجاح', subtitle: 'سيتم مراجعة طلبك، واعلامك بموعد الكشف الموقعي',),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
label: "التقاط",
|
||||||
|
isElevated: true
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class HoleClipper extends CustomClipper<Path> {
|
||||||
|
@override
|
||||||
|
Path getClip(Size size) {
|
||||||
|
final path = Path()
|
||||||
|
..addRect(Rect.fromLTWH(0, 0, size.width, size.height))
|
||||||
|
..addRRect(RRect.fromRectAndRadius(
|
||||||
|
Rect.fromCenter(
|
||||||
|
center: Offset(size.width / 2, size.height * 0.38),
|
||||||
|
width: size.width - (size.width * 0.2), // Adjust the width of the square
|
||||||
|
height: size.height - (size.height * 0.3), // Adjust the height of the square to match the width for a square shape
|
||||||
|
),
|
||||||
|
const Radius.circular(20), // Adjust the border radius as needed
|
||||||
|
))
|
||||||
|
..fillType = PathFillType.evenOdd;
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool shouldReclip(covariant CustomClipper<Path> oldClipper) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
276
lib/screens/face_detection_screen.dart
Normal file
@ -0,0 +1,276 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:camerawesome/camerawesome_plugin.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gascom/constants/app_theme.dart';
|
||||||
|
import 'package:gascom/extensions/face_detection_extension.dart';
|
||||||
|
import 'package:gascom/screens/order_details_screen.dart';
|
||||||
|
import 'package:gascom/widgets/custom_app_bar.dart';
|
||||||
|
import 'package:google_mlkit_face_detection/google_mlkit_face_detection.dart';
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
|
||||||
|
class FaceDetectionScreen extends StatefulWidget {
|
||||||
|
const FaceDetectionScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<FaceDetectionScreen> createState() => _FaceDetectionScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _FaceDetectionScreenState extends State<FaceDetectionScreen> {
|
||||||
|
|
||||||
|
String message = "ضع وجهك في الدائرة المخصصة وتاكد من وجود اضاءة مناسبة";
|
||||||
|
|
||||||
|
final options = FaceDetectorOptions(
|
||||||
|
enableContours: true,
|
||||||
|
enableClassification: true,
|
||||||
|
enableLandmarks: true,
|
||||||
|
performanceMode: FaceDetectorMode.accurate,
|
||||||
|
minFaceSize: 0.5,
|
||||||
|
);
|
||||||
|
|
||||||
|
late final faceDetector = FaceDetector(options: options);
|
||||||
|
|
||||||
|
// Face stability tracking
|
||||||
|
DateTime? _stableStartTime;
|
||||||
|
Rect? _lastFacePosition;
|
||||||
|
|
||||||
|
// Constants for stability detection
|
||||||
|
final double _movementThreshold = 40;
|
||||||
|
final Duration _requiredStableTime = const Duration(seconds: 2);
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
faceDetector.close();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: const CustomAppBar(
|
||||||
|
title: "تحقق الوجه",
|
||||||
|
),
|
||||||
|
body: SafeArea(
|
||||||
|
child: Stack(
|
||||||
|
children: [
|
||||||
|
CameraAwesomeBuilder.previewOnly(
|
||||||
|
builder: (state, preview) => const SizedBox(),
|
||||||
|
imageAnalysisConfig: AnalysisConfig(
|
||||||
|
maxFramesPerSecond: 10,
|
||||||
|
),
|
||||||
|
onImageForAnalysis: handleImageAnalysis,
|
||||||
|
sensorConfig: SensorConfig.single(
|
||||||
|
aspectRatio: CameraAspectRatios.ratio_4_3,
|
||||||
|
flashMode: FlashMode.none,
|
||||||
|
sensor: Sensor.position(SensorPosition.front),
|
||||||
|
zoom: 0.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Center(
|
||||||
|
child: ClipPath(
|
||||||
|
clipper: HoleClipper(),
|
||||||
|
child: Container(
|
||||||
|
color: AppTheme.primaryColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Positioned(
|
||||||
|
bottom: 50,
|
||||||
|
left: 20,
|
||||||
|
right: 20,
|
||||||
|
child: Text(
|
||||||
|
message,
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool _isFaceStable(Rect currentFace) {
|
||||||
|
if (_lastFacePosition == null) {
|
||||||
|
_lastFacePosition = currentFace;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final double movement =
|
||||||
|
(currentFace.center.dx - _lastFacePosition!.center.dx).abs()
|
||||||
|
+ (currentFace.center.dy - _lastFacePosition!.center.dy).abs();
|
||||||
|
|
||||||
|
_lastFacePosition = currentFace;
|
||||||
|
return movement < _movementThreshold;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool _isFaceCovered(Face face) {
|
||||||
|
// Check if essential face contours are present and visible
|
||||||
|
final requiredContours = [
|
||||||
|
FaceContourType.face,
|
||||||
|
FaceContourType.leftEye,
|
||||||
|
FaceContourType.rightEye,
|
||||||
|
FaceContourType.noseBridge,
|
||||||
|
FaceContourType.noseBottom,
|
||||||
|
FaceContourType.leftCheek,
|
||||||
|
FaceContourType.rightCheek,
|
||||||
|
FaceContourType.upperLipTop,
|
||||||
|
FaceContourType.upperLipBottom,
|
||||||
|
FaceContourType.lowerLipTop,
|
||||||
|
FaceContourType.lowerLipBottom,
|
||||||
|
];
|
||||||
|
|
||||||
|
// Count visible contours
|
||||||
|
int visibleContours = 0;
|
||||||
|
for (var contourType in requiredContours) {
|
||||||
|
if (face.contours[contourType]?.points.isNotEmpty ?? false) {
|
||||||
|
visibleContours++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check landmarks visibility
|
||||||
|
final hasEssentialLandmarks =
|
||||||
|
face.landmarks[FaceLandmarkType.leftEye] != null &&
|
||||||
|
face.landmarks[FaceLandmarkType.rightEye] != null &&
|
||||||
|
face.landmarks[FaceLandmarkType.noseBase] != null &&
|
||||||
|
face.landmarks[FaceLandmarkType.bottomMouth] != null &&
|
||||||
|
face.landmarks[FaceLandmarkType.leftMouth] != null &&
|
||||||
|
face.landmarks[FaceLandmarkType.rightMouth] != null &&
|
||||||
|
face.landmarks[FaceLandmarkType.leftEar] != null &&
|
||||||
|
face.landmarks[FaceLandmarkType.rightEar] != null;
|
||||||
|
|
||||||
|
// Check if eyes are open (existing check enhanced)
|
||||||
|
final eyesOpen = (face.rightEyeOpenProbability ?? 0) > 0.7 && (face.leftEyeOpenProbability ?? 0) > 0.7;
|
||||||
|
|
||||||
|
print("@@@@@@@@@@@@@@@@@@");
|
||||||
|
print(visibleContours);
|
||||||
|
print(hasEssentialLandmarks);
|
||||||
|
print(eyesOpen);
|
||||||
|
return !hasEssentialLandmarks ||
|
||||||
|
visibleContours != requiredContours.length ||
|
||||||
|
!eyesOpen;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> handleImageAnalysis(AnalysisImage img) async {
|
||||||
|
final inputImage = img.toInputImage();
|
||||||
|
|
||||||
|
try {
|
||||||
|
final faces = await faceDetector.processImage(inputImage);
|
||||||
|
|
||||||
|
if (!context.mounted || !mounted) return;
|
||||||
|
if (faces.length == 1) {
|
||||||
|
|
||||||
|
var face = faces.first;
|
||||||
|
var rect = faces.first.boundingBox;
|
||||||
|
final bool isStable = _isFaceStable(rect);
|
||||||
|
|
||||||
|
// Check if face is covered
|
||||||
|
if (_isFaceCovered(face)) {
|
||||||
|
setState(() {
|
||||||
|
message = "الرجاء إزالة أي غطاء عن الوجه";
|
||||||
|
});
|
||||||
|
_stableStartTime = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isStable) {
|
||||||
|
setState(() {
|
||||||
|
message = "ثبت وجهك في المكان المخصص وتأكد من أنه وجه حقيقي";
|
||||||
|
});
|
||||||
|
_stableStartTime = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(
|
||||||
|
rect.left > (inputImage.metadata?.size.width ?? 0) * 0.1
|
||||||
|
&& rect.right < (inputImage.metadata?.size.width ?? 0) * 0.9
|
||||||
|
&& rect.top > (inputImage.metadata?.size.height ?? 0) * 0.1
|
||||||
|
&& rect.bottom < (inputImage.metadata?.size.height ?? 0) * 0.9
|
||||||
|
&& (faces.first.rightEyeOpenProbability ?? 0) > 0.3
|
||||||
|
&& (faces.first.leftEyeOpenProbability ?? 0) > 0.3
|
||||||
|
)) {
|
||||||
|
setState(() {
|
||||||
|
message = "ثبت وجهك في المكان المخصص";
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_stableStartTime ??= DateTime.now();
|
||||||
|
|
||||||
|
final stableDuration = DateTime.now().difference(_stableStartTime!);
|
||||||
|
if (stableDuration >= _requiredStableTime) {
|
||||||
|
img.when(
|
||||||
|
nv21: (image) {
|
||||||
|
faceDetector.close();
|
||||||
|
|
||||||
|
Navigator.pop(context);
|
||||||
|
Navigator.pushReplacement(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(builder: (context) => const OrderDetailsScreen()),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
bgra8888: (image) {
|
||||||
|
faceDetector.close();
|
||||||
|
Navigator.pop(context);
|
||||||
|
Navigator.pushReplacement(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(builder: (context) => const OrderDetailsScreen()),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
setState(() {
|
||||||
|
message = "ثبت وجهك في المكان المخصص";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
debugPrint("...sending image resulted error $error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<CaptureRequest> handleBuildPath(List<Sensor> sensors) async {
|
||||||
|
final Directory extDir = await getTemporaryDirectory();
|
||||||
|
final Directory testDir =
|
||||||
|
await Directory('${extDir.path}/camerawesome')
|
||||||
|
.create(recursive: true);
|
||||||
|
|
||||||
|
if (sensors.length == 1) {
|
||||||
|
final String filePath =
|
||||||
|
'${testDir.path}/${DateTime.now().millisecondsSinceEpoch}.jpg';
|
||||||
|
return SingleCaptureRequest(filePath, sensors.first);
|
||||||
|
} else {
|
||||||
|
return MultipleCaptureRequest(
|
||||||
|
{
|
||||||
|
for (final sensor in sensors)
|
||||||
|
sensor:
|
||||||
|
'${testDir.path}/${sensor.position == SensorPosition.front ? 'front_' : "back_"}${DateTime.now().millisecondsSinceEpoch}.jpg',
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class HoleClipper extends CustomClipper<Path> {
|
||||||
|
@override
|
||||||
|
Path getClip(Size size) {
|
||||||
|
final path = Path()
|
||||||
|
..addRect(Rect.fromLTWH(0, 0, size.width, size.height))
|
||||||
|
..addRRect(RRect.fromRectAndRadius(
|
||||||
|
Rect.fromCenter(
|
||||||
|
center: Offset(size.width / 2, size.height * 0.45),
|
||||||
|
width: size.width - (size.width * 0.2), // Adjust the width of the square
|
||||||
|
height: size.height - (size.height * 0.3), // Adjust the height of the square to match the width for a square shape
|
||||||
|
),
|
||||||
|
const Radius.circular(20), // Adjust the border radius as needed
|
||||||
|
))
|
||||||
|
..fillType = PathFillType.evenOdd;
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool shouldReclip(covariant CustomClipper<Path> oldClipper) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
69
lib/screens/fines_screen.dart
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gascom/constants/app_theme.dart';
|
||||||
|
import 'package:gascom/widgets/custom_app_bar.dart';
|
||||||
|
import 'package:gascom/widgets/fine_container.dart';
|
||||||
|
|
||||||
|
class FinesScreen extends StatelessWidget {
|
||||||
|
const FinesScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: const CustomAppBar(
|
||||||
|
title: "غرامات",
|
||||||
|
),
|
||||||
|
body: SafeArea(
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 20),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
children: <Widget>[
|
||||||
|
const SizedBox(height: 30),
|
||||||
|
Text(
|
||||||
|
"غرامات غير مدفوعة",
|
||||||
|
style: Theme.of(context).textTheme.titleLarge,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 20),
|
||||||
|
ListView.separated(
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
itemCount: 5,
|
||||||
|
itemBuilder: (context, index) => FineContainer(),
|
||||||
|
separatorBuilder: (context, index) => const SizedBox(height: 10),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15),
|
||||||
|
const Padding(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 30),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Divider(
|
||||||
|
color: AppTheme.textColor,
|
||||||
|
height: 1,
|
||||||
|
thickness: 1,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15),
|
||||||
|
Text(
|
||||||
|
"غرامات مدفوعة",
|
||||||
|
style: Theme.of(context).textTheme.titleLarge,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 20),
|
||||||
|
ListView.separated(
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
itemCount: 5,
|
||||||
|
itemBuilder: (context, index) => const FineContainer(),
|
||||||
|
separatorBuilder: (context, index) => const SizedBox(height: 10),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 30),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
56
lib/screens/follow_order_screen.dart
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gascom/widgets/order_container.dart';
|
||||||
|
|
||||||
|
class FollowOrderScreen extends StatefulWidget {
|
||||||
|
const FollowOrderScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<FollowOrderScreen> createState() => _FollowOrderScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _FollowOrderScreenState extends State<FollowOrderScreen> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
body: SafeArea(
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 20),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
children: <Widget>[
|
||||||
|
const SizedBox(height: 30),
|
||||||
|
Text(
|
||||||
|
"طلبات حالية",
|
||||||
|
style: Theme.of(context).textTheme.titleLarge,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 20),
|
||||||
|
ListView.separated(
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
itemCount: 5,
|
||||||
|
itemBuilder: (context, index) => OrderContainer(),
|
||||||
|
separatorBuilder: (context, index) => const SizedBox(height: 10),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 30),
|
||||||
|
Text(
|
||||||
|
"طلبات سابقة",
|
||||||
|
style: Theme.of(context).textTheme.titleLarge,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 20),
|
||||||
|
ListView.separated(
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
itemCount: 5,
|
||||||
|
itemBuilder: (context, index) => OrderContainer(),
|
||||||
|
separatorBuilder: (context, index) => const SizedBox(height: 10),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 30),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
195
lib/screens/generator_info_screen.dart
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
import 'package:animated_custom_dropdown/custom_dropdown.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gascom/constants/app_theme.dart';
|
||||||
|
import 'package:gascom/widgets/app_button.dart';
|
||||||
|
import 'package:gascom/widgets/app_text_field.dart';
|
||||||
|
|
||||||
|
class GeneratorInfoScreen extends StatefulWidget {
|
||||||
|
const GeneratorInfoScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<GeneratorInfoScreen> createState() => _GeneratorInfoScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _GeneratorInfoScreenState extends State<GeneratorInfoScreen> {
|
||||||
|
|
||||||
|
final TextEditingController ownerNameController = TextEditingController();
|
||||||
|
final TextEditingController phoneController = TextEditingController();
|
||||||
|
final TextEditingController areaController = TextEditingController();
|
||||||
|
final TextEditingController districtController = TextEditingController();
|
||||||
|
final TextEditingController laneController = TextEditingController();
|
||||||
|
final TextEditingController generatorBrandController = TextEditingController();
|
||||||
|
final TextEditingController generatorPowerController = TextEditingController();
|
||||||
|
final TextEditingController authorizedNameController = TextEditingController();
|
||||||
|
|
||||||
|
String selectedGeneratorType = 'حكومية';
|
||||||
|
List<String> availableGeneratorType = ['حكومية', 'اهلية'];
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
resizeToAvoidBottomInset: false,
|
||||||
|
body: SafeArea(
|
||||||
|
child: ListView(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 20),
|
||||||
|
children: [
|
||||||
|
const SizedBox(height: 45,),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
"معلومات المولدة",
|
||||||
|
style: Theme.of(context).textTheme.titleLarge?.copyWith(
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
"#10023432",
|
||||||
|
style: Theme.of(context).textTheme.titleLarge?.copyWith(
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
),
|
||||||
|
textDirection: TextDirection.ltr,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const SizedBox(height: 30,),
|
||||||
|
Text(
|
||||||
|
"اسم صاحب المولدة",
|
||||||
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 6,),
|
||||||
|
AppTextField(
|
||||||
|
controller: ownerNameController,
|
||||||
|
keyboardType: TextInputType.text,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15,),
|
||||||
|
Text(
|
||||||
|
"رقم الهاتف",
|
||||||
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 6,),
|
||||||
|
AppTextField(
|
||||||
|
controller: phoneController,
|
||||||
|
keyboardType: TextInputType.phone,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15,),
|
||||||
|
Text(
|
||||||
|
"فئة المولدة",
|
||||||
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 6,),
|
||||||
|
CustomDropdown<String>(
|
||||||
|
hintText: "فئة المولدة",
|
||||||
|
items: availableGeneratorType,
|
||||||
|
closedHeaderPadding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
|
||||||
|
expandedHeaderPadding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
|
||||||
|
decoration: CustomDropdownDecoration(
|
||||||
|
closedFillColor: AppTheme.primaryColor,
|
||||||
|
expandedFillColor: AppTheme.primaryColor,
|
||||||
|
closedBorder: Border.all(
|
||||||
|
color: AppTheme.textColor,
|
||||||
|
width: 1
|
||||||
|
),
|
||||||
|
expandedBorder: Border.all(
|
||||||
|
color: AppTheme.textColor,
|
||||||
|
width: 1
|
||||||
|
),
|
||||||
|
closedBorderRadius: const BorderRadius.all(Radius.circular(30)),
|
||||||
|
expandedBorderRadius: const BorderRadius.all(Radius.circular(20)),
|
||||||
|
hintStyle: Theme.of(context).textTheme.bodySmall,
|
||||||
|
listItemStyle: Theme.of(context).textTheme.bodySmall?.copyWith(
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
),
|
||||||
|
headerStyle: Theme.of(context).textTheme.bodySmall?.copyWith(
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
),
|
||||||
|
expandedSuffixIcon: const Icon(CupertinoIcons.chevron_up, color: AppTheme.textColor, size: 18,),
|
||||||
|
closedSuffixIcon: const Icon(CupertinoIcons.chevron_down, color: AppTheme.textColor, size: 18,),
|
||||||
|
),
|
||||||
|
onChanged: (value) {
|
||||||
|
selectedGeneratorType = value ?? "";
|
||||||
|
},
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15,),
|
||||||
|
Text(
|
||||||
|
"المنطقة",
|
||||||
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 6,),
|
||||||
|
AppTextField(
|
||||||
|
controller: areaController,
|
||||||
|
keyboardType: TextInputType.text,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15,),
|
||||||
|
Text(
|
||||||
|
"المحلة",
|
||||||
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 6,),
|
||||||
|
AppTextField(
|
||||||
|
controller: districtController,
|
||||||
|
keyboardType: TextInputType.text,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15,),
|
||||||
|
Text(
|
||||||
|
"الزقاق",
|
||||||
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 6,),
|
||||||
|
AppTextField(
|
||||||
|
controller: laneController,
|
||||||
|
keyboardType: TextInputType.text,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15,),
|
||||||
|
Text(
|
||||||
|
"نوع المولدة",
|
||||||
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 6,),
|
||||||
|
AppTextField(
|
||||||
|
controller: generatorBrandController,
|
||||||
|
keyboardType: TextInputType.text,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15,),
|
||||||
|
Text(
|
||||||
|
"راس التوليد",
|
||||||
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 6,),
|
||||||
|
AppTextField(
|
||||||
|
controller: generatorPowerController,
|
||||||
|
keyboardType: TextInputType.text,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 15,),
|
||||||
|
Text(
|
||||||
|
"مخول استلام الحصة الوقودية",
|
||||||
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 6,),
|
||||||
|
AppTextField(
|
||||||
|
controller: authorizedNameController,
|
||||||
|
keyboardType: TextInputType.text,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 40,),
|
||||||
|
Center(
|
||||||
|
child: SizedBox(
|
||||||
|
width: 200,
|
||||||
|
height: 45,
|
||||||
|
child: AppButton(
|
||||||
|
onPressed: handleUpdateInfo,
|
||||||
|
label: "تحديث المعلومات",
|
||||||
|
isElevated: false
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 50,),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleUpdateInfo() {
|
||||||
|
}
|
||||||
|
}
|
175
lib/screens/home_screen.dart
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/svg.dart';
|
||||||
|
import 'package:gascom/constants/app_theme.dart';
|
||||||
|
import 'package:gascom/screens/change_engine_screen.dart';
|
||||||
|
import 'package:gascom/screens/change_location.dart';
|
||||||
|
import 'package:gascom/screens/document_camera_screen.dart';
|
||||||
|
import 'package:gascom/screens/fines_screen.dart';
|
||||||
|
import 'package:gascom/screens/notifications_screen.dart';
|
||||||
|
import 'package:gascom/screens/pay_monthly_gas.dart';
|
||||||
|
import 'package:gascom/screens/service_fees_screen.dart';
|
||||||
|
import 'package:gascom/widgets/app_button.dart';
|
||||||
|
import 'package:gascom/widgets/home_grid_item.dart';
|
||||||
|
import 'package:persistent_bottom_nav_bar_v2/persistent_bottom_nav_bar_v2.dart';
|
||||||
|
|
||||||
|
class HomeScreen extends StatefulWidget {
|
||||||
|
const HomeScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<HomeScreen> createState() => _HomeScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _HomeScreenState extends State<HomeScreen> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
resizeToAvoidBottomInset: false,
|
||||||
|
body: SafeArea(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
const SizedBox(height: 50,),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 20),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
SvgPicture.asset(
|
||||||
|
width: 160,
|
||||||
|
"assets/svgs/logo.svg",
|
||||||
|
semanticsLabel: 'Logo',
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
onTap: () => pushScreenWithoutNavBar(context, const NotificationsScreen()),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 10),
|
||||||
|
child: SvgPicture.asset(
|
||||||
|
"assets/svgs/notification.svg",
|
||||||
|
semanticsLabel: 'Menu',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 40,),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
width: MediaQuery.sizeOf(context).width * 0.65,
|
||||||
|
child: const Divider(
|
||||||
|
color: AppTheme.yellowColor,
|
||||||
|
thickness: 3,
|
||||||
|
height: 0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
width: MediaQuery.sizeOf(context).width * 0.35,
|
||||||
|
child: const Divider(
|
||||||
|
color: AppTheme.secondaryColor,
|
||||||
|
thickness: 1,
|
||||||
|
height: 0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
const SizedBox(height: 30,),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 20),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
"الخدمات",
|
||||||
|
style: Theme.of(context).textTheme.bodyLarge,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
width: 140,
|
||||||
|
height: 32,
|
||||||
|
child: AppButton(
|
||||||
|
onPressed: () {
|
||||||
|
pushScreenWithoutNavBar(context, const ServiceFeesScreen());
|
||||||
|
},
|
||||||
|
label: "رسوم الخدمات",
|
||||||
|
isElevated: false
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 30,),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 20),
|
||||||
|
child: GridView(
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||||
|
crossAxisCount: 3,
|
||||||
|
crossAxisSpacing: 20,
|
||||||
|
mainAxisSpacing: 5,
|
||||||
|
childAspectRatio: MediaQuery.sizeOf(context).width / (MediaQuery.sizeOf(context).height / 1.3),
|
||||||
|
),
|
||||||
|
children: [
|
||||||
|
HomeGridItem(
|
||||||
|
title: "طلب حصة",
|
||||||
|
svgPath: "assets/svgs/gas_station.svg",
|
||||||
|
onPressed: () {
|
||||||
|
pushScreenWithoutNavBar(context, PayMonthlyGas());
|
||||||
|
}
|
||||||
|
),
|
||||||
|
HomeGridItem(
|
||||||
|
title: "غرامات",
|
||||||
|
svgPath: "assets/svgs/dollar_flag.svg",
|
||||||
|
onPressed: () {
|
||||||
|
pushScreenWithoutNavBar(context, const FinesScreen());
|
||||||
|
}
|
||||||
|
),
|
||||||
|
HomeGridItem(
|
||||||
|
title: "تحويل موقع",
|
||||||
|
svgPath: "assets/svgs/location_pin.svg",
|
||||||
|
onPressed: () {
|
||||||
|
pushScreenWithoutNavBar(context, const ChangeLocationScreen());
|
||||||
|
}
|
||||||
|
),
|
||||||
|
HomeGridItem(
|
||||||
|
title: "تبديل محرك",
|
||||||
|
svgPath: "assets/svgs/settings.svg",
|
||||||
|
onPressed: () {
|
||||||
|
pushScreenWithoutNavBar(context, const ChangeEngineScreen());
|
||||||
|
}
|
||||||
|
),
|
||||||
|
HomeGridItem(
|
||||||
|
title: "تجديد بطاقة الحصة الوقودية",
|
||||||
|
svgPath: "assets/svgs/profile_paper.svg",
|
||||||
|
onPressed: () {
|
||||||
|
pushScreenWithoutNavBar(context, const DocumentCameraScreen(title: "تجديد دفتر", description: "لتجديد الدفتر يرجى ارفاق صورة للدفتر الحالي, ضع الدفتر في المربع، وتاكد من وجود اضاءة جيدة ثم اضغط التقاط.",));
|
||||||
|
}
|
||||||
|
),
|
||||||
|
HomeGridItem(
|
||||||
|
title: "تغيير مخول",
|
||||||
|
svgPath: "assets/svgs/user_sync.svg",
|
||||||
|
onPressed: () {
|
||||||
|
}
|
||||||
|
),
|
||||||
|
HomeGridItem(
|
||||||
|
title: "الدعم الفني",
|
||||||
|
svgPath: "assets/svgs/headphone.svg",
|
||||||
|
onPressed: () {}
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
145
lib/screens/log_in_screen.dart
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
import 'package:auto_size_text/auto_size_text.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/svg.dart';
|
||||||
|
import 'package:gascom/constants/app_theme.dart';
|
||||||
|
import 'package:gascom/screens/nfc_screen.dart';
|
||||||
|
import 'package:gascom/screens/otp_provider_screen.dart';
|
||||||
|
import 'package:gascom/widgets/app_button.dart';
|
||||||
|
import 'package:pinput/pinput.dart';
|
||||||
|
|
||||||
|
class LogInScreen extends StatefulWidget {
|
||||||
|
const LogInScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<LogInScreen> createState() => _LogInScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _LogInScreenState extends State<LogInScreen> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
body: SafeArea(
|
||||||
|
child: ListView(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 25),
|
||||||
|
children: [
|
||||||
|
const SizedBox(height: 150),
|
||||||
|
Center(
|
||||||
|
child: SizedBox(
|
||||||
|
width: MediaQuery.sizeOf(context).width * 0.6,
|
||||||
|
child: SvgPicture.asset(
|
||||||
|
"assets/svgs/logo.svg",
|
||||||
|
semanticsLabel: 'Home',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 50),
|
||||||
|
Center(
|
||||||
|
child: AutoSizeText(
|
||||||
|
"مرحبا بكم في كازكوم، يرجى ادخال رقم الترخيص الخاص بصاحب المولدة",
|
||||||
|
style: Theme.of(context).textTheme.bodyLarge,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
minFontSize: 8,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Center(
|
||||||
|
child: AutoSizeText(
|
||||||
|
"أو قم بمسح رمز QR الموجود على البطاقة",
|
||||||
|
style: Theme.of(context).textTheme.bodyLarge,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
minFontSize: 8,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 35),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
InkWell(
|
||||||
|
borderRadius: BorderRadius.circular(11),
|
||||||
|
onTap: () {
|
||||||
|
// TODO: Implement QR Code Scanner
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
width: 60,
|
||||||
|
height: 60,
|
||||||
|
padding: const EdgeInsets.all(12),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(11),
|
||||||
|
border: Border.all(
|
||||||
|
color: AppTheme.textColor,
|
||||||
|
width: 2,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: SvgPicture.asset(
|
||||||
|
"assets/svgs/camera.svg",
|
||||||
|
semanticsLabel: 'QR Code',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(width: 15),
|
||||||
|
Expanded(
|
||||||
|
child: Container(
|
||||||
|
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 6),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(11),
|
||||||
|
border: Border.all(
|
||||||
|
color: AppTheme.textColor,
|
||||||
|
width: 2,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Directionality(
|
||||||
|
textDirection: TextDirection.ltr,
|
||||||
|
child: Pinput(
|
||||||
|
length: 5,
|
||||||
|
defaultPinTheme: PinTheme(
|
||||||
|
width: 30,
|
||||||
|
height: 35,
|
||||||
|
textStyle: Theme.of(context).textTheme.bodyLarge,
|
||||||
|
margin: const EdgeInsets.symmetric(horizontal: 5),
|
||||||
|
decoration: const BoxDecoration(
|
||||||
|
// color: AppTheme.textColor,
|
||||||
|
border: Border(
|
||||||
|
bottom: BorderSide(
|
||||||
|
color: AppTheme.textColor,
|
||||||
|
width: 1,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
onCompleted: (value) {
|
||||||
|
Navigator.push(context, MaterialPageRoute(builder: (context) => OtpProviderScreen(
|
||||||
|
cardNumber: int.parse(value),
|
||||||
|
)));
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
|
||||||
|
const SizedBox(height: 50),
|
||||||
|
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
width: 180,
|
||||||
|
child: AppButton(
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.push(context, MaterialPageRoute(
|
||||||
|
fullscreenDialog: true,
|
||||||
|
// builder: (context) => NewGeneratorScreen(),
|
||||||
|
builder: (context) => NfcScreen(),
|
||||||
|
));
|
||||||
|
},
|
||||||
|
label: "مولـدة جـــديــدة",
|
||||||
|
isElevated: false
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|