Commit 80e4ac20 authored by Pasindu-Vimukthi's avatar Pasindu-Vimukthi

Front end

parent 26949ed5
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
# Web related
lib/generated_plugin_registrant.dart
# Symbolication related
app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release
# 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: b22742018b3edf16c6cadd7b76d9db5e7f9064b5
channel: stable
project_type: app
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "detector - code",
"request": "launch",
"type": "dart"
},
{
"name": "detector - code (profile mode)",
"request": "launch",
"type": "dart",
"flutterMode": "profile"
}
]
}
\ No newline at end of file
# detector
A new Flutter project.
## Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
For help getting started with Flutter, view our
[online documentation](https://flutter.dev/docs), which offers tutorials,
samples, guidance on mobile development, and a full API reference.
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 30
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.detector"
minSdkVersion 17
targetSdkVersion 30
multiDexEnabled true
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
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 '../..'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation platform('com.google.firebase:firebase-bom:28.2.0')
implementation 'com.google.firebase:firebase-analytics-ktx'
}
{
"project_info": {
"project_number": "580815325809",
"project_id": "depress-detector",
"storage_bucket": "depress-detector.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:580815325809:android:2343346ff73719be6ba9d0",
"android_client_info": {
"package_name": "com.example.detector"
}
},
"oauth_client": [
{
"client_id": "580815325809-ujsg21tpl9u68ir1jp1c0f5l5ppch1ak.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyDsOo8GqzJnO-T1v83Nfizg5znRnpnJ0R4"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "580815325809-ujsg21tpl9u68ir1jp1c0f5l5ppch1ak.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
}
],
"configuration_version": "1"
}
\ No newline at end of file
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.detector">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.detector">
<application
android:label="Depression Detector"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<!-- Displays an Android View that continues showing the launch screen
Drawable until Flutter paints its first frame, then this splash
screen fades out. A splash screen is useful to avoid any visual
gap between the end of Android's launch screen and the painting of
Flutter's first frame. -->
<meta-data
android:name="io.flutter.embedding.android.SplashScreenDrawable"
android:resource="@drawable/launch_background"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>
package com.example.detector
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
}
<?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>
<?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>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.detector">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.8'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
include ':app'
def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()
assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
<svg id="2a81f9c6-f0df-43f9-a105-7b4a583b15a8" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1086.13" height="782.67" viewBox="0 0 1086.13 782.67"><defs><linearGradient id="fbf30545-21ed-4d00-b98c-956576520cc3" x1="786.97" y1="154.07" x2="786.97" y2="135.69" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity="0.25"/><stop offset="0.54" stop-color="gray" stop-opacity="0.12"/><stop offset="1" stop-color="gray" stop-opacity="0.1"/></linearGradient><linearGradient id="687fba3e-05bb-4edc-91c2-f87a79b2e810" x1="619.77" y1="841.34" x2="619.77" y2="58.66" xlink:href="#fbf30545-21ed-4d00-b98c-956576520cc3"/></defs><title>doctor</title><path d="M688,196.69c-69.63-2.42-136-24.9-199.28-49.49s-126-51.84-194-64.87C251,73.94,201,72.76,165.78,96.2c-33.9,22.55-44.85,61.48-50.74,97.6-4.43,27.18-7,55.78,5.11,81.23,8.43,17.66,23.39,32.51,33.74,49.43,36,58.87,10.55,131.47-28.47,189-18.3,27-39.53,52.69-53.65,81.4s-20.66,61.6-8.3,90.88c12.25,29,41.43,50.82,73.05,66.15C200.74,783,276.41,791.9,350.2,797c163.34,11.17,327.56,6.33,491.33,1.49,60.61-1.8,121.49-3.61,181.11-13,33.11-5.21,67.3-13.47,91.34-33.41,30.51-25.32,38.08-68.18,17.63-99.93-34.3-53.24-129.13-66.47-153.11-123.61-13.19-31.45.36-66.49,19.54-95.66,41.13-62.57,110.09-117.47,113.72-189,2.5-49.13-30.65-98.32-81.91-121.57C976.13,97.92,901.63,101,862,141.31,821.19,182.84,749.47,198.82,688,196.69Z" transform="translate(-56.94 -58.66)" fill="#f50057" opacity="0.1"/><path d="M299.19,783.7s-55-41.58-65.39-94.47a104.54,104.54,0,0,0-32.21-57.71,176,176,0,0,0-25.77-19.2" transform="translate(-56.94 -58.66)" fill="none" stroke="#535461" stroke-miterlimit="10" stroke-width="2"/><path d="M169.09,579c4.82,6.52,7,34.15,7,34.15S150.32,603,145.49,596.49A14.68,14.68,0,0,1,169.09,579Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M215.31,600.68c.5,8.09-12.67,32.47-12.67,32.47S186.51,610.61,186,602.52a14.68,14.68,0,0,1,29.3-1.84Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M260.11,663c-3.64,7.24-27.33,21.64-27.33,21.64s-2.53-27.6,1.11-34.84A14.68,14.68,0,0,1,260.11,663Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M283.4,717.76c-2.37,7.75-23.28,25.94-23.28,25.94s-7.17-26.77-4.8-34.53a14.68,14.68,0,0,1,28.08,8.59Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M178.8,652.75c8,1.08,33.29-10.34,33.29-10.34s-21.34-17.68-29.38-18.76a14.68,14.68,0,0,0-3.91,29.1Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M206.85,716.46c8-1.37,28.67-19.82,28.67-19.82s-25.66-10.48-33.65-9.11a14.68,14.68,0,1,0,5,28.93Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M242.6,774.65c8.11,0,31.61-14.69,31.61-14.69s-23.51-14.67-31.62-14.67a14.68,14.68,0,0,0,0,29.36Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M833.49,424.07s33.9-60.05,85-77.35a104.53,104.53,0,0,0,52.92-39.59A175.34,175.34,0,0,0,987,279" transform="translate(-56.94 -58.66)" fill="none" stroke="#535461" stroke-miterlimit="10" stroke-width="2"/><path d="M1019.08,268c-5.82,5.64-32.91,11.48-32.91,11.48s6.65-26.9,12.47-32.55A14.68,14.68,0,0,1,1019.08,268Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M1003.76,316.63c-8,1.58-33.87-8.24-33.87-8.24s20.2-19,28.15-20.55a14.68,14.68,0,1,1,5.72,28.79Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M948,369.31c-7.66-2.65-25.07-24.21-25.07-24.21s27-6.18,34.68-3.53A14.68,14.68,0,1,1,948,369.31Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M896.76,399.67C888.76,398.35,868,380,868,380s25.59-10.66,33.58-9.34a14.68,14.68,0,0,1-4.77,29Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M947.3,287.36C947.29,295.47,962,319,962,319s14.69-23.5,14.69-31.6a14.68,14.68,0,1,0-29.35,0Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M887.87,323.62c2.42,7.74,23.46,25.79,23.46,25.79s7-26.82,4.56-34.56a14.68,14.68,0,0,0-28,8.77Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M835,366.79c1.08,8,18.76,29.37,18.76,29.37s11.41-25.25,10.33-33.28A14.68,14.68,0,1,0,835,366.79Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M1019.08,268c-5.82,5.64-32.91,11.48-32.91,11.48s6.65-26.9,12.47-32.55A14.68,14.68,0,0,1,1019.08,268Z" transform="translate(-56.94 -58.66)" opacity="0.25"/><path d="M1003.76,316.63c-8,1.58-33.87-8.24-33.87-8.24s20.2-19,28.15-20.55a14.68,14.68,0,1,1,5.72,28.79Z" transform="translate(-56.94 -58.66)" opacity="0.25"/><path d="M948,369.31c-7.66-2.65-25.07-24.21-25.07-24.21s27-6.18,34.68-3.53A14.68,14.68,0,1,1,948,369.31Z" transform="translate(-56.94 -58.66)" opacity="0.25"/><path d="M896.76,399.67C888.76,398.35,868,380,868,380s25.59-10.66,33.58-9.34a14.68,14.68,0,0,1-4.77,29Z" transform="translate(-56.94 -58.66)" opacity="0.25"/><path d="M947.3,287.36C947.29,295.47,962,319,962,319s14.69-23.5,14.69-31.6a14.68,14.68,0,1,0-29.35,0Z" transform="translate(-56.94 -58.66)" opacity="0.25"/><path d="M887.87,323.62c2.42,7.74,23.46,25.79,23.46,25.79s7-26.82,4.56-34.56a14.68,14.68,0,0,0-28,8.77Z" transform="translate(-56.94 -58.66)" opacity="0.25"/><path d="M835,366.79c1.08,8,18.76,29.37,18.76,29.37s11.41-25.25,10.33-33.28A14.68,14.68,0,1,0,835,366.79Z" transform="translate(-56.94 -58.66)" opacity="0.25"/><path d="M835.44,422.88s6.66-68.64,46.32-105.14A104.57,104.57,0,0,0,914.1,260.1a175.28,175.28,0,0,0,2.89-32" transform="translate(-56.94 -58.66)" fill="none" stroke="#535461" stroke-miterlimit="10" stroke-width="2"/><path d="M941.85,204.94c-3,7.52-25.44,23.84-25.44,23.84s-4.82-27.29-1.79-34.81a14.68,14.68,0,0,1,27.23,11Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M947.56,255.66c-6.63,4.66-34.3,6.19-34.3,6.19s10.78-25.54,17.41-30.2a14.68,14.68,0,1,1,16.89,24Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M917.9,326.44c-8.08.68-32.74-12-32.74-12s22.2-16.6,30.28-17.28a14.68,14.68,0,0,1,2.46,29.26Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M883.39,374.93c-7.85,2-34.29-6.27-34.29-6.27s19.07-20.11,26.92-22.15a14.68,14.68,0,0,1,7.37,28.42Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M884.09,251.78c3.28,7.41,26.22,23,26.22,23s3.9-27.44.62-34.85a14.68,14.68,0,0,0-26.84,11.88Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M844.45,309c5.35,6.09,31.89,14.07,31.89,14.07s-4.48-27.35-9.83-33.44A14.68,14.68,0,1,0,844.45,309Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M813.56,369.92c4.24,6.9,29.05,19.25,29.05,19.25s.21-27.71-4-34.62a14.68,14.68,0,0,0-25,15.37Z" transform="translate(-56.94 -58.66)" fill="#f50057"/><path d="M784.44,154.07c1.66-6.09,3.66-12.21,5.06-18.38C787.82,141.86,785.81,148,784.44,154.07Z" transform="translate(-56.94 -58.66)" fill="url(#fbf30545-21ed-4d00-b98c-956576520cc3)"/><path d="M777,212.73c-.14-.24-.24-.48-.35-.7v0c0-.1-.1-.18-.14-.28a6.26,6.26,0,0,1-.67.27c-.44.17-.89.33-1.35.46s-.65.2-1,.28a5.83,5.83,0,0,1-.89.23l.08.18c.37-.08.73-.15,1.1-.25l.1,1.24c.42,0,.81-.06,1.19-.06a4.91,4.91,0,0,1,.54,0c.78,0,1.46,0,2,0C777.4,213.65,777.18,213.18,777,212.73ZM980,535.86c-4.7-6.33-14.08-74.27-14.08-74.27S947.47,413.28,952.5,394s-13.74-68.61-13.74-68.61S926.36,320,925.69,312c0,0-50.63-16-53-28-1.92-9.84-33.32-16.9-44.6-19.13-3.44-13.88-6.9-26.83-9.45-33.9-.69-2.2-1.34-4.1-1.94-5.6-4.31-11-17.63-12-27.29-11.12a14.88,14.88,0,0,0-2.29-5.23,2.87,2.87,0,0,0-.91-1.39,5.31,5.31,0,0,0-.66-.48,3.16,3.16,0,0,0-.68-.86,4.81,4.81,0,0,0-.9-.64,6,6,0,0,0-.72-.33,9.61,9.61,0,0,0-1.79-.49,14.74,14.74,0,0,0-2.16-.28,13.15,13.15,0,0,0,4.61-3.37,9.61,9.61,0,0,0,1.89-3.48,10.24,10.24,0,0,0,.42-3.28,8.48,8.48,0,0,1-.9,1.29c.42-4.43-1.92-8.93-3.26-13.34a39.47,39.47,0,0,1-.88-17.65h0c1.34-8.86,4.66-17.82,6.91-26.84a.66.66,0,0,0,0-.15,69.68,69.68,0,0,0,2.18-13.69c.39-9.33-2-18.64-5.84-27.14-3.41-7.53-8.44-14.94-16.14-18-5.72-2.31-12.13-1.94-18.29-2.32-13.82-.86-27-5.72-40.14-10.14S683.2,58,669.37,58.77,641.31,66.21,635,78.45c-2,3.82-3.15,8.07-5.54,11.66-4.48,6.77-12.5,10.16-19.19,14.83s-12.58,11.3-15,19.21a25.63,25.63,0,0,0-.54,13.15v0a23.55,23.55,0,0,0,.84,2.9,20.55,20.55,0,0,0,4.35,7.11,21.21,21.21,0,0,0,4.94,3.83h0a29.07,29.07,0,0,0,7.3,2.84c-.09.3-.18.62-.28.93-.16.51-.3,1-.45,1.55-.33,1.23-.64,2.48-.9,3.74a1.17,1.17,0,0,0,0,.27,81.67,81.67,0,0,0-1.84,17.31,79.89,79.89,0,0,0,.42,8.24v0c4,40.58,37.5,72.59,78.89,74.67,1.42.07,2.85.11,4.3.11.66,0,1.31,0,2,0,.65.86,1.29,1.74,1.9,2.6s1.17,1.74,1.7,2.6l-1.45-1.5v0L695,263.17a11.79,11.79,0,0,1-1.31,1.51,24.33,24.33,0,0,0-2.89-.82h0c-4.15-.92-10.47-1.26-18.79,1.25-7.65,2.29-17,7-27.94,15.95l-53.31,32-28.84,17.54L551.53,356s-7.81,30.18-16.5,64.76c-.34.1-.67.2-1,.32a18.7,18.7,0,0,0-2.12-.12,19.49,19.49,0,0,0-19.52,18.71c-17.28,21-18.26,42-14.2,51.64h0a13.76,13.76,0,0,0,1.38,2.57c2.66,3.84,7.63,13.74,12.67,24.29-.13.87-.21,1.6-.25,2.15a5.34,5.34,0,0,0,0,.54s3,45.31-7,58.3c-2.19,2.83-1.86,6.55,0,10.67h0c6.7,14.82,33.19,34.61,33.19,34.61s31.77-.17,49.47-2.1c-.05,1.78-.09,3.55-.13,5.28-.4,17.48-.4,32.13-.4,32.13l-.66,18.33s-6,38.63-9,49.28c-1.89,6.68.29,68.53,2.19,114H892.67c3.68-26.9-1.51-108.63-1.51-108.63s-4.93-21.13-5.11-39.55a.15.15,0,0,1,0-.13c0-1.61,0-3.18.06-4.72l2.27-.08,4.08-.14h.37s.1-.38.33-1v0a19.11,19.11,0,0,1,2.19-4.37c1.74-2.57,4.46-5.09,8.55-5.26,2.26-.09,5.76-1.92,9.71-4.62a.18.18,0,0,0,.08,0c10.63-7.19,24.68-20.46,28.09-22.64,4.69-3,27.15-23,27.15-23s3.35-4.24,6.92-9.35l.13-.18c4.44-6.4,9.16-14.05,8-16.46-2-4.32,1.34-14.65,1.34-14.65C995.75,567.49,984.7,542.19,980,535.86ZM786.63,228.28a4,4,0,0,1,.18.92c-.25-.33-.5-.68-.75-1l-.24-.32-.17-.24.38-.52s0,0,0,.07h0A3.47,3.47,0,0,1,786.63,228.28Zm-3.36-8.86c-1.09.22-1.95.42-2.51.57-.71-1.26-1.39-2.52-2-3.8A29,29,0,0,1,783.27,219.42ZM781.39,221a.21.21,0,0,1,0-.06l.08.06h0c.41.27.81.53,1.18.8h0c.33.24.63.47.93.71-.2.35-.42.71-.64,1-.35-.55-.68-1.08-1-1.63C781.74,221.66,781.56,221.36,781.39,221Zm-6-12.34a29.59,29.59,0,0,1,5.81,0h0c.27,0,.51.05.75.09h0a8.31,8.31,0,0,1,1.59.41,11.62,11.62,0,0,1,2.11,5.61l-.54.08-.53.1c-1,.17-2,.34-2.78.5l-1,.21c-1.33.29-2.1.51-2.13.52-.13-.27-.26-.52-.4-.78-.22-.43-.45-.87-.65-1.3s-.46-.92-.67-1.37c-.14-.24-.24-.48-.35-.7v0c0-.1-.1-.18-.14-.28a2.41,2.41,0,0,1-.15-.33c-.61-1.24-1.17-2.48-1.71-3.7-.06-.12-.11-.25-.16-.37l.76-.05,0,.26ZM536.8,829c-.08-14.89-1.16-31-4.16-46.12-1.28-6.43-2.6-12.86-3.94-19.18-.34-1.58-.67-3.14-1-4.7l-3.08.41-.28,0c-8.4-39.61-17.18-74.51-17.18-74.51S489.72,618.31,491.74,613c.26-.69-.07-2.55-.81-5.28-4.22-15.14-21.84-56.86-28-71.12h0c0-.06-.05-.13-.07-.18v0c-1-2.39-1.72-4-1.94-4.47l1.45-21.28.08-1.28.19-2.72-.08-.07.08-1.26s-15.22-12.48-41-21.49c-1-.36-2.06-.71-3.11-1.05,1.29-8.61,3-18.33,5.23-27.8.21-.95.44-1.87.68-2.8v0c.21-.93.45-1.83.69-2.74.38-1.48.79-2.94,1.21-4.38,1.39-.44,2.76-.93,4.11-1.45l.52-.2a73.8,73.8,0,0,0,45-86v0a73.39,73.39,0,0,0-12.88-27.15.14.14,0,0,0,0,0c-.46-.62-.95-1.24-1.44-1.85s-1.08-1.29-1.63-1.91c2.89-6.57,6.3-12.82,6.58-19.21a19.71,19.71,0,0,0,0-2.43s0,0,0,0v-.1c-.37-4.11-2.19-8.27-6.43-12.64-6.19-6.41-15-9.66-23.81-11.22s-17.79-1.6-26.65-2.65c-14.69-1.76-29-6.29-43.69-7.68a103.81,103.81,0,0,0-52.83,9c-10.93,5-22,13.74-22.66,25.73-.54,9.91,6.36,19.41,4.62,29.2-1.73,9.62-11.53,17.19-10.67,26.92.33,3.8,2.28,7.2,4.72,10.23h0c.84,1,1.73,2,2.65,3,3.56,3.77,7.48,7.39,9.47,12.14.08.2.16.4.23.6,1.69,4.69.93,10.62-3.25,13.31a.15.15,0,0,1,.05.07l0,0c.06.08.12.14.17.22a.07.07,0,0,0,0-.05,10.94,10.94,0,0,0,5.71,3.56l.85.26c-.69.75-1.34,1.53-2,2.35l-.43.57a41.62,41.62,0,0,0-3,4.65c-.51.9-1,1.8-1.41,2.7a33.92,33.92,0,0,0-2.95,8.67c-1.07,6.62.44,13.52-1.18,20-2,8-8.33,14.14-11.9,21.57-6.76,14-2.93,30.43-1.57,45.89,1.85,21-1.15,42.09-4.14,62.95q-2.38,16.64-4.76,33.31-6,41.84-12,83.68c-1.46,10.22-3.19,21-10,28.89l.07,0s0,.06-.07.08a20.9,20.9,0,0,0,6.44,1.66h0c8.89.89,18.31-3.41,26.31-8.11a124.34,124.34,0,0,0,17.93-12.59c-.82,3-1.7,6.27-2.64,9.79a.54.54,0,0,1,0,.1h0c-11.29,43-29.45,121.83-29.45,121.83s-1.65,3.43-3.79,8.54h282c-3.3-4-6.37-7.83-8.77-10.92ZM328,431.4c.07-.12.12-.23.19-.34,0,.32,0,.63,0,.93s0,.57,0,.85,0,.25,0,.39,0,0,0,0c0,.41-.09.82-.16,1.23a0,0,0,0,0,0,0s0,.05,0,.09l1,.37,1.16.48h0q10.28,4.06,20.82,7.35c.72.23,1.45.45,2.18.66l.15,1.24c.18,1.27.35,2.56.51,3.85,0,0,0,.06,0,.1.45,3.57.89,7.13,1.28,10.61,0,0-18.36-7-18.13,3.63a5.17,5.17,0,0,0,0,.57,4.74,4.74,0,0,0,0,.76c.17,8.28,2.76,13.19,3.28,15.71a.71.71,0,0,1-.16.28,5.47,5.47,0,0,0-.44,3.09,30.39,30.39,0,0,0,.42,5.34c-.54.33-1.07.66-1.6,1,0,0,0,0,0,0-.4.25-.78.53-1.17.81a148.5,148.5,0,0,0-9.59-24.72c-2.75-5.66-5.84-11.56-5.81-17.77,0-.4,0-.81.05-1.22A21,21,0,0,1,323,441.4c.23-.65.48-1.29.76-1.92a47.07,47.07,0,0,1,2.19-4.38v0c.52-.94,1.07-1.87,1.6-2.81.17-.28.33-.57.49-.85ZM777,212.73c-.14-.24-.24-.48-.35-.7v0c0-.1-.1-.18-.14-.28a6.26,6.26,0,0,1-.67.27c-.44.17-.89.33-1.35.46s-.65.2-1,.28l-.89.23.08.18c.37-.08.73-.15,1.1-.25l.1,1.24c.42,0,.81-.06,1.19-.06h.54c.78,0,1.46,0,2,0C777.4,213.65,777.18,213.18,777,212.73Z" transform="translate(-56.94 -58.66)" fill="url(#687fba3e-05bb-4edc-91c2-f87a79b2e810)"/><path d="M558.5,359.61l-6,2.65S513.39,514.2,513.39,526.48s82.93,80.61,82.93,80.61l12.94-87.34S590.68,319.46,558.5,359.61Z" transform="translate(-56.94 -58.66)" fill="#e8f5ff"/><path d="M740.41,311.28,705.76,293.2a69.41,69.41,0,0,0-10.16-23.15c-5.07-7.32-11.81-14.51-20.21-18.26-21.23-9.52,89.8-59.49,89.8-59.49a180.64,180.64,0,0,0,6.17,17.7c5.72,14.12,15.21,32.38,27.44,37.58C819.59,256.43,740.41,311.28,740.41,311.28Z" transform="translate(-56.94 -58.66)" fill="#ffc1c7"/><path d="M771.36,210a82.78,82.78,0,0,1-75.76,60.05c-5.07-7.32-11.81-14.51-20.21-18.26-21.23-9.52,89.8-59.49,89.8-59.49A180.64,180.64,0,0,0,771.36,210Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M774.48,184.77a82.73,82.73,0,1,1-82.72-82.71A82.34,82.34,0,0,1,774.48,184.77Z" transform="translate(-56.94 -58.66)" fill="#ffc1c7"/><polygon points="729.48 242 706.92 294.64 687.02 329.58 623.32 329.58 604.74 281.81 612.27 232.27 660.92 232.27 692.33 230.5 702.94 226.96 709.78 230.84 729.48 242" fill="#575a89"/><path d="M778.65,230.49s14.07,3,1.47,13.33S724.05,287,724.05,287s15.27,13.6,12.11,29.53l50.59-28.2,9-45.12S796.76,229.65,778.65,230.49Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M734,287l-32.18,5.31s6.64,24.55,3.32,31.52a4.68,4.68,0,0,0-.25.67l-13.13,35.49,9.84,27.87,34.06-46.45-11.61-17.58s12.27-16.26,19.57-21.9S734,287,734,287Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M734,285.63l-32.18,5.3s6.64,24.55,3.32,31.52a4.68,4.68,0,0,0-.25.67l-13.13,35.49,9.84,27.87L735.66,340l-11.61-17.58s12.27-16.26,19.57-21.9S734,285.63,734,285.63Z" transform="translate(-56.94 -58.66)" fill="#dce6f2"/><path d="M780,227.84s14.07,3,1.46,13.33S724.05,287,724.05,287s16.59,10.95,13.44,26.87l50.59-28.19,9-45.12S798.08,227,780,227.84Z" transform="translate(-56.94 -58.66)" fill="#575a89"/><path d="M697.81,273.18s3.07,5.74,16.62,16.09c0,0-22.56,12-13.93,28.87l-34.51-9-5.31-16.59Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M696.48,271.86s3.07,5.74,16.62,16.09c0,0-22.56,11.94-13.93,28.86l-34.5-9-5.31-16.58Z" transform="translate(-56.94 -58.66)" fill="#575a89"/><path d="M786.42,300.66,763.86,353.3,744,388.24H680.26l-18.58-47.77,7.52-49.54h13.53c-.22,11.56,4,25.14,3.73,30.19-.46,8.3,12.38,53.08,12.38,53.08s26.87-43.46,37.48-47.33c6.67-2.43,20.8-22.65,30.39-37.37Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M875.29,577.67,873,580.55s16.59,83.27,12,102.18a53.69,53.69,0,0,0-1.33,10.38v.15c-.81,19.24,5,44.21,5,44.21s4.64,73.6,2,103.87H580.05c-1.82-44.76-3.78-102.75-2-109.18,3-10.61,9-49.1,9-49.1l.66-18.24s0-17.63.54-37.27c.23-8.83.57-18.1,1.06-26.32.63-10.34,1.51-19.05,2.72-23.33a51.44,51.44,0,0,0,1.28-9.88c0-.31,0-.63.06-.95,0-1,.1-2.08.14-3.19,0-.31,0-.62,0-1,.19-6.44.12-14.08-.09-22,0-.43,0-.87,0-1.31-.17-5.94-.42-12-.7-17.76-.87-18-2-33.22-2-33.22l-38.15-126.4,10.28-25.32,28.53-17.48,52.75-31.85c25.73-21.15,42.67-18.61,49.13-16.29a17.08,17.08,0,0,1,1.84.75c.2.1.36.18.51.27a4.23,4.23,0,0,1,.59.34v0a12.18,12.18,0,0,0-4.48,3.69,16.32,16.32,0,0,0-2.77,6,27.92,27.92,0,0,0-.71,4.09c-.13,1.45-.18,2.95-.18,4.46a77.36,77.36,0,0,0,.85,9.89c0,.06,0,.14,0,.22.33,2.34.74,4.63,1.14,6.78a.45.45,0,0,0,0,.11c.46,2.51.92,4.83,1.23,6.83.06.36.11.69.16,1a22.85,22.85,0,0,1,.31,4,48.61,48.61,0,0,0,1.3,9.6c.26,1.32.56,2.73.89,4.2.45,2,.94,4.18,1.47,6.4.29,1.22.6,2.48.92,3.73.12.5.25,1,.37,1.51l.2.79c2.13,8.47,4.44,16.9,5.86,22,.84,3,1.37,4.85,1.37,4.85s15.06-24.35,27.08-38.21c.18-.2.34-.39.51-.57,1.19-1.37,2.36-2.62,3.48-3.72,2.45-2.44,4.65-4.18,6.42-4.82a7,7,0,0,0,1.09-.51c4.92-2.79,12.86-12.92,20.29-23.53.73-1,1.44-2.09,2.16-3.12,1.65-2.38,3.25-4.77,4.76-7.06,1.16-1.75,2.27-3.45,3.32-5.07,5-7.78,8.52-13.58,8.52-13.58l6.94-.31,1.21-.06.81,0,31.51-1.46s1.36.23,3.6.68c.12,0,.24,0,.37.08,11.18,2.22,42.24,9.25,44.14,19,2.32,11.94,52.42,27.87,52.42,27.87.66,8,12.93,13.27,12.93,13.27s18.58,49.1,13.61,68.34c-4.91,19,12.78,66,13.25,67.32l0,0-3.39,4.28Z" transform="translate(-56.94 -58.66)" fill="#e8f5ff"/><path d="M778.64,227s30.67-8.7,37.64,9.21,22.56,90.24,22.56,90.24-40.48,7.63-51.09,0a30.57,30.57,0,0,0-21.57-5.64l-22.89,15.59-6.76-2s36.62-54.44,44.58-72.94S791.76,234.69,778.64,227Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M777.31,223S808,214.3,815,232.21s22.56,90.24,22.56,90.24-40.47,7.63-51.09,0a30.54,30.54,0,0,0-21.56-5.64L742,332.4l-6.76-2s36.62-54.44,44.58-72.94S790.43,230.71,777.31,223Z" transform="translate(-56.94 -58.66)" fill="#e8f5ff"/><path d="M571.44,511.55s22.89,5.64,27.21,18.58-16.92,13.27-16.92,13.27S568.79,520.51,571.44,511.55Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M656.7,607.09s-56.06,114.79-43.12,125.74S656.7,607.09,656.7,607.09Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M734,522.5S778.79,634,769.83,651.22s19.24,0,19.24,0Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M796.37,632.64s-151.28,7.3-107.15,54.41,134.69,2,134.69,2Z" transform="translate(-56.94 -58.66)" fill="#ffc1c7"/><path d="M774.48,184.77a82.34,82.34,0,0,1-6.27,31.62c-1.39.16-2.78.26-4.12.32-2-4.39-.93-9.46-.89-14.29s-1.74-10.51-6.39-11.81C747.54,188,741.14,205.33,732,202.2c-7-2.38-5.17-13-9.2-19.13-3.19-4.85-9.58-6.22-14.55-9.26-10.57-6.49-10.25-16.87-15.16-26.69-5.14-10.29-16-7.25-25.43-1.18-7.16,4.62-13.34,10.81-21,14.49-6.63,3.2-14.08,4.36-21.43,4.53a47.09,47.09,0,0,1-13.44-1.42,82.73,82.73,0,0,1,162.68,21.23Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M667.69,143.29c-7.17,4.62-13.34,10.8-21,14.5-6.63,3.19-14.08,4.35-21.43,4.52-9,.2-18.69-1.38-24.84-7.88-5.65-6-7-15.23-4.61-23.1s8.12-14.4,14.85-19.13,14.54-8,19-14.77c2.36-3.58,3.5-7.8,5.46-11.61,6.27-12.19,20.37-18.79,34-19.61s27.14,3.24,40.12,7.64S735.3,83.09,749,84c6.1.38,12.44,0,18.1,2.31,7.61,3.09,12.6,10.48,16,18,3.81,8.48,6.18,17.74,5.78,27-.84,19.77-13.9,39.17-8.16,58.11,1.52,5.05,4.37,10.23,2.85,15.28-2.22,7.37-11.73,9.05-19.42,9.4-2-4.39-.93-9.47-.89-14.29s-1.74-10.51-6.38-11.81c-9.28-2.59-15.68,14.71-24.8,11.59-6.95-2.39-5.15-13-9.19-19.13-3.19-4.86-9.59-6.22-14.55-9.26-10.57-6.49-10.25-16.87-15.16-26.69C688,134.17,677.13,137.21,667.69,143.29Z" transform="translate(-56.94 -58.66)" fill="#99607e"/><path d="M521,523.82l-7.63,2.66s3,45.12-7,58.06,32.84,45.11,32.84,45.11,58.72-.33,60.38-5-3-83.6-3-83.6-31.52-12.28-28.87-31.85c0,0-9.62,46.11-23.88,44.12S513.39,539.42,521,523.82Z" transform="translate(-56.94 -58.66)" fill="#e8f5ff"/><ellipse cx="489.51" cy="490.21" rx="20.13" ry="18.41" opacity="0.1"/><path d="M568.46,525.15s-4-122.08-38.82-94.88S494.48,490,501.11,499.61,529,557.33,529,557.33h0a24.33,24.33,0,0,0,36-16Z" transform="translate(-56.94 -58.66)" fill="#ffc1c7"/><path d="M785.67,215.92a2.94,2.94,0,0,0-.9-1.38c-1.72-1.57-5.42-2.12-11-1.64l.23,2.64c7.44-.64,8.91.84,9.1,1.09v.25l.23.33a11.16,11.16,0,0,1,2,8.8c-1.63,8.15-11.64,14.64-11.74,14.71l-.24.14-.15.23c-4.32,6.41-28.75,24.5-35.14,29.18l-.56-.64c-2.86,2.48-28,24.49-29.36,32.92-.88,5.29-6.84,7.34-9,7.91-2.28-1.73-9.68-7.62-13.53-14.22-3.61-6.21,10.92-18.33,12.2-23.06l-2-2.05c-.21.76-18.87,18.2-13.68,27.11,4.16,7.15,11.76,13.27,14.42,15.29-.85,7.72-6.14,53.05-14.27,63.79-10.1,13.35-18.59,80.63-17.65,104.12.83,20.87-4.62,60.29-22.82,77.22a29.17,29.17,0,0,1-24.07,8l-.22,0-.22,0c-.26,0-26.66,2.7-48.84-16-18.15-15.27-28.43-40.19-30.57-74.09l-.44,0-.18-9.87a19.25,19.25,0,1,0-2.87.23h.22l.18,9.81-.88.06c2.2,35,13,60.89,32,76.88a74,74,0,0,0,51.61,16.89,37.13,37.13,0,0,0,4,.22,32.8,32.8,0,0,0,23-9.25c19.17-17.85,25-58.72,24.09-80.3-1-24.89,7.91-89.75,16.85-101.56,8.76-11.59,14.07-56.75,15-65.5,3.17-.89,10.34-3.7,11.56-11,.88-5.28,17.67-21.55,28-30.56l-.31-.36c5.56-4.06,22.85-16.86,31.42-25.08,2.66-2.55,5.3-5.1,8.06-7.53,3.32-2.94,7.54-7.61,8.65-13.13A13.65,13.65,0,0,0,785.67,215.92Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M696.21,312.9c-.42-.29-10.38-7.42-15.37-16-5.18-8.91,13.48-26.34,13.68-27.1l2,2.05c-1.27,4.72-15.8,16.85-12.19,23.05,4.55,7.83,14.13,14.68,14.23,14.75Z" transform="translate(-56.94 -58.66)" fill="#353146"/><path d="M736.76,272.21l-1.56-2.15c.32-.23,31.73-22.95,36.68-30.3l.16-.22.23-.15c.1-.07,10.11-6.55,11.74-14.71a11.09,11.09,0,0,0-2-8.79l-.23-.34v-.24c-.2-.26-1.67-1.73-9.11-1.09l-.23-2.65c5.59-.48,9.28.07,11,1.64a3,3,0,0,1,.91,1.39,13.66,13.66,0,0,1,2.26,10.61c-1.11,5.53-5.32,10.2-8.65,13.13-2.75,2.43-5.4,5-8.05,7.53C759.86,255.5,737.86,271.42,736.76,272.21Z" transform="translate(-56.94 -58.66)" fill="#e8f5ff"/><rect x="533.44" y="463.28" width="2.65" height="16.11" transform="translate(-65.45 -48.82) rotate(-1.05)" fill="#e8f5ff"/><circle cx="476.17" cy="387.65" r="19.35" fill="#f50057"/><circle cx="476.17" cy="387.65" r="16.07" fill="#e8f5ff"/><path d="M620.27,569.5a37.14,37.14,0,0,1-4-.21,74.11,74.11,0,0,1-51.61-16.89c-19-16-29.78-41.86-32-76.89l4-.25c2.14,33.9,12.42,58.83,30.58,74.09,22.18,18.65,48.57,16,48.83,16l.22,0,.22,0a29.23,29.23,0,0,0,24.08-8c18.19-16.93,23.64-56.35,22.81-77.22C662.4,456.62,670.89,389.34,681,376c8.85-11.69,14.34-64.38,14.4-64.91l.15-1.5,1.48-.26c.09,0,8.73-1.64,9.81-8.1,1.4-8.42,26.5-30.43,29.35-32.92l2.61,3c-10.37,9-27.16,25.28-28,30.57-1.22,7.32-8.39,10.12-11.55,11-1,8.76-6.27,53.91-15,65.5-8.94,11.81-17.85,76.67-16.85,101.56.86,21.58-4.91,62.46-24.08,80.3A32.81,32.81,0,0,1,620.27,569.5Z" transform="translate(-56.94 -58.66)" fill="#353146"/><g opacity="0.1"><path d="M783,161.13c1.64-6.06,3.62-12.16,5-18.3C786.35,149,784.36,155.07,783,161.13Z" transform="translate(-56.94 -58.66)"/><path d="M766.27,208.75c-2-4.39-.93-9.47-.89-14.29S763.64,184,759,182.65c-9.28-2.59-15.68,14.72-24.8,11.59-7-2.39-5.15-13-9.19-19.13-3.19-4.86-9.58-6.22-14.54-9.26-10.58-6.49-10.26-16.87-15.16-26.69-5.15-10.3-16-7.26-25.44-1.18-7.17,4.62-13.34,10.81-21,14.5-6.63,3.19-14.08,4.35-21.43,4.52-8.95.21-18.69-1.38-24.84-7.88-4.74-5-6.45-12.33-5.47-19.2-.17.47-.32.94-.47,1.41-2.4,7.87-1,17.12,4.61,23.1,6.15,6.5,15.89,8.08,24.84,7.88,7.36-.17,14.8-1.33,21.44-4.52,7.68-3.7,13.85-9.88,21-14.5,9.44-6.08,20.3-9.12,25.44,1.18,4.9,9.82,4.59,20.2,15.16,26.69,5,3,11.35,4.4,14.55,9.26,4,6.15,2.23,16.74,9.19,19.13,9.11,3.12,15.51-14.18,24.79-11.59,4.64,1.3,6.43,7,6.38,11.81s-1.09,9.9.89,14.29c7.69-.35,17.2-2,19.43-9.4a10.77,10.77,0,0,0,.42-3.27C781.55,207,773.19,208.44,766.27,208.75Z" transform="translate(-56.94 -58.66)"/></g><path d="M947,455.15l11.61,12.28s9.29,67.67,13.93,74,15.6,31.51,5.31,50.42c0,0-3.32,10.29-1.33,14.6s-14.92,25.88-14.92,25.88-22.23,19.9-26.88,22.89-29.19,26.87-37.48,27.2-11,10.62-11,10.62l-46.78,1.66S813.62,693.35,808,697c0,0,3-39.48-25.87-65.36l36.82-13.27s13.94-6,18.25-12.27a22.53,22.53,0,0,1,11-8.29s10.28-7.3,10.61-11.28,12.57-8.86,12.57-8.86l-6.93-59.15,3.65-98.2s11.61-82.28,36.16-77.63S947,455.15,947,455.15Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M951,455.15l11.61,12.28s9.29,67.67,13.93,74,15.6,31.51,5.31,50.42c0,0-3.31,10.29-1.32,14.6s-14.93,25.88-14.93,25.88-22.23,19.9-26.88,22.89-29.19,26.87-37.48,27.2-11,10.62-11,10.62l-46.78,1.66S817.6,693.35,812,697c0,0,3-39.48-25.87-65.36l36.82-13.27s13.94-6,18.25-12.27a22.53,22.53,0,0,1,11-8.29s10.28-7.3,10.61-11.28,12.57-8.86,12.57-8.86l-6.93-59.15,3.65-98.2s11.61-82.28,36.16-77.63S951,455.15,951,455.15Z" transform="translate(-56.94 -58.66)" fill="#e8f5ff"/><path d="M907.84,554.35s34.17-9,43.13,2S907.84,554.35,907.84,554.35Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M899.88,569.44c11.61,8.13,47.44,8.46,47.44,8.46Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M917.46,610.08c1,.33,24.63,25.55,34.55,17.92S917.46,610.08,917.46,610.08Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M599.22,398.42s6.94,47.78,3.52,67.24,9.06,43.57,9.06,43.57Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M445.58,417.85c-8,6.27-13.84,21.11-18.07,37.42-7.38,28.45-9.79,61.44-9.79,61.44s-63.7-14.6-59.06-21.23c2.92-4.17-1-35.59-4.27-58.37-1.95-13.46-3.69-23.91-3.69-23.91S467.48,400.59,445.58,417.85Z" transform="translate(-56.94 -58.66)" fill="#ffccd0"/><path d="M445.58,416.52c-8,6.28-13.84,21.11-18.07,37.42a73.5,73.5,0,0,1-73.12-18.15c-1.95-13.47-3.69-23.92-3.69-23.92S467.48,399.27,445.58,416.52Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M479.82,380.78a73.68,73.68,0,1,1-16.21-46.08A73.64,73.64,0,0,1,479.82,380.78Z" transform="translate(-56.94 -58.66)" fill="#ffccd0"/><path d="M537.9,841.34h-21l-1.77-37.09-1.85-38.39s4.77-.71,12.37-1.77l3.07-.41.25,0c1.66,7.79,3.3,15.79,4.88,23.78a244.36,244.36,0,0,1,4.09,43c0,1,0,2,0,2.94C538,836.07,537.94,838.74,537.9,841.34Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M533.87,841.34H270.51c1.14-2.59,1.9-4.16,1.9-4.16S293.48,745,304.19,706a.51.51,0,0,0,0-.1,156,156,0,0,1,4.84-15.65l0,0a5.37,5.37,0,0,1,.47-1c5.3-8.62,11.94-17.91,2.65-31.18s-6-71.66-6-71.66,11.28-49.77,23.22-76.31a35.7,35.7,0,0,1,7.58-11,31,31,0,0,1,3.32-2.82l0,0a29.15,29.15,0,0,1,2.78-1.85l.19-.12a40.12,40.12,0,0,1,16.33-5.07,46.59,46.59,0,0,1,12.25.34c19.36,2.84,34.86,7.59,47.18,13,33.39,14.67,43.5,34.33,43.7,34.74l0,0,.08.17c1.34,3.13,20.94,48.89,28,70.24,1.83,5.56,2.83,9.47,2.43,10.54-2,5.3,15.26,71.65,15.26,71.65s8,32,16,69.51c.35,1.56.68,3.12,1,4.7,1.43,6.81,2.85,13.75,4.22,20.68a243.09,243.09,0,0,1,4.09,43.3Q534,834.9,533.87,841.34Z" transform="translate(-56.94 -58.66)" fill="#ff748e"/><path d="M358,466.42s-18.17-7-17.95,3.62,4.43,15.7,3.1,17.25.66,10.84.66,10.84,24.55,0,35.83,5.08,52.86,15.26,58.17,18.36,25,17,25,17l1.77-26.32s-20.35-16.81-53.74-25.43S358,466.42,358,466.42Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M358,465.09s-18.17-7-17.95,3.62,4.43,15.7,3.1,17.25.66,10.84.66,10.84,24.55,0,35.83,5.09,52.86,15.26,58.17,18.35,25,17,25,17L464.6,511s-20.35-16.81-53.74-25.43S358,465.09,358,465.09Z" transform="translate(-56.94 -58.66)" fill="#ff748e"/><path d="M412.85,528.43s34.72,37.59,32.95,48S412.85,528.43,412.85,528.43Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M441.16,741.85s-13.49,27.43-6.19,25.66S441.16,741.85,441.16,741.85Z" transform="translate(-56.94 -58.66)" fill="none"/><path d="M356.45,664.22S331,687.67,323.5,689s5.75,5.75,14.37,2.22,27-12.82,27-12.82Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M544.21,841.34H484.86c-8.3-7.2-16.15-13.87-21.15-17.88-8-6.42-13.77-15.87-17.45-23.47-.83-1.73-1.55-3.35-2.16-4.82a80.39,80.39,0,0,1-2.88-7.75l43.95-26.1A68.71,68.71,0,0,1,492,768l.53.61c2.44,2.88,4.59,6.15,4.78,8.83.22,3.12,8.9,15.19,17.77,26.78,9,11.79,18.22,23.06,18.83,23.82l0,0s1.52,2.07,4,5.25C539.66,835.59,541.82,838.35,544.21,841.34Z" transform="translate(-56.94 -58.66)" fill="#ffccd0"/><path d="M463.61,334.7c-2.11,4.76-4,9.7-4.28,15-.79,15.3.49,49.51-16.45,57.19-8.39,3.78-17.37-4.52-26.57-4.72-6.62-.14-12.69,4.06-16.73,9.31s-6.55,11.48-9.48,17.42a119,119,0,0,1-9.19,15.5,39,39,0,0,1-3.4,4.29,73.66,73.66,0,1,1,86.1-113.95Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M458,347c-.8,15.3.49,49.51-16.46,57.18-8.39,3.78-17.37-4.51-26.57-4.71-6.62-.15-12.68,4.06-16.73,9.3s-6.54,11.48-9.48,17.43a119.24,119.24,0,0,1-9.19,15.5c-2.06,2.92-4.34,5.85-7.51,7.49-5.52,2.88-12.21,1.26-18.13-.59q-11.52-3.63-22.7-8.18a22.9,22.9,0,0,0,.26-3.4c-.22.42-.46.81-.7,1.23l-.47.82c-.85,1.5-1.68,3-2.44,4.54-.29.59-.57,1.2-.82,1.81a23,23,0,0,0-1.87,7.16c-.51,6.67,2.78,13,5.7,19,11.23,23.21,18.17,50.35,9.72,74.7-3.66,10.59-10,20-14.63,30.23a97.67,97.67,0,0,0-6.83,57.78c2.31,12.12,6.94,24.12,5.8,36.41-2,21.15-20.24,36.89-38.51,47.71-9.87,5.82-21.95,11-32.43,6.4,6.68-7.8,8.4-18.59,9.84-28.77q5.91-41.65,11.85-83.34,2.37-16.59,4.73-33.18c2.94-20.78,5.92-41.79,4.08-62.7-1.34-15.41-5.12-31.77,1.56-45.72,3.53-7.39,9.82-13.51,11.78-21.47,1.61-6.47.11-13.35,1.17-19.94a33.94,33.94,0,0,1,2.92-8.64,42.45,42.45,0,0,1,6.7-10.22c-2.68-.78-5.18-1.85-6.7-4.09,4.3-2.8,4.95-9.11,3-13.85s-5.85-8.35-9.36-12.09-6.89-8.1-7.33-13.2c-.85-9.71,8.85-17.23,10.56-26.81,1.73-9.75-5.11-19.23-4.56-29.1.64-11.93,11.6-20.6,22.42-25.63a102,102,0,0,1,52.28-9c14.58,1.38,28.69,5.89,43.23,7.64,8.77,1,17.66,1.1,26.37,2.64s17.44,4.79,23.57,11.18C478.28,315.37,458.92,329.24,458,347Z" transform="translate(-56.94 -58.66)" fill="#ffe0d0"/><path d="M444.48,800c-5.1-2.21-14.38-.89-30.31-5.74s-19-26.77-19-26.77l0-.07h0c-.19-.5-1.67-3.76-11.69-15.18-11.07-12.61-35-76.3-35-76.3s-21.22-22.79-20.55-31.19S324.16,614,324.6,589s47.77-41.58,47.77-41.58c91.13-16.15,69.67,88.91,67.24,96.87s10.18,29.46,10.18,29.46c-1.78,9.36,7.3,23.85,7.3,23.85s2.2,12.82,2.65,17.69a3,3,0,0,0,.15.66c1.46,4.59,13.36,8.75,18.2,11.28,5.09,2.66,21.46,25.88,21.46,25.88C503.08,770.16,449.56,802.24,444.48,800Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M447.13,796c-5.09-2.22-14.38-.89-30.3-5.75s-19-26.76-19-26.76l0-.07h0c-.18-.51-1.67-3.76-11.69-15.18-11.07-12.61-35-76.31-35-76.31s-21.22-22.78-20.56-31.18-3.76-30.75-3.32-55.73S375,543.47,375,543.47c91.13-16.15,69.67,88.91,67.24,96.87s10.18,29.46,10.18,29.46c-1.78,9.36,7.3,23.85,7.3,23.85s2.2,12.82,2.66,17.69a2.51,2.51,0,0,0,.14.66c1.46,4.59,13.36,8.75,18.21,11.28,5.08,2.65,21.46,25.88,21.46,25.88C505.74,766.18,452.22,798.26,447.13,796Z" transform="translate(-56.94 -58.66)" fill="#ff748e"/><path d="M376.8,598.32s39.81,42,50.2,42S376.8,598.32,376.8,598.32Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M447.13,796c-5.09-2.22-14.38-.89-30.3-5.75s-19-26.76-19-26.76l0-.07h0c10.55-7,37.27-26.77,47.8-34,7.41-5.07,13.46-12.52,17-17.46,1.46,4.59,13.36,8.75,18.21,11.28,5.08,2.65,21.46,25.88,21.46,25.88C505.74,766.18,452.22,798.26,447.13,796Z" transform="translate(-56.94 -58.66)" fill="#ff748e"/><g opacity="0.1"><path d="M302,406.85c.05.08.12.15.18.23.3-.38.61-.76.93-1.12A7.46,7.46,0,0,1,302,406.85Z" transform="translate(-56.94 -58.66)"/><path d="M325.2,452.69c.42-5.55,3.39-10.44,6.17-15.32-1.82-.7-3.64-1.41-5.44-2.15a22.66,22.66,0,0,0,.26-3.39c-2.81,5-5.87,9.92-6.3,15.55-.51,6.68,2.78,13,5.7,19,11.24,23.2,18.17,50.34,9.72,74.7-3.67,10.58-10,20-14.63,30.23a97.63,97.63,0,0,0-6.82,57.77c2.29,12.13,6.93,24.12,5.79,36.41-2,21.15-20.23,36.89-38.51,47.7-7.47,4.42-16.2,8.47-24.55,8.18a30.25,30.25,0,0,1-2.58,3.55c10.49,4.63,22.56-.58,32.43-6.42C304.73,707.7,323,692,325,670.81c1.14-12.29-3.5-24.28-5.8-36.41A97.71,97.71,0,0,1,326,576.63c4.6-10.22,11-19.65,14.63-30.23,8.45-24.36,1.51-51.5-9.72-74.7C328,465.66,324.69,459.37,325.2,452.69Z" transform="translate(-56.94 -58.66)"/><path d="M462.1,298.64a28.89,28.89,0,0,0-3.16-2.8c12.12,15.72-5.38,29.08-6.25,46-.78,15.3.5,49.52-16.45,57.18-8.38,3.79-17.37-4.51-26.56-4.71-6.63-.14-12.69,4.07-16.74,9.31s-6.54,11.48-9.47,17.42a119.76,119.76,0,0,1-9.2,15.5c-2,2.93-4.34,5.85-7.52,7.5-5.5,2.87-12.19,1.26-18.12-.6q-8.65-2.72-17.14-6a21.63,21.63,0,0,1-.26,3.11q11.19,4.56,22.71,8.18c5.92,1.86,12.61,3.47,18.12.6,3.17-1.65,5.47-4.58,7.52-7.51a117.8,117.8,0,0,0,9.19-15.49c2.94-5.94,5.42-12.19,9.48-17.43s10.11-9.44,16.73-9.3c9.2.2,18.19,8.5,26.57,4.71,16.95-7.66,15.66-41.88,16.45-57.18C458.92,329.34,478.28,315.48,462.1,298.64Z" transform="translate(-56.94 -58.66)"/></g><path d="M330.33,439.08c-.85,1.5-1.68,3-2.44,4.54-.29.59-.57,1.2-.82,1.81-5.24-5.28-18-17.83-25.12-21.72a42.65,42.65,0,0,1,6.7-10.22S325.62,422.46,330.33,439.08Z" transform="translate(-56.94 -58.66)" opacity="0.1"/><path d="M330.8,438.26c-3.93-17.79-22.15-27.42-22.15-27.42a42.45,42.45,0,0,0-6.7,10.22c7.51,4.11,21.35,17.89,25.94,22.56Z" transform="translate(-56.94 -58.66)" fill="#ff748e"/></svg>
\ No newline at end of file
<svg id="a7136578-9e51-4be6-bab0-c6e74466be7a" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="738.222" height="702" viewBox="0 0 738.222 702"><path d="M758.55088,219.89949c17.44419-9.6681,35.16328-20.02823,47.4895-35.70738,12.87285-16.37451,18.368-40.86546,6.43806-57.93923-10.02108-14.342-29.97635-19.38477-46.97457-15.24s-31.22857,15.95342-42.28074,29.5169c3.61653-16.6709-13.96556-32.76764-30.96017-31.29126s-30.63042,16.33039-35.16813,32.77447-1.58523,34.042,3.28386,50.391a222.94611,222.94611,0,0,0,39.46458,75.339,72.701,72.701,0,0,1,9.86546-13.78376C723.12591,239.20284,741.10669,229.56759,758.55088,219.89949Z" transform="translate(-230.889 -99)" fill="#00bfa6"/><path d="M698.25158,268.54117a221.09652,221.09652,0,0,1-48.85992-87.93968c-4.7863-16.97507-7.59014-36.27518-.41724-53.02277,5.5478-12.95321,17.372-24.673,32.02947-25.758,15.4683-1.145,32.64,13.17894,29.32651,29.55816-.24745,1.22319,1.36363,2.51362,2.31766,1.34915,12.38131-15.11231,29.40057-29.03287,49.68223-30.39748,18.06468-1.21544,37.04075,7.81173,42.30257,26.16256,5.48057,19.11373-3.97525,39.33492-17.218,52.85076-14.69014,14.99308-33.813,24.34561-51.86189,34.5568-17.75857,10.047-35.8208,21.64869-46.7436,39.40822a62.62584,62.62584,0,0,0-9.36719,27.191c-.85776,9.97862,1.63856,19.41363,6.46933,28.11517,5.131,9.24245,11.47624,17.6681,16.10983,27.21132a137.73765,137.73765,0,0,1,10.3316,29.57021,139.58522,139.58522,0,0,1,.09,61.90038c-8.51461,37.14271-33.35829,69.83329-66.4219,88.6395a136.70534,136.70534,0,0,1-12.30515,6.18643c-1.62887.72035-.21936,3.11074,1.39976,2.39469a142.44754,142.44754,0,0,0,75.82-82.042c13.98849-39.71,8.62571-85.46407-13.7517-121.06166-5.85657-9.31653-12.622-18.35133-14.55048-29.45077-1.76721-10.17116.40921-20.78141,4.70378-30.06,9.19736-19.87128,27.42718-32.78844,45.841-43.44911,18.40924-10.658,38.07484-19.88843,53.67589-34.67141,13.8882-13.15995,24.13389-31.9373,21.729-51.60868a37.7757,37.7757,0,0,0-11.79435-23.49049,44.44331,44.44331,0,0,0-23.75827-10.71605c-19.66005-2.77173-38.08885,6.556-52.10146,19.74134A116.53478,116.53478,0,0,0,710.687,130.767l2.31766,1.34916c2.99085-14.78423-8.76148-28.36658-22.52258-32.10574-14.96514-4.06631-29.80007,4.6823-38.42342,16.54267-10.77139,14.81475-11.65246,33.81344-8.50384,51.2813,3.26625,18.12042,10.028,35.86081,18.241,52.289a225.10309,225.10309,0,0,0,34.49467,50.3788c1.20071,1.32572,3.15722-.64033,1.96105-1.961Z" transform="translate(-230.889 -99)" fill="#3f3d56"/><polygon points="457.71 668.672 444.623 672.386 393.202 508.636 430.934 502.131 457.71 668.672" fill="#9f616a"/><polygon points="304.107 669.612 291.165 666.839 324.644 499.036 361.049 510.896 304.107 669.612" fill="#9f616a"/><path d="M672.82791,799.48c3.58348,1.63547,6.58511-8.50078,9.60783-5.5303,8.455,8.30884,28.73788,6.44635,28.73788,6.44635a5.28525,5.28525,0,0,0,3.33135-6.88748h0a5.28526,5.28526,0,0,0-3.66688-3.27168l-8.99186-2.248-14.1185-24.82908-15.38667-1.94738-.38863.63555a39.67271,39.67271,0,0,0-4.25142,32.44019C668.98061,798.38818,670.72236,798.519,672.82791,799.48Z" transform="translate(-230.889 -99)" fill="#2f2e41"/><path d="M516.19731,792.25648c3.22425,2.26282,8.02776-7.15417,10.45671-3.6813,6.79412,9.71408,27.07582,11.58971,27.07582,11.58971a5.28526,5.28526,0,0,0,4.534-6.16268h0a5.28527,5.28527,0,0,0-3.00722-3.88672L546.827,786.2621,537.48382,759.271l-14.77165-4.72653-.49824.55383a39.67268,39.67268,0,0,0-10.10836,31.1169C512.61434,790.48,514.30284,790.92691,516.19731,792.25648Z" transform="translate(-230.889 -99)" fill="#2f2e41"/><path d="M644.98943,482.90421c6.89129,10.59782,13.57129,21.30108,16.52671,33.48194A673.85293,673.85293,0,0,1,676.788,606.98193c-23.9432,13.73726-44.71549,21.62282-65.0071,22.98173-.94358.06286-1.88563.10732-2.82712.14207l-7.39726-41.76062-5.9008,41.30038c-2.92185-.31062-5.84821-.75315-8.78867-1.34582-12.7204-2.55149-25.67185-7.76532-39.51085-15.77106a211.18781,211.18781,0,0,1-6.18455-60.41257c1.13705-27.188,7.28465-50.46557,13.23809-69.15786Z" transform="translate(-230.889 -99)" fill="#2f2e41"/><path d="M594.16609,359.77648l-32.52753-11.05935c11.76729-11.51951,16.5732-24.16737,11.70991-38.38248l36.43083,6.5055C601.13485,333.50084,589.81648,343.533,594.16609,359.77648Z" transform="translate(-230.889 -99)" fill="#9f616a"/><path d="M644.98944,482.90421c-29.58893,23.53735-59.71295,26.25045-90.57971.054,12.44311-39.06714-12.94223-75.80464-9.24444-103.538,2.307-17.30249,9.50334-38.73434,26.2358-43.71712l17.97125,5.49121a38.06906,38.06906,0,0,1,25.74582,26.88293l2.12621,8.27381c10.2891,10.94542,13.71882,25.32981,11.04715,42.79262,2.25565,4.955,1.22028,11.20429.1849,17.46281-.97991,5.95344-1.95982,11.91613-.11093,16.76948,3.97873,10.43428,10.38785,19.93812,16.62394,29.52832" transform="translate(-230.889 -99)" fill="#3f3d56"/><path d="M392.336,777H370.33585c-11.50787,0-21.78808.81433-28.57415,5.17487A36.98691,36.98691,0,0,0,309.336,763H287.33585a36.99993,36.99993,0,0,0-36.99994,36.99994V800h179v-.00006C429.33591,779.56543,412.77048,777,392.336,777Z" transform="translate(-230.889 -99)" fill="#e6e6e6"/><path d="M848.34959,801h93.97265c-.47461-17.53223-13.60547-21-35.98633-21h-22C861.95505,780,848.8242,783.46777,848.34959,801Z" transform="translate(-230.889 -99)" fill="#e6e6e6"/><rect y="699.60954" width="738.222" height="2" fill="#3f3d56"/><circle cx="369.78259" cy="203.52804" r="29.27477" fill="#9f616a"/><path d="M701.19682,469.21193l-20.50752-6.71251,1.496-16.45613,22.51748-.50034A12.13706,12.13706,0,0,1,716.961,459.57v0A12.13708,12.13708,0,0,1,701.19682,469.21193Z" transform="translate(-230.889 -99)" fill="#9f616a"/><path d="M661.51614,516.38615C653.039,512.411,633.74578,502.39,605.87369,482.08c-38.383-27.97377-28.62084-96.28115-28.62084-96.28115l51.22357,50.80761c-.97991,5.95344-1.95982,11.91613-.11093,16.76948C636.741,475.34075,655.88629,493.18256,661.51614,516.38615Z" transform="translate(-230.889 -99)" opacity="0.2"/><path d="M684.5926,467.76786c-27.7718,6.15307-50.49211,9.84222-68.95835-3.25275-29.28611-34.06043-45.93044-68.254-39.70066-102.68833A16.69548,16.69548,0,0,1,588.052,348.752h0a16.79411,16.79411,0,0,1,20.03636,10.1317l22.126,74.15437,57.31569,11.09336Z" transform="translate(-230.889 -99)" fill="#2f2e41"/><path d="M641.0667,541.27687a14.35368,14.35368,0,0,1-13.98631-11.22246l-1.704-7.67183,27.97625-6.21473,1.70354,7.67092a14.32981,14.32981,0,0,1-10.8803,17.09594h0A14.349,14.349,0,0,1,641.0667,541.27687Zm-13.48482-17.48956,1.30316,5.86626a12.47991,12.47991,0,0,0,24.36558-5.414l-1.30271-5.86536Z" transform="translate(-230.889 -99)" fill="#3f3d56"/><path d="M629.83993,290.29234s4.6996-36.57437-33.646-24.58078c0,0-27.38666-5.02505-36.36782,29.23146l-9.094,35.90928,4.432-2.41229,2.0662,4.5165,7.18186,1.8188,3.07329-6.09991,1.48672,7.40758,58.82332,5.86419s-26.34579-15.58072-26.76356-43.50509l5.01832,5.30305Z" transform="translate(-230.889 -99)" fill="#2f2e41"/><path d="M281.389,780.5s18-196,0-227c0,0,76,121,33,233Z" transform="translate(-230.889 -99)" fill="#e6e6e6"/><path d="M296.09468,779.50009s57.73937-102.72795,55.4644-124.075c0,0,12.02164,84.727-38.87318,135.42654Z" transform="translate(-230.889 -99)" fill="#e6e6e6"/><path d="M876.389,788.53087s12.72974-138.61274,0-160.53619c0,0,53.7478,85.57216,23.33786,164.77944Z" transform="translate(-230.889 -99)" fill="#e6e6e6"/><path d="M886.789,787.82372s40.83374-72.65,39.22486-87.74683c0,0,8.5018,59.91958-27.49142,95.77472Z" transform="translate(-230.889 -99)" fill="#e6e6e6"/></svg>
\ No newline at end of file
<svg id="7127a552-43d6-4b16-9df2-9f0fa9637ab8" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="962.2" height="771.67" viewBox="0 0 962.2 771.67"><defs><linearGradient id="d20faab1-6ab6-432b-bba0-607013892761" x1="2028.19" y1="403.28" x2="2028.19" y2="402.78" gradientTransform="matrix(-1, 0, 0, 1, 2778, 0)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity="0.25"/><stop offset="0.54" stop-color="gray" stop-opacity="0.12"/><stop offset="1" stop-color="gray" stop-opacity="0.1"/></linearGradient><linearGradient id="cabf670e-bbb1-4872-bc54-c659c98b3878" x1="2192.47" y1="835.84" x2="2192.47" y2="175.81" xlink:href="#d20faab1-6ab6-432b-bba0-607013892761"/></defs><title>Jogging</title><path d="M854,522.26a10.88,10.88,0,0,0-14.2,1.32,11.13,11.13,0,0,0,.44,15.51l13.58,13.5a2.26,2.26,0,0,0,3.21,0L870.57,539a11.13,11.13,0,0,0,.36-15.51,10.92,10.92,0,0,0-14.22-1.24A2.28,2.28,0,0,1,854,522.26Z" transform="translate(-118.9 -64.16)" fill="#00b0ff"/><path d="M262,214.26a10.88,10.88,0,0,0-14.2,1.32,11.13,11.13,0,0,0,.44,15.51l13.58,13.5a2.26,2.26,0,0,0,3.21,0L278.57,231a11.13,11.13,0,0,0,.36-15.51,10.92,10.92,0,0,0-14.22-1.24A2.28,2.28,0,0,1,262,214.26Z" transform="translate(-118.9 -64.16)" fill="#00b0ff"/><path d="M136,489.26a10.88,10.88,0,0,0-14.2,1.32,11.13,11.13,0,0,0,.44,15.51l13.58,13.5a2.26,2.26,0,0,0,3.21,0L152.57,506a11.13,11.13,0,0,0,.36-15.51,10.92,10.92,0,0,0-14.22-1.24A2.28,2.28,0,0,1,136,489.26Z" transform="translate(-118.9 -64.16)" fill="#00b0ff"/><path d="M853,187.26a10.88,10.88,0,0,0-14.2,1.32,11.13,11.13,0,0,0,.44,15.51l13.58,13.5a2.26,2.26,0,0,0,3.21,0L869.57,204a11.13,11.13,0,0,0,.36-15.51,10.92,10.92,0,0,0-14.22-1.24A2.28,2.28,0,0,1,853,187.26Z" transform="translate(-118.9 -64.16)" fill="#00b0ff"/><rect x="651" y="73.92" width="3" height="17" fill="#3ad29f"/><rect x="769.9" y="138.08" width="3" height="17" transform="translate(799.08 -688.98) rotate(90)" fill="#3ad29f"/><rect x="783" y="304.92" width="3" height="17" fill="#3ad29f"/><rect x="901.9" y="369.08" width="3" height="17" transform="translate(1162.08 -589.98) rotate(90)" fill="#3ad29f"/><rect x="193" y="515.92" width="3" height="17" fill="#3ad29f"/><rect x="311.9" y="580.08" width="3" height="17" transform="translate(783.08 211.02) rotate(90)" fill="#3ad29f"/><rect x="124" y="73.92" width="3" height="17" fill="#3ad29f"/><rect x="242.9" y="138.08" width="3" height="17" transform="translate(272.08 -161.98) rotate(90)" fill="#3ad29f"/><rect x="256" y="100.92" width="3" height="17" fill="#3ad29f"/><rect x="374.9" y="165.08" width="3" height="17" transform="translate(431.08 -266.98) rotate(90)" fill="#3ad29f"/><path d="M312,351a3.67,3.67,0,0,1-2.05-4.44,1.86,1.86,0,0,0,.08-.41h0a1.84,1.84,0,0,0-3.31-1.22h0a1.82,1.82,0,0,0-.2.36,3.68,3.68,0,0,1-4.44,2.05,2,2,0,0,0-.41-.08h0a1.84,1.84,0,0,0-1.22,3.31h0a1.58,1.58,0,0,0,.36.2,3.69,3.69,0,0,1,2.05,4.45,1.35,1.35,0,0,0-.08.4h0a1.84,1.84,0,0,0,3.31,1.22h0a2.08,2.08,0,0,0,.2-.36,3.67,3.67,0,0,1,4.44-2,1.86,1.86,0,0,0,.41.08h0a1.85,1.85,0,0,0,1.22-3.32h0A2.08,2.08,0,0,0,312,351Z" transform="translate(-118.9 -64.16)" fill="#f55f44"/><path d="M879,71a3.67,3.67,0,0,1-2-4.44,1.86,1.86,0,0,0,.08-.41h0a1.84,1.84,0,0,0-3.31-1.22h0a1.82,1.82,0,0,0-.2.36,3.68,3.68,0,0,1-4.44,2,2,2,0,0,0-.41-.08h0a1.84,1.84,0,0,0-1.22,3.31h0a1.58,1.58,0,0,0,.36.2,3.69,3.69,0,0,1,2.05,4.45,1.35,1.35,0,0,0-.08.4h0a1.84,1.84,0,0,0,3.31,1.22h0a2.08,2.08,0,0,0,.2-.36,3.67,3.67,0,0,1,4.44-2,1.86,1.86,0,0,0,.41.08h0a1.85,1.85,0,0,0,1.22-3.32h0A2.08,2.08,0,0,0,879,71Z" transform="translate(-118.9 -64.16)" fill="#3ad29f"/><path d="M527,87a3.67,3.67,0,0,1-2-4.44,1.86,1.86,0,0,0,.08-.41h0a1.84,1.84,0,0,0-3.31-1.22h0a1.82,1.82,0,0,0-.2.36,3.68,3.68,0,0,1-4.44,2,2,2,0,0,0-.41-.08h0a1.84,1.84,0,0,0-1.22,3.31h0a1.58,1.58,0,0,0,.36.2,3.69,3.69,0,0,1,2.05,4.45,1.35,1.35,0,0,0-.08.4h0a1.84,1.84,0,0,0,3.31,1.22h0a2.08,2.08,0,0,0,.2-.36,3.67,3.67,0,0,1,4.44-2,1.86,1.86,0,0,0,.41.08h0a1.85,1.85,0,0,0,1.22-3.32h0A2.08,2.08,0,0,0,527,87Z" transform="translate(-118.9 -64.16)" fill="#f55f44"/><path d="M342,461a3.67,3.67,0,0,1-2.05-4.44,1.86,1.86,0,0,0,.08-.41h0a1.84,1.84,0,0,0-3.31-1.22h0a1.82,1.82,0,0,0-.2.36,3.68,3.68,0,0,1-4.44,2.05,2,2,0,0,0-.41-.08h0a1.84,1.84,0,0,0-1.22,3.31h0a1.58,1.58,0,0,0,.36.2,3.69,3.69,0,0,1,2.05,4.45,1.35,1.35,0,0,0-.08.4h0a1.84,1.84,0,0,0,3.31,1.22h0a2.08,2.08,0,0,0,.2-.36,3.67,3.67,0,0,1,4.44-2,1.86,1.86,0,0,0,.41.08h0a1.85,1.85,0,0,0,1.22-3.32h0A2.08,2.08,0,0,0,342,461Z" transform="translate(-118.9 -64.16)" fill="#f55f44"/><path d="M784,333a3.67,3.67,0,0,1-2-4.44,1.86,1.86,0,0,0,.08-.41h0a1.84,1.84,0,0,0-3.31-1.22h0a1.82,1.82,0,0,0-.2.36,3.68,3.68,0,0,1-4.44,2.05,2,2,0,0,0-.41-.08h0a1.84,1.84,0,0,0-1.22,3.31h0a1.58,1.58,0,0,0,.36.2,3.69,3.69,0,0,1,2.05,4.45,1.35,1.35,0,0,0-.08.4h0a1.84,1.84,0,0,0,3.31,1.22h0a2.08,2.08,0,0,0,.2-.36,3.67,3.67,0,0,1,4.44-2,1.86,1.86,0,0,0,.41.08h0a1.85,1.85,0,0,0,1.22-3.32h0A2.08,2.08,0,0,0,784,333Z" transform="translate(-118.9 -64.16)" fill="#f55f44"/><path d="M1080,229a3.67,3.67,0,0,1-2-4.44,1.86,1.86,0,0,0,.08-.41h0a1.84,1.84,0,0,0-3.31-1.22h0a1.82,1.82,0,0,0-.2.36,3.68,3.68,0,0,1-4.44,2.05,2,2,0,0,0-.41-.08h0a1.84,1.84,0,0,0-1.22,3.31h0a1.58,1.58,0,0,0,.36.2,3.69,3.69,0,0,1,2,4.45,1.35,1.35,0,0,0-.08.4h0a1.84,1.84,0,0,0,3.31,1.22h0a2.08,2.08,0,0,0,.2-.36,3.67,3.67,0,0,1,4.44-2,1.86,1.86,0,0,0,.41.08h0a1.85,1.85,0,0,0,1.22-3.32h0A2.08,2.08,0,0,0,1080,229Z" transform="translate(-118.9 -64.16)" fill="#f55f44"/><path d="M749.73,402.78l.16.5A2.66,2.66,0,0,1,749.73,402.78Z" transform="translate(-118.9 -64.16)" fill="url(#d20faab1-6ab6-432b-bba0-607013892761)"/><path d="M283.1,803.73c-.1-.14-.2-.28-.28-.42s-.11-.2-.16-.3a4.23,4.23,0,0,1-.22-.42l-.12-.3c-.05-.14-.11-.29-.15-.43l-.08-.29c0-.14-.07-.29-.1-.44l0-.27c0-.15,0-.31,0-.46s0-.16,0-.25,0-.32,0-.47,0-.15,0-.23l.06-.5c0-.06,0-.13,0-.19a4.87,4.87,0,0,1,.12-.52l0-.16q.07-.27.18-.54s0-.09,0-.13.15-.38.23-.57l0-.08c.09-.2.19-.4.29-.59l0,0,.35-.61h0a21.56,21.56,0,0,1,5-5.39c14.95,6.15,33.41-.88,33.41-.88s24.62-12.31,22.86-8.79c-.59,1.18-.29,3.55.38,6.18,11.8-2.47,18.3-8.81,21.85-14.55l-13.44-14.49S407.88,726.82,414,711s36-60.66,36-60.66,9.67-35.17,27.26-43.08c0,0,35.07-41.89,55.54-77.82-7.27-18.09-17.4-46.37-15.1-58.46,2.87-15-.11-43.52-1.3-53.54-9.73,8.11-49.27,40.25-64.64,39.48-5.52-.28-11.47-3.24-17-7.17-13.28-8.41-25.16-23.6-25.16-23.6,1.79.17,3.26-1.47,4.45-4.21-14.68-16-45.09-48.76-48.41-49.42-4.39-.88-28.13-42.21-14.94-51s36.92,22.86,37.8,29c.6,4.17,19,22.5,30.76,33.86,0-.29,0-.46,0-.46l1.74.87c0-.55,0-.87,0-.87l30.36,15.19,25.91-35.41s7-37.8,24.62-44,30.33-25.05,30.33-25.05a18,18,0,0,1,.39,1.87c.89-1.17,1.37-1.87,1.37-1.87s0,.15.1.42a45.93,45.93,0,0,0,1-16.55l-.25-.15c-.11-.68-.22-1.33-.34-1.95A44,44,0,0,1,516.75,222c-4.48-3.13-11-5.08-16.5-7.46-8.31-3.57-15.25-8.82-19.83-15a17.47,17.47,0,0,1,9.19.19c.37-4.06-4.32-8.7-.67-11.79,2.26-1.92,6.47-1.75,9.7-.8s6.15,2.52,9.58,2.94c6,.73,11.59-2.16,15.85-5.28s8.24-6.77,13.94-8.25c11.28-2.93,22.48,3.79,33.81,6.63,18.2,4.56,29.06,9.42,29.87,21a37.53,37.53,0,0,1,6.43,5.46,24,24,0,0,1,7.72,13.08c1.54,7.89-1.66,15.91-5.51,23-2.19,4-12.71,24.82-19.86,22.07a44,44,0,0,1-6.58,6.15c.23,2.4.56,4.82,1,7.24a16.15,16.15,0,0,0,5.17,1.78A62.77,62.77,0,0,0,601.93,284a175.79,175.79,0,0,0,18.72-1.14,157.48,157.48,0,0,1,18.19-1,90.07,90.07,0,0,1,9.07.43l.47,0c.61.07,1.21.14,1.79.23l.28,0c.68.1,1.33.2,2,.32l.21,0,1.6.31.36.08c.56.12,1.1.25,1.63.39h0q.82.21,1.59.45l.26.08,1.25.39.27.1c.94.32,1.83.66,2.67,1l.26.11,1,.45.19.09,1.18.55.1.05,1,.5.25.12,1,.51.07,0,1.25.65.75.39.35.18,1,.52c8.79,4.4,94.07,27.26,109,73l-.3.28-.07.05-.34.31c.25.67.49,1.33.71,2,0,0-1.45,1.3-3.71,3.42,4,17.49,14.76,62.16,20.41,64.28,7,2.64,14.95,56.27-3.51,54.51s-18.47-44.84-18.47-44.84-12.17-32.64-21.15-49.21a23.16,23.16,0,0,0-3.52,6.83l.06.18a1.15,1.15,0,0,1-.06-.17,4.86,4.86,0,0,0-.1,2.31c-.87-2.55-5.38-14.26-14.79-12.69-10.05,1.67-48-35.71-51.59-39.29.08,1,.19,2.18.31,3.59h0v.05c.07.82.15,1.71.22,2.66l0,.3c0,.24,0,.48.05.73s0,.32,0,.48l.06.74c0,.17,0,.35,0,.52l.06.74c0,.22,0,.45,0,.67s.06.72.08,1.09.05.59.07.88,0,.42,0,.63l.06.88c0,.2,0,.4,0,.6s0,.62.07.94,0,.41,0,.62l.06,1c0,.2,0,.39,0,.58,0,.53.07,1.06.1,1.6v.21l.09,1.48,0,.51c0,.4.05.81.07,1.22l0,.58c0,.42.05.84.07,1.26l0,.52c0,.5,0,1,.08,1.52,0,.1,0,.19,0,.29l.09,1.91v.11c0,.58,0,1.16.08,1.74,0,.17,0,.34,0,.5l.06,1.43c0,.19,0,.38,0,.57,0,.48,0,1,0,1.45,0,.16,0,.33,0,.5,0,1.32.09,2.66.13,4,0,.1,0,.2,0,.29,0,.57,0,1.14,0,1.71,0,.17,0,.35,0,.52,0,.51,0,1,0,1.54,0,.18,0,.36,0,.53l0,1.7v.34c0,1.38,0,2.77,0,4.17,0,.14,0,.29,0,.44v1.62c0,.19,0,.38,0,.56,0,.52,0,1,0,1.55v.43c.06,19.18-1.17,38.7-5.48,49.84a54.88,54.88,0,0,0-3.6,18.72A76.4,76.4,0,0,0,685.71,507h0l-1-.32c.12.22.19.33.19.33l-.57-.18c.86,1.81,1.45,2.82,1.45,2.82s-1.28-.41-3.56-1.08c3.24,11.45,5.41,29.08-.84,51.19,0,0-3.52,19.34-.88,26.38s5.28,63.3,5.28,63.3,5.27,7,14.94,2.64S829,632.74,829,632.74s.28.49.74,1.34c3.65-1.14,8.91-2.88,12.76-4.5-1.42-2-2.74-3.15-3.83-3,0,0,6.34-3.06,13.24-5.47h0l1.26-.43.05,0,1.23-.4.08,0,1.18-.36.13,0,1.08-.3.22-.07,1-.26.26-.07,1-.22.28-.06.87-.18.33-.06.79-.13.37-.06.72-.08.39,0,.66,0,.37,0h1l.54,0,.34,0,.48.1.32.07c.14,0,.27.1.4.15a2.49,2.49,0,0,1,.29.11,3.41,3.41,0,0,1,.38.21c.07,0,.15.08.21.13a2.56,2.56,0,0,1,.48.45c4.39,5.27,29,106.38,17.58,113.41-.34.21-.67.41-1,.59l-.4.23-.52.29-.5.27-.37.19-.54.26-.28.13-.56.24-.2.08c-.2.08-.4.16-.59.22l-.13,0-.6.19-.08,0c-6.37,1.72-8.49-4.18-16.22-16.82-7.57-12.39-17.29-28-25.79-33.78-.19.41-.37.84-.58,1.25,0,0-88.8,9.67-121.33,20.22s-58,24.61-79.13,0c-18.93-22.08-37.85-93.67-41.55-108.19h0v0c-.26-1-.44-1.77-.55-2.18h0l0-.18,0-.07,0-.07v0l-70.34,53.63L494,685.5S451,746.16,443.05,747s-44.84,58.9-44.84,58.9l-1.34-1.44c-.32,1.61-.56,3.09-.74,4.38,3,7,.21,15.38-2.43,20.93h0l-.11.22-.3.61-.16.32c-.1.19-.19.38-.29.56l-.15.28c-.1.2-.21.39-.31.58l-.15.28-.24.42-.12.21c-.1.19-.21.36-.3.53a1.59,1.59,0,0,0-.13.22c-.07.1-.13.21-.19.31s-.07.12-.11.17l-.23.38a1.19,1.19,0,0,0-.09.15l-.15.22-.06.1-.15.23,0,0c0,.06-.06.09-.08.13l0,0,0,0s-92.32-22-103.75-29c-.36-.22-.7-.45-1-.68l-.29-.22c-.2-.16-.4-.31-.58-.47a4,4,0,0,1-.3-.28c-.15-.14-.31-.28-.44-.42s-.18-.2-.27-.3l-.35-.41Z" transform="translate(-118.9 -64.16)" fill="url(#cabf670e-bbb1-4872-bc54-c659c98b3878)"/><path d="M819.26,632s20.56-6,21.41-8.57,18,47.1,18,47.1l-17.13,12s-18-10.27-27.4-8.56S819.26,632,819.26,632Z" transform="translate(-118.9 -64.16)" fill="#4c4c56"/><path d="M376.53,754.48S374,777.6,345.7,780.17s18.84,23.12,18.84,23.12l36,2.57s.85-14.56,6.85-25.69S376.53,754.48,376.53,754.48Z" transform="translate(-118.9 -64.16)" fill="#4c4c56"/><path d="M673.68,494.14S690,519,678.82,558.37c0,0-3.42,18.84-.85,25.69s5.13,61.66,5.13,61.66,5.14,6.85,14.56,2.57,125-18.84,125-18.84,18.84,32.54,8.56,52.24c0,0-86.49,9.42-118.17,19.69s-56.52,24-77.08,0-41.1-107.9-41.1-107.9l-68.51,52.24-30,35.11s-42,59.09-49.67,59.94-43.67,57.38-43.67,57.38l-43.68-47.1s53.1-30,59.09-45.39,35.11-59.08,35.11-59.08,9.42-34.26,26.55-42c0,0,61.66-73.64,67.65-107.9s102.76-18,102.76-18Z" transform="translate(-118.9 -64.16)" fill="#5f5d7e"/><path d="M355.12,790.44s-6-13.7-4.28-17.12-22.27,8.56-22.27,8.56-18,6.85-32.54.86c0,0-12.84,9.41-1.71,16.27s101.05,28.26,101.05,28.26,13.7-19.7,2.57-30.83Z" transform="translate(-118.9 -64.16)" fill="#986365"/><path d="M418.49,705.66c6-15.41,35.11-59.08,35.11-59.08s9.42-34.26,26.55-42c0,0,61.66-73.64,67.65-107.9,1.24-7.06,6.34-12,13.64-15.32q6,17.94,11.95,35.87,8.15,24.5,16.31,49c3.14,9.45,6.12,20,5.83,29.76-.41-1.63-.63-2.53-.63-2.53l-68.51,52.24-30,35.11s-42,59.09-49.67,59.94-43.67,57.38-43.67,57.38l-43.68-47.1S412.5,721.08,418.49,705.66Z" transform="translate(-118.9 -64.16)" opacity="0.1"/><path d="M534.1,274.06s7.28,18.41-2.14,35.54,3.85,47.53,12.41,49.24,42.82-20.55,45.39-35.11-11.13-44.53-4.28-64.23Z" transform="translate(-118.9 -64.16)" fill="#fdc2cc"/><path d="M580.34,305.75s-26.55,53.95-55.66,15.41c0,0-29.12,59.09-19.7,68.51a197.16,197.16,0,0,0,21.41,18l15.42,107.9s87.34-30,124.17-24.83l-56.52-135.3Z" transform="translate(-118.9 -64.16)" opacity="0.1"/><path d="M580.34,303.18s-26.55,53.95-55.66,15.41c0,0-29.12,59.09-19.7,68.51a197.16,197.16,0,0,0,21.41,18L541.81,513S629.15,483,666,488.15l-56.52-135.3Z" transform="translate(-118.9 -64.16)" fill="#d39999"/><path d="M769.6,365.69s14.55,66.8,21.4,69.37,14.56,54.8-3.42,53.09-18-43.67-18-43.67S750.76,394,743.05,388,769.6,365.69,769.6,365.69Z" transform="translate(-118.9 -64.16)" fill="#fdc2cc"/><path d="M433.05,396.52s-38.54-36-39.39-42-24-36.82-36.83-28.26,10.28,48.81,14.56,49.67,54.81,56.52,54.81,56.52Z" transform="translate(-118.9 -64.16)" fill="#fdc2cc"/><path d="M584.2,289.05s4.71,5.56,36.39,2.14,39.39,2.57,48,6.85,91.63,26.55,106.18,71.08c0,0-32.54,29.11-29.11,36.82,0,0-4.28-14.56-14.56-12.84s-50.53-38.54-50.53-38.54,7.71,75.36-2.56,101.91,5.13,53.09,5.13,53.09-72.79-23.12-105.33-12c0,0-18.84-84.78-2.57-119s-6.85-66.8-6.85-66.8Z" transform="translate(-118.9 -64.16)" opacity="0.1"/><path d="M583.34,286.48s4.71,5.57,36.39,2.14,39.4,2.57,48,6.85S759.32,322,773.88,366.55c0,0-32.54,29.11-29.12,36.82,0,0-4.28-14.56-14.56-12.84S679.68,352,679.68,352s7.71,75.36-2.57,101.91S682.25,507,682.25,507s-72.79-23.12-105.33-12c0,0-18.84-84.78-2.57-119s-6.85-66.8-6.85-66.8Z" transform="translate(-118.9 -64.16)" opacity="0.1"/><path d="M584.2,286.48s4.71,5.57,36.39,2.14,39.39,2.57,48,6.85S760.18,322,774.73,366.55c0,0-32.54,29.11-29.11,36.82,0,0-4.28-14.56-14.56-12.84S680.53,352,680.53,352s7.71,75.36-2.56,101.91S683.1,507,683.1,507s-72.79-23.12-105.33-12c0,0-18.84-84.78-2.57-119s-6.85-66.8-6.85-66.8Z" transform="translate(-118.9 -64.16)" fill="#ec7580"/><path d="M536.24,301.89s-12.42,18.42-29.54,24.41-24,42.82-24,42.82L457,404.23,426.2,388.81s-.86,42-9.42,41.11c0,0,21.41,27.4,38.53,28.26s65.09-40.25,65.09-40.25,5.14,37.68,1.71,55.66,21.41,72.79,21.41,72.79l34.25-6.85s-18-68.51-40.25-79.64c0,0,0-46.24,3.43-57.38s-22.27-53.09-18.84-61.65c1.92-4.81,9.47-15.08,13.27-24.41A24.4,24.4,0,0,0,536.24,301.89Z" transform="translate(-118.9 -64.16)" opacity="0.1"/><path d="M533.67,300.18s-12.42,18.41-29.54,24.41-24,42.81-24,42.81l-25.69,35.11L423.63,387.1s-.86,42-9.42,41.11c0,0,21.41,27.4,38.54,28.26s65.08-40.25,65.08-40.25,5.14,37.68,1.71,55.66S541,544.67,541,544.67l34.25-6.85s-18-68.51-40.24-79.64c0,0,0-46.25,3.42-57.38s-22.26-53.09-18.84-61.66c1.92-4.8,9.47-15.07,13.27-24.4A24.4,24.4,0,0,0,533.67,300.18Z" transform="translate(-118.9 -64.16)" opacity="0.1"/><path d="M535.38,300.18S523,318.59,505.84,324.59s-24,42.81-24,42.81l-25.69,35.11L425.34,387.1s-.85,42-9.42,41.11c0,0,21.41,27.4,38.54,28.26s65.08-40.25,65.08-40.25,5.14,37.68,1.71,55.66,21.41,72.79,21.41,72.79l34.26-6.85s-18-68.51-40.25-79.64c0,0,0-46.25,3.42-57.38s-22.26-53.09-18.84-61.66c1.93-4.8,9.48-15.07,13.28-24.4A24.45,24.45,0,0,0,535.38,300.18Z" transform="translate(-118.9 -64.16)" fill="#ec7580"/><path d="M533.93,301.63S521.52,320,504.39,326s-24,42.81-24,42.81L454.72,404l-30.83-15.41s-.85,42-9.42,41.1c0,0,21.41,27.41,38.54,28.26s65.08-40.24,65.08-40.24,5.14,37.68,1.71,55.66,21.41,72.79,21.41,72.79l34.26-6.85s-18-68.51-40.25-79.64c0,0,0-46.25,3.42-57.38s-22.26-53.09-18.84-61.66c1.93-4.8,9.48-15.08,13.28-24.4A24.45,24.45,0,0,0,533.93,301.63Z" transform="translate(-118.9 -64.16)" opacity="0.05"/><path d="M832.11,623.45s24.83-12,29.12-6.85,28.25,103.62,17.12,110.47-12,1.71-21.41-13.7-22.26-36-31.68-35.11c0,0,27.4-9.42,26.55-12.85S838.1,622.6,832.11,623.45Z" transform="translate(-118.9 -64.16)" fill="#986365"/><path d="M583.93,281.64a42.82,42.82,0,0,1-47.72,2.69,43,43,0,0,0-2.11-8.56l51.38-14.55C583.36,267.3,583.21,274.36,583.93,281.64Z" transform="translate(-118.9 -64.16)" opacity="0.1"/><path d="M552.15,248.12c-10.44.91-23.15-1.06-27-8.17-1.11-2-1.35-4.29-2.48-6.33-3.27-5.89-12.64-8.3-20.16-11.53-8.1-3.48-14.86-8.59-19.32-14.61a17.09,17.09,0,0,1,9,.18c.37-4-4.21-8.47-.65-11.49,2.2-1.87,6.3-1.7,9.44-.77s6,2.45,9.34,2.86c5.81.71,11.29-2.1,15.44-5.14s8-6.6,13.57-8c11-2.86,21.9,3.69,32.94,6.45,22.63,5.67,33.6,11.81,27.45,31.49C595.09,237.56,571.14,246.48,552.15,248.12Z" transform="translate(-118.9 -64.16)" fill="#865a61"/><circle cx="439.17" cy="181.64" r="42.82" fill="#fdc2cc"/><path d="M591.36,239.27c-2.07-8.4-8.05-16.25-16.39-18.58-7.09-2-14.63.17-21.55,2.68s-14,5.44-21.34,5-15.06-5.5-15.62-12.84a6.15,6.15,0,0,1,.53-3.32,8.06,8.06,0,0,1,3.07-2.83c10.77-6.87,23-12.28,35.79-12.07,10.51.17,20.55,4.11,30.32,8,12.33,4.9,26.34,11.75,28.88,24.76,1.5,7.69-1.61,15.5-5.36,22.37-2.17,4-12.7,24.8-19.67,21.37C587.21,272.43,592.69,244.67,591.36,239.27Z" transform="translate(-118.9 -64.16)" opacity="0.1"/><path d="M589.65,237.56c-2.07-8.41-8.06-16.25-16.4-18.58-7.09-2-14.63.17-21.55,2.68s-14,5.44-21.34,5-15.06-5.51-15.62-12.85a6.19,6.19,0,0,1,.54-3.32,8.26,8.26,0,0,1,3.06-2.83c10.78-6.86,23-12.27,35.8-12.07,10.51.18,20.55,4.12,30.32,8,12.32,4.9,26.34,11.75,28.88,24.76,1.5,7.68-1.62,15.49-5.37,22.36-2.16,4-12.69,24.81-19.66,21.38C585.5,270.72,591,243,589.65,237.56Z" transform="translate(-118.9 -64.16)" fill="#865a61"/><path d="M875.78,727.93c11.14-6.85-12.84-105.33-17.12-110.47-1.88-2.25-7.71-1.21-13.66.66,6.76-2.36,14.08-4.09,16.23-1.52,4.28,5.14,28.25,103.62,17.12,110.47a20.13,20.13,0,0,1-6.21,2.83A30.9,30.9,0,0,0,875.78,727.93Z" transform="translate(-118.9 -64.16)" fill="#fff" opacity="0.5"/><path d="M291.19,788c-1.15,2.95-.8,6.37,4,9.31,11.13,6.85,101.05,28.26,101.05,28.26a44.63,44.63,0,0,0,2.45-4.16,46.12,46.12,0,0,1-3.31,5.88S305.45,805.86,294.32,799C288.57,795.47,289.22,791.24,291.19,788Z" transform="translate(-118.9 -64.16)" fill="#fff" opacity="0.5"/><g opacity="0.05"><path d="M741,394.79c7.12-11.45,26.84-29.1,26.84-29.1-14.56-44.53-97.62-66.79-106.18-71.08-4.73-2.36-9.2-5.24-17.57-6.77,13.07,1,18.54,4.7,24.42,7.63,8.56,4.28,91.63,26.55,106.18,71.08,0,0-31.27,28-29.27,36.34A26.88,26.88,0,0,0,741,394.79Z" transform="translate(-118.9 -64.16)"/><path d="M745.46,402.89l.16.48A2.46,2.46,0,0,1,745.46,402.89Z" transform="translate(-118.9 -64.16)"/><path d="M583.21,287.89l1-1.41s1.09,1.28,5.69,2.23A51.79,51.79,0,0,1,583.21,287.89Z" transform="translate(-118.9 -64.16)"/><path d="M730.13,390.57a11.35,11.35,0,0,1-3.74-1A9.33,9.33,0,0,1,730.13,390.57Z" transform="translate(-118.9 -64.16)"/><path d="M618.71,493.07c-15.32-1.69-30.28-1.71-40.94,1.93,0,0-.2-.89-.53-2.51C588.92,490.22,603.93,491,618.71,493.07Z" transform="translate(-118.9 -64.16)"/><path d="M675.51,504.74c-3-5.77-13.29-28.73-4.4-51.7,10.28-26.55,2.57-101.91,2.57-101.91s2.94,2.94,7.43,7.19C682.69,377,686.43,432,678,453.9,667.69,480.44,683.1,507,683.1,507S680.28,506.09,675.51,504.74Z" transform="translate(-118.9 -64.16)"/></g></svg>
\ No newline at end of file
<svg id="ba65d029-7b6e-4d16-9739-50ea7099b679" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="888" height="618.10603" viewBox="0 0 888 618.10603"><path d="M897.95656,235.99009l-68.50224.66737c-3.21977-15.85137-14.03811-57.44279-4.29525-68.78728A16.67423,16.67423,0,0,1,842.723,152.94961h0c10.61742-16.61983,28.30223-14.12446,40.255-3.74465,12.02932,4.15075,16.56454,11.52481,14.9786,21.53174,8.90863,7.798,10.55217,17.28535,6.55313,28.08487Z" transform="translate(-156 -140.94698)" fill="#2f2e41"/><path d="M891.36207,278.18922l-49.42241-6.8431-9.88449-14.44655c13.61613-9.03186,18.43428-21.64693,12.16552-38.77759l34.21552-.76034c-1.60321,15.25509,3.4416,27.06668,17.48793,34.21552Z" transform="translate(-156 -140.94698)" fill="#ffb9b9"/><path d="M830.255,723.96651l-1.88979,25.835a8.22428,8.22428,0,0,0,8.69988,8.80928L850.335,757.807a4.19488,4.19488,0,0,0,3.81529-5.2044l-7.36591-29.46277Z" transform="translate(-156 -140.94698)" fill="#e6e6e6"/><path d="M873.21559,723.13984l-7.36591,29.46277a4.19488,4.19488,0,0,0,3.81529,5.2044l13.26994.80373a8.22428,8.22428,0,0,0,8.69988-8.80928l-1.88979-25.835Z" transform="translate(-156 -140.94698)" fill="#e6e6e6"/><polygon points="734.602 586.606 716.694 584.809 698.866 394.239 692.128 584.195 674.534 583.565 644.881 320.485 758.172 320.485 734.602 586.606" fill="#f9a826"/><circle cx="707.22931" cy="55.125" r="34.21552" fill="#ffb9b9"/><path d="M930.9,467.51509l-138.38276,1.52069c20.53674-78.18094,32.82143-150.80436,11.40517-200.731l34.21552-16.72758c16.49787,17.20783,34.87135,15.43378,54.74483-1.52069l32.69483,8.36379C919.97784,323.89141,922.48766,394.0114,930.9,467.51509Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M754.5,386.91853l85.919,34.21552,19.20933,5.6498a6.645,6.645,0,0,0,8.32164-4.76336h0a6.645,6.645,0,0,0-3.78319-7.69957l-19.94607-6.11272-60.06724-34.97586,12.54569-33.075L770.46724,326.091Z" transform="translate(-156 -140.94698)" fill="#ffb9b9"/><path d="M755.26034,324.57026c16.34695,6.37738,29.34874,17.26137,39.53794,31.93448l31.93448-46.381-22.81035-41.819Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M901.792,190.52671c-13.88705-3.57812-27.54045-4.06939-40.81285.46912-8.45455,4.09479-18.60778,3.7175-29.89922.34366V157.20263l60.95868,1.62557Z" transform="translate(-156 -140.94698)" fill="#2f2e41"/><path d="M840.13379,347.053A10.14514,10.14514,0,0,0,830,357.18681l4,83.73242A10.14514,10.14514,0,0,0,844.13379,451.053h45.73242A10.14514,10.14514,0,0,0,900,440.91923l4-83.73242A10.14514,10.14514,0,0,0,893.86621,347.053Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><path d="M969.89,380.593,895,410.413l-5.65,2.25c-.18.07-.36.13-.55.19l-18.93,5.57c-2.42.71-5.77-2.55-7.73-4.8a6.08507,6.08507,0,0,1-.16-7.93,6.74613,6.74613,0,0,1,.86005-.83,5.58864,5.58864,0,0,1,2.5-1.1l18.91-3.72a6.336,6.336,0,0,0,1.93-.72l8.82-5.14,45.79-26.66a6.21845,6.21845,0,0,0,2.69-7.58l-8.74-23.05a6.21114,6.21114,0,0,1,2.87-7.68l14.48-7.76a6.20589,6.20589,0,0,1,8.94,3.9L973.6,373.233A6.21936,6.21936,0,0,1,969.89,380.593Z" transform="translate(-156 -140.94698)" fill="#ffb9b9"/><path d="M974.23966,316.20647c-16.34695,6.37737-29.34874,17.26136-39.53794,31.93448l-31.93448-46.381,22.81035-43.33965Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M886,226.52555c-14.96826,6.22617-30.66333,5.97335-47,0,4.75366-8.114-2.352-14.46886-6-22.65975l61-1.81278C889.33521,209.16865,882.452,217.57561,886,226.52555Z" transform="translate(-156 -140.94698)" fill="#fff"/><polygon points="737.354 62.46 736.646 61.753 737.646 60.753 743.62 53.781 744.38 54.431 738.38 61.431 737.354 62.46" fill="#fff"/><rect x="830.99973" y="198.1481" width="1.00054" height="7.81025" transform="translate(-12.03491 570.53091) rotate(-50.19443)" fill="#fff"/><rect x="880.4712" y="217.30312" width="19.55761" height="1.0002" transform="matrix(0.537, -0.84358, 0.84358, 0.537, 72.44944, 710.89356)" fill="#fff"/><rect x="834.2499" y="208.02442" width="1.0002" height="19.55761" transform="translate(-142.42964 341.26087) rotate(-32.47119)" fill="#fff"/><path d="M897,392.76847V410.885l-6.30677,2.51154c-.20091.07814-.40183.14511-.61391.21209L868.949,419.826c-2.70128.79249-6.44071-2.84639-8.62849-5.35792a6.79238,6.79238,0,0,1-.17864-8.85175,7.53018,7.53018,0,0,1,.96-.9265,6.23835,6.23835,0,0,1,2.79059-1.2279l21.108-4.15237a7.072,7.072,0,0,0,2.15433-.80372Z" transform="translate(-156 -140.94698)" fill="#fff"/><path d="M906.13975,328.1489h-3.6137c0-51.11056-10.52349-86.7288-20.77877-86.7288l-.90343-3.6137c9.197,0,15.06047,14.824,18.35965,27.26023C903.67651,281.926,906.13975,304.329,906.13975,328.1489Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><path d="M823.02465,315.501H819.411c0-46.80915,10.59628-75.8877,26.19933-75.8877l-.90343,3.6137C833.91428,243.227,823.02465,265.57481,823.02465,315.501Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><circle cx="748.3329" cy="188.10534" r="9.03425" fill="#3f3d56"/><path d="M808.56985,337.18315h-3.6137c0-12.95188,7.2949-23.48905,16.26165-23.48905v3.6137C814.24361,317.3078,808.56985,326.22383,808.56985,337.18315Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><path d="M837.47945,337.18315h-3.6137c0-10.95932-5.67375-19.87535-12.648-19.87535v-3.6137C830.18456,313.6941,837.47945,324.23127,837.47945,337.18315Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><circle cx="679.6726" cy="197.13959" r="3.6137" fill="#3f3d56"/><circle cx="650.763" cy="197.13959" r="3.6137" fill="#3f3d56"/><path d="M371.27061,216.64442,307.80454,227.392a6.42418,6.42418,0,0,1-7.27008-4.61266c-4.58533-16.54945-14.172-38.13882-4.86434-48.97662a17.80544,17.80544,0,0,1,18.75545-15.93281h0c11.33772-17.74734,30.22229-15.08269,42.98594-3.99869,12.84541,4.43234,17.6883,12.30667,15.99477,22.99248,5.54925,4.85742,8.45864,10.32871,9.07208,16.33389a23.58911,23.58911,0,0,1-6.45376,18.35077Z" transform="translate(-156 -140.94698)" fill="#2f2e41"/><path d="M361.40329,266.60948l-49.20045-2.89414c4.82175-11.06687,6.74782-21.72377,4.82358-31.83558h36.65915C353.60249,239.64361,357.46606,253.07369,361.40329,266.60948Z" transform="translate(-156 -140.94698)" fill="#9f616a"/><path d="M302.17961,721.236l-2.018,27.58763a8.78223,8.78223,0,0,0,9.29009,9.40691l14.17019-.85826a4.47947,4.47947,0,0,0,4.07413-5.55747l-7.86563-31.46157Z" transform="translate(-156 -140.94698)" fill="#e6e6e6"/><path d="M348.05471,720.35321l-7.86563,31.46157a4.47947,4.47947,0,0,0,4.07413,5.55747l14.17019.85826a8.78223,8.78223,0,0,0,9.29009-9.40691l-2.018-27.58763Z" transform="translate(-156 -140.94698)" fill="#e6e6e6"/><polygon points="210.62 584.119 191.498 582.2 172.46 378.701 165.265 581.544 146.478 580.871 114.813 299.944 235.79 299.944 210.62 584.119" fill="#f9a826"/><circle cx="180.3231" cy="66.10711" r="36.53674" fill="#9f616a"/><path d="M377.50189,189.6c-14.82916-2.58256-29.40882-2.93714-43.58164.3386-9.02812,2.95548-19.87016,2.68316-31.92763.248V165.54779l65.0942,1.17328Z" transform="translate(-156 -140.94698)" fill="#2f2e41"/><path d="M360.63859,236.37015c-15.98373,6.64857-32.74357,6.37859-50.18855,0,5.07616-8.66447-2.51161-15.45044-6.407-24.197l65.13832-1.93576C364.20006,217.83574,356.84992,226.813,360.63859,236.37015Z" transform="translate(-156 -140.94698)" fill="#fff"/><rect x="301.94089" y="206.06748" width="1.00054" height="8.33965" transform="translate(-208.68499 167.04408) rotate(-50.19486)" fill="#fff"/><rect x="354.73467" y="226.55581" width="20.88467" height="1.0002" transform="matrix(0.537, -0.84358, 0.84358, 0.537, -178.46379, 272.23589)" fill="#fff"/><rect x="305.41177" y="216.61358" width="1.0002" height="20.88467" transform="matrix(0.84366, -0.53687, 0.53687, 0.84366, -230.07485, 58.78582)" fill="#fff"/><path d="M266.86126,373.69281l-27.97673-17.36487,23.85922-69.8789a32.96549,32.96549,0,0,1,14.40973-17.11578l8.03736-4.6532.69885,70.49475Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M387.78912,407.6312,383.65,372.17881c-.221-18.71283,2.96247-36.80463,10.55359-53.47473l3.85883-52.09461L355.615,249.24461c-.13019.865-.24084,1.72943-.365,2.5943l-19.894,9.947-19.40174-4.40943.10743-6.20239-38.58857,17.36487c12.76124,59.328,5.801,120.93756-16.14379,193.709l50.83691,13.9007.42267-24.41046,45.3067-3.23615c.46667,7.91968.84167,15.69873,1.05933,23.30536,25.56524,9.412,26.44336,9.256,49.73651-4.22021C399.41528,448.08421,392.0705,427.78953,387.78912,407.6312Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><polygon points="297.051 224.063 271.004 215.381 229.34 166.878 242.062 125.663 299.945 206.699 297.051 224.063" fill="#f9a826"/><path d="M371.41927,402.56029a7.24568,7.24568,0,0,0,8.65511,5.459l22.11071-5.00728-3.19562-14.11319-22.11118,5.00634a7.23668,7.23668,0,0,0-5.459,8.65511Z" transform="translate(-156 -140.94698)" fill="#e6e6e6"/><path d="M391.30944,386.23409l12.54129,23.15316c21.09424-5.88333,39.37571-24.43091,56.91816-46.30631l-4.82357-15.43543-29.90615,7.71772Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><polygon points="71.79 172.661 95.866 176.96 150.897 255.207 121.662 248.328 71.79 172.661" fill="#e6e6e6"/><path d="M223.51976,312.65011a2.04777,2.04777,0,0,0-1.68024,3.17254l51.43935,78.04626a2.04112,2.04112,0,0,0,1.23887.86532l23.93321,5.631a2.04428,2.04428,0,0,0,2.14046-3.166L244.11415,316.8957a2.03243,2.03243,0,0,0-1.31282-.83611L223.90555,312.685A2.21656,2.21656,0,0,0,223.51976,312.65011Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><path d="M255.60782,368.45235l1.42965,14.40006,22.55962-2.23938a7.2354,7.2354,0,0,0-1.42917-14.40006Z" transform="translate(-156 -140.94698)" fill="#e6e6e6"/><path d="M235.99086,366.78436a18.6092,18.6092,0,0,0,18.58724,18.485h3.70954l2.70054-22.50545-22.36037-8.04981Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><polygon points="211.399 71.78 210.692 71.073 211.76 70.005 218.141 62.558 218.9 63.208 212.493 70.683 211.399 71.78" fill="#fff"/><rect y="616.10603" width="888" height="2" fill="#3f3d56"/><path d="M495,756.053H705V501.33662c0-13.4877-13.28516-24.4604-29.61426-24.4604H524.61426c-16.32959,0-29.61426,10.9727-29.61426,24.4604Z" transform="translate(-156 -140.94698)" fill="#e6e6e6"/><path d="M511,745.52H689V529.6175c0-11.43243-11.26075-20.7331-25.10161-20.7331H536.10161C522.26034,508.8844,511,518.18507,511,529.6175Z" transform="translate(-156 -140.94698)" fill="#fff"/><path d="M493.41357,457.053c-5.19043,0-9.41357,3.48817-9.41357,7.7753v22.44387c0,4.28712,4.22314,7.7753,9.41357,7.7753H706.58691c5.19043,0,9.41309-3.48818,9.41309-7.7753V464.82832c0-4.28713-4.22266-7.7753-9.41309-7.7753Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><path d="M537.18078,717.83565a9.22367,9.22367,0,0,0-9.19666,9.19663v0a9.22369,9.22369,0,0,0,9.19666,9.19666H554.395V717.83565Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><path d="M570.19444,717.83565H553.4518V736.229h16.74264a9.22369,9.22369,0,0,0,9.19666-9.19666v0A9.22367,9.22367,0,0,0,570.19444,717.83565Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M576.19558,720.08792a9.1437,9.1437,0,0,1,2.25227,6.00111v0a9.22369,9.22369,0,0,1-9.19666,9.19666H553.4518v.94325h16.74264a9.22369,9.22369,0,0,0,9.19666-9.19666v0A9.1765,9.1765,0,0,0,576.19558,720.08792Z" transform="translate(-156 -140.94698)" opacity="0.2"/><path d="M614.86141,579.30953a9.22367,9.22367,0,0,0-13.00036-.38384l0,0a9.22369,9.22369,0,0,0-.38382,13.00038l11.8078,12.52624,13.3842-12.61656Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><path d="M637.50651,603.33246l-11.4843-12.18306L612.638,603.766l11.4843,12.18305a9.2237,9.2237,0,0,0,13.00038.38383l0,0A9.22366,9.22366,0,0,0,637.50651,603.33246Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M639.984,609.24419a9.14368,9.14368,0,0,1-2.8219,5.75525l0,0a9.22369,9.22369,0,0,1-13.00038-.38382L613.32438,603.119l-.68637.647,11.4843,12.18305a9.2237,9.2237,0,0,0,13.00038.38383l0,0A9.17654,9.17654,0,0,0,639.984,609.24419Z" transform="translate(-156 -140.94698)" opacity="0.2"/><path d="M565.86141,608.30953a9.22367,9.22367,0,0,0-13.00036-.38384l0,0a9.22369,9.22369,0,0,0-.38382,13.00038l11.8078,12.52624,13.3842-12.61656Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><path d="M588.50651,632.33246l-11.4843-12.18306L563.638,632.766l11.4843,12.18305a9.2237,9.2237,0,0,0,13.00038.38383l0,0A9.22366,9.22366,0,0,0,588.50651,632.33246Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M590.984,638.24419a9.14368,9.14368,0,0,1-2.8219,5.75525l0,0a9.22369,9.22369,0,0,1-13.00038-.38382L564.32438,632.119l-.68637.647,11.4843,12.18305a9.2237,9.2237,0,0,0,13.00038.38383l0,0A9.17654,9.17654,0,0,0,590.984,638.24419Z" transform="translate(-156 -140.94698)" opacity="0.2"/><path d="M614.86141,635.30953a9.22367,9.22367,0,0,0-13.00036-.38384l0,0a9.22369,9.22369,0,0,0-.38382,13.00038l11.8078,12.52624,13.3842-12.61656Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><path d="M637.50651,659.33246l-11.4843-12.18306L612.638,659.766l11.4843,12.18305a9.2237,9.2237,0,0,0,13.00038.38383l0,0A9.22366,9.22366,0,0,0,637.50651,659.33246Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M639.984,665.24419a9.14368,9.14368,0,0,1-2.8219,5.75525l0,0a9.22369,9.22369,0,0,1-13.00038-.38382L613.32438,659.119l-.68637.647,11.4843,12.18305a9.2237,9.2237,0,0,0,13.00038.38383l0,0A9.17654,9.17654,0,0,0,639.984,665.24419Z" transform="translate(-156 -140.94698)" opacity="0.2"/><path d="M644.754,692.77653a9.22367,9.22367,0,0,0,.22582-13.00406l0,0a9.22369,9.22369,0,0,0-13.00408-.22581L619.59388,691.5058l12.77828,13.22989Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><path d="M621.008,715.7119l12.04259-11.63151L620.27234,690.8505,608.22974,702.482a9.2237,9.2237,0,0,0-.2258,13.00409l0,0A9.22367,9.22367,0,0,0,621.008,715.7119Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M615.12683,718.261a9.14377,9.14377,0,0,1-5.78912-2.75175l0,0a9.22369,9.22369,0,0,1,.2258-13.00408L620.92763,691.529l-.65529-.67846L608.22974,702.482a9.2237,9.2237,0,0,0-.2258,13.00409l0,0A9.17651,9.17651,0,0,0,615.12683,718.261Z" transform="translate(-156 -140.94698)" opacity="0.2"/><path d="M578.754,663.77653a9.22367,9.22367,0,0,0,.22582-13.00406l0,0a9.22369,9.22369,0,0,0-13.00408-.22581L553.59388,662.5058l12.77828,13.22989Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><path d="M555.008,686.7119l12.04259-11.63151L554.27234,661.8505,542.22974,673.482a9.2237,9.2237,0,0,0-.2258,13.00409l0,0A9.22367,9.22367,0,0,0,555.008,686.7119Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M549.12683,689.261a9.14377,9.14377,0,0,1-5.78912-2.75175l0,0a9.22369,9.22369,0,0,1,.2258-13.00408L554.92763,662.529l-.65529-.67846L542.22974,673.482a9.2237,9.2237,0,0,0-.2258,13.00409l0,0A9.17651,9.17651,0,0,0,549.12683,689.261Z" transform="translate(-156 -140.94698)" opacity="0.2"/><path d="M672.754,628.77653a9.22367,9.22367,0,0,0,.22582-13.00406l0,0a9.22369,9.22369,0,0,0-13.00408-.22581L647.59388,627.5058l12.77828,13.22989Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><path d="M649.008,651.7119l12.04259-11.63151L648.27234,626.8505,636.22974,638.482a9.2237,9.2237,0,0,0-.2258,13.00409l0,0A9.22367,9.22367,0,0,0,649.008,651.7119Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M643.12683,654.261a9.14377,9.14377,0,0,1-5.78912-2.75175l0,0a9.22369,9.22369,0,0,1,.2258-13.00408L648.92763,627.529l-.65529-.67846L636.22974,638.482a9.2237,9.2237,0,0,0-.2258,13.00409l0,0A9.17651,9.17651,0,0,0,643.12683,654.261Z" transform="translate(-156 -140.94698)" opacity="0.2"/><path d="M651.86141,701.30953a9.22367,9.22367,0,0,0-13.00036-.38384l0,0a9.22369,9.22369,0,0,0-.38382,13.00038l11.8078,12.52624,13.3842-12.61656Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><path d="M674.50651,725.33246l-11.4843-12.18306L649.638,725.766l11.4843,12.18305a9.2237,9.2237,0,0,0,13.00038.38383l0,0A9.22366,9.22366,0,0,0,674.50651,725.33246Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M676.984,731.24419a9.14368,9.14368,0,0,1-2.8219,5.75525l0,0a9.22369,9.22369,0,0,1-13.00038-.38382L650.32438,725.119l-.68637.647,11.4843,12.18305a9.2237,9.2237,0,0,0,13.00038.38383l0,0A9.17654,9.17654,0,0,0,676.984,731.24419Z" transform="translate(-156 -140.94698)" opacity="0.2"/><path d="M586.86141,700.30953a9.22367,9.22367,0,0,0-13.00036-.38384l0,0a9.22369,9.22369,0,0,0-.38382,13.00038l11.8078,12.52624,13.3842-12.61656Z" transform="translate(-156 -140.94698)" fill="#3f3d56"/><path d="M609.50651,724.33246l-11.4843-12.18306L584.638,724.766l11.4843,12.18305a9.2237,9.2237,0,0,0,13.00038.38383l0,0A9.22366,9.22366,0,0,0,609.50651,724.33246Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M611.984,730.24419a9.14368,9.14368,0,0,1-2.8219,5.75525l0,0a9.22369,9.22369,0,0,1-13.00038-.38382L585.32438,724.119l-.68637.647,11.4843,12.18305a9.2237,9.2237,0,0,0,13.00038.38383l0,0A9.17654,9.17654,0,0,0,611.984,730.24419Z" transform="translate(-156 -140.94698)" opacity="0.2"/><path d="M605.15789,667.31618A13.26311,13.26311,0,0,1,594.54737,680.314a13.39494,13.39494,0,0,1-5.30526,0,13.26647,13.26647,0,0,1,0-25.99579,13.39692,13.39692,0,0,1,5.30526,0A13.26319,13.26319,0,0,1,605.15789,667.31618Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M594.54737,654.31826V680.314a13.39494,13.39494,0,0,1-5.30526,0V654.31826a13.39692,13.39692,0,0,1,5.30526,0Z" transform="translate(-156 -140.94698)" opacity="0.2"/><path d="M611.15789,614.31618A13.26311,13.26311,0,0,1,600.54737,627.314a13.39494,13.39494,0,0,1-5.30526,0,13.26647,13.26647,0,0,1,0-25.99579,13.39692,13.39692,0,0,1,5.30526,0A13.26319,13.26319,0,0,1,611.15789,614.31618Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M600.54737,601.31826V627.314a13.39494,13.39494,0,0,1-5.30526,0V601.31826a13.39692,13.39692,0,0,1,5.30526,0Z" transform="translate(-156 -140.94698)" opacity="0.2"/><path d="M611.15789,690.31618A13.26311,13.26311,0,0,1,600.54737,703.314a13.39494,13.39494,0,0,1-5.30526,0,13.26647,13.26647,0,0,1,0-25.99579,13.39692,13.39692,0,0,1,5.30526,0A13.26319,13.26319,0,0,1,611.15789,690.31618Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M600.54737,677.31826V703.314a13.39494,13.39494,0,0,1-5.30526,0V677.31826a13.39692,13.39692,0,0,1,5.30526,0Z" transform="translate(-156 -140.94698)" opacity="0.2"/><path d="M644.15789,727.31618A13.26311,13.26311,0,0,1,633.54737,740.314a13.39494,13.39494,0,0,1-5.30526,0,13.26647,13.26647,0,0,1,0-25.99579,13.39692,13.39692,0,0,1,5.30526,0A13.26319,13.26319,0,0,1,644.15789,727.31618Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M633.54737,714.31826V740.314a13.39494,13.39494,0,0,1-5.30526,0V714.31826a13.39692,13.39692,0,0,1,5.30526,0Z" transform="translate(-156 -140.94698)" opacity="0.2"/><path d="M673.30955,659.24039a13.26311,13.26311,0,0,1,1.995,16.65977,13.3949,13.3949,0,0,1-3.68171,3.81979,13.26649,13.26649,0,0,1-18.717-18.04042,13.397,13.397,0,0,1,3.68172-3.81978A13.26318,13.26318,0,0,1,673.30955,659.24039Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M656.58762,657.85975l18.717,18.04041a13.3949,13.3949,0,0,1-3.68171,3.81979l-18.717-18.04042a13.397,13.397,0,0,1,3.68172-3.81978Z" transform="translate(-156 -140.94698)" opacity="0.2"/><path d="M677.30955,688.24039a13.26311,13.26311,0,0,1,1.995,16.65977,13.3949,13.3949,0,0,1-3.68171,3.81979,13.26649,13.26649,0,0,1-18.717-18.04042,13.397,13.397,0,0,1,3.68172-3.81978A13.26318,13.26318,0,0,1,677.30955,688.24039Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M660.58762,686.85975l18.717,18.04041a13.3949,13.3949,0,0,1-3.68171,3.81979l-18.717-18.04042a13.397,13.397,0,0,1,3.68172-3.81978Z" transform="translate(-156 -140.94698)" opacity="0.2"/><path d="M558.30955,695.24039a13.26311,13.26311,0,0,1,1.995,16.65977,13.3949,13.3949,0,0,1-3.68171,3.81979,13.26649,13.26649,0,0,1-18.717-18.04042,13.397,13.397,0,0,1,3.68172-3.81978A13.26318,13.26318,0,0,1,558.30955,695.24039Z" transform="translate(-156 -140.94698)" fill="#f9a826"/><path d="M541.58762,693.85975l18.717,18.04041a13.3949,13.3949,0,0,1-3.68171,3.81979l-18.717-18.04042a13.397,13.397,0,0,1,3.68172-3.81978Z" transform="translate(-156 -140.94698)" opacity="0.2"/><rect x="354.5" y="316.10603" width="5" height="37" opacity="0.2"/><rect x="383.5" y="316.10603" width="5" height="37" opacity="0.2"/><rect x="412.5" y="316.10603" width="5" height="37" opacity="0.2"/><rect x="441.5" y="316.10603" width="5" height="37" opacity="0.2"/><rect x="470.5" y="316.10603" width="5" height="37" opacity="0.2"/><rect x="499.5" y="316.10603" width="5" height="37" opacity="0.2"/><rect x="528.5" y="316.10603" width="5" height="37" opacity="0.2"/></svg>
\ No newline at end of file
*.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
<?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>8.0</string>
</dict>
</plist>
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_ios_podfile_setup
target 'Runner' do
use_frameworks!
use_modular_headers!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
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 */
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 */,
);
sourceTree = "<group>";
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
);
name = Products;
sourceTree = "<group>";
};
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
);
path = Runner;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
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 = {
LastUpgradeCheck = 1020;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
LastSwiftMigration = 1100;
};
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Thin Binary";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C146FB1CF9000F007C117D /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C147001CF9000F007C117D /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Profile;
};
249021D4217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.example.detector;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
97C147061CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.example.detector;
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.detector;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147031CF9000F007C117D /* Debug */,
97C147041CF9000F007C117D /* Release */,
249021D3217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147061CF9000F007C117D /* Debug */,
97C147071CF9000F007C117D /* Release */,
249021D4217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>
<?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>
<?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>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1020"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>
<?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>
<?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>
import UIKit
import Flutter
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
{
"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"
}
}
{
"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"
}
}
# 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.
\ No newline at end of file
<?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>
<?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>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>detector</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
</dict>
</plist>
#import "GeneratedPluginRegistrant.h"
import 'package:detector/presentation/themes/color_theme.dart';
import 'package:flutter/material.dart';
class BackClipper extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
Paint paint_0 = new Paint()
..color = ColorTheme.accentColor2
..style = PaintingStyle.fill
..strokeWidth = 1.0;
Path path_0 = Path();
path_0.moveTo(0, 0);
path_0.lineTo(0, size.height * 0.6000000);
path_0.quadraticBezierTo(size.width * 0.2781250, size.height * 0.8325200,
size.width * 0.5250000, size.height * 0.8400000);
path_0.quadraticBezierTo(size.width * 0.7734500, size.height * 0.8300000,
size.width, size.height * 0.6400000);
path_0.lineTo(size.width, 0);
canvas.drawPath(path_0, paint_0);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return true;
}
}
import 'package:detector/presentation/themes/color_theme.dart';
import 'package:flutter/material.dart';
class FrontClipper extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
Paint paint_0 = new Paint()
..color = ColorTheme.secondaryColor
..style = PaintingStyle.fill
..strokeWidth = 1.0;
Path path_0 = Path();
path_0.moveTo(0, 0);
path_0.lineTo(0, size.height * 0.6000000);
path_0.quadraticBezierTo(size.width * 0.2515750, size.height * 0.8025200,
size.width * 0.5000000, size.height * 0.8000000);
path_0.quadraticBezierTo(size.width * 0.7468750, size.height * 0.8000000,
size.width, size.height * 0.6000000);
path_0.lineTo(size.width, 0);
canvas.drawPath(path_0, paint_0);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
return true;
}
}
class FirebaseConstants {
//collections
static const CLIENTS = 'clients';
static const QUESTIONS = 'questions';
}
import 'package:flutter_screenutil/flutter_screenutil.dart';
class Sizes {
//font sizes
static double appBarTitleText = 32.sp;
static double titleText = 18.sp;
static double contentText = 18.sp;
static double buttonText = 22.sp;
static double menuText = 20.sp;
static double badgeText = 12.sp;
//spaces
static double defaultSpace = 20.w;
static double halfSpace = 10.w;
//padding
static double defaultPadding = 20.w;
static double defaultButtonPadding = 25.w;
static double horizontalPadding = 20.w;
static double verticalPadding = 20.w;
static double itemBottomPadding = 20.w;
static double contentHorizontal = 20.w;
static double contentVertical = 15.w;
//radius
static double buttonTextFieldRadius = 12.w;
}
class Converter {
String questionNumber(int number) {
return number >= 10 ? "$number" : "0$number";
}
}
import 'package:bot_toast/bot_toast.dart';
import 'package:detector/common/constants/size_constants.dart';
import 'package:detector/presentation/themes/color_theme.dart';
import 'package:flutter/material.dart';
class ToastHelper {
static void errorToast(String message) {
BotToast.showText(
text: message,
duration: Duration(seconds: 4),
onlyOne: true,
clickClose: true,
crossPage: true,
backButtonBehavior: BackButtonBehavior.none,
align: Alignment(0, 0.9),
animationDuration: Duration(milliseconds: 200),
animationReverseDuration: Duration(milliseconds: 200),
textStyle: TextStyle(
color: ColorTheme.whiteColorText, fontSize: Sizes.contentText),
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius),
backgroundColor: Colors.transparent,
contentColor: Colors.redAccent);
}
static void successToast(String message) {
BotToast.showText(
text: message,
duration: Duration(seconds: 3),
onlyOne: true,
clickClose: true,
crossPage: true,
backButtonBehavior: BackButtonBehavior.none,
align: Alignment(0, 0.9),
animationDuration: Duration(milliseconds: 200),
animationReverseDuration: Duration(milliseconds: 200),
textStyle: TextStyle(
color: ColorTheme.primaryColor, fontSize: Sizes.contentText),
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius),
backgroundColor: Colors.transparent,
contentColor: Colors.greenAccent);
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:detector/common/constants/firebase_constants.dart';
import 'package:detector/data/models/client_model.dart';
import 'package:detector/data/models/question_model.dart';
class FirebaseDatabase {
static final FirebaseDatabase _singleton = FirebaseDatabase._internal();
factory FirebaseDatabase() {
return _singleton;
}
FirebaseDatabase._internal();
final FirebaseFirestore _db = FirebaseFirestore.instance;
//create client account
Future<bool> createClient(ClientModel client) async {
try {
await _db
.collection(FirebaseConstants.CLIENTS)
.doc(client.id)
.set(client.toMap());
return true;
} catch (e) {
print(e.toString());
}
return false;
}
//get all questions
Future<List<QuestionModel>> getQuestions() async {
print("Getting questions...");
var _data = await _db
.collection(FirebaseConstants.QUESTIONS)
.orderBy("number")
.get();
return _data.docs.map((e) => QuestionModel.fromMap(e.data())).toList();
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:detector/common/constants/firebase_constants.dart';
import 'package:detector/data/core/firebase_database.dart';
import 'package:detector/data/models/client_model.dart';
import 'package:firebase_auth/firebase_auth.dart';
class UserAuth {
static final UserAuth _singleton = UserAuth._internal();
factory UserAuth() {
return _singleton;
}
UserAuth._internal();
final FirebaseAuth auth = FirebaseAuth.instance;
final FirebaseFirestore db = FirebaseFirestore.instance;
Future<String> createClient(ClientModel client) async {
try {
final UserCredential user = await auth.createUserWithEmailAndPassword(
email: client.email,
password: client.password,
);
client.id = user.user!.uid;
var result = await FirebaseDatabase().createClient(client);
if (result) {
return "Success||${user.user!.uid}";
} else {
return "Failed to create account";
}
} on FirebaseAuthException catch (authEx) {
print(authEx.code);
switch (authEx.code) {
case "email-already-in-use":
return "Email already registered. Please use SignIn";
case "invalid-email":
return "Email address not valid";
case "operation-not-allowed":
return "Server error, please try again later";
case "weak-password":
return "Poor password, Please enter strong one";
case "too-many-requests":
return "Too many requests. Please try again later";
default:
return "Please check your connection and try again later";
}
} catch (e) {
return e.toString();
}
}
Future<String> signIn(String email, String password) async {
try {
await auth.signInWithEmailAndPassword(
email: email,
password: password,
);
return "Success";
} on FirebaseAuthException catch (authEx) {
print(authEx.code);
switch (authEx.code) {
case "user-disabled":
return "Account disabled. Please contact customer service";
case "invalid-email":
return "Email address not valid";
case "operation-not-allowed":
return "Server error, please try again later";
case "user-not-found":
return "No user found with this email";
case "wrong-password":
return "Wrong email/password combination";
case "too-many-requests":
return "Too many requests. Please try again later";
default:
return "Please check your connection and try again later";
}
} catch (e) {
return e.toString();
}
}
Future<ClientModel?> getUser() async {
if (auth.currentUser?.uid != null) {
var userData = await db
.collection(FirebaseConstants.CLIENTS)
.doc(auth.currentUser?.uid)
.get();
ClientModel currentUser = ClientModel.fromMap(userData.data()!);
return currentUser;
}
return null;
}
Future<String> requestResetPassword(String email) async {
try {
await auth.sendPasswordResetEmail(email: email);
return "Email sent";
} catch (e) {
if (e.toString().contains("user-not-found")) {
return "No user found with the email";
} else if (e.toString().contains("An internal error has occurred")) {
return "An internal error has occurred";
} else {
return "Something went wrong, try again later";
}
}
}
Future<bool> updatePassword(String password) async {
try {
if (auth.currentUser?.uid != null) {
await auth.currentUser!.updatePassword(password);
return true;
}
} catch (e) {
return false;
}
return false;
}
Future<bool> updateEmail(String email) async {
try {
if (auth.currentUser?.uid != null) {
await auth.currentUser!.updateEmail(email);
return true;
}
} catch (e) {
return false;
}
return false;
}
User? getProfile() {
return auth.currentUser;
}
Future<String?> getUserId() async {
final currentUser = auth.currentUser;
if (currentUser != null) {
return currentUser.uid;
}
return null;
}
Future<bool> isSignedIn() async {
final currentUser = auth.currentUser;
return currentUser != null;
}
Future<List<void>> signOut() async {
return Future.wait([auth.signOut()]);
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
class ClientModel {
String? id;
final String fullName;
final String email;
final String phone;
final String password;
final Timestamp timestamp;
ClientModel({
this.id,
required this.fullName,
required this.email,
required this.phone,
required this.password,
required this.timestamp,
});
Map<String, dynamic> toMap() {
return {
'id': id,
'fullName': fullName,
'email': email,
'phone': phone,
'password': password,
'timestamp': timestamp,
};
}
static ClientModel fromMap(Map<String, dynamic> map) {
return ClientModel(
id: map['id'],
fullName: map['fullName'],
email: map['email'],
phone: map['phone'],
password: map['password'],
timestamp: map['timestamp'],
);
}
}
class Person{
final String name;
final String url;
final int score;
Person({required this.name, required this.url, required this.score});
}
\ No newline at end of file
import 'package:cloud_firestore/cloud_firestore.dart';
class QuestionModel {
String? id;
final String question;
final int number;
final Timestamp timestamp;
QuestionModel({
this.id,
required this.question,
required this.number,
required this.timestamp,
});
Map<String, dynamic> toMap() {
return {
'id': id,
'question': question,
'number': number,
'timestamp': timestamp,
};
}
static QuestionModel fromMap(Map<String, dynamic> map) {
return QuestionModel(
id: map['id'],
question: map['question'],
number: map['number'],
timestamp: map['timestamp'],
);
}
}
import 'package:detector/data/models/client_model.dart';
import 'package:detector/data/models/question_model.dart';
import 'package:flutter/foundation.dart';
class DataProvider extends ChangeNotifier {
late ClientModel _client;
List<QuestionModel> _questions = [];
void setClient(ClientModel client) {
_client = client;
}
void setQuestions(List<QuestionModel> questions) {
_questions = questions;
}
ClientModel get currentClient => _client;
List<QuestionModel> get questions => _questions;
}
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
class UiSupportProvider extends ChangeNotifier {
int _questionIndex = 0;
late PageController _controller;
void setQuestionIndex(int index) {
_questionIndex = index;
showPage(_questionIndex);
notifyListeners();
}
void nextQuestion() {
_questionIndex = _questionIndex + 1;
showPage(_questionIndex);
notifyListeners();
}
void setController() {
_questionIndex = 0;
final controller = PageController(initialPage: _questionIndex);
_controller = controller;
}
void showPage(int index) {
_controller.animateToPage(index,
curve: Curves.easeInOut, duration: Duration(milliseconds: 500));
}
int get selectedMenuIndex => _questionIndex;
PageController get pageController => _controller;
}
import 'package:bot_toast/bot_toast.dart';
import 'package:detector/presentation/screens/login/login_screen.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:pedantic/pedantic.dart';
import 'package:provider/provider.dart';
import 'data/provider/data_provider.dart';
import 'data/provider/ui_support_provider.dart';
import 'presentation/themes/color_theme.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
unawaited(
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]));
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ScreenUtilInit(
designSize: Size(414, 896),
builder: () {
return MultiProvider(
providers: [
ChangeNotifierProvider<DataProvider>(
create: (_) => DataProvider(),
),
ChangeNotifierProvider<UiSupportProvider>(
create: (_) => UiSupportProvider(),
),
],
child: MaterialApp(
debugShowCheckedModeBanner: false,
title: "Depression Detector",
theme: ThemeData(
textTheme: GoogleFonts.firaSansTextTheme(
Theme.of(context).textTheme,
),
scaffoldBackgroundColor: ColorTheme.backgroundColor,
primaryColor: ColorTheme.accentColor1,
),
builder: BotToastInit(),
navigatorObservers: [BotToastNavigatorObserver()],
home: LoginScreen(),
),
);
},
);
}
}
import 'package:detector/common/constants/size_constants.dart';
import 'package:detector/data/core/user_auth.dart';
import 'package:detector/data/provider/ui_support_provider.dart';
import 'package:detector/presentation/screens/login/login_screen.dart';
import 'package:detector/presentation/screens/text/text_answers_screen.dart';
import 'package:detector/presentation/screens/voice/voice_answers_screen.dart';
import 'package:detector/presentation/themes/color_theme.dart';
import 'package:detector/presentation/widgets/big_button.dart';
import 'package:detector/presentation/widgets/custom_app_bar.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Column(
children: [
CustomAppBar(
backButton: false,
title: "HOME",
),
SizedBox(height: Sizes.defaultSpace),
Expanded(
child: SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Padding(
padding:
EdgeInsets.symmetric(horizontal: Sizes.defaultPadding),
child: Column(
children: [
BigButton(
image: "assets/icons/microphone.png",
title: "Voice Depression Measurement",
function: () {
Provider.of<UiSupportProvider>(context, listen: false)
.setController();
Navigator.push(context, MaterialPageRoute(
builder: (context) {
return VoiceAnswersScreen();
},
));
},
),
SizedBox(height: Sizes.defaultSpace),
BigButton(
image: "assets/icons/keyboard.png",
title: "Type Text Depression Measurement",
function: () {
Provider.of<UiSupportProvider>(context, listen: false)
.setController();
Navigator.push(context, MaterialPageRoute(
builder: (context) {
return TextAnswersScreen();
},
));
},
),
SizedBox(height: Sizes.defaultSpace),
BigButton(
image: "assets/icons/image.png",
title: "Image & MCQ Depression Measurement",
function: () {},
),
SizedBox(height: Sizes.defaultSpace),
Padding(
padding: EdgeInsets.symmetric(
horizontal: Sizes.defaultPadding * 1.5),
child: Divider(
height: 2,
color: ColorTheme.accentColor1,
thickness: 2,
),
),
SizedBox(height: Sizes.defaultSpace),
Row(
children: [
BigButton(
image: "assets/icons/profile.png",
title: "My Profile",
halfButton: true,
function: () {},
),
SizedBox(width: Sizes.defaultSpace),
BigButton(
image: "assets/icons/sign-out.png",
title: "Logout",
halfButton: true,
function: () async {
await UserAuth().signOut();
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (context) => LoginScreen()),
(Route<dynamic> route) => false);
},
),
],
),
],
),
),
),
),
],
),
),
);
}
}
import 'package:detector/common/clippers/back_clipper.dart';
import 'package:detector/common/clippers/front_clipper.dart';
import 'package:detector/common/constants/size_constants.dart';
import 'package:detector/common/utils/toast_helper.dart';
import 'package:detector/data/core/firebase_database.dart';
import 'package:detector/data/core/user_auth.dart';
import 'package:detector/data/provider/data_provider.dart';
import 'package:detector/presentation/screens/home/home_screen.dart';
import 'package:detector/presentation/screens/recovery/reset_request_screen.dart';
import 'package:detector/presentation/screens/register/register_screen.dart';
import 'package:detector/presentation/themes/color_theme.dart';
import 'package:detector/presentation/widgets/form_password_box.dart';
import 'package:detector/presentation/widgets/form_text_box.dart';
import 'package:detector/presentation/widgets/primary_button.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:provider/provider.dart';
class LoginScreen extends StatefulWidget {
@override
_LoginScreenState createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
final formKey = GlobalKey<FormState>();
final emailController = TextEditingController();
final passwordController = TextEditingController();
bool _loading = false;
@override
void initState() {
_checkAutoLogin();
super.initState();
}
void _checkAutoLogin() async {
bool signedIn = await UserAuth().isSignedIn();
if (signedIn) {
setState(() {
_loading = true;
});
var user = await UserAuth().getUser();
var questions = await FirebaseDatabase().getQuestions();
Provider.of<DataProvider>(context, listen: false).setClient(user!);
Provider.of<DataProvider>(context, listen: false).setQuestions(questions);
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => HomeScreen()),
(Route<dynamic> route) => false);
}
}
@override
Widget build(BuildContext context) {
var width = MediaQuery.of(context).size.width;
return GestureDetector(
onTap: () {
final FocusScopeNode currentScope = FocusScope.of(context);
if (!currentScope.hasPrimaryFocus && currentScope.hasFocus) {
FocusManager.instance.primaryFocus!.unfocus();
}
},
child: Scaffold(
backgroundColor: Colors.transparent,
body: Container(
height: MediaQuery.of(context).size.height,
width: width,
color: ColorTheme.backgroundColor,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
color: ColorTheme.backgroundColor,
height: 250.w,
child: Stack(
children: [
CustomPaint(
size: Size(
width,
(width * 0.625).toDouble(),
),
painter: BackClipper(),
),
CustomPaint(
size: Size(
width,
(width * 0.625).toDouble(),
),
painter: FrontClipper(),
),
Positioned.fill(
child: Align(
alignment: Alignment.center,
child: Text(
"LOGIN TO ACCOUNT",
style: GoogleFonts.bebasNeue(
textStyle: TextStyle(
fontSize: Sizes.appBarTitleText,
color: ColorTheme.backgroundColor,
fontWeight: FontWeight.w900,
letterSpacing: 3,
wordSpacing: 5,
),
),
),
),
),
],
),
),
Expanded(
child: Container(
padding: EdgeInsets.symmetric(
horizontal: Sizes.defaultPadding,
vertical: Sizes.defaultPadding,
),
child: SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(height: Sizes.defaultSpace * 2),
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Form(
key: formKey,
child: Column(
children: [
FormTextBox(
hintText: "Email",
textController: emailController,
keyboard: TextInputType.emailAddress,
),
SizedBox(height: Sizes.defaultSpace),
FormPasswordBox(
hintText: "Password",
textController: passwordController,
),
],
),
),
SizedBox(height: Sizes.halfSpace),
Container(
width: width,
child: GestureDetector(
onTap: () {
Navigator.push(context, MaterialPageRoute(
builder: (context) {
return ResetRequestScreen();
},
));
},
child: Text(
"Forgot Password?",
textAlign: TextAlign.right,
style: TextStyle(
color: ColorTheme.fadedTextColor,
fontSize: Sizes.contentText,
),
),
),
),
SizedBox(height: Sizes.defaultSpace),
PrimaryButton(
loading: _loading,
text: "LOGIN",
function: () async {
FocusScope.of(context).unfocus();
var form = formKey.currentState;
if (form!.validate() && !_loading) {
form.save();
if (emailController.text.isEmpty ||
passwordController.text.isEmpty) {
ToastHelper.errorToast(
"All fields required");
} else {
setState(() {
_loading = true;
});
var result = await UserAuth().signIn(emailController.text,passwordController.text);
if (result.toLowerCase().contains("success")) {
var user = await UserAuth().getUser();
var questions = await FirebaseDatabase().getQuestions();
Provider.of<DataProvider>(context,listen: false).setClient(user!);
Provider.of<DataProvider>(context,listen: false).setQuestions(questions);
setState(() {
_loading = false;
});
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => HomeScreen(),
)
);
} else {
setState(() {
_loading = false;
});
ToastHelper.errorToast(result);
}
}
}
},
),
SizedBox(height: Sizes.halfSpace),
Container(
child: RichText(
textAlign: TextAlign.right,
text: TextSpan(
text: "Don't have an account?",
style: TextStyle(
color: ColorTheme.fadedTextColor,
fontSize: Sizes.contentText,
),
children: [
TextSpan(
recognizer: TapGestureRecognizer()
..onTap = () {
Navigator.pushReplacement(context,MaterialPageRoute(
builder: (context) {
return RegisterScreen();
},
));
},
text: " Register",
style: TextStyle(
color: ColorTheme.primaryColor,
fontSize: Sizes.contentText,
),
),
]),
),
),
SizedBox(height: Sizes.defaultSpace),
],
),
],
),
),
),
),
],
),
),
),
);
}
}
import 'dart:io';
import 'package:detector/common/clippers/back_clipper.dart';
import 'package:detector/common/clippers/front_clipper.dart';
import 'package:detector/common/constants/size_constants.dart';
import 'package:detector/common/utils/toast_helper.dart';
import 'package:detector/data/core/user_auth.dart';
import 'package:detector/presentation/screens/login/login_screen.dart';
import 'package:detector/presentation/themes/color_theme.dart';
import 'package:detector/presentation/widgets/form_text_box.dart';
import 'package:detector/presentation/widgets/primary_button.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:google_fonts/google_fonts.dart';
class ResetRequestScreen extends StatefulWidget {
@override
_ResetRequestScreenState createState() => _ResetRequestScreenState();
}
class _ResetRequestScreenState extends State<ResetRequestScreen> {
final formKey = GlobalKey<FormState>();
final emailController = TextEditingController();
bool _loading = false;
@override
Widget build(BuildContext context) {
var width = MediaQuery.of(context).size.width;
return GestureDetector(
onTap: () {
final FocusScopeNode currentScope = FocusScope.of(context);
if (!currentScope.hasPrimaryFocus && currentScope.hasFocus) {
FocusManager.instance.primaryFocus!.unfocus();
}
},
child: Scaffold(
backgroundColor: Colors.transparent,
body: Container(
height: MediaQuery.of(context).size.height,
width: width,
color: ColorTheme.backgroundColor,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
color: ColorTheme.backgroundColor,
height: 250.w,
child: Stack(
children: [
CustomPaint(
size: Size(
width,
(width * 0.625).toDouble(),
),
painter: BackClipper(),
),
CustomPaint(
size: Size(
width,
(width * 0.625).toDouble(),
),
painter: FrontClipper(),
),
Positioned.fill(
child: Align(
alignment: Alignment.center,
child: Text(
"FORGOT PASSWORD?",
style: GoogleFonts.bebasNeue(
textStyle: TextStyle(
fontSize: Sizes.appBarTitleText,
color: ColorTheme.backgroundColor,
fontWeight: FontWeight.w900,
letterSpacing: 3,
wordSpacing: 5,
),
),
),
),
),
],
),
),
Expanded(
child: Container(
padding: EdgeInsets.symmetric(
horizontal: Sizes.defaultPadding,
vertical: Sizes.defaultPadding,
),
child: SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(height: Sizes.defaultSpace * 2),
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Form(
key: formKey,
child: Column(
children: [
FormTextBox(
hintText: "Email",
textController: emailController,
keyboard: TextInputType.emailAddress,
),
],
),
),
SizedBox(height: Sizes.defaultSpace),
PrimaryButton(
loading: _loading,
text: "RESET PASSWORD",
function: () async {
FocusScope.of(context).unfocus();
var form = formKey.currentState;
if (form!.validate() && !_loading) {
form.save();
final emailRegX = RegExp(
r'^([\w-\.]+)+@[a-zA-Z0-9]{2,}\.[a-zA-Z]{2,}');
if (emailController.text.isEmpty) {
ToastHelper.errorToast(
"Email address required");
} else if (!emailRegX
.hasMatch(emailController.text)) {
ToastHelper.errorToast("Email not valid");
} else {
setState(() {
_loading = true;
});
var result = await UserAuth()
.requestResetPassword(
emailController.text);
if (result
.toLowerCase()
.contains("email sent")) {
ToastHelper.successToast(
"Email sent successfully. Follow the email to reset your password");
setState(() {
_loading = false;
});
sleep(Duration(seconds: 1));
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => LoginScreen(),
));
} else {
setState(() {
_loading = false;
});
ToastHelper.errorToast(result);
}
}
}
},
),
SizedBox(height: Sizes.halfSpace),
Container(
child: RichText(
textAlign: TextAlign.right,
text: TextSpan(
text: "Back to",
style: TextStyle(
color: ColorTheme.fadedTextColor,
fontSize: Sizes.contentText,
),
children: [
TextSpan(
recognizer: TapGestureRecognizer()
..onTap = () {
Navigator.pushReplacement(context,
MaterialPageRoute(
builder: (context) {
return LoginScreen();
},
));
},
text: " Login",
style: TextStyle(
color: ColorTheme.primaryColor,
fontSize: Sizes.contentText,
),
),
]),
),
),
SizedBox(height: Sizes.defaultSpace),
],
),
],
),
),
),
),
],
),
),
),
);
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:detector/common/clippers/back_clipper.dart';
import 'package:detector/common/clippers/front_clipper.dart';
import 'package:detector/common/constants/size_constants.dart';
import 'package:detector/common/utils/toast_helper.dart';
import 'package:detector/data/core/user_auth.dart';
import 'package:detector/data/models/client_model.dart';
import 'package:detector/presentation/screens/login/login_screen.dart';
import 'package:detector/presentation/themes/color_theme.dart';
import 'package:detector/presentation/widgets/form_password_box.dart';
import 'package:detector/presentation/widgets/form_text_box.dart';
import 'package:detector/presentation/widgets/primary_button.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:google_fonts/google_fonts.dart';
class RegisterScreen extends StatefulWidget {
@override
_RegisterScreenState createState() => _RegisterScreenState();
}
class _RegisterScreenState extends State<RegisterScreen> {
final formKey = GlobalKey<FormState>();
final fullNameController = TextEditingController();
final emailController = TextEditingController();
final passwordController = TextEditingController();
final phoneController = TextEditingController();
bool _loading = false;
@override
Widget build(BuildContext context) {
var width = MediaQuery.of(context).size.width;
return GestureDetector(
onTap: () {
final FocusScopeNode currentScope = FocusScope.of(context);
if (!currentScope.hasPrimaryFocus && currentScope.hasFocus) {
FocusManager.instance.primaryFocus!.unfocus();
}
},
child: Scaffold(
backgroundColor: Colors.transparent,
body: Container(
height: MediaQuery.of(context).size.height,
width: width,
color: ColorTheme.backgroundColor,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
color: ColorTheme.backgroundColor,
height: 250.w,
child: Stack(
children: [
CustomPaint(
size: Size(
width,
(width * 0.625).toDouble(),
),
painter: BackClipper(),
),
CustomPaint(
size: Size(
width,
(width * 0.625).toDouble(),
),
painter: FrontClipper(),
),
Positioned.fill(
child: Align(
alignment: Alignment.center,
child: Text(
"CREATE ACCOUNT",
style: GoogleFonts.bebasNeue(
textStyle: TextStyle(
fontSize: Sizes.appBarTitleText,
color: ColorTheme.backgroundColor,
fontWeight: FontWeight.w900,
letterSpacing: 3,
wordSpacing: 5,
),
),
),
),
),
],
),
),
Expanded(
child: Container(
padding: EdgeInsets.symmetric(
horizontal: Sizes.defaultPadding,
vertical: Sizes.defaultPadding,
),
child: SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(height: Sizes.defaultSpace * 2),
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Form(
key: formKey,
child: Column(
children: [
FormTextBox(
hintText: "Full Name",
textController: fullNameController,
keyboard: TextInputType.name,
),
SizedBox(height: Sizes.defaultSpace),
FormTextBox(
hintText: "Email",
textController: emailController,
keyboard: TextInputType.emailAddress,
),
SizedBox(height: Sizes.defaultSpace),
FormTextBox(
hintText: "Phone Number",
maxLength: 10,
textController: phoneController,
keyboard: TextInputType.number,
),
SizedBox(height: Sizes.defaultSpace),
FormPasswordBox(
hintText: "Password",
textController: passwordController,
),
],
),
),
SizedBox(height: Sizes.defaultSpace),
PrimaryButton(
loading: _loading,
text: "REGISTER",
function: () async {
FocusScope.of(context).unfocus();
var form = formKey.currentState;
if (form!.validate() && !_loading) {
form.save();
final emailRegX = RegExp(
r'^([\w-\.]+)+@[a-zA-Z0-9]{2,}\.[a-zA-Z]{2,}');
if (fullNameController.text.isEmpty ||
emailController.text.isEmpty ||
phoneController.text.isEmpty ||
passwordController.text.isEmpty) {
ToastHelper.errorToast(
"All fields required");
} else {
if (fullNameController.text.length < 6) {
print(fullNameController.text);
ToastHelper.errorToast(
"Full name required");
} else if (!emailRegX
.hasMatch(emailController.text)) {
ToastHelper.errorToast("Email not valid");
} else if (phoneController.text.length !=
10) {
ToastHelper.errorToast(
"Phone number not valid");
} else if (passwordController.text.length <
6) {
ToastHelper.errorToast(
"Password not strong");
} else {
setState(() {
_loading = true;
});
var result =
await UserAuth().createClient(
ClientModel(
password: passwordController.text,
fullName: fullNameController.text,
email: emailController.text,
phone: phoneController.text,
timestamp: Timestamp.now(),
),
);
if (result
.toLowerCase()
.contains("success")) {
setState(() {
_loading = false;
});
ToastHelper.successToast(
"Account created successfully");
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
LoginScreen(),
));
} else {
setState(() {
_loading = false;
});
ToastHelper.errorToast(result);
}
}
}
}
},
),
SizedBox(height: Sizes.halfSpace),
Container(
child: RichText(
textAlign: TextAlign.right,
text: TextSpan(
text: "Already have an account?",
style: TextStyle(
color: ColorTheme.fadedTextColor,
fontSize: Sizes.contentText,
),
children: [
TextSpan(
recognizer: TapGestureRecognizer()
..onTap = () {
Navigator.pushReplacement(context,
MaterialPageRoute(
builder: (context) {
return LoginScreen();
},
));
},
text: " Login",
style: TextStyle(
color: ColorTheme.primaryColor,
fontSize: Sizes.contentText,
),
),
]),
),
),
SizedBox(height: Sizes.defaultSpace),
],
),
],
),
),
),
),
],
),
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
class SelectColor extends StatefulWidget {
final Function(int) selectedColor;
SelectColor({Key? key,required this.selectedColor}) : super(key: key);
@override
_SelectColorState createState() => _SelectColorState();
}
class _SelectColorState extends State<SelectColor> {
List _colorsList = [Colors.orange,Colors.brown,Colors.yellow,Colors.purple,Colors.blue[900],Colors.lightBlue,Colors.black,Colors.grey,Colors.green];
List _scoreList = [2,2,2,2,3,4,6,8,1];
int _selectColor =-1;
@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
return Container(
height: size.height-223.h,
width: size.width,
padding: EdgeInsets.all(25.h),
child: AnimationLimiter(
child: GridView.count(
crossAxisCount: 3,
mainAxisSpacing: 10,
crossAxisSpacing:10,
children: List.generate(
_colorsList.length,
(int index) {
return AnimationConfiguration.staggeredGrid(
position: index,
duration: const Duration(milliseconds: 375),
columnCount: 3,
child: ScaleAnimation(
child: FadeInAnimation(
child: GestureDetector(
onTap: (){
setState(() {
_selectColor = index;
});
widget.selectedColor(_scoreList[index]);
},
child: Container(
decoration: BoxDecoration(
color: _colorsList[index],
borderRadius: BorderRadius.circular(3),
boxShadow: [
BoxShadow(color: Color.fromRGBO(0, 0, 0, 0.15)),
BoxShadow(
color: Color.fromRGBO(0, 0, 0, 0.15),
blurRadius: 11.0,
spreadRadius: 0.0,
offset: Offset(
0.0,
3.0,
),
)
],
),
child:Stack(
children: [
if(_selectColor == index)
Padding(
padding: const EdgeInsets.all(8.0),
child: Align(
alignment: Alignment.bottomRight,
child: Container(
decoration: BoxDecoration(
color: Colors.lightGreenAccent[400],
shape: BoxShape.circle
),
child: Padding(
padding: const EdgeInsets.all(1.0),
child: Icon(
Icons.check,
color: Colors.white,
size: 20,
),
),
),
),
)
],
) ,
),
),
),
),
);
},
),
),
),
);
}
}
\ No newline at end of file
import 'package:detector/data/models/person.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
class EmojiSelector extends StatefulWidget {
final Function(int,int) emojiSelect;
EmojiSelector({Key? key,required this.emojiSelect}) : super(key: key);
@override
_EmojiSelectorState createState() => _EmojiSelectorState();
}
class _EmojiSelectorState extends State<EmojiSelector> {
List<Person> _emojiList = [
Person(name: "angry", url:"assets/images/emoji/angry.png", score: 4),
Person(name: "happy", url:"assets/images/emoji/happy.png", score: 0),
Person(name: "lowsad", url:"assets/images/emoji/lowsad.png", score: 3),
Person(name: "midHappy", url:"assets/images/emoji/midHappy.png", score: 1),
Person(name: "sad", url:"assets/images/emoji/sad.png", score: 5),
Person(name: "unHappy", url:"assets/images/emoji/unHappy.png", score: 2),
];
late List<Person> _selectEmoji = [];
_setScore(){
int score = 0;
for (var item in _selectEmoji) {
score+=item.score;
}
widget.emojiSelect(score,1);
}
String _emojiError = '';
@override
void initState() {
super.initState();
_emojiList.shuffle();
}
@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
return Container(
height: size.height-175.h,
width: size.width,
padding: EdgeInsets.all(25.h),
child: AnimationLimiter(
child: GridView.count(
crossAxisCount: 3,
mainAxisSpacing: 10,
crossAxisSpacing:10,
children: List.generate(
_emojiList.length,
(int index) {
return AnimationConfiguration.staggeredGrid(
position: index,
duration: const Duration(milliseconds: 375),
columnCount: 3,
child: ScaleAnimation(
child: FadeInAnimation(
child: GestureDetector(
onTap: (){
List<Person> _selectEmojiTemp = [];
_selectEmojiTemp.addAll(_selectEmoji);
if(_selectEmojiTemp.contains(_emojiList[index])){
_selectEmojiTemp.remove(_emojiList[index]);
if(_emojiError.isNotEmpty){
setState(() {
_emojiError = "";
});
}
}else{
if(_selectEmoji.length == 2){
setState(() {
_emojiError = "Cant select more than 2 emoji";
});
}else{
_selectEmojiTemp.add(_emojiList[index]);
}
}
setState(() {
_selectEmoji = _selectEmojiTemp;
});
_setScore();
},
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(3),
boxShadow: [
BoxShadow(color: Color.fromRGBO(0, 0, 0, 0.15)),
BoxShadow(
color: Color.fromRGBO(0, 0, 0, 0.15),
blurRadius: 11.0,
spreadRadius: 0.0,
offset: Offset(
0.0,
3.0,
),
)
],
image: DecorationImage(
image: AssetImage(
_emojiList[index].url,
),
fit: BoxFit.fill
)
),
child:Stack(
children: [
if(_selectEmoji.contains( _emojiList[index]) )
Padding(
padding: const EdgeInsets.all(8.0),
child: Align(
alignment: Alignment.topRight,
child: Container(
decoration: BoxDecoration(
color: Colors.lightGreenAccent[400],
shape: BoxShape.circle
),
child: Padding(
padding: const EdgeInsets.all(1.0),
child: Icon(
Icons.check,
color: Colors.white,
size: 20,
),
),
),
),
),
Align(
alignment: Alignment.bottomCenter,
child: Container(
color: Colors.white.withOpacity(0.5),
child: Text(
_emojiList[index].name,
style: TextStyle(
fontWeight: FontWeight.w600
),
textAlign: TextAlign.center,
),
),
)
],
) ,
),
),
),
),
);
},
),
),
),
);
}
}
\ No newline at end of file
import 'package:detector/data/models/person.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
class FaceSelector extends StatefulWidget {
final Function(int,int) faceSelect;
FaceSelector({Key? key,required this.faceSelect}) : super(key: key);
@override
_FaceSelectorState createState() => _FaceSelectorState();
}
class _FaceSelectorState extends State<FaceSelector> {
List<Person> _faceList = [
Person(name: "angry", url: "assets/images/face/angry.png", score: 3),
Person(name: "happy", url: "assets/images/face/happy.png", score: 0),
Person(name: "sad", url: "assets/images/face/sad.png", score: 5),
Person(name: "suicide", url: "assets/images/face/suicide.png", score: 7),
];
List<Person> _selectFaceList =[];
String _faceError = "";
_setScore(){
int score = 0;
for (var item in _selectFaceList) {
score+=item.score;
}
widget.faceSelect(score,_selectFaceList.length);
}
@override
void initState() {
super.initState();
_faceList.shuffle();
}
@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
return Container(
height: size.height-175.h,
width: size.width,
padding: EdgeInsets.all(25.h),
child: AnimationLimiter(
child: GridView.count(
crossAxisCount: 3,
mainAxisSpacing: 10,
crossAxisSpacing:10,
children: List.generate(
_faceList.length,
(int index) {
return AnimationConfiguration.staggeredGrid(
position: index,
duration: const Duration(milliseconds: 375),
columnCount: 3,
child: ScaleAnimation(
child: FadeInAnimation(
child: GestureDetector(
onTap: (){
print("object");
List<Person> _selectFaceTemp = [];
_selectFaceTemp.addAll(_selectFaceList);
if(_selectFaceTemp.contains(_faceList[index])){
_selectFaceTemp.remove(_faceList[index]);
if(_faceError.isNotEmpty){
setState(() {
_faceError = "";
});
}
}else{
if(_selectFaceList.length == 2){
setState(() {
_faceError = "Cant select more than 3 person";
});
}else{
_selectFaceTemp.add(_faceList[index]);
}
}
setState(() {
_selectFaceList = _selectFaceTemp;
});
_setScore();
},
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(3),
boxShadow: [
BoxShadow(color: Color.fromRGBO(0, 0, 0, 0.15)),
BoxShadow(
color: Color.fromRGBO(0, 0, 0, 0.15),
blurRadius: 11.0,
spreadRadius: 0.0,
offset: Offset(
0.0,
3.0,
),
)
],
image: DecorationImage(
image: AssetImage(
_faceList[index].url,
),
fit: BoxFit.fill
)
),
child:Stack(
children: [
if(_selectFaceList.contains(_faceList[index]))
Padding(
padding: const EdgeInsets.all(8.0),
child: Align(
alignment: Alignment.topRight,
child: Container(
decoration: BoxDecoration(
color: Colors.lightGreenAccent[400],
shape: BoxShape.circle
),
child: Padding(
padding: const EdgeInsets.all(1.0),
child: Icon(
Icons.check,
color: Colors.white,
size: 20,
),
),
),
),
),
Align(
alignment: Alignment.bottomCenter,
child: Container(
color: Colors.white.withOpacity(0.5),
child: Text(
_faceList[index].name,
style: TextStyle(
fontWeight: FontWeight.w600
),
textAlign: TextAlign.center,
),
),
)
],
) ,
),
),
),
),
);
},
),
),
),
);
}
}
\ No newline at end of file
import 'package:detector/data/models/person.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
class PersonSelect extends StatefulWidget {
final Function(int,int) personSelect;
PersonSelect({Key? key,required this.personSelect}) : super(key: key);
@override
_PersonSelectState createState() => _PersonSelectState();
}
class _PersonSelectState extends State<PersonSelect> {
List<Person> _persenList = [
Person(name: "Mark Zuckerberg", url: "https://upload.wikimedia.org/wikipedia/commons/thumb/5/5f/Mark_Zuckerberg_F8_2019_Keynote_%2847721886632%29_%28cropped%29.jpg/220px-Mark_Zuckerberg_F8_2019_Keynote_%2847721886632%29_%28cropped%29.jpg", score: 0),
Person(name: "Jack Ma", url: "https://image.cnbcfm.com/api/v1/image/104225995-_95A5004.jpg", score: 0),
Person(name: "Shah Rukh Khan", url: "https://upload.wikimedia.org/wikipedia/commons/6/6e/Shah_Rukh_Khan_graces_the_launch_of_the_new_Santro.jpg", score: 0),
Person(name: "Malala Yousafzai", url: "https://upload.wikimedia.org/wikipedia/commons/thumb/0/08/Shinz%C5%8D_Abe_and_Malala_Yousafzai_%281%29_Cropped.jpg/220px-Shinz%C5%8D_Abe_and_Malala_Yousafzai_%281%29_Cropped.jpg", score: 0),
Person(name: "Mahatma Gandhi", url: "https://upload.wikimedia.org/wikipedia/commons/thumb/7/7a/Mahatma-Gandhi%2C_studio%2C_1931.jpg/220px-Mahatma-Gandhi%2C_studio%2C_1931.jpg", score: 0),
Person(name: "Nelson Mandela", url: 'https://upload.wikimedia.org/wikipedia/commons/thumb/0/02/Nelson_Mandela_1994.jpg/220px-Nelson_Mandela_1994.jpg', score: 0),
Person(name: "Kusal Mendis", url: "https://img1.hscicdn.com/image/upload/f_auto/lsci/db/PICTURES/CMS/303800/303835.png", score: 1),
Person(name: "Gotabaya Rajapaksa", url: "https://upload.wikimedia.org/wikipedia/commons/d/d0/Nandasena_Gotabaya_Rajapaksa.jpg", score: 1),
Person(name: "Sakvithi Ranasinghe", url: "https://pbs.twimg.com/profile_images/1140153679275683840/6DO92spd_400x400.jpg", score: 1),
Person(name: "Osama bin Laden", url: "https://upload.wikimedia.org/wikipedia/commons/thumb/c/ca/Osama_bin_Laden_portrait.jpg/220px-Osama_bin_Laden_portrait.jpg", score: 2),
Person(name: "Idi Amin", url: "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Idi_Amin_at_UN_%28United_Nations%2C_New_York%29_gtfy.00132_%28cropped%29.jpg/800px-Idi_Amin_at_UN_%28United_Nations%2C_New_York%29_gtfy.00132_%28cropped%29.jpg", score: 2),
Person(name: "Adolf Hitler", url: "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e1/Hitler_portrait_crop.jpg/220px-Hitler_portrait_crop.jpg", score: 2),
Person(name: "Sushant Singh Rajput", url: "https://upload.wikimedia.org/wikipedia/commons/a/ab/Sushant_sr_Manish_M_B%27day_bash.jpg", score: 3),
Person(name: "Dasun Nishan", url: "https://gossip.hirufm.lk/data/gossip_images/v3imgpath/2017Sep/25/12976732_10209528903964384_4279525041107462994_o.jpg", score: 3),
Person(name: "Marilyn Monroe", url: "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Monroecirca1953.jpg/800px-Monroecirca1953.jpg", score: 3),
];
List<Person> _selectPerson =[];
String _personError = "";
_setScore(){
int score = 0;
for (var item in _selectPerson) {
score+=item.score;
}
widget.personSelect(score,_selectPerson.length);
}
@override
void initState() {
super.initState();
_persenList.shuffle();
}
@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
return Container(
height: size.height-175.h,
width: size.width,
padding: EdgeInsets.all(25.h),
child: AnimationLimiter(
child: GridView.count(
crossAxisCount: 3,
mainAxisSpacing: 10,
crossAxisSpacing:10,
children: List.generate(
_persenList.length,
(int index) {
return AnimationConfiguration.staggeredGrid(
position: index,
duration: const Duration(milliseconds: 375),
columnCount: 3,
child: ScaleAnimation(
child: FadeInAnimation(
child: GestureDetector(
onTap: (){
print("object");
List<Person> _selectPersonTemp = [];
_selectPersonTemp.addAll(_selectPerson);
if(_selectPersonTemp.contains(_persenList[index])){
_selectPersonTemp.remove(_persenList[index]);
if(_personError.isNotEmpty){
setState(() {
_personError = "";
});
}
}else{
if(_selectPerson.length == 3){
setState(() {
_personError = "Cant select more than 3 person";
});
}else{
_selectPersonTemp.add(_persenList[index]);
}
}
setState(() {
_selectPerson = _selectPersonTemp;
});
_setScore();
},
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(3),
boxShadow: [
BoxShadow(color: Color.fromRGBO(0, 0, 0, 0.15)),
BoxShadow(
color: Color.fromRGBO(0, 0, 0, 0.15),
blurRadius: 11.0,
spreadRadius: 0.0,
offset: Offset(
0.0,
3.0,
),
)
],
image: DecorationImage(
image: NetworkImage(
_persenList[index].url,
),
fit: BoxFit.fill
)
),
child:Stack(
children: [
if(_selectPerson.contains(_persenList[index]))
Padding(
padding: const EdgeInsets.all(8.0),
child: Align(
alignment: Alignment.topRight,
child: Container(
decoration: BoxDecoration(
color: Colors.lightGreenAccent[400],
shape: BoxShape.circle
),
child: Padding(
padding: const EdgeInsets.all(1.0),
child: Icon(
Icons.check,
color: Colors.white,
size: 20,
),
),
),
),
),
Align(
alignment: Alignment.bottomCenter,
child: Container(
color: Colors.white.withOpacity(0.5),
child: Text(
_persenList[index].name,
style: TextStyle(
fontWeight: FontWeight.w600
),
textAlign: TextAlign.center,
),
),
)
],
) ,
),
),
),
),
);
},
),
),
),
);
}
}
\ No newline at end of file
import 'package:detector/common/constants/size_constants.dart';
import 'package:detector/presentation/screens/text/videoDisplay.dart';
import 'package:detector/presentation/themes/color_theme.dart';
import 'package:detector/presentation/widgets/primary_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:flutter_svg/svg.dart';
class ResultView extends StatefulWidget {
final int score;
ResultView({Key? key,required this.score}) : super(key: key);
@override
_ResultViewState createState() => _ResultViewState();
}
class _ResultViewState extends State<ResultView> {
Color? _color;
String _text="";
String _image="";
double result = 0;
@override
void initState() {
super.initState();
result = widget.score*100/45;
if(result < 24){
_color =Color( 0xff00B0FF);
_text ="Congratulation you are in normal condition";
_image ="assets/icons/normal.svg";
}
else if(result <49){
_color =Color( 0xff00BFA6);
_text ="Mild mood disturbance";
_image ="assets/icons/mildMood.svg";
}
else if(result <74){
_color =Color( 0xffF9A826);
_text ="Severe Depression";
_image ="assets/icons/severeDepression.svg";
}
else{
_color =Color( 0xffF50057);
_text ="Extreme Depression";
_image ="assets/icons/extreamDepression.svg";
}
}
_viewDialog(){
showDialog(
context: context,
builder: (context) {
return Dialog(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.r)),
elevation: 16,
child: Container(
child: ListView(
shrinkWrap: true,
children: <Widget>[
SizedBox(height: 20.h),
Center(
child:Text(
'Treatment',
style: TextStyle(
fontSize: Sizes.appBarTitleText,
color: ColorTheme.appBarTextColor,
fontWeight: FontWeight.w900,
letterSpacing: 3,
wordSpacing: 5,
),
)
),
SizedBox(height: 20.h),
ListTile(
title: Text("Motivational Videos"),
trailing: Icon(Icons.arrow_forward_ios),
onTap:() async {
await Navigator.of(context).push(
PageRouteBuilder(
pageBuilder: (context, _, __) => VideoPlayer(motiation:true),
opaque: false
),
);
Navigator.pop(context);
}
),
ListTile(
title: Text("Music treatment"),
trailing: Icon(Icons.arrow_forward_ios),
onTap:() async {
await Navigator.of(context).push(
PageRouteBuilder(
pageBuilder: (context, _, __) => VideoPlayer(motiation:false),
opaque: false
),
);
Navigator.pop(context);
}
),
],
),
),
);
}
);
}
@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
return Container(
height: size.height-85.h,
width: size.width,
color: _color!.withOpacity(0.1),
child: AnimationLimiter(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.center,
children: AnimationConfiguration.toStaggeredList(
duration: const Duration(milliseconds: 375),
childAnimationBuilder: (widget) => SlideAnimation(
horizontalOffset: 50.0,
child: FadeInAnimation(
child: widget,
),
),
children: [
Text(
_text,
style: TextStyle(
color: _color,
fontSize: 25,
fontWeight: FontWeight.w600
),
textAlign: TextAlign.center,
),
SizedBox(
height: 300,
width: 300,
child: SvgPicture.asset(
_image
)
),
result>50.0?
Padding(
padding:EdgeInsets.symmetric(horizontal: 20.w),
child: PrimaryButton(
text: "Treatment",
function: () {
_viewDialog();
},
),
):Container()
],
),
),
),
);
}
}
\ No newline at end of file
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
class SleepingHours extends StatefulWidget {
final Function(int) selectedHours;
SleepingHours({Key? key,required this.selectedHours}) : super(key: key);
@override
_SleepingHoursState createState() => _SleepingHoursState();
}
class _SleepingHoursState extends State<SleepingHours> {
List<String> _hourList = ["12-10 hours","10-8 hours","8-5 hours","5-3 hours","3-1 hours"];
List _scoreList = [5,4,1,3,6];
late int _selectHour = -1;
@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
return Container(
height: size.height-223.h,
width: size.width,
padding: EdgeInsets.all(25.h),
child: AnimationLimiter(
child: GridView.count(
crossAxisCount: 3,
mainAxisSpacing: 10,
crossAxisSpacing:10,
children: List.generate(
_hourList.length,
(int index) {
return AnimationConfiguration.staggeredGrid(
position: index,
duration: const Duration(milliseconds: 375),
columnCount: 3,
child: ScaleAnimation(
child: FadeInAnimation(
child: GestureDetector(
onTap: (){
setState(() {
_selectHour = index;
});
widget.selectedHours(_scoreList[index]);
},
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(3),
boxShadow: [
BoxShadow(color: Color.fromRGBO(0, 0, 0, 0.15)),
BoxShadow(
color: Color.fromRGBO(0, 0, 0, 0.15),
blurRadius: 11.0,
spreadRadius: 0.0,
offset: Offset(
0.0,
3.0,
),
)
],
),
child:Stack(
children: [
if(_selectHour == index)
Padding(
padding: const EdgeInsets.all(8.0),
child: Align(
alignment: Alignment.bottomRight,
child: Container(
decoration: BoxDecoration(
color: Colors.lightGreenAccent[400],
shape: BoxShape.circle
),
child: Padding(
padding: const EdgeInsets.all(1.0),
child: Icon(
Icons.check,
color: Colors.white,
size: 20,
),
),
),
),
) ,
Center(
child: Text(
_hourList[index],
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w500
),
),
)
],
) ,
),
),
),
),
);
},
),
),
),
);
}
}
\ No newline at end of file
import 'dart:async';
import 'package:detector/common/constants/size_constants.dart';
import 'package:detector/data/provider/data_provider.dart';
import 'package:detector/data/provider/ui_support_provider.dart';
import 'package:detector/presentation/screens/text/colorChoseForm.dart';
import 'package:detector/presentation/screens/text/emojiSelector.dart';
import 'package:detector/presentation/screens/text/faceSelector.dart';
import 'package:detector/presentation/screens/text/peresonChoseForm.dart';
import 'package:detector/presentation/screens/text/result.dart';
import 'package:detector/presentation/screens/text/sleepingHour.dart';
import 'package:detector/presentation/widgets/custom_app_bar.dart';
import 'package:detector/presentation/widgets/primary_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:provider/provider.dart';
class TextAnswersScreen extends StatefulWidget {
@override
_TextAnswersScreenState createState() => _TextAnswersScreenState();
}
class _TextAnswersScreenState extends State<TextAnswersScreen> {
int _colorScore =0;
int _personScore =0;
int _emojiScore =0;
int _emojiCount =0;
int _hoursScore =0;
// int _hoursCount =0;
int _faceScore =0;
int _faceCount =0;
int _currentForm = 0;
Timer? timer;
int _initSec = 10;
int _personCount = 0;
@override
void initState() {
super.initState();
timer = Timer.periodic(Duration(seconds: 1), (Timer t) {
setState(() {
_initSec -=1;
});
if(_initSec == 0){
timer?.cancel();
_colorScore = 9;
_currentForm = 1;
}
});
}
@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
return Scaffold(
backgroundColor:Colors.white,
body: SafeArea(
child: Consumer2<UiSupportProvider, DataProvider>(
builder: (context, UiSupportProvider uiProvider,DataProvider dataProvider, child) =>
Container(
height: size.height,
width: size.width,
child: Column(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: Sizes.halfSpace),
child: CustomAppBar(
backButton: true,
title: _currentForm == 0?"Choose a color":
_currentForm == 1?"Choose a Person":
_currentForm == 2?"Select favorite emoji":
_currentForm == 3?"Select Face type":
_currentForm == 4?"Select Sleeping hours":
"Result",
),
),
_currentForm == 0?
Column(
children: [
Container(
width: size.width,
padding: EdgeInsets.only(right: 20),
child: Text(
(_initSec<10? ":0":":")+"$_initSec",
style: TextStyle(
fontSize: 30,
fontWeight:FontWeight.w600
),
textAlign: TextAlign.end,
),
),
SelectColor(
selectedColor: (val){
setState(() {
_colorScore = val;
});
}
),
],
):
_currentForm == 1?
PersonSelect(
personSelect: (val,count){
print(val);
setState(() {
_personScore = val;
_personCount = count;
});
}
):
_currentForm == 2?
EmojiSelector(
emojiSelect: (val,count){
print(val);
setState(() {
_emojiScore = val;
_emojiCount = count;
});
}
):
_currentForm == 3?
FaceSelector(
faceSelect: (val,count){
print(val);
setState(() {
_faceScore = val;
_faceCount = count;
});
}
):
_currentForm == 4?
SleepingHours(
selectedHours: (val){
print(val);
setState(() {
_hoursScore = val;
});
}
):
ResultView(score: _personScore+_colorScore + _emojiScore+_faceScore+_hoursScore,),
(_currentForm == 1 && _personCount>0) ||
(_currentForm == 0 && _colorScore>0) ||
(_currentForm == 2 && _emojiCount>0) ||
(_currentForm == 3 && _faceCount>0) ||
(_currentForm == 4 && _hoursScore>0)
?
Padding(
padding:EdgeInsets.symmetric(horizontal: Sizes.defaultPadding),
child: PrimaryButton(
text: _currentForm==4
? "SUBMIT"
: "NEXT",
function: () {
timer?.cancel();
setState(() {
_currentForm++;
});
},
),
):SizedBox(),
_currentForm == 1 || _currentForm == 0?
SizedBox(height: Sizes.defaultSpace):SizedBox(height: 0,),
],
),
),
),
),
);
}
}
import 'package:detector/common/constants/size_constants.dart';
import 'package:detector/presentation/widgets/custom_app_bar.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:youtube_player_flutter/youtube_player_flutter.dart';
class VideoPlayer extends StatefulWidget {
final bool motiation;
const VideoPlayer({Key? key,required this.motiation}) : super(key: key);
@override
_VideoPlayerState createState() => _VideoPlayerState();
}
class _VideoPlayerState extends State<VideoPlayer> {
late YoutubePlayerController _controller;
late TextEditingController _idController;
late TextEditingController _seekToController;
late PlayerState _playerState;
late YoutubeMetaData _videoMetaData;
double _volume = 100;
bool _muted = false;
bool _isPlayerReady = false;
List<String> _ids =[];
final List<String> _music = [
'VgdAcENXy84',
'3mMqQXlCtTM',
'YRS0EScCWY0',
];
final List<String> _motivation = [
'VgdAcENXy84',
'3mMqQXlCtTM',
'YRS0EScCWY0',
];
@override
void initState() {
super.initState();
if(widget.motiation){
_ids = _motivation;
}else{
_ids = _music;
}
_ids.shuffle();
_controller = YoutubePlayerController(
initialVideoId: _ids.first,
flags: const YoutubePlayerFlags(
mute: false,
autoPlay: true,
disableDragSeek: false,
loop: false,
isLive: false,
forceHD: false,
enableCaption: true,
),
)..addListener(listener);
_idController = TextEditingController();
_seekToController = TextEditingController();
_videoMetaData = const YoutubeMetaData();
_playerState = PlayerState.unknown;
}
void listener() {
if (_isPlayerReady && mounted && !_controller.value.isFullScreen) {
setState(() {
_playerState = _controller.value.playerState;
_videoMetaData = _controller.metadata;
});
}
}
@override
void deactivate() {
// Pauses video while navigating to next page.
_controller.pause();
super.deactivate();
}
@override
void dispose() {
_controller.dispose();
_idController.dispose();
_seekToController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
return SafeArea(
child: YoutubePlayerBuilder(
onExitFullScreen: () {
SystemChrome.setPreferredOrientations(DeviceOrientation.values);
},
player: YoutubePlayer(
controller: _controller,
showVideoProgressIndicator: true,
progressIndicatorColor: Colors.blueAccent,
topActions: <Widget>[
const SizedBox(width: 8.0),
Expanded(
child: Text(
_controller.metadata.title,
style: const TextStyle(
color: Colors.white,
fontSize: 18.0,
),
overflow: TextOverflow.ellipsis,
maxLines: 1,
),
),
IconButton(
icon: const Icon(
Icons.settings,
color: Colors.white,
size: 25.0,
),
onPressed: () {
},
),
],
onReady: () {
_isPlayerReady = true;
},
onEnded: (data) {
_controller
.load(_ids[(_ids.indexOf(data.videoId) + 1) % _ids.length]);
_showSnackBar('Next Video Started!');
},
),
builder: (context, player) => Scaffold(
body: Column(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: Sizes.halfSpace),
child: CustomAppBar(
backButton: true,
title: widget.motiation? "Motivational Videos":"Relaxations Videos",
),
),
SizedBox(
height: size.height-84.h,
width: size.width,
child: ListView(
children: [
player,
Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
_space,
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
IconButton(
icon: const Icon(Icons.skip_previous),
onPressed: _isPlayerReady
? () => _controller.load(_ids[
(_ids.indexOf(_controller.metadata.videoId) -
1) %
_ids.length])
: null,
),
IconButton(
icon: Icon(
_controller.value.isPlaying
? Icons.pause
: Icons.play_arrow,
),
onPressed: _isPlayerReady
? () {
_controller.value.isPlaying
? _controller.pause()
: _controller.play();
setState(() {});
}
: null,
),
IconButton(
icon: Icon(_muted ? Icons.volume_off : Icons.volume_up),
onPressed: _isPlayerReady
? () {
_muted
? _controller.unMute()
: _controller.mute();
setState(() {
_muted = !_muted;
});
}
: null,
),
FullScreenButton(
controller: _controller,
color: Colors.blueAccent,
),
IconButton(
icon: const Icon(Icons.skip_next),
onPressed: _isPlayerReady
? () => _controller.load(_ids[
(_ids.indexOf(_controller.metadata.videoId) +
1) %
_ids.length])
: null,
),
],
),
_space,
Row(
children: <Widget>[
const Text(
"Volume",
style: TextStyle(fontWeight: FontWeight.w300),
),
Expanded(
child: Slider(
inactiveColor: Colors.transparent,
value: _volume,
min: 0.0,
max: 100.0,
divisions: 10,
label: '${(_volume).round()}',
onChanged: _isPlayerReady
? (value) {
setState(() {
_volume = value;
});
_controller.setVolume(_volume.round());
}
: null,
),
),
],
),
_space,
// AnimatedContainer(
// duration: const Duration(milliseconds: 800),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(20.0),
// color: _getStateColor(_playerState),
// ),
// padding: const EdgeInsets.all(8.0),
// child: Text(
// _playerState.toString(),
// style: const TextStyle(
// fontWeight: FontWeight.w300,
// color: Colors.white,
// ),
// textAlign: TextAlign.center,
// ),
// ),
],
),
),
],
),
),
],
),
),
),
);
}
Widget _text(String title, String value) {
return RichText(
text: TextSpan(
text: '$title : ',
style: const TextStyle(
color: Colors.blueAccent,
fontWeight: FontWeight.bold,
),
children: [
TextSpan(
text: value,
style: const TextStyle(
color: Colors.blueAccent,
fontWeight: FontWeight.w300,
),
),
],
),
);
}
Color _getStateColor(PlayerState state) {
switch (state) {
case PlayerState.unknown:
return Colors.grey[700]!;
case PlayerState.unStarted:
return Colors.pink;
case PlayerState.ended:
return Colors.red;
case PlayerState.playing:
return Colors.blueAccent;
case PlayerState.paused:
return Colors.orange;
case PlayerState.buffering:
return Colors.yellow;
case PlayerState.cued:
return Colors.blue[900]!;
default:
return Colors.blue;
}
}
Widget get _space => const SizedBox(height: 10);
Widget _loadCueButton(String action) {
return Expanded(
child: MaterialButton(
color: Colors.blueAccent,
onPressed: _isPlayerReady
? () {
if (_idController.text.isNotEmpty) {
var id = YoutubePlayer.convertUrlToId(
_idController.text,
) ??
'';
if (action == 'LOAD') _controller.load(id);
if (action == 'CUE') _controller.cue(id);
FocusScope.of(context).requestFocus(FocusNode());
} else {
_showSnackBar('Source can\'t be empty!');
}
}
: null,
disabledColor: Colors.grey,
disabledTextColor: Colors.black,
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 14.0),
child: Text(
action,
style: const TextStyle(
fontSize: 18.0,
color: Colors.white,
fontWeight: FontWeight.w300,
),
textAlign: TextAlign.center,
),
),
),
);
}
void _showSnackBar(String message) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
message,
textAlign: TextAlign.center,
style: const TextStyle(
fontWeight: FontWeight.w300,
fontSize: 16.0,
),
),
backgroundColor: Colors.blueAccent,
behavior: SnackBarBehavior.floating,
elevation: 1.0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(50.0),
),
),
);
}
}
\ No newline at end of file
import 'package:detector/common/constants/size_constants.dart';
import 'package:detector/common/utils/converter.dart';
import 'package:detector/data/provider/data_provider.dart';
import 'package:detector/data/provider/ui_support_provider.dart';
import 'package:detector/presentation/themes/color_theme.dart';
import 'package:detector/presentation/widgets/custom_app_bar.dart';
import 'package:detector/presentation/widgets/primary_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
class VoiceAnswersScreen extends StatefulWidget {
@override
_VoiceAnswersScreenState createState() => _VoiceAnswersScreenState();
}
class _VoiceAnswersScreenState extends State<VoiceAnswersScreen> {
@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
return Scaffold(
body: SafeArea(
child: Consumer2<UiSupportProvider, DataProvider>(
builder: (context, UiSupportProvider uiProvider,
DataProvider dataProvider, child) =>
Container(
height: size.height,
width: size.width,
child: Column(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: Sizes.halfSpace),
child: CustomAppBar(
backButton: true,
title: "VOICE QUESTIONS",
),
),
SizedBox(height: Sizes.defaultSpace),
Expanded(
child: Container(
width: size.width - (2 * Sizes.defaultPadding),
padding:
EdgeInsets.symmetric(horizontal: Sizes.defaultPadding),
decoration: BoxDecoration(
color: ColorTheme.fadedBgColor.withOpacity(0.2),
borderRadius: BorderRadius.circular(
Sizes.buttonTextFieldRadius,
),
),
child: PageView.builder(
controller: uiProvider.pageController,
itemCount: dataProvider.questions.length,
physics: NeverScrollableScrollPhysics(),
itemBuilder: (context, index) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: Sizes.defaultSpace),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Question Number: ${Converter().questionNumber(dataProvider.questions[index].number)}",
style: TextStyle(
fontSize: Sizes.buttonText,
color: ColorTheme.textColor,
),
),
SizedBox(height: Sizes.defaultSpace),
Text(
"${dataProvider.questions[index].question}",
style: TextStyle(
fontSize: Sizes.buttonText,
color: ColorTheme.textColor,
),
),
SizedBox(height: Sizes.defaultSpace),
],
),
),
SizedBox(height: Sizes.defaultSpace),
Align(
alignment: Alignment.center,
child: Material(
color: ColorTheme.accentColor1,
borderRadius: BorderRadius.circular(50.w),
elevation: 5,
child: InkWell(
onTap: () {},
borderRadius: BorderRadius.circular(50.w),
child: Ink(
height: 65.w,
width: 65.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(50.w),
color: ColorTheme.primaryColor,
),
child: Center(
child: Container(
height: 45.w,
width: 45.w,
child: Image.asset(
"assets/icons/microphone.png",
color: Colors.white,
),
),
),
),
),
),
),
SizedBox(height: Sizes.defaultSpace),
],
);
},
),
),
),
SizedBox(height: Sizes.defaultSpace),
Padding(
padding:
EdgeInsets.symmetric(horizontal: Sizes.defaultPadding),
child: PrimaryButton(
text: (uiProvider.selectedMenuIndex + 1) ==
dataProvider.questions.length
? "SUBMIT"
: "NEXT",
function: () {
if ((uiProvider.selectedMenuIndex + 1) ==
dataProvider.questions.length) {
} else {
uiProvider.nextQuestion();
}
},
),
),
SizedBox(height: Sizes.defaultSpace),
],
),
),
),
),
);
}
}
import 'package:flutter/material.dart';
class ColorTheme {
const ColorTheme._();
static const Color backgroundColor = Color(0xFFEDF2F4);
static const Color primaryColor = Color(0xFF511281);
static const Color accentColor2 = Color(0xFFA5E1AD);
static const Color secondaryColor = Color(0xFF4CA1A3);
static const Color accentColor1 = Color(0xFF21094E);
static const Color textColor = primaryColor;
static const Color buttonColor = accentColor1;
static const Color buttonTextColor = backgroundColor;
static const Color appBarTextColor = secondaryColor;
static const Color highlightTextColor = primaryColor;
static const Color fadedTextColor = secondaryColor;
static const Color fadedBgColor = accentColor2;
static const Color whiteColorText = backgroundColor;
static const Color shadowColor = secondaryColor;
// static const Color backgroundColor = Color(0xFFEDF2F4);
// static const Color primaryColor = Color(0xFF2B2D42);
// static const Color secondaryColor = Color(0xFF8D99AE);
// static const Color accentColor1 = Color(0xFFEF233C);
// static const Color accentColor2 = Color(0xFFD90429);
// static const Color textColor = Colors.black;
// static const Color buttonColor = accentColor1;
// static const Color buttonTextColor = backgroundColor;
// static const Color appBarTextColor = accentColor1;
// static const Color highlightTextColor = primaryColor;
// static const Color fadedTextColor = secondaryColor;
// static const Color whiteColorText = backgroundColor;
// static const Color shadowColor = secondaryColor;
}
import 'package:detector/common/constants/size_constants.dart';
import 'package:detector/presentation/themes/color_theme.dart';
import 'package:flutter/material.dart';
class BigButton extends StatelessWidget {
final String title;
final String image;
final VoidCallback function;
final bool? halfButton;
const BigButton({
Key? key,
required this.title,
required this.image,
required this.function,
this.halfButton = false,
}) : super(key: key);
@override
Widget build(BuildContext context) {
var width = (halfButton ?? false)
? MediaQuery.of(context).size.width - (3 * Sizes.defaultPadding)
: MediaQuery.of(context).size.width - (2 * Sizes.defaultPadding);
return Material(
color: ColorTheme.accentColor1,
elevation: 5,
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius),
child: InkWell(
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius),
onTap: function,
child: Ink(
width: (halfButton ?? false) ? width / 2 : width,
padding: EdgeInsets.symmetric(
horizontal: Sizes.defaultPadding,
vertical: Sizes.defaultPadding,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius),
color: ColorTheme.accentColor1,
),
child: Column(
children: [
Image.asset(
image,
color: Colors.white,
),
SizedBox(height: Sizes.halfSpace),
Text(
title,
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
fontSize: Sizes.buttonText,
),
),
],
),
),
),
);
}
}
import 'package:detector/common/constants/size_constants.dart';
import 'package:detector/presentation/themes/color_theme.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:google_fonts/google_fonts.dart';
class CustomAppBar extends StatelessWidget {
final String? title;
final bool backButton;
const CustomAppBar({
Key? key,
this.title,
this.backButton = false,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
height: 40.w,
// color: Colors.red,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
backButton
? Container(
width: 30.w,
child: GestureDetector(
onTap: () {
Navigator.pop(context);
},
child: Icon(
Icons.arrow_back,
color: ColorTheme.appBarTextColor,
size: 32.w,
),
),
)
: Container(),
title != null
? Expanded(
child: Container(
child: Center(
child: Text(
title ?? "",
style: GoogleFonts.bebasNeue(
textStyle: TextStyle(
fontSize: Sizes.appBarTitleText,
color: ColorTheme.appBarTextColor,
fontWeight: FontWeight.w900,
letterSpacing: 3,
wordSpacing: 5,
),
),
),
),
),
)
: Expanded(
child: Container(),
),
backButton
? Container(
width: 30.w,
)
: Container(),
],
),
);
}
}
import 'package:detector/common/constants/size_constants.dart';
import 'package:detector/presentation/themes/color_theme.dart';
import 'package:flutter/material.dart';
class FormPasswordBox extends StatefulWidget {
final TextEditingController textController;
final String hintText;
final String? Function(String?)? validation;
const FormPasswordBox({
Key? key,
required this.textController,
required this.hintText,
this.validation,
}) : super(key: key);
@override
_FormPasswordBoxState createState() => _FormPasswordBoxState();
}
class _FormPasswordBoxState extends State<FormPasswordBox> {
bool _hidePassword = true;
void inContact(TapDownDetails details) {
setState(() {
_hidePassword = false;
});
}
void outContact(TapUpDetails details) {
setState(() {
_hidePassword = true;
});
}
@override
Widget build(BuildContext context) {
return TextFormField(
obscureText: _hidePassword,
enableInteractiveSelection: false,
style: TextStyle(
color: ColorTheme.primaryColor,
fontSize: Sizes.contentText,
),
decoration: InputDecoration(
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: ColorTheme.primaryColor,
),
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: ColorTheme.primaryColor,
),
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius),
),
focusedErrorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: ColorTheme.accentColor1,
),
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: ColorTheme.accentColor1,
),
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius),
),
disabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: Colors.grey,
),
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius),
),
hintStyle: TextStyle(
color: ColorTheme.secondaryColor,
fontSize: Sizes.contentText,
),
labelStyle: TextStyle(
color: ColorTheme.secondaryColor,
fontSize: Sizes.contentText,
),
contentPadding: EdgeInsets.symmetric(
horizontal: Sizes.contentHorizontal,
vertical: Sizes.contentVertical,
),
hintText: widget.hintText,
labelText: widget.hintText,
errorStyle: TextStyle(
color: ColorTheme.accentColor1,
),
suffix: GestureDetector(
onTapDown: inContact,
onTapUp: outContact,
child: Icon(
_hidePassword ? Icons.visibility : Icons.visibility_off,
color: ColorTheme.secondaryColor,
size: Sizes.contentText,
),
),
),
validator: widget.validation,
onSaved: (val) => widget.textController.text = val ?? "",
);
}
}
import 'package:detector/common/constants/size_constants.dart';
import 'package:detector/presentation/themes/color_theme.dart';
import 'package:flutter/material.dart';
class FormTextBox extends StatelessWidget {
final TextEditingController textController;
final String hintText;
final int maxLength;
final int maxLines;
final String? Function(String?)? validation;
final TextInputType? keyboard;
const FormTextBox({
Key? key,
required this.textController,
required this.hintText,
this.maxLength = 50,
this.maxLines = 1,
this.validation,
this.keyboard = TextInputType.text,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return TextFormField(
maxLength: maxLength,
maxLines: maxLines,
keyboardType: keyboard,
style: TextStyle(
color: ColorTheme.primaryColor,
fontSize: Sizes.contentText,
),
decoration: InputDecoration(
counterText: "",
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: ColorTheme.primaryColor,
),
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius),
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: ColorTheme.primaryColor,
),
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius),
),
focusedErrorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: ColorTheme.accentColor1,
),
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius),
),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(
color: ColorTheme.accentColor1,
),
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius),
),
disabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: Colors.grey,
),
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius),
),
hintStyle: TextStyle(
color: ColorTheme.secondaryColor,
fontSize: Sizes.contentText,
),
labelStyle: TextStyle(
color: ColorTheme.secondaryColor,
fontSize: Sizes.contentText,
),
contentPadding: EdgeInsets.symmetric(
horizontal: Sizes.contentHorizontal,
vertical: Sizes.contentVertical,
),
hintText: hintText,
labelText: hintText,
errorStyle: TextStyle(
color: ColorTheme.accentColor1,
),
),
validator: validation,
onSaved: (val) => textController.text = val ?? "",
);
}
}
import 'package:detector/common/constants/size_constants.dart';
import 'package:detector/presentation/themes/color_theme.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:loading_indicator/loading_indicator.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
class PrimaryButton extends StatelessWidget {
final String text;
final VoidCallback function;
final bool loading;
final bool altStyle;
final double scale;
const PrimaryButton({
Key? key,
required this.text,
required this.function,
this.loading = false,
this.altStyle = false,
this.scale = 1.0,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Material(
elevation: 5,
borderRadius: BorderRadius.circular(Sizes.buttonTextFieldRadius * scale),
child: InkWell(
borderRadius:
BorderRadius.circular(Sizes.buttonTextFieldRadius * scale),
onTap: function,
child: Ink(
padding: EdgeInsets.symmetric(
horizontal: Sizes.contentHorizontal * scale,
vertical: Sizes.contentVertical * scale,
),
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(Sizes.buttonTextFieldRadius * scale),
color:
altStyle ? ColorTheme.fadedTextColor : ColorTheme.buttonColor,
),
child: Center(
child: !loading
? Text(
text,
style: GoogleFonts.bebasNeue(
textStyle: TextStyle(
color: altStyle
? ColorTheme.buttonTextColor
: ColorTheme.buttonTextColor,
fontSize: Sizes.buttonText * scale,
fontWeight: FontWeight.w900,
letterSpacing: 3,
wordSpacing: 5,
),
),
)
: Container(
height: Sizes.buttonText * scale + 3.sp,
child: LoadingIndicator(
indicatorType: Indicator.ballBeat,
color: altStyle
? ColorTheme.primaryColor
: ColorTheme.buttonTextColor,
),
),
),
),
),
);
}
}
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
async:
dependency: transitive
description:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.8.1"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
bot_toast:
dependency: "direct main"
description:
name: bot_toast
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.1"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.1"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
cloud_firestore:
dependency: "direct main"
description:
name: cloud_firestore
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.2"
cloud_firestore_platform_interface:
dependency: transitive
description:
name: cloud_firestore_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "5.1.2"
cloud_firestore_web:
dependency: transitive
description:
name: cloud_firestore_web
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.2"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.3"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
ffi:
dependency: transitive
description:
name: ffi
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
file:
dependency: transitive
description:
name: file
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.2"
firebase_auth:
dependency: "direct main"
description:
name: firebase_auth
url: "https://pub.dartlang.org"
source: hosted
version: "1.4.1"
firebase_auth_platform_interface:
dependency: transitive
description:
name: firebase_auth_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "4.3.1"
firebase_auth_web:
dependency: transitive
description:
name: firebase_auth_web
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.1"
firebase_core:
dependency: "direct main"
description:
name: firebase_core
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
firebase_core_platform_interface:
dependency: transitive
description:
name: firebase_core_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.1"
firebase_core_web:
dependency: transitive
description:
name: firebase_core_web
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_inappwebview:
dependency: transitive
description:
name: flutter_inappwebview
url: "https://pub.dartlang.org"
source: hosted
version: "5.3.2"
flutter_screenutil:
dependency: "direct main"
description:
name: flutter_screenutil
url: "https://pub.dartlang.org"
source: hosted
version: "5.0.0+2"
flutter_staggered_animations:
dependency: "direct main"
description:
name: flutter_staggered_animations
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
flutter_svg:
dependency: "direct main"
description:
name: flutter_svg
url: "https://pub.dartlang.org"
source: hosted
version: "0.22.0"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
google_fonts:
dependency: "direct main"
description:
name: google_fonts
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
http:
dependency: transitive
description:
name: http
url: "https://pub.dartlang.org"
source: hosted
version: "0.13.3"
http_parser:
dependency: transitive
description:
name: http_parser
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.0"
intl:
dependency: "direct main"
description:
name: intl
url: "https://pub.dartlang.org"
source: hosted
version: "0.17.0"
js:
dependency: transitive
description:
name: js
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.3"
loading_indicator:
dependency: "direct main"
description:
name: loading_indicator
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.10"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.7.0"
nested:
dependency: transitive
description:
name: nested
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
path_drawing:
dependency: transitive
description:
name: path_drawing
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.1"
path_parsing:
dependency: transitive
description:
name: path_parsing
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.1"
path_provider:
dependency: transitive
description:
name: path_provider
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.2"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
path_provider_macos:
dependency: transitive
description:
name: path_provider_macos
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
pedantic:
dependency: transitive
description:
name: pedantic
url: "https://pub.dartlang.org"
source: hosted
version: "1.11.1"
petitparser:
dependency: transitive
description:
name: petitparser
url: "https://pub.dartlang.org"
source: hosted
version: "4.3.0"
platform:
dependency: transitive
description:
name: platform
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.0"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
process:
dependency: transitive
description:
name: process
url: "https://pub.dartlang.org"
source: hosted
version: "4.2.1"
provider:
dependency: "direct main"
description:
name: provider
url: "https://pub.dartlang.org"
source: hosted
version: "5.0.0"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
source_span:
dependency: transitive
description:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "1.10.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.2"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
win32:
dependency: transitive
description:
name: win32
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.4"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.0"
xml:
dependency: transitive
description:
name: xml
url: "https://pub.dartlang.org"
source: hosted
version: "5.3.0"
youtube_player_flutter:
dependency: "direct main"
description:
name: youtube_player_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "8.0.0"
sdks:
dart: ">=2.14.0 <3.0.0"
flutter: ">=1.24.0-7.0"
name: detector
description: A new Flutter project.
# The following line prevents the package from being accidentally published to
# pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.0+1
environment:
sdk: ">=2.12.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
provider: ^5.0.0
firebase_core: ^1.3.0
firebase_auth: ^1.4.1
cloud_firestore: ^2.2.2
loading_indicator: ^2.1.1
intl: ^0.17.0
bot_toast: ^4.0.1
flutter_screenutil: ^5.0.0+2
google_fonts: ^2.1.0
flutter_staggered_animations: ^1.0.0
flutter_svg: ^0.22.0
youtube_player_flutter: ^8.0.0
dev_dependencies:
flutter_test:
sdk: flutter
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter.
flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
assets:
- assets/images/
- assets/icons/
- assets/images/emoji/
- assets/images/face/
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware.
# For details regarding adding assets from package dependencies, see
# https://flutter.dev/assets-and-images/#from-packages
# To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:detector/main.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(MyApp());
// Verify that our counter starts at 0.
expect(find.text('0'), findsOneWidget);
expect(find.text('1'), findsNothing);
// Tap the '+' icon and trigger a frame.
await tester.tap(find.byIcon(Icons.add));
await tester.pump();
// Verify that our counter has incremented.
expect(find.text('0'), findsNothing);
expect(find.text('1'), findsOneWidget);
});
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment