Commit 4269bf82 authored by A.P.R.C. Abeyrathna's avatar A.P.R.C. Abeyrathna

Merge branch 'IT19179568' into 'master'

Adding base application and the MQTT encryption scripts

See merge request !8
parents ab4c046b 5694faf9
# 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
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
# Default ignored files
/shelf/
/workspace.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="11" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<targetSelectedWithDropDown>
<Target>
<type value="QUICK_BOOT_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="C:\Android\.android\avd\Pixel_5_API_33.avd" />
</Key>
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2022-10-07T13:30:19.869460Z" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RenderSettings">
<option name="useLiveRendering" value="false" />
</component>
</project>
\ No newline at end of file
# 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: f4abaa0735eba4dfd8f33f73363911d63931fe03
channel: stable
project_type: app
Date,Time,Day,Special,Congestion,Drving Speed,Stops,Weather,Distance,Travel Time
1/1/2019,6,Sunday,No,5,40,14,25,14.7,56
1/2/2019,7,Sunday,No,8,40,14,27,14.7,55
1/3/2019,8,Sunday,No,9,40,14,28,14.7,55
1/4/2019,9,Sunday,No,7,40,14,29,14.7,56
1/5/2019,10,Sunday,No,6,40,14,29,14.7,56
1/6/2019,11,Sunday,No,4,40,14,30,14.7,56
1/7/2019,12,Sunday,No,4,40,14,30,14.7,56
1/8/2019,13,Sunday,No,4,40,14,30,14.7,56
1/9/2019,14,Sunday,No,8,40,14,30,14.7,56
1/10/2019,15,Sunday,No,8,40,14,29,14.7,56
1/11/2019,16,Sunday,Yes,6,40,14,29,14.7,56
1/12/2019,17,Sunday,No,7,40,14,28,14.7,56
1/13/2019,18,Sunday,No,8,40,14,27,14.7,56
1/14/2019,19,Sunday,No,9,40,14,27,14.7,71
1/15/2019,20,Sunday,No,6,40,14,26,14.7,73
1/16/2019,21,Sunday,No,6,40,14,26,14.7,72
1/17/2019,22,Sunday,No,5,40,14,25,14.7,75
1/18/2019,6,Monday,No,5,40,14,25,14.7,56
1/19/2019,7,Monday,No,8,40,14,27,14.7,55
1/20/2019,8,Monday,No,9,40,14,28,14.7,55
1/21/2019,9,Monday,No,7,40,14,29,14.7,56
1/22/2019,10,Monday,No,6,40,14,29,14.7,56
1/23/2019,11,Monday,No,4,40,14,30,14.7,56
1/24/2019,12,Monday,No,4,40,14,30,14.7,56
1/25/2019,13,Monday,No,4,40,14,30,14.7,56
1/26/2019,14,Monday,No,8,40,14,30,14.7,56
1/27/2019,15,Monday,No,8,40,14,29,14.7,56
1/28/2019,16,Monday,Yes,6,40,14,29,14.7,56
1/29/2019,17,Monday,No,7,40,14,28,14.7,56
1/30/2019,18,Monday,No,8,40,14,27,14.7,56
1/31/2019,19,Monday,No,9,40,14,27,14.7,71
2/1/2019,20,Monday,No,6,40,14,26,14.7,73
2/2/2019,21,Monday,No,6,40,14,26,14.7,72
2/3/2019,22,Monday,No,5,40,14,25,14.7,75
2/4/2019,6,Tuesday,No,5,40,14,25,14.7,56
2/5/2019,7,Tuesday,No,8,40,14,27,14.7,55
2/6/2019,8,Tuesday,No,9,40,14,28,14.7,55
2/7/2019,9,Tuesday,No,7,40,14,29,14.7,56
2/8/2019,10,Tuesday,No,6,40,14,29,14.7,56
2/9/2019,11,Tuesday,No,4,40,14,30,14.7,56
2/10/2019,12,Tuesday,No,4,40,14,30,14.7,56
2/11/2019,13,Tuesday,No,4,40,14,30,14.7,56
2/12/2019,14,Tuesday,No,8,40,14,30,14.7,56
2/13/2019,15,Tuesday,No,8,40,14,29,14.7,56
2/14/2019,16,Tuesday,Yes,6,40,14,29,14.7,56
2/15/2019,17,Tuesday,No,7,40,14,28,14.7,56
2/16/2019,18,Tuesday,No,8,40,14,27,14.7,56
2/17/2019,19,Tuesday,No,9,40,14,27,14.7,71
2/18/2019,20,Tuesday,No,6,40,14,26,14.7,73
2/19/2019,21,Tuesday,No,6,40,14,26,14.7,72
2/20/2019,22,Tuesday,No,5,40,14,25,14.7,75
2/21/2019,6,Sunday,No,7,40,0,25,1.2,9
2/22/2019,6,Sunday,No,9,40,0,25,1.2,11
2/23/2019,6,Sunday,No,3,40,1,25,1.2,8
2/24/2019,6,Sunday,No,2,40,0,25,1.2,3
2/25/2019,6,Sunday,No,2,40,1,25,3,3
2/26/2019,17,Sunday,No,9,40,1,25,3,12
2/27/2019,17,Sunday,No,9,40,4,25,4.7,19
2/28/2019,17,Sunday,No,3,40,4,25,4.7,12
3/1/2019,17,Sunday,No,6,40,4,25,4.7,15
3/2/2019,6,Sunday,No,7,40,9,25,7.5,34
3/3/2019,6,Sunday,No,9,40,9,25,7.5,39
3/4/2019,6,Sunday,No,5,40,9,25,7.5,30
3/5/2019,6,Monday,No,5,40,12,25,10.1,36
3/6/2019,6,Monday,No,9,40,12,25,10.1,43
3/7/2019,6,Monday,No,3,40,12,25,10.1,33
3/8/2019,13,Monday,No,5,40,12,25,10.1,36
3/9/2019,13,Monday,No,9,40,12,25,10.1,43
3/10/2019,13,Monday,No,3,40,12,25,10.1,33
3/11/2019,6,Monday,No,5,40,12,25,12.1,43
3/12/2019,6,Monday,No,9,40,12,25,12.1,49
3/13/2019,6,Monday,No,3,40,12,25,12.1,40
3/14/2019,12,Monday,No,5,40,12,25,12.1,43
3/15/2019,12,Monday,No,9,40,12,25,12.1,49
3/16/2019,12,Monday,No,3,40,12,25,12.1,40
3/17/2019,6,Sunday,No,5,40,14,25,14.7,56
3/18/2019,7,Sunday,No,8,40,14,27,14.7,55
3/19/2019,8,Sunday,No,9,40,14,28,14.7,55
3/20/2019,9,Sunday,No,7,40,14,29,14.7,56
3/21/2019,10,Sunday,No,6,40,14,29,14.7,56
3/22/2019,11,Sunday,No,4,40,14,30,14.7,56
3/23/2019,12,Sunday,No,4,40,14,30,14.7,56
3/24/2019,13,Sunday,No,4,40,14,30,14.7,56
3/25/2019,14,Sunday,No,8,40,14,30,14.7,56
3/26/2019,15,Sunday,No,8,40,14,29,14.7,56
3/27/2019,16,Sunday,Yes,6,40,14,29,14.7,56
3/28/2019,17,Sunday,No,7,40,14,28,14.7,56
3/29/2019,18,Sunday,No,8,40,14,27,14.7,56
3/30/2019,19,Sunday,No,9,40,14,27,14.7,71
3/31/2019,20,Sunday,No,6,40,14,26,14.7,73
4/1/2019,21,Sunday,No,6,40,14,26,14.7,72
4/2/2019,22,Sunday,No,5,40,14,25,14.7,75
4/3/2019,6,Monday,No,5,40,14,25,14.7,56
4/4/2019,7,Monday,No,8,40,14,27,14.7,55
4/5/2019,8,Monday,No,9,40,14,28,14.7,55
4/6/2019,9,Monday,No,7,40,14,29,14.7,56
4/7/2019,10,Monday,No,6,40,14,29,14.7,56
4/8/2019,11,Monday,No,4,40,14,30,14.7,56
4/9/2019,12,Monday,No,4,40,14,30,14.7,56
4/10/2019,13,Monday,No,4,40,14,30,14.7,56
4/11/2019,14,Monday,No,8,40,14,30,14.7,56
4/12/2019,15,Monday,No,8,40,14,29,14.7,56
4/13/2019,16,Monday,Yes,6,40,14,29,14.7,56
4/14/2019,17,Monday,No,7,40,14,28,14.7,56
4/15/2019,18,Monday,No,8,40,14,27,14.7,56
4/16/2019,19,Monday,No,9,40,14,27,14.7,71
4/17/2019,20,Monday,No,6,40,14,26,14.7,73
4/18/2019,21,Monday,No,6,40,14,26,14.7,72
4/19/2019,22,Monday,No,5,40,14,25,14.7,75
4/20/2019,6,Tuesday,No,5,40,14,25,14.7,56
4/21/2019,7,Tuesday,No,8,40,14,27,14.7,55
4/22/2019,8,Tuesday,No,9,40,14,28,14.7,55
4/23/2019,9,Tuesday,No,7,40,14,29,14.7,56
4/24/2019,10,Tuesday,No,6,40,14,29,14.7,56
4/25/2019,11,Tuesday,No,4,40,14,30,14.7,56
4/26/2019,12,Tuesday,No,4,40,14,30,14.7,56
4/27/2019,13,Tuesday,No,4,40,14,30,14.7,56
4/28/2019,14,Tuesday,No,8,40,14,30,14.7,56
4/29/2019,15,Tuesday,No,8,40,14,29,14.7,56
4/30/2019,16,Tuesday,Yes,6,40,14,29,14.7,56
5/1/2019,17,Tuesday,No,7,40,14,28,14.7,56
5/2/2019,18,Tuesday,No,8,40,14,27,14.7,56
5/3/2019,19,Tuesday,No,9,40,14,27,14.7,71
5/4/2019,20,Tuesday,No,6,40,14,26,14.7,73
5/5/2019,21,Tuesday,No,6,40,14,26,14.7,72
5/6/2019,22,Tuesday,No,5,40,14,25,14.7,75
5/7/2019,6,Sunday,No,7,40,0,25,1.2,9
5/8/2019,6,Sunday,No,9,40,0,25,1.2,11
5/9/2019,6,Sunday,No,3,40,1,25,1.2,8
5/10/2019,6,Sunday,No,2,40,0,25,1.2,3
5/11/2019,6,Sunday,No,2,40,1,25,3,3
5/12/2019,17,Sunday,No,9,40,1,25,3,12
5/13/2019,17,Sunday,No,9,40,4,25,4.7,19
5/14/2019,17,Sunday,No,3,40,4,25,4.7,12
5/15/2019,17,Sunday,No,6,40,4,25,4.7,15
5/16/2019,6,Sunday,No,7,40,9,25,7.5,34
5/17/2019,6,Sunday,No,9,40,9,25,7.5,39
5/18/2019,6,Sunday,No,5,40,9,25,7.5,30
5/19/2019,6,Monday,No,5,40,12,25,10.1,36
5/20/2019,6,Monday,No,9,40,12,25,10.1,43
5/21/2019,6,Monday,No,3,40,12,25,10.1,33
5/22/2019,13,Monday,No,5,40,12,25,10.1,36
5/23/2019,13,Monday,No,9,40,12,25,10.1,43
5/24/2019,13,Monday,No,3,40,12,25,10.1,33
5/25/2019,6,Monday,No,5,40,12,25,12.1,43
5/26/2019,6,Monday,No,9,40,12,25,12.1,49
5/27/2019,6,Monday,No,3,40,12,25,12.1,40
5/28/2019,12,Monday,No,5,40,12,25,12.1,43
5/29/2019,12,Monday,No,9,40,12,25,12.1,49
5/30/2019,12,Monday,No,3,40,12,25,12.1,40
5/31/2019,6,Sunday,No,5,40,14,25,14.7,56
6/1/2019,7,Sunday,No,8,40,14,27,14.7,55
6/2/2019,8,Sunday,No,9,40,14,28,14.7,55
6/3/2019,9,Sunday,No,7,40,14,29,14.7,56
6/4/2019,10,Sunday,No,6,40,14,29,14.7,56
6/5/2019,11,Sunday,No,4,40,14,30,14.7,56
6/6/2019,12,Sunday,No,4,40,14,30,14.7,56
6/7/2019,13,Sunday,No,4,40,14,30,14.7,56
6/8/2019,14,Sunday,No,8,40,14,30,14.7,56
6/9/2019,15,Sunday,No,8,40,14,29,14.7,56
6/10/2019,16,Sunday,Yes,6,40,14,29,14.7,56
6/11/2019,17,Sunday,No,7,40,14,28,14.7,56
6/12/2019,18,Sunday,No,8,40,14,27,14.7,56
6/13/2019,19,Sunday,No,9,40,14,27,14.7,71
6/14/2019,20,Sunday,No,6,40,14,26,14.7,73
6/15/2019,21,Sunday,No,6,40,14,26,14.7,72
6/16/2019,22,Sunday,No,5,40,14,25,14.7,75
6/17/2019,6,Monday,No,5,40,14,25,14.7,56
6/18/2019,7,Monday,No,8,40,14,27,14.7,55
6/19/2019,8,Monday,No,9,40,14,28,14.7,55
6/20/2019,9,Monday,No,7,40,14,29,14.7,56
6/21/2019,10,Monday,No,6,40,14,29,14.7,56
6/22/2019,11,Monday,No,4,40,14,30,14.7,56
6/23/2019,12,Monday,No,4,40,14,30,14.7,56
6/24/2019,13,Monday,No,4,40,14,30,14.7,56
6/25/2019,14,Monday,No,8,40,14,30,14.7,56
6/26/2019,15,Monday,No,8,40,14,29,14.7,56
6/27/2019,16,Monday,Yes,6,40,14,29,14.7,56
6/28/2019,17,Monday,No,7,40,14,28,14.7,56
6/29/2019,18,Monday,No,8,40,14,27,14.7,56
6/30/2019,19,Monday,No,9,40,14,27,14.7,71
7/1/2019,20,Monday,No,6,40,14,26,14.7,73
7/2/2019,21,Monday,No,6,40,14,26,14.7,72
7/3/2019,22,Monday,No,5,40,14,25,14.7,75
7/4/2019,6,Tuesday,No,5,40,14,25,14.7,56
7/5/2019,7,Tuesday,No,8,40,14,27,14.7,55
7/6/2019,8,Tuesday,No,9,40,14,28,14.7,55
7/7/2019,9,Tuesday,No,7,40,14,29,14.7,56
7/8/2019,10,Tuesday,No,6,40,14,29,14.7,56
7/9/2019,11,Tuesday,No,4,40,14,30,14.7,56
7/10/2019,12,Tuesday,No,4,40,14,30,14.7,56
7/11/2019,13,Tuesday,No,4,40,14,30,14.7,56
7/12/2019,14,Tuesday,No,8,40,14,30,14.7,56
7/13/2019,15,Tuesday,No,8,40,14,29,14.7,56
7/14/2019,16,Tuesday,Yes,6,40,14,29,14.7,56
7/15/2019,17,Tuesday,No,7,40,14,28,14.7,56
7/16/2019,18,Tuesday,No,8,40,14,27,14.7,56
7/17/2019,19,Tuesday,No,9,40,14,27,14.7,71
7/18/2019,20,Tuesday,No,6,40,14,26,14.7,73
7/19/2019,21,Tuesday,No,6,40,14,26,14.7,72
7/20/2019,22,Tuesday,No,5,40,14,25,14.7,75
7/21/2019,6,Sunday,No,7,40,0,25,1.2,9
7/22/2019,6,Sunday,No,9,40,0,25,1.2,11
7/23/2019,6,Sunday,No,3,40,1,25,1.2,8
7/24/2019,6,Sunday,No,2,40,0,25,1.2,3
7/25/2019,6,Sunday,No,2,40,1,25,3,3
7/26/2019,17,Sunday,No,9,40,1,25,3,12
7/27/2019,17,Sunday,No,9,40,4,25,4.7,19
7/28/2019,17,Sunday,No,3,40,4,25,4.7,12
7/29/2019,17,Sunday,No,6,40,4,25,4.7,15
7/30/2019,6,Sunday,No,7,40,9,25,7.5,34
7/31/2019,6,Sunday,No,9,40,9,25,7.5,39
8/1/2019,6,Sunday,No,5,40,9,25,7.5,30
8/2/2019,6,Monday,No,5,40,12,25,10.1,36
8/3/2019,6,Monday,No,9,40,12,25,10.1,43
8/4/2019,6,Monday,No,3,40,12,25,10.1,33
8/5/2019,13,Monday,No,5,40,12,25,10.1,36
8/6/2019,13,Monday,No,9,40,12,25,10.1,43
8/7/2019,13,Monday,No,3,40,12,25,10.1,33
8/8/2019,6,Monday,No,5,40,12,25,12.1,43
8/9/2019,6,Monday,No,9,40,12,25,12.1,49
8/10/2019,6,Monday,No,3,40,12,25,12.1,40
8/11/2019,12,Monday,No,5,40,12,25,12.1,43
8/12/2019,12,Monday,No,9,40,12,25,12.1,49
8/13/2019,12,Monday,No,3,40,12,25,12.1,40
8/14/2019,6,Sunday,No,5,40,14,25,14.7,56
8/15/2019,7,Sunday,No,8,40,14,27,14.7,55
8/16/2019,8,Sunday,No,9,40,14,28,14.7,55
8/17/2019,9,Sunday,No,7,40,14,29,14.7,56
8/18/2019,10,Sunday,No,6,40,14,29,14.7,56
8/19/2019,11,Sunday,No,4,40,14,30,14.7,56
8/20/2019,12,Sunday,No,4,40,14,30,14.7,56
8/21/2019,13,Sunday,No,4,40,14,30,14.7,56
8/22/2019,14,Sunday,No,8,40,14,30,14.7,56
8/23/2019,15,Sunday,No,8,40,14,29,14.7,56
8/24/2019,16,Sunday,Yes,6,40,14,29,14.7,56
8/25/2019,17,Sunday,No,7,40,14,28,14.7,56
8/26/2019,18,Sunday,No,8,40,14,27,14.7,56
8/27/2019,19,Sunday,No,9,40,14,27,14.7,71
8/28/2019,20,Sunday,No,6,40,14,26,14.7,73
8/29/2019,21,Sunday,No,6,40,14,26,14.7,72
8/30/2019,22,Sunday,No,5,40,14,25,14.7,75
8/31/2019,6,Monday,No,5,40,14,25,14.7,56
9/1/2019,7,Monday,No,8,40,14,27,14.7,55
9/2/2019,8,Monday,No,9,40,14,28,14.7,55
9/3/2019,9,Monday,No,7,40,14,29,14.7,56
9/4/2019,10,Monday,No,6,40,14,29,14.7,56
9/5/2019,11,Monday,No,4,40,14,30,14.7,56
9/6/2019,12,Monday,No,4,40,14,30,14.7,56
9/7/2019,13,Monday,No,4,40,14,30,14.7,56
9/8/2019,14,Monday,No,8,40,14,30,14.7,56
9/9/2019,15,Monday,No,8,40,14,29,14.7,56
9/10/2019,16,Monday,Yes,6,40,14,29,14.7,56
9/11/2019,17,Monday,No,7,40,14,28,14.7,56
9/12/2019,18,Monday,No,8,40,14,27,14.7,56
9/13/2019,19,Monday,No,9,40,14,27,14.7,71
9/14/2019,20,Monday,No,6,40,14,26,14.7,73
9/15/2019,21,Monday,No,6,40,14,26,14.7,72
9/16/2019,22,Monday,No,5,40,14,25,14.7,75
9/17/2019,6,Tuesday,No,5,40,14,25,14.7,56
9/18/2019,7,Tuesday,No,8,40,14,27,14.7,55
9/19/2019,8,Tuesday,No,9,40,14,28,14.7,55
9/20/2019,9,Tuesday,No,7,40,14,29,14.7,56
9/21/2019,10,Tuesday,No,6,40,14,29,14.7,56
9/22/2019,11,Tuesday,No,4,40,14,30,14.7,56
9/23/2019,12,Tuesday,No,4,40,14,30,14.7,56
9/24/2019,13,Tuesday,No,4,40,14,30,14.7,56
9/25/2019,14,Tuesday,No,8,40,14,30,14.7,56
9/26/2019,15,Tuesday,No,8,40,14,29,14.7,56
9/27/2019,16,Tuesday,Yes,6,40,14,29,14.7,56
9/28/2019,17,Tuesday,No,7,40,14,28,14.7,56
9/29/2019,18,Tuesday,No,8,40,14,27,14.7,56
9/30/2019,19,Tuesday,No,9,40,14,27,14.7,71
10/1/2019,20,Tuesday,No,6,40,14,26,14.7,73
10/2/2019,21,Tuesday,No,6,40,14,26,14.7,72
10/3/2019,22,Tuesday,No,5,40,14,25,14.7,75
10/4/2019,6,Sunday,No,7,40,0,25,1.2,9
10/5/2019,6,Sunday,No,9,40,0,25,1.2,11
10/6/2019,6,Sunday,No,3,40,1,25,1.2,8
10/7/2019,6,Sunday,No,2,40,0,25,1.2,3
10/8/2019,6,Sunday,No,2,40,1,25,3,3
10/9/2019,17,Sunday,No,9,40,1,25,3,12
10/10/2019,17,Sunday,No,9,40,4,25,4.7,19
10/11/2019,17,Sunday,No,3,40,4,25,4.7,12
10/12/2019,17,Sunday,No,6,40,4,25,4.7,15
10/13/2019,6,Sunday,No,7,40,9,25,7.5,34
10/14/2019,6,Sunday,No,9,40,9,25,7.5,39
10/15/2019,6,Sunday,No,5,40,9,25,7.5,30
10/16/2019,6,Monday,No,5,40,12,25,10.1,36
10/17/2019,6,Monday,No,9,40,12,25,10.1,43
10/18/2019,6,Monday,No,3,40,12,25,10.1,33
10/19/2019,13,Monday,No,5,40,12,25,10.1,36
10/20/2019,13,Monday,No,9,40,12,25,10.1,43
10/21/2019,13,Monday,No,3,40,12,25,10.1,33
10/22/2019,6,Monday,No,5,40,12,25,12.1,43
10/23/2019,6,Monday,No,9,40,12,25,12.1,49
10/24/2019,6,Monday,No,3,40,12,25,12.1,40
10/25/2019,12,Monday,No,5,40,12,25,12.1,43
10/26/2019,12,Monday,No,9,40,12,25,12.1,49
10/27/2019,12,Monday,No,3,40,12,25,12.1,40
10/28/2019,6,Sunday,No,5,40,14,25,14.7,56
10/29/2019,7,Sunday,No,8,40,14,27,14.7,55
10/30/2019,8,Sunday,No,9,40,14,28,14.7,55
10/31/2019,9,Sunday,No,7,40,14,29,14.7,56
11/1/2019,10,Sunday,No,6,40,14,29,14.7,56
11/2/2019,11,Sunday,No,4,40,14,30,14.7,56
11/3/2019,12,Sunday,No,4,40,14,30,14.7,56
11/4/2019,13,Sunday,No,4,40,14,30,14.7,56
11/5/2019,14,Sunday,No,8,40,14,30,14.7,56
11/6/2019,15,Sunday,No,8,40,14,29,14.7,56
11/7/2019,16,Sunday,Yes,6,40,14,29,14.7,56
11/8/2019,17,Sunday,No,7,40,14,28,14.7,56
11/9/2019,18,Sunday,No,8,40,14,27,14.7,56
11/10/2019,19,Sunday,No,9,40,14,27,14.7,71
11/11/2019,20,Sunday,No,6,40,14,26,14.7,73
11/12/2019,21,Sunday,No,6,40,14,26,14.7,72
11/13/2019,22,Sunday,No,5,40,14,25,14.7,75
11/14/2019,6,Monday,No,5,40,14,25,14.7,56
11/15/2019,7,Monday,No,8,40,14,27,14.7,55
11/16/2019,8,Monday,No,9,40,14,28,14.7,55
11/17/2019,9,Monday,No,7,40,14,29,14.7,56
11/18/2019,10,Monday,No,6,40,14,29,14.7,56
11/19/2019,11,Monday,No,4,40,14,30,14.7,56
11/20/2019,12,Monday,No,4,40,14,30,14.7,56
11/21/2019,13,Monday,No,4,40,14,30,14.7,56
11/22/2019,14,Monday,No,8,40,14,30,14.7,56
11/23/2019,15,Monday,No,8,40,14,29,14.7,56
11/24/2019,16,Monday,Yes,6,40,14,29,14.7,56
11/25/2019,17,Monday,No,7,40,14,28,14.7,56
11/26/2019,18,Monday,No,8,40,14,27,14.7,56
11/27/2019,19,Monday,No,9,40,14,27,14.7,71
11/28/2019,20,Monday,No,6,40,14,26,14.7,73
11/29/2019,21,Monday,No,6,40,14,26,14.7,72
11/30/2019,22,Monday,No,5,40,14,25,14.7,75
12/1/2019,6,Tuesday,No,5,40,14,25,14.7,56
12/2/2019,7,Tuesday,No,8,40,14,27,14.7,55
12/3/2019,8,Tuesday,No,9,40,14,28,14.7,55
12/4/2019,9,Tuesday,No,7,40,14,29,14.7,56
12/5/2019,10,Tuesday,No,6,40,14,29,14.7,56
12/6/2019,11,Tuesday,No,4,40,14,30,14.7,56
12/7/2019,12,Tuesday,No,4,40,14,30,14.7,56
12/8/2019,13,Tuesday,No,4,40,14,30,14.7,56
12/9/2019,14,Tuesday,No,8,40,14,30,14.7,56
12/10/2019,15,Tuesday,No,8,40,14,29,14.7,56
12/11/2019,16,Tuesday,Yes,6,40,14,29,14.7,56
12/12/2019,17,Tuesday,No,7,40,14,28,14.7,56
12/13/2019,18,Tuesday,No,8,40,14,27,14.7,56
12/14/2019,19,Tuesday,No,9,40,14,27,14.7,71
12/15/2019,20,Tuesday,No,6,40,14,26,14.7,73
12/16/2019,21,Tuesday,No,6,40,14,26,14.7,72
12/17/2019,22,Tuesday,No,5,40,14,25,14.7,75
12/18/2019,6,Sunday,No,7,40,0,25,1.2,9
12/19/2019,6,Sunday,No,9,40,0,25,1.2,11
12/20/2019,6,Sunday,No,3,40,1,25,1.2,8
12/21/2019,6,Sunday,No,2,40,0,25,1.2,3
12/22/2019,6,Sunday,No,2,40,1,25,3,3
12/23/2019,17,Sunday,No,9,40,1,25,3,12
12/24/2019,17,Sunday,No,9,40,4,25,4.7,19
12/25/2019,17,Sunday,No,3,40,4,25,4.7,12
12/26/2019,17,Sunday,No,6,40,4,25,4.7,15
12/27/2019,6,Sunday,No,7,40,9,25,7.5,34
12/28/2019,6,Sunday,No,9,40,9,25,7.5,39
12/29/2019,6,Sunday,No,5,40,9,25,7.5,30
12/30/2019,6,Monday,No,5,40,12,25,10.1,36
12/31/2019,6,Monday,No,9,40,12,25,10.1,43
1/1/2020,6,Monday,No,3,40,12,25,10.1,33
1/2/2020,13,Monday,No,5,40,12,25,10.1,36
1/3/2020,13,Monday,No,9,40,12,25,10.1,43
1/4/2020,13,Monday,No,3,40,12,25,10.1,33
1/5/2020,6,Monday,No,5,40,12,25,12.1,43
1/6/2020,6,Monday,No,9,40,12,25,12.1,49
1/7/2020,6,Monday,No,3,40,12,25,12.1,40
1/8/2020,12,Monday,No,5,40,12,25,12.1,43
1/9/2020,12,Monday,No,9,40,12,25,12.1,49
1/10/2020,12,Monday,No,3,40,12,25,12.1,40
1/11/2020,6,Sunday,No,5,40,14,25,14.7,56
1/12/2020,7,Sunday,No,8,40,14,27,14.7,55
1/13/2020,8,Sunday,No,9,40,14,28,14.7,55
1/14/2020,9,Sunday,No,7,40,14,29,14.7,56
1/15/2020,10,Sunday,No,6,40,14,29,14.7,56
1/16/2020,11,Sunday,No,4,40,14,30,14.7,56
1/17/2020,12,Sunday,No,4,40,14,30,14.7,56
1/18/2020,13,Sunday,No,4,40,14,30,14.7,56
1/19/2020,14,Sunday,No,8,40,14,30,14.7,56
1/20/2020,15,Sunday,No,8,40,14,29,14.7,56
1/21/2020,16,Sunday,Yes,6,40,14,29,14.7,56
1/22/2020,17,Sunday,No,7,40,14,28,14.7,56
1/23/2020,18,Sunday,No,8,40,14,27,14.7,56
1/24/2020,19,Sunday,No,9,40,14,27,14.7,71
1/25/2020,20,Sunday,No,6,40,14,26,14.7,73
1/26/2020,21,Sunday,No,6,40,14,26,14.7,72
1/27/2020,22,Sunday,No,5,40,14,25,14.7,75
1/28/2020,6,Monday,No,5,40,14,25,14.7,56
1/29/2020,7,Monday,No,8,40,14,27,14.7,55
1/30/2020,8,Monday,No,9,40,14,28,14.7,55
1/31/2020,9,Monday,No,7,40,14,29,14.7,56
2/1/2020,10,Monday,No,6,40,14,29,14.7,56
2/2/2020,11,Monday,No,4,40,14,30,14.7,56
2/3/2020,12,Monday,No,4,40,14,30,14.7,56
2/4/2020,13,Monday,No,4,40,14,30,14.7,56
2/5/2020,14,Monday,No,8,40,14,30,14.7,56
2/6/2020,15,Monday,No,8,40,14,29,14.7,56
2/7/2020,16,Monday,Yes,6,40,14,29,14.7,56
2/8/2020,17,Monday,No,7,40,14,28,14.7,56
2/9/2020,18,Monday,No,8,40,14,27,14.7,56
2/10/2020,19,Monday,No,9,40,14,27,14.7,71
2/11/2020,20,Monday,No,6,40,14,26,14.7,73
2/12/2020,21,Monday,No,6,40,14,26,14.7,72
2/13/2020,22,Monday,No,5,40,14,25,14.7,75
2/14/2020,6,Tuesday,No,5,40,14,25,14.7,56
2/15/2020,7,Tuesday,No,8,40,14,27,14.7,55
2/16/2020,8,Tuesday,No,9,40,14,28,14.7,55
2/17/2020,9,Tuesday,No,7,40,14,29,14.7,56
2/18/2020,10,Tuesday,No,6,40,14,29,14.7,56
2/19/2020,11,Tuesday,No,4,40,14,30,14.7,56
2/20/2020,12,Tuesday,No,4,40,14,30,14.7,56
2/21/2020,13,Tuesday,No,4,40,14,30,14.7,56
2/22/2020,14,Tuesday,No,8,40,14,30,14.7,56
2/23/2020,15,Tuesday,No,8,40,14,29,14.7,56
2/24/2020,16,Tuesday,Yes,6,40,14,29,14.7,56
2/25/2020,17,Tuesday,No,7,40,14,28,14.7,56
2/26/2020,18,Tuesday,No,8,40,14,27,14.7,56
2/27/2020,19,Tuesday,No,9,40,14,27,14.7,71
2/28/2020,20,Tuesday,No,6,40,14,26,14.7,73
2/29/2020,21,Tuesday,No,6,40,14,26,14.7,72
3/1/2020,22,Tuesday,No,5,40,14,25,14.7,75
3/2/2020,6,Sunday,No,7,40,0,25,1.2,9
3/3/2020,6,Sunday,No,9,40,0,25,1.2,11
3/4/2020,6,Sunday,No,3,40,1,25,1.2,8
3/5/2020,6,Sunday,No,2,40,0,25,1.2,3
3/6/2020,6,Sunday,No,2,40,1,25,3,3
3/7/2020,17,Sunday,No,9,40,1,25,3,12
3/8/2020,17,Sunday,No,9,40,4,25,4.7,19
3/9/2020,17,Sunday,No,3,40,4,25,4.7,12
3/10/2020,17,Sunday,No,6,40,4,25,4.7,15
3/11/2020,6,Sunday,No,7,40,9,25,7.5,34
3/12/2020,6,Sunday,No,9,40,9,25,7.5,39
3/13/2020,6,Sunday,No,5,40,9,25,7.5,30
3/14/2020,6,Monday,No,5,40,12,25,10.1,36
3/15/2020,6,Monday,No,9,40,12,25,10.1,43
3/16/2020,6,Monday,No,3,40,12,25,10.1,33
3/17/2020,13,Monday,No,5,40,12,25,10.1,36
3/18/2020,13,Monday,No,9,40,12,25,10.1,43
3/19/2020,13,Monday,No,3,40,12,25,10.1,33
3/20/2020,6,Monday,No,5,40,12,25,12.1,43
3/21/2020,6,Monday,No,9,40,12,25,12.1,49
3/22/2020,6,Monday,No,3,40,12,25,12.1,40
3/23/2020,12,Monday,No,5,40,12,25,12.1,43
3/24/2020,12,Monday,No,9,40,12,25,12.1,49
3/25/2020,12,Monday,No,3,40,12,25,12.1,40
3/26/2020,6,Sunday,No,5,40,14,25,14.7,56
3/27/2020,7,Sunday,No,8,40,14,27,14.7,55
3/28/2020,8,Sunday,No,9,40,14,28,14.7,55
3/29/2020,9,Sunday,No,7,40,14,29,14.7,56
3/30/2020,10,Sunday,No,6,40,14,29,14.7,56
3/31/2020,11,Sunday,No,4,40,14,30,14.7,56
4/1/2020,12,Sunday,No,4,40,14,30,14.7,56
4/2/2020,13,Sunday,No,4,40,14,30,14.7,56
4/3/2020,14,Sunday,No,8,40,14,30,14.7,56
4/4/2020,15,Sunday,No,8,40,14,29,14.7,56
4/5/2020,16,Sunday,Yes,6,40,14,29,14.7,56
4/6/2020,17,Sunday,No,7,40,14,28,14.7,56
4/7/2020,18,Sunday,No,8,40,14,27,14.7,56
4/8/2020,19,Sunday,No,9,40,14,27,14.7,71
4/9/2020,20,Sunday,No,6,40,14,26,14.7,73
4/10/2020,21,Sunday,No,6,40,14,26,14.7,72
4/11/2020,22,Sunday,No,5,40,14,25,14.7,75
4/12/2020,6,Monday,No,5,40,14,25,14.7,56
4/13/2020,7,Monday,No,8,40,14,27,14.7,55
4/14/2020,8,Monday,No,9,40,14,28,14.7,55
4/15/2020,9,Monday,No,7,40,14,29,14.7,56
4/16/2020,10,Monday,No,6,40,14,29,14.7,56
4/17/2020,11,Monday,No,4,40,14,30,14.7,56
4/18/2020,12,Monday,No,4,40,14,30,14.7,56
4/19/2020,13,Monday,No,4,40,14,30,14.7,56
4/20/2020,14,Monday,No,8,40,14,30,14.7,56
4/21/2020,15,Monday,No,8,40,14,29,14.7,56
4/22/2020,16,Monday,Yes,6,40,14,29,14.7,56
4/23/2020,17,Monday,No,7,40,14,28,14.7,56
4/24/2020,18,Monday,No,8,40,14,27,14.7,56
4/25/2020,19,Monday,No,9,40,14,27,14.7,71
4/26/2020,20,Monday,No,6,40,14,26,14.7,73
4/27/2020,21,Monday,No,6,40,14,26,14.7,72
4/28/2020,22,Monday,No,5,40,14,25,14.7,75
4/29/2020,6,Tuesday,No,5,40,14,25,14.7,56
4/30/2020,7,Tuesday,No,8,40,14,27,14.7,55
5/1/2020,8,Tuesday,No,9,40,14,28,14.7,55
5/2/2020,9,Tuesday,No,7,40,14,29,14.7,56
5/3/2020,10,Tuesday,No,6,40,14,29,14.7,56
5/4/2020,11,Tuesday,No,4,40,14,30,14.7,56
5/5/2020,12,Tuesday,No,4,40,14,30,14.7,56
5/6/2020,13,Tuesday,No,4,40,14,30,14.7,56
5/7/2020,14,Tuesday,No,8,40,14,30,14.7,56
5/8/2020,15,Tuesday,No,8,40,14,29,14.7,56
5/9/2020,16,Tuesday,Yes,6,40,14,29,14.7,56
5/10/2020,17,Tuesday,No,7,40,14,28,14.7,56
5/11/2020,18,Tuesday,No,8,40,14,27,14.7,56
5/12/2020,19,Tuesday,No,9,40,14,27,14.7,71
5/13/2020,20,Tuesday,No,6,40,14,26,14.7,73
5/14/2020,21,Tuesday,No,6,40,14,26,14.7,72
5/15/2020,22,Tuesday,No,5,40,14,25,14.7,75
5/16/2020,6,Sunday,No,7,40,0,25,1.2,9
5/17/2020,6,Sunday,No,9,40,0,25,1.2,11
5/18/2020,6,Sunday,No,3,40,1,25,1.2,8
5/19/2020,6,Sunday,No,2,40,0,25,1.2,3
5/20/2020,6,Sunday,No,2,40,1,25,3,3
5/21/2020,17,Sunday,No,9,40,1,25,3,12
5/22/2020,17,Sunday,No,9,40,4,25,4.7,19
5/23/2020,17,Sunday,No,3,40,4,25,4.7,12
5/24/2020,17,Sunday,No,6,40,4,25,4.7,15
5/25/2020,6,Sunday,No,7,40,9,25,7.5,34
5/26/2020,6,Sunday,No,9,40,9,25,7.5,39
5/27/2020,6,Sunday,No,5,40,9,25,7.5,30
5/28/2020,6,Monday,No,5,40,12,25,10.1,36
5/29/2020,6,Monday,No,9,40,12,25,10.1,43
5/30/2020,6,Monday,No,3,40,12,25,10.1,33
5/31/2020,13,Monday,No,5,40,12,25,10.1,36
6/1/2020,13,Monday,No,9,40,12,25,10.1,43
6/2/2020,13,Monday,No,3,40,12,25,10.1,33
6/3/2020,6,Monday,No,5,40,12,25,12.1,43
6/4/2020,6,Monday,No,9,40,12,25,12.1,49
6/5/2020,6,Monday,No,3,40,12,25,12.1,40
6/6/2020,12,Monday,No,5,40,12,25,12.1,43
6/7/2020,12,Monday,No,9,40,12,25,12.1,49
6/8/2020,12,Monday,No,3,40,12,25,12.1,40
6/9/2020,6,Sunday,No,5,40,14,25,14.7,56
6/10/2020,7,Sunday,No,8,40,14,27,14.7,55
6/11/2020,8,Sunday,No,9,40,14,28,14.7,55
6/12/2020,9,Sunday,No,7,40,14,29,14.7,56
6/13/2020,10,Sunday,No,6,40,14,29,14.7,56
6/14/2020,11,Sunday,No,4,40,14,30,14.7,56
6/15/2020,12,Sunday,No,4,40,14,30,14.7,56
6/16/2020,13,Sunday,No,4,40,14,30,14.7,56
6/17/2020,14,Sunday,No,8,40,14,30,14.7,56
6/18/2020,15,Sunday,No,8,40,14,29,14.7,56
6/19/2020,16,Sunday,Yes,6,40,14,29,14.7,56
6/20/2020,17,Sunday,No,7,40,14,28,14.7,56
6/21/2020,18,Sunday,No,8,40,14,27,14.7,56
6/22/2020,19,Sunday,No,9,40,14,27,14.7,71
6/23/2020,20,Sunday,No,6,40,14,26,14.7,73
6/24/2020,21,Sunday,No,6,40,14,26,14.7,72
6/25/2020,22,Sunday,No,5,40,14,25,14.7,75
6/26/2020,6,Monday,No,5,40,14,25,14.7,56
6/27/2020,7,Monday,No,8,40,14,27,14.7,55
6/28/2020,8,Monday,No,9,40,14,28,14.7,55
6/29/2020,9,Monday,No,7,40,14,29,14.7,56
6/30/2020,10,Monday,No,6,40,14,29,14.7,56
7/1/2020,11,Monday,No,4,40,14,30,14.7,56
7/2/2020,12,Monday,No,4,40,14,30,14.7,56
7/3/2020,13,Monday,No,4,40,14,30,14.7,56
7/4/2020,14,Monday,No,8,40,14,30,14.7,56
7/5/2020,15,Monday,No,8,40,14,29,14.7,56
7/6/2020,16,Monday,Yes,6,40,14,29,14.7,56
7/7/2020,17,Monday,No,7,40,14,28,14.7,56
7/8/2020,18,Monday,No,8,40,14,27,14.7,56
7/9/2020,19,Monday,No,9,40,14,27,14.7,71
7/10/2020,20,Monday,No,6,40,14,26,14.7,73
7/11/2020,21,Monday,No,6,40,14,26,14.7,72
7/12/2020,22,Monday,No,5,40,14,25,14.7,75
7/13/2020,6,Tuesday,No,5,40,14,25,14.7,56
7/14/2020,7,Tuesday,No,8,40,14,27,14.7,55
7/15/2020,8,Tuesday,No,9,40,14,28,14.7,55
7/16/2020,9,Tuesday,No,7,40,14,29,14.7,56
7/17/2020,10,Tuesday,No,6,40,14,29,14.7,56
7/18/2020,11,Tuesday,No,4,40,14,30,14.7,56
7/19/2020,12,Tuesday,No,4,40,14,30,14.7,56
7/20/2020,13,Tuesday,No,4,40,14,30,14.7,56
7/21/2020,14,Tuesday,No,8,40,14,30,14.7,56
7/22/2020,15,Tuesday,No,8,40,14,29,14.7,56
7/23/2020,16,Tuesday,Yes,6,40,14,29,14.7,56
7/24/2020,17,Tuesday,No,7,40,14,28,14.7,56
7/25/2020,18,Tuesday,No,8,40,14,27,14.7,56
7/26/2020,19,Tuesday,No,9,40,14,27,14.7,71
7/27/2020,20,Tuesday,No,6,40,14,26,14.7,73
7/28/2020,21,Tuesday,No,6,40,14,26,14.7,72
7/29/2020,22,Tuesday,No,5,40,14,25,14.7,75
7/30/2020,6,Sunday,No,7,40,0,25,1.2,9
7/31/2020,6,Sunday,No,9,40,0,25,1.2,11
8/1/2020,6,Sunday,No,3,40,1,25,1.2,8
8/2/2020,6,Sunday,No,2,40,0,25,1.2,3
8/3/2020,6,Sunday,No,2,40,1,25,3,3
8/4/2020,17,Sunday,No,9,40,1,25,3,12
8/5/2020,17,Sunday,No,9,40,4,25,4.7,19
8/6/2020,17,Sunday,No,3,40,4,25,4.7,12
8/7/2020,17,Sunday,No,6,40,4,25,4.7,15
8/8/2020,6,Sunday,No,7,40,9,25,7.5,34
8/9/2020,6,Sunday,No,9,40,9,25,7.5,39
8/10/2020,6,Sunday,No,5,40,9,25,7.5,30
8/11/2020,6,Monday,No,5,40,12,25,10.1,36
8/12/2020,6,Monday,No,9,40,12,25,10.1,43
8/13/2020,6,Monday,No,3,40,12,25,10.1,33
8/14/2020,13,Monday,No,5,40,12,25,10.1,36
8/15/2020,13,Monday,No,9,40,12,25,10.1,43
8/16/2020,13,Monday,No,3,40,12,25,10.1,33
8/17/2020,6,Monday,No,5,40,12,25,12.1,43
8/18/2020,6,Monday,No,9,40,12,25,12.1,49
8/19/2020,6,Monday,No,3,40,12,25,12.1,40
8/20/2020,12,Monday,No,5,40,12,25,12.1,43
8/21/2020,12,Monday,No,9,40,12,25,12.1,49
8/22/2020,12,Monday,No,3,40,12,25,12.1,40
import time
import paho.mqtt.client as paho
from cryptography.fernet import Fernet
broker = "broker.hivemq.com"
# broker="192.168.1.206"
# define callback
def on_log(client, userdata, level, buf):
print("log: ", buf)
def on_message(client, userdata, message):
# time.sleep(1)
print("receive payload ", message.payload)
decrypted_message = cipher.decrypt(message.payload) # decrypted_message = cipher.decrypt(encrypted_message)
print("\nreceived message =", str(decrypted_message.decode("utf-8")))
client = paho.Client(
"client-pub") # create client object client1.on_publish = on_publish #assign function to callback client1.connect(broker,port) #establish connection client1.publish("house/bulb1","on")
client.on_log = on_log
######
client.on_message = on_message
#####encryption
# cipher_key = Fernet.generate_key()
cipher_key = b'WDrevvK8ZrPn8gmiNFjcOp2xovBr40TCwJlZOyI94IY='
cipher = Fernet(cipher_key)
message = b'on33'
# message = b'the quick brown fox jumps over the lazy dog'
encrypted_message = cipher.encrypt(message)
out_message = encrypted_message.decode() # turn it into a string to send
##
print("connecting to broker ", broker)
client.connect(broker) # connect
print("publishing encrypted message ", encrypted_message)
# out_message="on"
client.publish("house/bulb1", out_message) # publish
time.sleep(4)
client.disconnect() # disconnect
client.loop_stop() # stop loop
import time
import paho.mqtt.client as paho
from cryptography.fernet import Fernet
broker = "broker.hivemq.com"
# define callback
def on_log(client, userdata, level, buf):
print("log: ", buf)
def on_message(client, userdata, message):
# time.sleep(1)
print("receive payload ", message.payload)
if message.payload == encrypted_message:
print("\npublished and received messages are the same")
decrypted_message = cipher.decrypt(message.payload) # decrypted_message = cipher.decrypt(encrypted_message)
print("\nreceived message =", str(decrypted_message.decode("utf-8")))
client = paho.Client("client-001") # create client object client1.on_publish = on_publish
client.on_log = on_log
client.on_message = on_message
# encryption
cipher_key = Fernet.generate_key()
cipher = Fernet(cipher_key)
message = b'on'
# message = b'the quick brown fox jumps over the lazy dog'
encrypted_message = cipher.encrypt(message)
out_message = encrypted_message.decode() # turn it into a string to send
##
print("connecting to broker ", broker)
client.connect(broker) # connect
client.loop_start() # start loop to process received messages
print("subscribing ")
client.subscribe("house/bulb1") # subscribe
time.sleep(2)
print("publishing encrypted message ", encrypted_message)
# message="on"
client.publish("house/bulb1", out_message) # publish
time.sleep(4)
client.disconnect() # disconnect
client.loop_stop() # stop loop
import time
import paho.mqtt.client as paho
from cryptography.fernet import Fernet
broker = "broker.hivemq.com"
# broker="192.168.1.206"
# define callback
def on_log(client, userdata, level, buf):
print("log: ", buf)
def on_message(client, userdata, message):
# time.sleep(1)
print("receive payload ", message.payload)
decrypted_message = cipher.decrypt(message.payload) # decrypted_message = cipher.decrypt(encrypted_message)
print("\nreceived message =", str(decrypted_message.decode("utf-8")))
client = paho.Client(
"client-001") # create client object client1.on_publish = on_publish #assign function
# to callback client1.connect(broker,port) #establish connection client1.publish(
# "house/bulb1","on")
client.on_log = on_log
######
client.on_message = on_message
#####encryption
cipher_key = b'WDrevvK8ZrPn8gmiNFjcOp2xovBr40TCwJlZOyI94IY='
cipher = Fernet(cipher_key)
print("connecting to broker ", broker)
client.connect(broker) # connect
client.loop_start() # start loop to process received messages
print("subscribing ")
client.subscribe("house/bulb1") # subscribe
count = 0
while count < 60:
time.sleep(1)
count += 1
client.disconnect() # disconnect
client.loop_stop() # stop loop
# 2022-020
SMART REAL-TIME TRACKING AND PLANNING SYSTEM FOR PUBLIC TRANSPORTATION VEHICLES
**MAIN OBJECTIVE**
The proposed system aims to provide users with reliable and accurate real time data like bus or train’s live location and an advanced route planner to increase the efficiency and timeliness when travel using public transportation methods.
**RESEARCH QUESTION**
The demand for the public transportation is influenced by factors such as quality of service, fares, travel time, and especially the waiting time and the reliability of service but in most of the cases, unpredictable traffic conditions and temporary closed down roads and under repairing roads may divert traffic to other alternative roads resulting a delay and moreover, certain routes schedule buses in morning and evening to target the office crowd. therefore, not knowing the correct schedules and unpredictable delaying of transportation services may lead serious issues to the commuters such as long delays and longer waiting time at transit places and public transportation service reliability is a typical issue in developing nations' cities. There are various elements to consider when it comes to reliability. The most basic question is whether a service exists at all, and if so, whether it works on a timetable, assuming one exists. The vehicle's own reliability is also important: frequent mechanical failure will subtract significantly from service reliability. In certain cities, buses regularly fail to complete their routes, especially when there are just a few people on board. Therefore in the old system if a person wishes to travel using public transportation, the person must first go to the station and inquire about the train or bus is information from the station manager or timekeepers as the telephone connections are not always up to date and reliable and most of the time due to unforeseen circumstances, if the train or the bus is delayed, commuters are required to remain until the train or the bus returns. People are losing their valuable time and some even have to postpone their scheduled work because of this matter.
The Sri Lankan government concentrates solely on highway development in the transportation sector, but effective monitoring is also required to ensure long-term sustainability. The timekeepers stationed at the main bus stations in major cities monitor and record bus movements. These timekeepers keep track of when buses arrive and depart from the Stand. However, many communities lack bus stops and instead rely on passenger halts/shelters. The remainder of the long route was not properly monitored. Because of human mistakes, the manual technique may result in incorrect recording; also, this paper-based system is often useless. These records are also no longer useful to travelers.
We have conducted a survey (Result is annexed in the Appendix A) of using public transportation means and issues when traveling using above means and we have discovered that a significant percentage of users of all age groups are using public transportation in both bus and train as a regular method of transportation but 98% of the survey volunteers aren't satisfied with current system as the waiting time and cancellations due to unpredicted delays and poorly organized timetables and they are more likely to use an application similar to which is proposed by us. Even though there are real time tracking systems and road assistants available, in our proposed system we provide commuter an advanced route planning system unlike other systems which don't have all the elements altogether to provide more accurate data.
**IT19179568 - A.P.R.C. Abeyrathna****
**1**
Some designers and developers may cram the app with needless features that, in their perspective, would boost the app's attractiveness. When the design isn't unique, though, it has the opposite impact. Overloaded design solutions bore consumers and lead them to exit the program. Many businesses aim to reach out to a large number of people. What works for ten-year-old, however, may not work for fourteen-year-olds and as well as elderly people. This is why it's crucial to examine graphic needs, language utilized, intricacy, and so on. These features should be tuned to appeal to all groups of the target market [9]. When considering a navigation app and also a route planning application, the application must be not complicated but it also needs to do the task correctly.
**2**
Security and privacy are regarded one of the key impediments to the broad expansion and adoption of IoT. The public is not confident that IoT would not compromise user privacy. The IoT security algorithm must address a number of challenges, including safeguarding user privacy, spending less energy in the process, and offering good protection against assaults.
MQTT was not intended with security in mind; instead, it has been utilized in secure, back-end networks for application-specific goals in the past. Other drawbacks of MQTT include its lack of compatibility and the protocol's lack of authentication mechanisms. Clients can transmit a username and password with the CONNECT packet to authenticate with the MQTT Broker. Authentication is available as an option in MQTT. Even when authentication is utilized, encryption is not employed by default, therefore credentials are provided in plain text. MITM attacks may still be used to acquire a user's credentials and location information.
**IT19186566 - O.V.B. Sewmina****
Public transportation is significant for saving time. There is sort of profits of managing a proper transportation system for public people. Major thing is to optimize traffic and reduce fatality rate and environment pollution as well. Some people use to travel by their own vehicles daily due to poor public transportation if the quality can be maintained with a Propper standard statements it is possible to make them use public transportation
There is sort of problems regarding Sri Lankan transportation system. Most common problems can be presented as given below according to a survey performed by us.
According to the survey waiting for a bus or train is a higher issue and people spend too much time in bus halts and train stations and they are not satisfied with this issue. Affecting on their working efficient makes an extra distress in their mind and is not pleasant enough to do their duty well.
The next issue which is coming across the poor transportation system is incorrect timetables. Although timetables are published buses or trains do not work on time or sometimes timetables are not updated according to changes and not coordinated properly. Though there are bus keepers they do not have a proper idea about some absent buses. Therefore, people have to bother about their routes, and they have to inquire for another route instead of usual.
Research plan has been modeled to provide solutions for transportation problems with helping of advanced intelligent route plan which is not implemented in the transportation app. Single integrated app for both buses and trains could be invented which helps people much to manage their best route revolving time duration, distance, and turnings. Including both into single app has a lot of advantages. Sri Lankan major two transportation modes are involved simultaneously for the process in this app. No need to switch into another app for a single task. Each can be done with higher efficient.
**IT19177342 - Nirman M.A.H.L.****
In several studies, it can only be observed indicating the right direction of the vehicle's travel. However, we feel that this method is insufficient for this public transit system. This is because there is a greater risk for users in our system to display the present position of an irrelevant vehicle that is traveling for a purpose unrelated to their route. Case is tracking device is turned on and it is unable to detect the relevant path, to prevent the vehicle from being displayed on the map, the tracking device must be turned off (normal procedure). The adoption of such procedures may cast doubt on the reliability of the entire system. Because if the driver fails to conduct this function or fails to restart the disabled device. A particular technique is required to reduce such faults and preserve the overall system's high reliability. This is addressed in some detail in the first literature review using RFID [4]. But due to the high cost and difficulty of maintaining such a system, it is not practical. This suggested approach has ability to determine that the vehicle is driving on the appropriate route without the assistance of any hardware device or the driver’s involvement, and that it has arrived at the main stops with the help of geo-fencing.
**IT19242996 - Wickramage W.P.S.M****
Public transport services such as train/bus main public transportation methods in Sri Lanka. According to the Daily Mirror of 12th October 2015, over 500,000 vehicles enter Colombo every day, carrying over 1.8 million people. Out of around 500,000 vehicles, 87% (443,000) of the vehicles are private vehicles that carry about 44% of the total passengers while the majority of the passengers (51%) use public transport to reach Colombo [9]. Bus arrival time prediction more accurately and transits by transits is the main focus of the prediction.
The main research question is,
How to predict a more accurate arrival time?
According to the main research problem, GPRS sensors, Input parameters get using GPS Module data and then machine learning algorithms to predict arrival time so, require more other inputs to accomplish that objective.
Parameters
▪️ Weekend and Special Days
▪️ Red signal Duration
▪️ Driver Mode
▪️ Weather conditions and Accidents
▪️ Waiting Time
▪️ Distance
▪️ Road Condition
▪️ Traffic
Sub Research Questions: -
How to get input parameters?
How to predict arrival time using machine learning algorithms?
To achieve more accurate time prediction, need to consider all the necessary parameters. Collect all the parameters details by GPS trackers and other sources like google reports. Also need historical data of all the parameters. Calculating accurate time prediction needs more accurate input details. Providing all the parameter details and historical data can train the Artificial intelligent algorithms, after testing the input and testing the improvement of the results.
****RESEARCH OBJECTIVES**
**IT19179568 - A.P.R.C. Abeyrathna****
**1**
My major focus while evaluating the objective and subjective is to promote client happiness and loyalty via usefulness, simplicity of use, and enjoyment. In order to increase user engagement. To make the user's experience pleasant throughout the program. In order to improve efficiency and production. Make the app more user-friendly and extend the client base to maximize income generation prospects.
**2**
Enhance and encrypt the publish payload. An encryption technique must be created in order to solve this problem. At the application layer, Payload Encryption offers security. Payload Encryption is used when a programmer does not want to communicate data in plain text but does not want to employ TLS security. This adds an extra degree of security because all application data is safeguarded and encrypted this manner as well. Instead of complete transport level encryption, payload encryption encrypts the actual application data. The payload or message is still encrypted in this manner, even while the topic is unencrypted.
**IT19186566 - O.V.B. Sewmina****
Major purpose is to incorporate a sophisticate intelligence-based advanced route planning system which is designed by optimizing existing algorithms with integration of both bus and train paths which is not found out with other systems.Once the best route is found, whole fee for the routing also is calculated simultaneously for a better service. This is one of the most significant factors of this app. It’s pretty much easy to distinguish this app with others because this suggests a well optimized rout even with fee. Alternative paths are programmed to be shown distinctly with respect to minimum fee, shortest distance and number of interchanges.
**IT19177342 - Nirman M.A.H.L.****
Creating an automatic vehicle location system that uses GPS for positioning information and GSM/GPRS for data transfer that has the following features:
After a defined time, interval the vehicle's position information (latitude and longitude) is acquired.
Transmission of the vehicle's position and other data (ignition status, speed) to the monitoring station/Tracking server after a predetermined period of time.
clever enough to detect whether a vehicle is traveling on a given route based on the difficulties discussed. Similarly, if a vehicle is moving on a road that is unrelated to it, the system may detect it and suspend showing it on the map by using road geo-fencing technology. The goal of this application's development is to get it implemented on the public transportation system.
**IT19242996 - Wickramage W.P.S.M****
Predict arrival time for the total trip. Predict arrival time for the bus route. Next bus details and arrival time. Maintain the accuracy of the prediction.
**OTHER NECESSARY INFORMATION**
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"data = pd.read_csv('BusTravelData.csv')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Date</th>\n",
" <th>Time</th>\n",
" <th>Day</th>\n",
" <th>Special</th>\n",
" <th>Congestion</th>\n",
" <th>Drving Speed</th>\n",
" <th>Stops</th>\n",
" <th>Weather</th>\n",
" <th>Distance</th>\n",
" <th>Travel Time</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1/1/2019</td>\n",
" <td>6</td>\n",
" <td>Sunday</td>\n",
" <td>No</td>\n",
" <td>5</td>\n",
" <td>40</td>\n",
" <td>14</td>\n",
" <td>25</td>\n",
" <td>14.7</td>\n",
" <td>56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1/2/2019</td>\n",
" <td>7</td>\n",
" <td>Sunday</td>\n",
" <td>No</td>\n",
" <td>8</td>\n",
" <td>40</td>\n",
" <td>14</td>\n",
" <td>27</td>\n",
" <td>14.7</td>\n",
" <td>55</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1/3/2019</td>\n",
" <td>8</td>\n",
" <td>Sunday</td>\n",
" <td>No</td>\n",
" <td>9</td>\n",
" <td>40</td>\n",
" <td>14</td>\n",
" <td>28</td>\n",
" <td>14.7</td>\n",
" <td>55</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1/4/2019</td>\n",
" <td>9</td>\n",
" <td>Sunday</td>\n",
" <td>No</td>\n",
" <td>7</td>\n",
" <td>40</td>\n",
" <td>14</td>\n",
" <td>29</td>\n",
" <td>14.7</td>\n",
" <td>56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1/5/2019</td>\n",
" <td>10</td>\n",
" <td>Sunday</td>\n",
" <td>No</td>\n",
" <td>6</td>\n",
" <td>40</td>\n",
" <td>14</td>\n",
" <td>29</td>\n",
" <td>14.7</td>\n",
" <td>56</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Date Time Day Special Congestion Drving Speed Stops Weather \\\n",
"0 1/1/2019 6 Sunday No 5 40 14 25 \n",
"1 1/2/2019 7 Sunday No 8 40 14 27 \n",
"2 1/3/2019 8 Sunday No 9 40 14 28 \n",
"3 1/4/2019 9 Sunday No 7 40 14 29 \n",
"4 1/5/2019 10 Sunday No 6 40 14 29 \n",
"\n",
" Distance Travel Time \n",
"0 14.7 56 \n",
"1 14.7 55 \n",
"2 14.7 55 \n",
"3 14.7 56 \n",
"4 14.7 56 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Date</th>\n",
" <th>Time</th>\n",
" <th>Day</th>\n",
" <th>Special</th>\n",
" <th>Congestion</th>\n",
" <th>Drving Speed</th>\n",
" <th>Stops</th>\n",
" <th>Weather</th>\n",
" <th>Distance</th>\n",
" <th>Travel Time</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>595</th>\n",
" <td>8/18/2020</td>\n",
" <td>6</td>\n",
" <td>Monday</td>\n",
" <td>No</td>\n",
" <td>9</td>\n",
" <td>40</td>\n",
" <td>12</td>\n",
" <td>25</td>\n",
" <td>12.1</td>\n",
" <td>49</td>\n",
" </tr>\n",
" <tr>\n",
" <th>596</th>\n",
" <td>8/19/2020</td>\n",
" <td>6</td>\n",
" <td>Monday</td>\n",
" <td>No</td>\n",
" <td>3</td>\n",
" <td>40</td>\n",
" <td>12</td>\n",
" <td>25</td>\n",
" <td>12.1</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>597</th>\n",
" <td>8/20/2020</td>\n",
" <td>12</td>\n",
" <td>Monday</td>\n",
" <td>No</td>\n",
" <td>5</td>\n",
" <td>40</td>\n",
" <td>12</td>\n",
" <td>25</td>\n",
" <td>12.1</td>\n",
" <td>43</td>\n",
" </tr>\n",
" <tr>\n",
" <th>598</th>\n",
" <td>8/21/2020</td>\n",
" <td>12</td>\n",
" <td>Monday</td>\n",
" <td>No</td>\n",
" <td>9</td>\n",
" <td>40</td>\n",
" <td>12</td>\n",
" <td>25</td>\n",
" <td>12.1</td>\n",
" <td>49</td>\n",
" </tr>\n",
" <tr>\n",
" <th>599</th>\n",
" <td>8/22/2020</td>\n",
" <td>12</td>\n",
" <td>Monday</td>\n",
" <td>No</td>\n",
" <td>3</td>\n",
" <td>40</td>\n",
" <td>12</td>\n",
" <td>25</td>\n",
" <td>12.1</td>\n",
" <td>40</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Date Time Day Special Congestion Drving Speed Stops \\\n",
"595 8/18/2020 6 Monday No 9 40 12 \n",
"596 8/19/2020 6 Monday No 3 40 12 \n",
"597 8/20/2020 12 Monday No 5 40 12 \n",
"598 8/21/2020 12 Monday No 9 40 12 \n",
"599 8/22/2020 12 Monday No 3 40 12 \n",
"\n",
" Weather Distance Travel Time \n",
"595 25 12.1 49 \n",
"596 25 12.1 40 \n",
"597 25 12.1 43 \n",
"598 25 12.1 49 \n",
"599 25 12.1 40 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.tail()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(600, 10)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.shape"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of rows 600\n",
"Number of columns 10\n"
]
}
],
"source": [
"print(\"Number of rows\",data.shape[0])\n",
"print(\"Number of columns\",data.shape[1])"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 600 entries, 0 to 599\n",
"Data columns (total 10 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Date 600 non-null object \n",
" 1 Time 600 non-null int64 \n",
" 2 Day 600 non-null object \n",
" 3 Special 600 non-null object \n",
" 4 Congestion 600 non-null int64 \n",
" 5 Drving Speed 600 non-null int64 \n",
" 6 Stops 600 non-null int64 \n",
" 7 Weather 600 non-null int64 \n",
" 8 Distance 600 non-null float64\n",
" 9 Travel Time 600 non-null int64 \n",
"dtypes: float64(1), int64(6), object(3)\n",
"memory usage: 47.0+ KB\n"
]
}
],
"source": [
"data.info()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Time</th>\n",
" <th>Congestion</th>\n",
" <th>Drving Speed</th>\n",
" <th>Stops</th>\n",
" <th>Weather</th>\n",
" <th>Distance</th>\n",
" <th>Travel Time</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>600.000000</td>\n",
" <td>600.000000</td>\n",
" <td>600.0</td>\n",
" <td>600.000000</td>\n",
" <td>600.000000</td>\n",
" <td>600.00000</td>\n",
" <td>600.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>12.546667</td>\n",
" <td>6.253333</td>\n",
" <td>40.0</td>\n",
" <td>12.000000</td>\n",
" <td>27.000000</td>\n",
" <td>12.40400</td>\n",
" <td>49.786667</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>5.184524</td>\n",
" <td>2.035369</td>\n",
" <td>0.0</td>\n",
" <td>4.033251</td>\n",
" <td>1.961227</td>\n",
" <td>4.05381</td>\n",
" <td>17.968470</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>6.000000</td>\n",
" <td>2.000000</td>\n",
" <td>40.0</td>\n",
" <td>0.000000</td>\n",
" <td>25.000000</td>\n",
" <td>1.20000</td>\n",
" <td>3.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>7.000000</td>\n",
" <td>5.000000</td>\n",
" <td>40.0</td>\n",
" <td>12.000000</td>\n",
" <td>25.000000</td>\n",
" <td>12.10000</td>\n",
" <td>43.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>12.000000</td>\n",
" <td>6.000000</td>\n",
" <td>40.0</td>\n",
" <td>14.000000</td>\n",
" <td>27.000000</td>\n",
" <td>14.70000</td>\n",
" <td>56.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>17.000000</td>\n",
" <td>8.000000</td>\n",
" <td>40.0</td>\n",
" <td>14.000000</td>\n",
" <td>29.000000</td>\n",
" <td>14.70000</td>\n",
" <td>56.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>22.000000</td>\n",
" <td>9.000000</td>\n",
" <td>40.0</td>\n",
" <td>14.000000</td>\n",
" <td>30.000000</td>\n",
" <td>14.70000</td>\n",
" <td>75.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Time Congestion Drving Speed Stops Weather \\\n",
"count 600.000000 600.000000 600.0 600.000000 600.000000 \n",
"mean 12.546667 6.253333 40.0 12.000000 27.000000 \n",
"std 5.184524 2.035369 0.0 4.033251 1.961227 \n",
"min 6.000000 2.000000 40.0 0.000000 25.000000 \n",
"25% 7.000000 5.000000 40.0 12.000000 25.000000 \n",
"50% 12.000000 6.000000 40.0 14.000000 27.000000 \n",
"75% 17.000000 8.000000 40.0 14.000000 29.000000 \n",
"max 22.000000 9.000000 40.0 14.000000 30.000000 \n",
"\n",
" Distance Travel Time \n",
"count 600.00000 600.000000 \n",
"mean 12.40400 49.786667 \n",
"std 4.05381 17.968470 \n",
"min 1.20000 3.000000 \n",
"25% 12.10000 43.000000 \n",
"50% 14.70000 56.000000 \n",
"75% 14.70000 56.000000 \n",
"max 14.70000 75.000000 "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.describe()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['Sunday', 'Monday', 'Tuesday'], dtype=object)"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['Day'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 0\n",
"1 0\n",
"2 0\n",
"3 0\n",
"4 0\n",
" ..\n",
"595 1\n",
"596 1\n",
"597 1\n",
"598 1\n",
"599 1\n",
"Name: Day, Length: 600, dtype: int64"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['Day'].map({'Sunday':0,'Monday':1,'Tuesday':2})"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"data['Day'] = data['Day'].map({'Sunday':0,'Monday':1,'Tuesday':2})"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Date</th>\n",
" <th>Time</th>\n",
" <th>Day</th>\n",
" <th>Special</th>\n",
" <th>Congestion</th>\n",
" <th>Drving Speed</th>\n",
" <th>Stops</th>\n",
" <th>Weather</th>\n",
" <th>Distance</th>\n",
" <th>Travel Time</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1/1/2019</td>\n",
" <td>6</td>\n",
" <td>0</td>\n",
" <td>No</td>\n",
" <td>5</td>\n",
" <td>40</td>\n",
" <td>14</td>\n",
" <td>25</td>\n",
" <td>14.7</td>\n",
" <td>56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1/2/2019</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>No</td>\n",
" <td>8</td>\n",
" <td>40</td>\n",
" <td>14</td>\n",
" <td>27</td>\n",
" <td>14.7</td>\n",
" <td>55</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1/3/2019</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>No</td>\n",
" <td>9</td>\n",
" <td>40</td>\n",
" <td>14</td>\n",
" <td>28</td>\n",
" <td>14.7</td>\n",
" <td>55</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1/4/2019</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>No</td>\n",
" <td>7</td>\n",
" <td>40</td>\n",
" <td>14</td>\n",
" <td>29</td>\n",
" <td>14.7</td>\n",
" <td>56</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1/5/2019</td>\n",
" <td>10</td>\n",
" <td>0</td>\n",
" <td>No</td>\n",
" <td>6</td>\n",
" <td>40</td>\n",
" <td>14</td>\n",
" <td>29</td>\n",
" <td>14.7</td>\n",
" <td>56</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Date Time Day Special Congestion Drving Speed Stops Weather \\\n",
"0 1/1/2019 6 0 No 5 40 14 25 \n",
"1 1/2/2019 7 0 No 8 40 14 27 \n",
"2 1/3/2019 8 0 No 9 40 14 28 \n",
"3 1/4/2019 9 0 No 7 40 14 29 \n",
"4 1/5/2019 10 0 No 6 40 14 29 \n",
"\n",
" Distance Travel Time \n",
"0 14.7 56 \n",
"1 14.7 55 \n",
"2 14.7 55 \n",
"3 14.7 56 \n",
"4 14.7 56 "
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"data['Special'] = data['Special'].map({'No':0,'Yes':1})"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Date</th>\n",
" <th>Time</th>\n",
" <th>Day</th>\n",
" <th>Special</th>\n",
" <th>Congestion</th>\n",
" <th>Drving Speed</th>\n",
" <th>Stops</th>\n",
" <th>Weather</th>\n",
" <th>Distance</th>\n",
" <th>Travel Time</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>595</th>\n",
" <td>8/18/2020</td>\n",
" <td>6</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" <td>40</td>\n",
" <td>12</td>\n",
" <td>25</td>\n",
" <td>12.1</td>\n",
" <td>49</td>\n",
" </tr>\n",
" <tr>\n",
" <th>596</th>\n",
" <td>8/19/2020</td>\n",
" <td>6</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>40</td>\n",
" <td>12</td>\n",
" <td>25</td>\n",
" <td>12.1</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>597</th>\n",
" <td>8/20/2020</td>\n",
" <td>12</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" <td>40</td>\n",
" <td>12</td>\n",
" <td>25</td>\n",
" <td>12.1</td>\n",
" <td>43</td>\n",
" </tr>\n",
" <tr>\n",
" <th>598</th>\n",
" <td>8/21/2020</td>\n",
" <td>12</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" <td>40</td>\n",
" <td>12</td>\n",
" <td>25</td>\n",
" <td>12.1</td>\n",
" <td>49</td>\n",
" </tr>\n",
" <tr>\n",
" <th>599</th>\n",
" <td>8/22/2020</td>\n",
" <td>12</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>40</td>\n",
" <td>12</td>\n",
" <td>25</td>\n",
" <td>12.1</td>\n",
" <td>40</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Date Time Day Special Congestion Drving Speed Stops Weather \\\n",
"595 8/18/2020 6 1 0 9 40 12 25 \n",
"596 8/19/2020 6 1 0 3 40 12 25 \n",
"597 8/20/2020 12 1 0 5 40 12 25 \n",
"598 8/21/2020 12 1 0 9 40 12 25 \n",
"599 8/22/2020 12 1 0 3 40 12 25 \n",
"\n",
" Distance Travel Time \n",
"595 12.1 49 \n",
"596 12.1 40 \n",
"597 12.1 43 \n",
"598 12.1 49 \n",
"599 12.1 40 "
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.tail()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([25, 27, 28, 29, 30, 26], dtype=int64)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['Weather'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Date', 'Time', 'Day', 'Special', 'Congestion', 'Drving Speed', 'Stops',\n",
" 'Weather', 'Distance', 'Travel Time'],\n",
" dtype='object')"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.columns"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"X = data.drop(['Date','Travel Time'],axis=1)\n"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"y = data['Travel Time']\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Train/test split\n",
"\n",
"1. split data into two parts \n",
"\n",
" training data set\n",
" testing data set\n",
"\n",
"2. Train the models on training set\n",
"\n",
"3. Test the models on testing data set"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"145 49\n",
"9 56\n",
"375 56\n",
"523 49\n",
"188 56\n",
" ..\n",
"71 40\n",
"106 73\n",
"270 56\n",
"435 34\n",
"102 56\n",
"Name: Travel Time, Length: 480, dtype: int64"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_train"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.linear_model import LinearRegression\n",
"from sklearn.svm import SVR\n",
"from sklearn.ensemble import RandomForestRegressor\n",
"from sklearn.ensemble import GradientBoostingClassifier\n",
"from sklearn.neural_network import MLPClassifier\n"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Shiv\\AppData\\Roaming\\Python\\Python310\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:702: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
" warnings.warn(\n"
]
},
{
"data": {
"text/html": [
"<style>#sk-container-id-1 {color: black;background-color: white;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>MLPClassifier()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">MLPClassifier</label><div class=\"sk-toggleable__content\"><pre>MLPClassifier()</pre></div></div></div></div></div>"
],
"text/plain": [
"MLPClassifier()"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lr = LinearRegression()\n",
"NN = MLPClassifier()\n",
"lr.fit(X_train,y_train)\n",
"NN.fit(X_train,y_train)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"y_pred1 = lr.predict(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"df1 = pd.DataFrame({'Actual':y_test, 'Lr Results':y_pred1})"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Actual</th>\n",
" <th>Lr Results</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>110</th>\n",
" <td>55</td>\n",
" <td>56.187653</td>\n",
" </tr>\n",
" <tr>\n",
" <th>419</th>\n",
" <td>56</td>\n",
" <td>55.732541</td>\n",
" </tr>\n",
" <tr>\n",
" <th>565</th>\n",
" <td>56</td>\n",
" <td>53.591764</td>\n",
" </tr>\n",
" <tr>\n",
" <th>77</th>\n",
" <td>55</td>\n",
" <td>56.690085</td>\n",
" </tr>\n",
" <tr>\n",
" <th>181</th>\n",
" <td>73</td>\n",
" <td>66.133304</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>399</th>\n",
" <td>56</td>\n",
" <td>54.599261</td>\n",
" </tr>\n",
" <tr>\n",
" <th>340</th>\n",
" <td>56</td>\n",
" <td>53.591764</td>\n",
" </tr>\n",
" <tr>\n",
" <th>148</th>\n",
" <td>49</td>\n",
" <td>52.322530</td>\n",
" </tr>\n",
" <tr>\n",
" <th>494</th>\n",
" <td>56</td>\n",
" <td>55.732541</td>\n",
" </tr>\n",
" <tr>\n",
" <th>439</th>\n",
" <td>43</td>\n",
" <td>38.662629</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>120 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" Actual Lr Results\n",
"110 55 56.187653\n",
"419 56 55.732541\n",
"565 56 53.591764\n",
"77 55 56.690085\n",
"181 73 66.133304\n",
".. ... ...\n",
"399 56 54.599261\n",
"340 56 53.591764\n",
"148 49 52.322530\n",
"494 56 55.732541\n",
"439 43 38.662629\n",
"\n",
"[120 rows x 2 columns]"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Actual</th>\n",
" <th>NN Results</th>\n",
" <th>LR Results</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>110</th>\n",
" <td>55</td>\n",
" <td>55</td>\n",
" <td>56.187653</td>\n",
" </tr>\n",
" <tr>\n",
" <th>419</th>\n",
" <td>56</td>\n",
" <td>56</td>\n",
" <td>55.732541</td>\n",
" </tr>\n",
" <tr>\n",
" <th>565</th>\n",
" <td>56</td>\n",
" <td>56</td>\n",
" <td>53.591764</td>\n",
" </tr>\n",
" <tr>\n",
" <th>77</th>\n",
" <td>55</td>\n",
" <td>55</td>\n",
" <td>56.690085</td>\n",
" </tr>\n",
" <tr>\n",
" <th>181</th>\n",
" <td>73</td>\n",
" <td>73</td>\n",
" <td>66.133304</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>399</th>\n",
" <td>56</td>\n",
" <td>56</td>\n",
" <td>54.599261</td>\n",
" </tr>\n",
" <tr>\n",
" <th>340</th>\n",
" <td>56</td>\n",
" <td>56</td>\n",
" <td>53.591764</td>\n",
" </tr>\n",
" <tr>\n",
" <th>148</th>\n",
" <td>49</td>\n",
" <td>49</td>\n",
" <td>52.322530</td>\n",
" </tr>\n",
" <tr>\n",
" <th>494</th>\n",
" <td>56</td>\n",
" <td>56</td>\n",
" <td>55.732541</td>\n",
" </tr>\n",
" <tr>\n",
" <th>439</th>\n",
" <td>43</td>\n",
" <td>43</td>\n",
" <td>38.662629</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>120 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" Actual NN Results LR Results\n",
"110 55 55 56.187653\n",
"419 56 56 55.732541\n",
"565 56 56 53.591764\n",
"77 55 55 56.690085\n",
"181 73 73 66.133304\n",
".. ... ... ...\n",
"399 56 56 54.599261\n",
"340 56 56 53.591764\n",
"148 49 49 52.322530\n",
"494 56 56 55.732541\n",
"439 43 43 38.662629\n",
"\n",
"[120 rows x 3 columns]"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_pred2 = NN.predict(X_test)\n",
"df2 = pd.DataFrame({'Actual':y_test, 'NN Results':y_pred2, 'LR Results':y_pred1})\n",
"df2"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x265e22fe0e0>"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.subplot(221)\n",
"plt.plot(df1['Actual'].iloc[0:11],label='Actual')\n",
"plt.plot(df1['Lr Results'].iloc[0:11],label='Lr Results')\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\tTime\tDay\tRush\tSpecial\tCongestion\tDrving Speed\tStops\tWeather\tDistance\tTravel Time"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x265e2510ca0>"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.subplot(221)\n",
"plt.plot(df1['Actual'].iloc[0:11],label='Actual')\n",
"plt.plot(df2['NN Results'].iloc[0:11],label='NN Results')\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Prediction with Current parameters (Predict Time with trained Model)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Time</th>\n",
" <th>Day</th>\n",
" <th>Special</th>\n",
" <th>Congestion</th>\n",
" <th>Drving Speed</th>\n",
" <th>Stops</th>\n",
" <th>Weather</th>\n",
" <th>Distance</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>6</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>8</td>\n",
" <td>40</td>\n",
" <td>14</td>\n",
" <td>23</td>\n",
" <td>14.7</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Time Day Special Congestion Drving Speed Stops Weather Distance\n",
"0 6 1 0 8 40 14 23 14.7"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = {'Time':6,\n",
" 'Day':1,\n",
" 'Special':0,\n",
" 'Congestion':8,\n",
" 'Drving Speed':40,\n",
" 'Stops':14,\n",
" 'Weather':23,\n",
" 'Distance':14.7\n",
" }\n",
"df = pd.DataFrame(data,index=[0])\n",
"df\n"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"linear regression [61.09983093]\n",
"Neural Network [55]\n",
"Actual Travel Time :- 58\n"
]
}
],
"source": [
"new_pred = lr.predict(df)\n",
"NN_pred = NN.predict(df)\n",
"print('linear regression',new_pred)\n",
"print('Neural Network',NN_pred)\n",
"print('Actual Travel Time :- 58')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Testing With Current Data"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Time</th>\n",
" <th>Day</th>\n",
" <th>Special</th>\n",
" <th>Congestion</th>\n",
" <th>Drving Speed</th>\n",
" <th>Stops</th>\n",
" <th>Weather</th>\n",
" <th>Distance</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>17</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" <td>40</td>\n",
" <td>20</td>\n",
" <td>24</td>\n",
" <td>14.7</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Time Day Special Congestion Drving Speed Stops Weather Distance\n",
"0 17 1 0 5 40 20 24 14.7"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = {'Time':17,\n",
" 'Day':1,\n",
" 'Special':0,\n",
" 'Congestion':5,\n",
" 'Drving Speed':40,\n",
" 'Stops':20,\n",
" 'Weather':24,\n",
" 'Distance':14.7\n",
" }\n",
"ddf = pd.DataFrame(data,index=[0])\n",
"ddf"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Travel Time Prediction :- 56 Min\n"
]
}
],
"source": [
"resultsNN = NN.predict(ddf)\n",
"resultsNN\n",
"print('Travel Time Prediction :-',*resultsNN,'Min')"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [],
"source": [
"def GetPrediction(time,date,special,congestion,dspeed,stops,weather,distance):\n",
" data = {'Time':time,\n",
" 'Day':date,\n",
" 'Special':special,\n",
" 'Congestion':congestion,\n",
" 'Drving Speed':dspeed,\n",
" 'Stops':stops,\n",
" 'Weather':weather,\n",
" 'Distance':distance\n",
" }\n",
" ddf = pd.DataFrame(data,index=[0])\n",
" resultsNN = NN.predict(ddf)\n",
" resultsNN\n",
" print('Travel Time Prediction :-',*resultsNN,'Min')"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Travel Time Prediction :- 55 Min\n"
]
}
],
"source": [
"def GetDateCode(date):\n",
" if('Sunday' == date ):\n",
" return 0\n",
" elif('Monday' == date):\n",
" return 1\n",
" elif('Tuesday' == date):\n",
" return 2\n",
" elif('Wednesday' == date):\n",
" return 3\n",
" elif('Thursday' == date):\n",
" return 4\n",
" elif('Friday' == date):\n",
" return 5\n",
" elif('Saturday' == date):\n",
" return 6\n",
" else:\n",
" return 9\n",
" \n",
"\n",
" \n",
"time= 6 #this time come from semins data/member of route planning\n",
"day ='Friday' #date come from UI \n",
"date = GetDateCode(day)\n",
"special = 0 # Special Day or Not 1/0\n",
"Congestion= 8 # This is depend on the depature time---- heavy traffic =9 / No Traffic = 0 \n",
"drivingspeedAVG = 40 #this is come from GPS data\n",
"stops =14 #total Bus stops/holts between the travel --- data come from the Seminas data/member of route planning \n",
"weather =23 #Get weather in travel area\n",
"\n",
"\n",
"GetPrediction(time,date,special,Congestion,drivingspeedAVG,14,24,14.7)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.10.7 64-bit",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.7"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "26de051ba29f2982a8de78e945f0abaf191376122a1563185a90213a26c5da77"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
# %%
import pandas as pd
# %%
data = pd.read_csv('BusTravelData.csv')
# %%
data['Day'].unique()
# %%
data['Day'].map({'Sunday':0,'Monday':1,'Tuesday':2})
# %%
data['Day'] = data['Day'].map({'Sunday':0,'Monday':1,'Tuesday':2})
# %%
data.head()
# %%
data['Special'] = data['Special'].map({'No':0,'Yes':1})
# %%
data.tail()
# %%
data['Weather'].unique()
# %%
data.columns
# %%
X = data.drop(['Date','Travel Time'],axis=1)
# %%
y = data['Travel Time']
# %% [markdown]
# Train/test split
#
# 1. split data into two parts
#
# training data set
# testing data set
#
# 2. Train the models on training set
#
# 3. Test the models on testing data set
# %%
from sklearn.model_selection import train_test_split
# %%
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42)
# %%
y_train
# %%
from sklearn.linear_model import LinearRegression
from sklearn.svm import SVR
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.neural_network import MLPClassifier
# %%
lr = LinearRegression()
NN = MLPClassifier()
lr.fit(X_train,y_train)
NN.fit(X_train,y_train)
# %%
y_pred1 = lr.predict(X_test)
# %%
df1 = pd.DataFrame({'Actual':y_test, 'Lr Results':y_pred1})
# %%
df1
# %%
y_pred2 = NN.predict(X_test)
df2 = pd.DataFrame({'Actual':y_test, 'NN Results':y_pred2, 'LR Results':y_pred1})
df2
# %%
import matplotlib.pyplot as plt
# %%
plt.subplot(221)
plt.plot(df1['Actual'].iloc[0:11],label='Actual')
plt.plot(df1['Lr Results'].iloc[0:11],label='Lr Results')
plt.legend()
# %% [markdown]
# Time Day Rush Special Congestion Drving Speed Stops Weather Distance Travel Time
# %%
plt.subplot(221)
plt.plot(df1['Actual'].iloc[0:11],label='Actual')
plt.plot(df2['NN Results'].iloc[0:11],label='NN Results')
plt.legend()
# %% [markdown]
# Prediction with Current parameters (Predict Time with trained Model)
# %%
data = {'Time':6,
'Day':1,
'Special':0,
'Congestion':8,
'Drving Speed':40,
'Stops':14,
'Weather':23,
'Distance':14.7
}
df = pd.DataFrame(data,index=[0])
df
# %%
new_pred = lr.predict(df)
NN_pred = NN.predict(df)
# %%
data = {'Time':17,
'Day':1,
'Special':0,
'Congestion':5,
'Drving Speed':40,
'Stops':20,
'Weather':24,
'Distance':14.7
}
ddf = pd.DataFrame(data,index=[0])
ddf
# %%
resultsNN = NN.predict(ddf)
resultsNN
# %%
def GetPrediction(time,date,special,congestion,dspeed,stops,weather,distance):
data = {'Time':time,
'Day':date,
'Special':special,
'Congestion':congestion,
'Drving Speed':dspeed,
'Stops':stops,
'Weather':weather,
'Distance':distance
}
ddf = pd.DataFrame(data,index=[0])
resultsNN = NN.predict(ddf)
resultsNN
print('Travel Time Prediction :-',*resultsNN,'Min')
# %%
def GetDateCode(date):
if('Sunday' == date ):
return 0
elif('Monday' == date):
return 1
elif('Tuesday' == date):
return 2
elif('Wednesday' == date):
return 3
elif('Thursday' == date):
return 4
elif('Friday' == date):
return 5
elif('Saturday' == date):
return 6
else:
return 9
import testingWeather
city = "malabe"
city = city+" weather"
time= 6 #this time come from semins data/member of route planning
day ='Friday' #date come from UI
date = GetDateCode(day)
special = 0 # Special Day or Not 1/0
Congestion= 8 # This is depend on the depature time---- heavy traffic =9 / No Traffic = 0
drivingspeedAVG = 40 #this is come from GPS data
stops =14 #total Bus stops/holts between the travel --- data come from the Seminas data/member of route planning
weather =testingWeather.weather(city) #Get weather in travel area
Distance =14.7 #Distance data come from seminas ----- data come from the Seminas data/member of route planning
GetPrediction(time,date,special,Congestion,drivingspeedAVG,stops,weather,Distance)
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at
# https://dart-lang.github.io/linter/lints/index.html.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties
**/*.keystore
**/*.jks
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 30
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.flutter_cubit"
minSdkVersion 16
targetSdkVersion 30
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"
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.flutter_cubit">
<!-- 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.flutter_cubit">
<application
android:label="flutter_cubit"
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.flutter_auth_animation
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
}
package com.example.flutter_cubit
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.flutter_cubit">
<!-- 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()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
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"
/build
\ No newline at end of file
plugins {
id 'com.android.application'
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
}
android {
namespace 'com.app.travelle'
compileSdk 32
defaultConfig {
applicationId "com.app.travelle"
minSdk 21
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildFeatures {
viewBinding true
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'com.google.android.material:material:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.navigation:navigation-fragment:2.5.2'
implementation 'androidx.navigation:navigation-ui:2.5.2'
implementation 'com.google.android.gms:play-services-maps:18.1.0'
implementation 'com.google.android.gms:play-services-maps:18.1.0'
implementation 'com.google.android.gms:play-services-location:20.0.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
\ No newline at end of file
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
\ No newline at end of file
package com.app.travelle;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.app.travelle", appContext.getPackageName());
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Travelle"
android:screenOrientation="sensorPortrait"
tools:targetApi="31">
<activity
android:name=".InitialMap"
android:exported="false">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<!--
TODO: Before you run your application, you need a Google Maps API key.
To get one, follow the directions here:
https://developers.google.com/maps/documentation/android-sdk/get-api-key
Once you have your API key (it starts with "AIza"), define a new property in your
project's local.properties file (e.g. MAPS_API_KEY=Aiza...), and replace the
"YOUR_API_KEY" string in this file with "${MAPS_API_KEY}".
-->
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyD7LBGU3enFRU4u2is65UDT5jRGeIcx4_Q" />
<activity
android:name=".HomeMap"
android:exported="false"
android:label="@string/title_activity_home_map" />
<activity
android:name=".Login"
android:exported="false">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".Welcome"
android:exported="false">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".Signup"
android:exported="false">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
</application>
</manifest>
\ No newline at end of file
package com.app.travelle;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.navigation.fragment.NavHostFragment;
import com.app.travelle.databinding.FragmentFirstBinding;
public class FirstFragment extends Fragment {
private FragmentFirstBinding binding;
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState
) {
binding = FragmentFirstBinding.inflate(inflater, container, false);
return binding.getRoot();
}
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
binding.buttonFirst.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
NavHostFragment.findNavController(FirstFragment.this)
.navigate(R.id.action_FirstFragment_to_SecondFragment);
}
});
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
\ No newline at end of file
package com.app.travelle;
import androidx.fragment.app.FragmentActivity;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MapStyleOptions;
import com.google.android.gms.maps.model.MarkerOptions;
import com.app.travelle.databinding.ActivityHomeMapBinding;
public class HomeMap extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private ActivityHomeMapBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
binding = ActivityHomeMapBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
/**
* Manipulates the map once available.
* This callback is triggered when the map is ready to be used.
* This is where we can add markers or lines, add listeners or move the camera. In this case,
* we just add a marker near Sydney, Australia.
* If Google Play services is not installed on the device, the user will be prompted to install
* it inside the SupportMapFragment. This method will only be triggered once the user has
* installed Google Play services and returned to the app.
*/
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
try {
// Customise the styling of the base map using a JSON object defined
// in a raw resource file.
boolean success = googleMap.setMapStyle(
MapStyleOptions.loadRawResourceStyle(
this, R.raw.map_style));
if (!success) {
Log.e("HomeMap", "Style parsing failed.");
}
} catch (Resources.NotFoundException e) {
Log.e("HomeMap", "Can't find style. Error: ", e);
}
// Add a marker in Sydney and move the camera
LatLng sydney = new LatLng(6.914833286829916, 79.97314407363564);
mMap.addMarker(new MarkerOptions().position(sydney).title("You are Here"));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 17));
mMap.getUiSettings().setMapToolbarEnabled(false);
}
}
package com.app.travelle;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.Color;
import android.location.Location;
import android.os.Bundle;
import android.util.Log;
import android.view.WindowManager;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MapStyleOptions;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
public class InitialMap extends AppCompatActivity {
//Initialize variable
SupportMapFragment supportMapFragment;
FusedLocationProviderClient client;
GoogleMap map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(getWindow().FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getSupportActionBar().hide();
setContentView(R.layout.activity_initial_map);
//Assign variable
supportMapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.maps_section);
//Initialize Fused location
client = LocationServices.getFusedLocationProviderClient(this);
//Check permission
if (ActivityCompat.checkSelfPermission(InitialMap.this,
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
//When granted
//Call method
getCurrentLocation();
}
else{
//When denied request permission
ActivityCompat.requestPermissions(InitialMap.this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},44);
}
}
private void getCurrentLocation() {
//Initialize task location
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
Task<Location> task = client.getLastLocation();
task.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location !=null){
//Sync map
supportMapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(@NonNull GoogleMap googleMap) { //Maps components customization
//Initialize lat lan
LatLng latLng = new LatLng(location.getLatitude(),
location.getLongitude());
//Create marker
MarkerOptions options = new MarkerOptions()
.position(latLng)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.placeholder__3_))
.title("You are here");
//Zoom map
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 18));
//Add marker
googleMap.addMarker(options);
try {
// Customise the styling of the base map using a JSON object defined
// in a raw resource file.
boolean success = googleMap.setMapStyle(
MapStyleOptions.loadRawResourceStyle(
getApplicationContext(), R.raw.map_style));
if (!success) {
Log.e("InitialMap", "Style parsing failed.");
}
} catch (Resources.NotFoundException e) {
Log.e("InitialMap", "Can't find style. Error: ", e);
}
}
});
}
}
});
}
@SuppressLint("MissingSuperCall")
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == 44) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//When permission granted
getCurrentLocation();
}
}
}
}
\ No newline at end of file
package com.app.travelle;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
public class Login extends AppCompatActivity {
private Button login_btn;
private Button direct_to_signup_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(getWindow().FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getSupportActionBar().hide();
setContentView(R.layout.activity_login);
login_btn = (Button) findViewById(R.id.login);
direct_to_signup_btn = (Button) findViewById(R.id.signup);
direct_to_signup_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
direct_toSignUp();
}
});
login_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openWelcome();
}
});
}
public void openWelcome(){
Intent intent = new Intent(this, InitialMap.class);
startActivity(intent);
}
public void direct_toSignUp(){
Intent intent = new Intent(this, Signup.class);
startActivity(intent);
}
}
\ No newline at end of file
package com.app.travelle;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button button;
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(getWindow().FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getSupportActionBar().hide();
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.getStarted);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openLogin();
}
});
}
public void openLogin(){
Intent intent = new Intent(this, Login.class);
startActivity(intent);
}
}
\ No newline at end of file
package com.app.travelle;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.navigation.fragment.NavHostFragment;
import com.app.travelle.databinding.FragmentSecondBinding;
public class SecondFragment extends Fragment {
private FragmentSecondBinding binding;
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState
) {
binding = FragmentSecondBinding.inflate(inflater, container, false);
return binding.getRoot();
}
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
binding.buttonSecond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
NavHostFragment.findNavController(SecondFragment.this)
.navigate(R.id.action_SecondFragment_to_FirstFragment);
}
});
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
\ No newline at end of file
package com.app.travelle;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.WindowManager;
public class Signup extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(getWindow().FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getSupportActionBar().hide();
setContentView(R.layout.activity_signup);
}
}
\ No newline at end of file
package com.app.travelle;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class Welcome extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
}
}
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
\ No newline at end of file
<vector android:height="24dp" android:tint="#40AF40"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z"/>
</vector>
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M20,4L4,4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM20,8l-8,5 -8,-5L4,6l8,5 8,-5v2z"/>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M18,8h-1L17,6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6v2L6,8c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,10c0,-1.1 -0.9,-2 -2,-2zM12,17c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM15.1,8L8.9,8L8.9,6c0,-1.71 1.39,-3.1 3.1,-3.1 1.71,0 3.1,1.39 3.1,3.1v2z"/>
</vector>
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".HomeMap" >
<fragment
android:layout_height="match_parent"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent" />
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".InitialMap">
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/maps_section"
android:name="com.google.android.gms.maps.SupportMapFragment"/>
<ImageView
android:id="@+id/imageView10"
android:layout_width="508dp"
android:layout_height="297dp"
android:layout_marginStart="-67dp"
android:layout_marginBottom="-40dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/rectangle_16" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/search_destination"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="340dp"
android:layout_height="70dp"
android:layout_marginStart="30dp"
android:layout_marginTop="260dp"
app:boxBackgroundColor="#FFFFFF"
app:boxCornerRadiusBottomEnd="60px"
app:boxCornerRadiusBottomStart="60px"
app:boxCornerRadiusTopEnd="60px"
app:boxCornerRadiusTopStart="60px"
app:boxStrokeColor="#FFFFFF"
app:endIconMode="clear_text"
app:startIconTint="@color/white"
app:endIconTint="#FFFFFF"
android:shadowColor="#000000"
android:shadowDx="1.2"
android:shadowDy="1.2"
android:shadowRadius="1.5"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/sans_bold"
android:hint="Where to?" />
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/button2"
android:layout_width="124dp"
android:layout_height="58dp"
android:layout_marginStart="140dp"
android:layout_marginBottom="16dp"
android:backgroundTint="#262730"
android:text="FIND "
app:cornerRadius="60px"
android:textSize="60px"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/imageView7"
android:layout_width="539dp"
android:layout_height="518dp"
android:layout_marginStart="-50dp"
android:layout_marginBottom="560dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/component_2__1" />
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:fontFamily="@font/sans_bold"
android:text="Travelle"
android:textColor="@color/white"
android:textSize="100px"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Login">
<ImageView
android:id="@+id/imageView3"
android:layout_width="470dp"
android:layout_height="626dp"
android:layout_marginBottom="220dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/component_4__1" />
<ImageView
android:id="@+id/busimage"
android:layout_width="433dp"
android:layout_height="116dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.83"
app:srcCompat="@drawable/component_5__1" />
<Button
android:id="@+id/login"
android:layout_width="164dp"
android:layout_height="56dp"
android:layout_marginStart="120dp"
android:layout_marginTop="372dp"
android:backgroundTint="#262730"
android:text="Login"
app:cornerRadius="60px"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/signup"
android:layout_width="165dp"
android:layout_height="49dp"
android:layout_marginStart="204dp"
android:layout_marginBottom="16dp"
android:backgroundTint="#3679FF"
android:text="SignUp"
app:cornerRadius="60px"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="136dp"
android:layout_marginTop="96dp"
android:fontFamily="@font/sans_bold"
android:text="Travelle"
android:textColor="@color/white"
android:textSize="100px"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="172dp"
android:layout_marginTop="144dp"
android:fontFamily="@font/sans_bold"
android:text="LOGIN"
android:textColor="@color/white"
android:textSize="50px"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/imageView6"
android:layout_width="76dp"
android:layout_height="54dp"
android:layout_marginStart="164dp"
android:layout_marginTop="40dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/passenger" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="28dp"
android:fontFamily="@font/sans_regular"
android:text="New to Travelle? "
android:textSize="45px"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/signup"
app:layout_constraintHorizontal_bias="0.493"
app:layout_constraintStart_toStartOf="parent" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/inputs_login"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="340dp"
android:layout_height="59dp"
android:layout_marginTop="18dp"
android:textColorHint="@color/white"
app:boxCornerRadiusBottomEnd="60px"
app:boxCornerRadiusBottomStart="60px"
app:boxCornerRadiusTopEnd="60px"
app:boxCornerRadiusTopStart="60px"
app:boxStrokeColor="@color/white"
app:counterEnabled="true"
app:counterMaxLength="20"
app:endIconMode="clear_text"
app:startIconTint="@color/white"
app:endIconTint="#FFFFFF"
app:helperTextTextColor="#FFFFFF"
app:hintTextColor="#FFFFFF"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView4"
app:startIconDrawable="@drawable/ic_person"
>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/username_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Username"
android:maxLength="20" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/password_input"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="340dp"
android:layout_height="59dp"
android:layout_marginTop="8dp"
android:textColorHint="@color/white"
app:boxCornerRadiusBottomEnd="60px"
app:boxCornerRadiusBottomStart="60px"
app:boxCornerRadiusTopEnd="60px"
app:boxCornerRadiusTopStart="60px"
app:boxStrokeColor="@color/white"
app:counterEnabled="true"
app:counterMaxLength="20"
app:endIconMode="password_toggle"
app:endIconTint="#FFFFFF"
app:hintTextColor="#FFFFFF"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/inputs_login"
app:startIconDrawable="@drawable/ic_lock"
app:startIconTint="@color/white">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/forget_pass"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="148dp"
android:layout_marginTop="32dp"
android:fontFamily="@font/sans_regular"
android:text="Forget Password?"
android:textColor="@color/white"
app:layout_constraintBottom_toTopOf="@+id/login"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/password_input"
app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/getStarted"
android:layout_width="192dp"
android:layout_height="59dp"
android:layout_marginStart="108dp"
android:layout_marginBottom="28dp"
android:backgroundTint="#262730"
android:text="Get started"
app:cornerRadius="60px"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/imageView21"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="88dp"
android:layout_marginBottom="464dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:srcCompat="@drawable/component_1__1" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="188dp"
android:layout_height="206dp"
android:layout_marginStart="288dp"
android:layout_marginTop="52dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/splash2" />
<ImageView
android:id="@+id/imageView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="265dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/component_3__1" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="136dp"
android:layout_marginTop="280dp"
android:text="Travelle"
android:textColor="#262730"
android:textSize="100px"
app:layout_constraintBottom_toTopOf="@+id/imageView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.688" />
<ImageView
android:id="@+id/imageView"
android:layout_width="52dp"
android:layout_height="61dp"
android:layout_marginStart="176dp"
android:layout_marginTop="332dp"
app:layout_constraintBottom_toTopOf="@+id/textView2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"
app:srcCompat="@drawable/passenger" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="136dp"
android:text="Know where you go."
android:textColor="@color/white"
app:layout_constraintBottom_toTopOf="@+id/getStarted"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.974" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Signup">
<ImageView
android:id="@+id/imageView3"
android:layout_width="470dp"
android:layout_height="626dp"
android:layout_marginBottom="220dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/component_4__1" />
<ImageView
android:id="@+id/imageView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="124dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/component_7__1" />
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="28dp"
android:fontFamily="@font/sans_bold"
android:text="Travelle"
android:textColor="@color/white"
android:textSize="100px"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="76dp"
android:fontFamily="@font/sans_bold"
android:text="SIGNUP"
android:textColor="@color/white"
android:textSize="50px"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/imageView6"
android:layout_width="66dp"
android:layout_height="48dp"
android:layout_marginStart="308dp"
android:layout_marginTop="36dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/passenger" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/inputs_login"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="340dp"
android:layout_height="59dp"
android:layout_marginTop="30dp"
android:textColorHint="@color/white"
app:boxCornerRadiusBottomEnd="60px"
app:boxCornerRadiusBottomStart="60px"
app:boxCornerRadiusTopEnd="60px"
app:boxCornerRadiusTopStart="60px"
app:boxStrokeColor="@color/white"
app:counterEnabled="true"
app:counterMaxLength="20"
app:endIconMode="clear_text"
app:endIconTint="#FFFFFF"
app:helperTextTextColor="#FFFFFF"
app:hintTextColor="#FFFFFF"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView4"
app:startIconDrawable="@drawable/ic_person"
app:startIconTint="@color/white">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/username_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Name"
android:maxLength="20" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/password_input"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="340dp"
android:layout_height="59dp"
android:layout_marginTop="8dp"
android:textColorHint="@color/white"
app:boxCornerRadiusBottomEnd="60px"
app:boxCornerRadiusBottomStart="60px"
app:boxCornerRadiusTopEnd="60px"
app:boxCornerRadiusTopStart="60px"
app:boxStrokeColor="@color/white"
app:counterEnabled="true"
app:counterMaxLength="20"
app:hintTextColor="#FFFFFF"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/inputs_login"
app:startIconDrawable="@drawable/ic_email"
app:startIconTint="@color/white">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Email" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/textInputLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="340dp"
android:layout_height="59dp"
android:layout_marginTop="8dp"
android:textColorHint="@color/white"
app:boxCornerRadiusBottomEnd="60px"
app:boxCornerRadiusBottomStart="60px"
app:boxCornerRadiusTopEnd="60px"
app:boxCornerRadiusTopStart="60px"
app:boxStrokeColor="@color/white"
app:counterEnabled="true"
app:counterMaxLength="20"
app:endIconMode="password_toggle"
app:endIconTint="#FFFFFF"
app:hintTextColor="#FFFFFF"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/password_input"
app:startIconDrawable="@drawable/ic_lock"
app:startIconTint="@color/white">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/textInputLayout2"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="340dp"
android:layout_height="59dp"
android:layout_marginTop="8dp"
android:textColorHint="@color/white"
app:boxCornerRadiusBottomEnd="60px"
app:boxCornerRadiusBottomStart="60px"
app:boxCornerRadiusTopEnd="60px"
app:boxCornerRadiusTopStart="60px"
app:boxStrokeColor="@color/white"
app:counterEnabled="true"
app:counterMaxLength="20"
app:endIconMode="password_toggle"
app:endIconTint="#FFFFFF"
app:hintTextColor="#FFFFFF"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textInputLayout"
app:startIconDrawable="@drawable/ic_lock"
app:startIconTint="@color/white">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Confirm Password" />
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/signup_button"
android:layout_width="164dp"
android:layout_height="56dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="124dp"
android:backgroundTint="#262730"
android:text="Signup"
app:cornerRadius="60px"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textInputLayout2" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="36dp"
android:layout_marginBottom="28dp"
android:fontFamily="@font/sans_regular"
android:text="Already Registered?"
android:textSize="45px"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/signup"
android:layout_width="165dp"
android:layout_height="49dp"
android:layout_marginStart="204dp"
android:layout_marginBottom="16dp"
android:backgroundTint="#3679FF"
android:text="Login"
app:cornerRadius="60px"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Welcome">
<ImageView
android:id="@+id/imageView10"
android:layout_width="508dp"
android:layout_height="297dp"
android:layout_marginStart="-60dp"
android:layout_marginBottom="-40dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/rectangle_16" />
<!--
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/search_destination"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="340dp"
android:layout_height="59dp"
android:layout_marginStart="25dp"
android:layout_marginTop="230dp"
android:textColorHint="@color/white"
app:boxBackgroundColor="#0018A1"
app:boxCornerRadiusBottomEnd="60px"
app:boxCornerRadiusBottomStart="60px"
app:boxCornerRadiusTopEnd="60px"
app:boxCornerRadiusTopStart="60px"
app:boxStrokeColor="@color/white"
app:endIconMode="clear_text"
app:endIconTint="#FFFFFF"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.48000002"
app:startIconTint="@color/white">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/sans_bold"
android:hint="Where to?" />
</com.google.android.material.textfield.TextInputLayout>
-->
<Button
android:id="@+id/button2"
android:layout_width="124dp"
android:layout_height="58dp"
android:layout_marginStart="140dp"
android:layout_marginBottom="16dp"
android:backgroundTint="#262730"
android:text="FIND "
app:cornerRadius="60px"
android:textSize="60px"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/imageView7"
android:layout_width="340dp"
android:layout_height="59dp"
android:layout_marginStart="-50dp"
android:layout_marginBottom="520dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/component_2__1" />
<AutoCompleteTextView
android:id="@+id/autoCompleteTextView"
android:layout_width="340dp"
android:layout_height="59dp"
android:layout_marginStart="32dp"
android:layout_marginBottom="156dp"
android:text="Where to"
android:textAlignment="center"
android:completionThreshold="3"
android:popupTheme="#FFFFFF"
android:background="#FFFFFF"
app:layout_constraintBottom_toTopOf="@+id/button2"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FirstFragment">
<TextView
android:id="@+id/textview_first"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_first_fragment"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/button_first"
/>
<Button
android:id="@+id/button_first"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/next"
app:layout_constraintTop_toBottomOf="@id/textview_first"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SecondFragment">
<TextView
android:id="@+id/textview_second"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/button_second"
/>
<Button
android:id="@+id/button_second"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/previous"
app:layout_constraintTop_toBottomOf="@id/textview_second"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/FirstFragment">
<fragment
android:id="@+id/FirstFragment"
android:name="com.app.travelle.FirstFragment"
android:label="@string/first_fragment_label"
tools:layout="@layout/fragment_first" >
<action
android:id="@+id/action_FirstFragment_to_SecondFragment"
app:destination="@id/SecondFragment" />
</fragment>
<fragment
android:id="@+id/SecondFragment"
android:name="com.app.travelle.SecondFragment"
android:label="@string/second_fragment_label"
tools:layout="@layout/fragment_second" >
<action
android:id="@+id/action_SecondFragment_to_FirstFragment"
app:destination="@id/FirstFragment" />
</fragment>
</navigation>
\ No newline at end of file
[
{
"elementType": "geometry",
"stylers": [
{
"color": "#1d2c4d"
}
]
},
{
"elementType": "labels.text.fill",
"stylers": [
{
"color": "#8ec3b9"
}
]
},
{
"elementType": "labels.text.stroke",
"stylers": [
{
"color": "#1a3646"
}
]
},
{
"featureType": "administrative.country",
"elementType": "geometry.stroke",
"stylers": [
{
"color": "#4b6878"
}
]
},
{
"featureType": "administrative.land_parcel",
"elementType": "labels.text.fill",
"stylers": [
{
"color": "#64779e"
}
]
},
{
"featureType": "administrative.province",
"elementType": "geometry.stroke",
"stylers": [
{
"color": "#4b6878"
}
]
},
{
"featureType": "landscape.man_made",
"elementType": "geometry.stroke",
"stylers": [
{
"color": "#334e87"
}
]
},
{
"featureType": "landscape.natural",
"elementType": "geometry",
"stylers": [
{
"color": "#023e58"
}
]
},
{
"featureType": "poi",
"elementType": "geometry",
"stylers": [
{
"color": "#283d6a"
}
]
},
{
"featureType": "poi",
"elementType": "labels.text",
"stylers": [
{
"visibility": "off"
}
]
},
{
"featureType": "poi",
"elementType": "labels.text.fill",
"stylers": [
{
"color": "#6f9ba5"
}
]
},
{
"featureType": "poi",
"elementType": "labels.text.stroke",
"stylers": [
{
"color": "#1d2c4d"
}
]
},
{
"featureType": "poi.business",
"stylers": [
{
"visibility": "off"
}
]
},
{
"featureType": "poi.park",
"elementType": "geometry.fill",
"stylers": [
{
"color": "#023e58"
}
]
},
{
"featureType": "poi.park",
"elementType": "labels.text.fill",
"stylers": [
{
"color": "#3C7680"
}
]
},
{
"featureType": "road",
"elementType": "geometry",
"stylers": [
{
"color": "#304a7d"
}
]
},
{
"featureType": "road",
"elementType": "labels.icon",
"stylers": [
{
"visibility": "off"
}
]
},
{
"featureType": "road",
"elementType": "labels.text.fill",
"stylers": [
{
"color": "#98a5be"
}
]
},
{
"featureType": "road",
"elementType": "labels.text.stroke",
"stylers": [
{
"color": "#1d2c4d"
}
]
},
{
"featureType": "road.highway",
"elementType": "geometry",
"stylers": [
{
"color": "#2c6675"
}
]
},
{
"featureType": "road.highway",
"elementType": "geometry.stroke",
"stylers": [
{
"color": "#255763"
}
]
},
{
"featureType": "road.highway",
"elementType": "labels.text.fill",
"stylers": [
{
"color": "#b0d5ce"
}
]
},
{
"featureType": "road.highway",
"elementType": "labels.text.stroke",
"stylers": [
{
"color": "#023e58"
}
]
},
{
"featureType": "transit",
"stylers": [
{
"visibility": "off"
}
]
},
{
"featureType": "transit",
"elementType": "geometry",
"stylers": [
{
"color": "#ffeb3b"
}
]
},
{
"featureType": "transit",
"elementType": "labels.text.fill",
"stylers": [
{
"color": "#98a5be"
}
]
},
{
"featureType": "transit",
"elementType": "labels.text.stroke",
"stylers": [
{
"color": "#1d2c4d"
}
]
},
{
"featureType": "transit.line",
"elementType": "geometry.fill",
"stylers": [
{
"color": "#283d6a"
}
]
},
{
"featureType": "transit.station",
"elementType": "geometry",
"stylers": [
{
"color": "#3a4762"
}
]
},
{
"featureType": "water",
"elementType": "geometry",
"stylers": [
{
"color": "#0e1626"
}
]
},
{
"featureType": "water",
"elementType": "labels.text.fill",
"stylers": [
{
"color": "#4e6d70"
}
]
}
]
\ No newline at end of file
<resources>
<dimen name="fab_margin">48dp</dimen>
</resources>
\ No newline at end of file
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.Travelle" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_200</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/black</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_200</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
</resources>
\ No newline at end of file
<resources>
<dimen name="fab_margin">200dp</dimen>
</resources>
\ No newline at end of file
<resources>
<dimen name="fab_margin">48dp</dimen>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="mtrl_textinput_default_box_stroke_color">#FFFFFFFF</color>
</resources>
\ No newline at end of file
<resources>
<dimen name="fab_margin">16dp</dimen>
<dimen name="activity_horizontal_margin">0dp</dimen>
<dimen name="activity_vertical_margin">0dp</dimen>
</resources>
\ No newline at end of file
<resources>
<string name="app_name">Travelle</string>
<string name="title_activity_login">Login</string>
<!-- Strings used for fragments for navigation -->
<string name="first_fragment_label">First Fragment</string>
<string name="second_fragment_label">Second Fragment</string>
<string name="next">Next</string>
<string name="previous">Previous</string>
<string name="hello_first_fragment">Hello first fragment</string>
<string name="hello_second_fragment">Hello second fragment. Arg: %1$s</string>
<string name="title_activity_homemap">homemap</string>
<string name="title_activity_home_map">HomeMap</string>
</resources>
\ No newline at end of file
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.Travelle" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
<style name="Theme.Travelle.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="Theme.Travelle.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="Theme.Travelle.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?><!--
Sample backup rules file; uncomment and customize as necessary.
See https://developer.android.com/guide/topics/data/autobackup
for details.
Note: This file is ignored for devices older that API 31
See https://developer.android.com/about/versions/12/backup-restore
-->
<full-backup-content>
<!--
<include domain="sharedpref" path="."/>
<exclude domain="sharedpref" path="device.xml"/>
-->
</full-backup-content>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?><!--
Sample data extraction rules file; uncomment and customize as necessary.
See https://developer.android.com/about/versions/12/backup-restore#xml-changes
for details.
-->
<data-extraction-rules>
<cloud-backup>
<!-- TODO: Use <include> and <exclude> to control what is backed up.
<include .../>
<exclude .../>
-->
</cloud-backup>
<!--
<device-transfer>
<include .../>
<exclude .../>
</device-transfer>
-->
</data-extraction-rules>
\ No newline at end of file
package com.app.travelle;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Example local unit test, which will execute on the development machine (host).
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
assertEquals(4, 2 + 2);
}
}
\ No newline at end of file
<svg width="13" height="16" viewBox="0 0 13 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="6" height="16" fill="#22C97C"/>
<rect x="6" y="10" width="7" height="6" fill="#22C97C"/>
</svg>
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="500.000000pt" height="500.000000pt" viewBox="0 0 500.000000 500.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,500.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M2330 3395 c-47 -8 -112 -23 -145 -36 -73 -27 -196 -92 -250 -132
-49 -37 -175 -159 -175 -169 0 -4 288 -9 640 -10 l640 -3 -149 -137 -150 -138
-131 0 c-126 0 -131 -1 -139 -22 -5 -13 -41 -96 -80 -184 -39 -89 -71 -165
-71 -170 0 -9 -233 -238 -341 -335 -119 -106 -217 -189 -223 -189 -3 0 11 37
30 83 20 45 44 105 54 132 16 47 52 129 184 430 80 180 106 242 106 249 0 3
-120 5 -267 4 l-268 -3 -22 -85 c-20 -75 -22 -104 -19 -245 2 -110 8 -178 20
-219 117 -415 461 -694 878 -713 138 -7 238 7 353 48 154 54 281 135 395 253
l44 46 -422 0 c-267 0 -422 4 -422 10 0 5 9 29 19 52 33 73 255 592 262 614 5
15 550 516 555 511 3 -2 -11 -38 -30 -80 -19 -41 -37 -86 -41 -99 -4 -13 -19
-48 -32 -78 -37 -81 -113 -260 -113 -265 0 -3 -14 -35 -31 -72 -42 -93 -119
-281 -119 -293 0 -7 96 -9 267 -8 l266 3 19 65 c57 203 31 476 -64 664 -196
389 -591 589 -1028 521z"/>
</g>
</svg>
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="1200.000000pt" height="1200.000000pt" viewBox="0 0 1200.000000 1200.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,1200.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M2210 6000 l0 -1420 1255 0 1255 0 0 1420 0 1420 -1255 0 -1255 0 0
-1420z m2245 1250 c3 -5 1 -38 -4 -72 -6 -35 -17 -115 -26 -178 -8 -63 -17
-134 -21 -157 l-5 -43 -327 -2 -327 -3 -21 -175 c-12 -96 -27 -213 -33 -260
-6 -47 -24 -197 -41 -335 -16 -137 -34 -284 -40 -325 -15 -114 -35 -271 -81
-655 -24 -192 -48 -353 -54 -357 -5 -5 -134 -7 -285 -5 l-275 2 3 40 c2 22 9
92 17 155 8 63 28 228 45 365 16 138 34 284 40 325 5 41 14 113 20 160 5 47
24 198 40 335 17 138 37 306 45 375 9 69 20 157 25 195 5 39 12 91 15 118 l6
47 -325 0 -326 0 0 35 c0 31 31 297 46 388 l6 37 938 0 c591 0 941 -4 945 -10z"/>
<path d="M5204 6327 c-3 -8 -4 -39 -2 -68 l3 -54 73 -3 c67 -3 72 -5 72 -25 0
-12 2 -134 3 -272 l2 -250 54 -3 c30 -2 58 1 62 5 9 9 17 188 18 410 l1 132
68 3 67 3 0 65 0 65 -208 3 c-170 2 -208 0 -213 -11z"/>
<path d="M5742 6332 c-10 -7 -12 -81 -12 -336 0 -180 2 -332 6 -337 3 -5 29
-9 59 -9 39 0 54 4 59 16 3 9 6 72 6 140 0 114 2 124 18 124 14 0 29 -25 61
-98 54 -126 97 -173 169 -180 68 -6 92 9 92 56 0 45 -14 62 -50 62 -34 0 -62
31 -96 104 -19 41 -24 61 -15 64 34 11 107 71 123 102 16 28 19 50 15 111 -4
93 -27 136 -90 167 -39 20 -60 22 -188 22 -79 0 -150 -4 -157 -8z m256 -128
c50 -14 66 -111 22 -134 -10 -6 -50 -10 -89 -10 l-71 0 0 75 0 75 58 0 c31 0
67 -3 80 -6z"/>
<path d="M6414 6326 c-45 -20 -81 -63 -101 -121 -15 -42 -17 -90 -18 -300 l0
-250 60 0 60 0 3 113 3 112 104 0 104 0 3 -112 3 -113 53 -3 c30 -2 59 2 66 7
16 13 21 427 6 515 -11 68 -47 121 -101 148 -42 22 -198 24 -245 4z m168 -117
c28 -15 48 -70 48 -134 l0 -55 -105 0 -105 0 6 48 c10 94 15 113 35 133 21 21
87 26 121 8z"/>
<path d="M6840 6312 c0 -23 60 -216 184 -592 l21 -65 60 0 60 0 22 45 c19 41
87 239 173 506 18 56 30 109 27 118 -8 20 -109 23 -124 4 -6 -7 -22 -53 -37
-103 -47 -153 -98 -309 -109 -329 -11 -22 -8 -31 -98 264 -27 90 -55 168 -62
172 -7 4 -36 8 -64 8 -51 0 -53 -1 -53 -28z"/>
<path d="M7495 6329 c-4 -6 -10 -159 -12 -339 l-6 -329 24 -6 c13 -3 105 -4
204 -3 l180 3 0 65 0 65 -137 3 -138 3 0 74 0 75 134 0 134 0 7 59 c4 33 4 65
0 70 -4 7 -56 11 -136 11 l-129 0 0 60 0 59 133 3 132 3 0 65 0 65 -192 3
c-133 2 -194 -1 -198 -9z"/>
<path d="M8015 6327 c-3 -6 -4 -161 -3 -342 l3 -330 147 -3 c169 -3 172 -1
166 86 l-3 47 -92 3 -93 3 1 264 c1 145 -2 268 -6 274 -9 16 -114 14 -120 -2z"/>
<path d="M8434 6329 c-4 -7 -9 -160 -12 -340 l-4 -328 23 -6 c13 -3 85 -4 159
-3 l135 3 3 68 3 67 -94 0 -94 0 1 273 1 272 -57 3 c-37 2 -59 -1 -64 -9z"/>
<path d="M8845 6329 c-4 -6 -10 -159 -12 -339 l-6 -329 24 -6 c13 -3 105 -4
204 -3 l180 3 0 65 0 65 -137 3 -138 3 0 74 0 75 134 0 134 0 7 59 c4 33 4 65
0 70 -4 7 -56 11 -136 11 l-129 0 0 60 0 59 133 3 132 3 0 65 0 65 -192 3
c-133 2 -194 -1 -198 -9z"/>
</g>
</svg>
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '7.3.0' apply false
id 'com.android.library' version '7.3.0' apply false
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false
}
\ No newline at end of file
#include <WiFi.h>
#include <FirebaseESP32.h>
#include <TinyGPS++.h>
#define FIREBASE_HOST "gps-b123c-default-rtdb.firebaseio.com"
#define FIREBASE_AUTH "gEjXkGOWaMEzkZKpKIYqwFH7dQMetih25gsmligT"
#define WIFI_SSID "LAZI 5G"
#define WIFI_PASSWORD "fmrp1530"
FirebaseData firebaseData;
#define RXD2 5
#define TXD2 21
HardwareSerial neogps(1);
String ESP32_API_KEY = "Ad5F10jkBM0";
TinyGPSPlus gps;
void setup(){
Initialization();
WiFiConnection();
neogps.begin(9600, SERIAL_8N1, RXD2, TXD2);
}
float counter2 = 0.5;
void Initialization(){
Serial.begin(115200);
}
void WiFiConnection(){
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.reconnectWiFi(true);
}
void loop(){
boolean newData = false;
for (unsigned long start = millis(); millis() - start < 2000;){
while(neogps.available()){
if(gps.encode(neogps.read())){
if(gps.location.isValid() == 1){
newData = true;
break;
}
}
}
}
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
//If newData is true
if(true){
newData = false;
//NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
String latitude, longitude;
//float altitude;
//unsigned long date, time, speed, satellites;
latitude = String(gps.location.lat(), 6); // Latitude in degrees (double)
longitude = String(gps.location.lng(), 6); // Longitude in degrees (double)
//altitude = gps.altitude.meters(); // Altitude in meters (double)
//date = gps.date.value(); // Raw date in DDMMYY format (u32)
//time = gps.time.value(); // Raw time in HHMMSSCC format (u32)
//speed = gps.speed.kmph();
//Serial.print("Latitude= ");
//Serial.print(latitude);
//Serial.print(" Longitude= ");
//Serial.println(longitude);
String gps_data;
gps_data = "api_key="+ESP32_API_KEY;
gps_data += "&lat="+latitude;
gps_data += "&lng="+longitude;
Serial.print("gps_data: ");
Serial.println(gps_data);
String x = gps_data;
if(Firebase.setString(firebaseData, "location", x)){
}
if(Firebase.getString(firebaseData, "location")){
if(firebaseData.dataType() == "string"){
Serial.print("data = ");
Serial.println(firebaseData.stringData());
}
}
}
}
\ No newline at end of file
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Enables namespacing of each library's R class so that its R class includes only the
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
\ No newline at end of file
#Fri Jun 23 08:50:38 CEST 2017
#Tue Sep 27 12:24:52 IST 2022
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
zipStoreBase=GRADLE_USER_HOME
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
exec "$JAVACMD" "$@"
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Travelle Dashboard</title>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
</head>
<body>
<div class="container" style="margin-top: 50px;">
<h4 class="text-center">Travelle Dashboard</h4><br>
<h5>Add Option</h5>
<div class="card card-default">
<div class="card-body">
<form id="addUser" class="form-inline" method="POST" action="">
<div class="form-group mb-2">
<label for="name" class="sr-only">Name</label>
<input id="name" type="text" class="form-control" name="name" placeholder="Name"
required autofocus>
</div>
<div class="form-group mx-sm-3 mb-2">
<label for="email" class="sr-only">Cordinates</label>
<input id="email" type="email" class="form-control" name="email" placeholder="Email"
required autofocus>
</div>
<button id="submitUser" type="button" class="btn btn-primary mb-2">Submit</button>
</form>
</div>
</div>
<br>
<h5>Users</h5>
<table class="table table-bordered">
<tr>
<th>Name</th>
<th>Email</th>
<th width="180" class="text-center">Action</th>
</tr>
<tbody id="tbody">
</tbody>
</table>
</div>
<!-- Update Model -->
<form action="" method="POST" class="users-update-record-model form-horizontal">
<div id="update-modal" data-backdrop="static" data-keyboard="false" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="custom-width-modalLabel"
aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" style="width:55%;">
<div class="modal-content" style="overflow: hidden;">
<div class="modal-header">
<h4 class="modal-title" id="custom-width-modalLabel">Update</h4>
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">×
</button>
</div>
<div class="modal-body" id="updateBody">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-light"
data-dismiss="modal">Close
</button>
<button type="button" class="btn btn-success updateUser">Update
</button>
</div>
</div>
</div>
</div>
</form>
<!-- Delete Model -->
<form action="" method="POST" class="users-remove-record-model">
<div id="remove-modal" data-backdrop="static" data-keyboard="false" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="custom-width-modalLabel"
aria-hidden="true" style="display: none;">
<div class="modal-dialog modal-dialog-centered" style="width:55%;">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="custom-width-modalLabel">Delete</h4>
<button type="button" class="close remove-data-from-delete-form" data-dismiss="modal" aria-hidden="true">×
</button>
</div>
<div class="modal-body">
<p>Do you want to delete this record?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default waves-effect remove-data-from-delete-form"
data-dismiss="modal">Close
</button>
<button type="button" class="btn btn-danger waves-effect waves-light deleteRecord">Delete
</button>
</div>
</div>
</div>
</div>
</form>
<!-- The core Firebase JS SDK is always required and must be listed first -->
<script src="https://www.gstatic.com/firebasejs/7.14.6/firebase-app.js"></script>
<!-- TODO: Add SDKs for Firebase products
https://firebase.google.com/docs/web/setup#available-libraries -->
<script src="https://www.gstatic.com/firebasejs/7.14.6/firebase-analytics.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.14.6/firebase-database.js"></script>
<script>
// Initialize Firebase
var config = {
apiKey: "AIzaSyDqcBd6B-l2_rPVslln0lMbw7zPw-8JDd0",
authDomain: "travelle-99619.firebaseapp.com",
projectId: "travelle-99619",
storageBucket: "travelle-99619.appspot.com",
messagingSenderId: "636540305419",
appId: "1:636540305419:web:f0d4c40fe85f03c15b470e",
measurementId: "G-8G2072NEWL"
};
firebase.initializeApp(config);
firebase.analytics();
var database = firebase.database();
var lastIndex = 0;
// Get Data
firebase.database().ref('Users/').on('value', function (snapshot) {
var value = snapshot.val();
var htmls = [];
$.each(value, function (index, value) {
if (value) {
htmls.push('<tr>\
<td>' + value.name + '</td>\
<td>' + value.email + '</td>\
<td><button data-toggle="modal" data-target="#update-modal" class="btn btn-info updateData" data-id="' + index + '">Update</button>\
<button data-toggle="modal" data-target="#remove-modal" class="btn btn-danger removeData" data-id="' + index + '">Delete</button></td>\
</tr>');
}
lastIndex = index;
});
$('#tbody').html(htmls);
$("#submitUser").removeClass('desabled');
});
// Add Data
$('#submitUser').on('click', function () {
var values = $("#addUser").serializeArray();
var name = values[0].value;
var email = values[1].value;
var userID = lastIndex + 1;
console.log(values);
firebase.database().ref('Users/' + userID).set({
name: name,
email: email,
});
// Reassign lastID value
lastIndex = userID;
$("#addUser input").val("");
});
// Update Data
var updateID = 0;
$('body').on('click', '.updateData', function () {
updateID = $(this).attr('data-id');
firebase.database().ref('Users/' + updateID).on('value', function (snapshot) {
var values = snapshot.val();
var updateData = '<div class="form-group">\
<label for="first_name" class="col-md-12 col-form-label">Name</label>\
<div class="col-md-12">\
<input id="first_name" type="text" class="form-control" name="name" value="' + values.name + '" required autofocus>\
</div>\
</div>\
<div class="form-group">\
<label for="last_name" class="col-md-12 col-form-label">Email</label>\
<div class="col-md-12">\
<input id="last_name" type="text" class="form-control" name="email" value="' + values.email + '" required autofocus>\
</div>\
</div>';
$('#updateBody').html(updateData);
});
});
$('.updateUser').on('click', function () {
var values = $(".users-update-record-model").serializeArray();
var postData = {
name: values[0].value,
email: values[1].value,
};
var updates = {};
updates['/Users/' + updateID] = postData;
firebase.database().ref().update(updates);
$("#update-modal").modal('hide');
});
// Remove Data
$("body").on('click', '.removeData', function () {
var id = $(this).attr('data-id');
$('body').find('.users-remove-record-model').append('<input name="id" type="hidden" value="' + id + '">');
});
$('.deleteRecord').on('click', function () {
var values = $(".users-remove-record-model").serializeArray();
var id = values[0].value;
firebase.database().ref('Users/' + id).remove();
$('body').find('.users-remove-record-model').find("input").remove();
$("#remove-modal").modal('hide');
});
$('.remove-data-from-delete-form').click(function () {
$('body').find('.users-remove-record-model').find("input").remove();
});
</script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
</body>
</html>
**/dgph
*.mode1v3
*.mode2v3
*.moved-aside
*.pbxuser
*.perspectivev3
**/*sync/
.sconsign.dblite
.tags*
**/.vagrant/
**/DerivedData/
Icon?
**/Pods/
**/.symlinks/
profile
xcuserdata
**/.generated/
Flutter/App.framework
Flutter/Flutter.framework
Flutter/Flutter.podspec
Flutter/Generated.xcconfig
Flutter/ephemeral/
Flutter/app.flx
Flutter/app.zip
Flutter/flutter_assets/
Flutter/flutter_export_environment.sh
ServiceDefinitions.json
Runner/GeneratedPluginRegistrant.*
# Exceptions to above rules.
!default.mode1v3
!default.mode2v3
!default.pbxuser
!default.perspectivev3
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>9.0</string>
</dict>
</plist>
#include "Generated.xcconfig"
#include "Generated.xcconfig"
// !$*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.flutterCubit;
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.flutterCubit;
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.flutterCubit;
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>flutter_cubit</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 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter_auth_animation/constants.dart';
import 'package:flutter_auth_animation/widgets/login_form.dart';
import 'package:flutter_auth_animation/widgets/sign_up_form.dart';
import 'package:flutter_auth_animation/widgets/socal_buttons.dart';
import 'package:flutter_svg/flutter_svg.dart';
class AuthScreen extends StatefulWidget {
const AuthScreen({Key? key}) : super(key: key);
@override
_AuthScreenState createState() => _AuthScreenState();
}
class _AuthScreenState extends State<AuthScreen>
with SingleTickerProviderStateMixin {
bool _isShowSignUp = false ;
late AnimationController _animationController;
late Animation<double> _animationTextRotate;
void setupAnimation(){
_animationController = AnimationController(vsync: this, duration: defaultDuration);
_animationTextRotate = Tween<double>(begin: 0, end: 90).animate(_animationController);
}
void updateView() {
setState(() {
_isShowSignUp = !_isShowSignUp;
});
_isShowSignUp ? _animationController.forward() : _animationController.reverse();
}
@override
void initState(){
setupAnimation();
super.initState();
}
@override
void dispose() {
_animationController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final _size = MediaQuery.of(context).size;
return Scaffold(
body: AnimatedBuilder(
animation: _animationController,
builder: (context, _) {
return Stack(
children: [
//Login
AnimatedPositioned(
duration: defaultDuration,
width: _size.width *0.88,
height: _size.height,
left: _isShowSignUp ? -_size.width * 0.76 : 0,
child: Container(
color: login_bg,
child: LoginForm(),
),
),
//Sign Up
AnimatedPositioned(
duration: defaultDuration,
height: _size.height,
width: _size.width * 0.88,
left: _isShowSignUp ? _size.width * 0.12 : _size.width * 0.88,
child: Container(
color: signup_bg,
child: SignUpForm(),
)),
//Logo
AnimatedPositioned(
duration: defaultDuration,
right: _isShowSignUp ? - _size.width * 0.10 : _size.width * 0.10 ,
left: 0,
top: _size.height * 0.1 ,
child: CircleAvatar(
radius: 20,
backgroundColor: Colors.white60,
child: AnimatedSwitcher(
duration: defaultDuration,
child: _isShowSignUp
? SvgPicture.asset(
"assets/logo tl.svg",
color: signup_bg
)
: SvgPicture.asset(
"assets/logo tl.svg",
color: login_bg
),
),
),
),
AnimatedPositioned(
duration: defaultDuration,
bottom: _size.height * 0.1,
right: _isShowSignUp ? - _size.width * 0.06 : _size.width * 0.06 ,
width: _size.width,
child: SocalButtns(
),
),
//Login Text
AnimatedPositioned(
duration: defaultDuration,
bottom: _isShowSignUp ? _size.height /2 -80
:_size.height * 0.3,
left: _isShowSignUp ? 0 : _size.width * 0.44 - 80,
child: AnimatedDefaultTextStyle(
duration: defaultDuration,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: _isShowSignUp ? 20 : 32,
fontWeight: FontWeight.bold,
color: _isShowSignUp ? Colors.white : Colors.white70,
),
child: Transform.rotate(
angle: -_animationTextRotate.value * pi / 180 ,
alignment: Alignment.topLeft,
child: InkWell(
onTap: (){
if (_isShowSignUp) {
updateView();
} else {
//login
}
},
child: Container(
padding: const EdgeInsets.symmetric(
vertical: defpaultPadding * 0.75),
// color: Colors.red,
width: 160,
child: Text("Log in" . toUpperCase(),
),
),
),
),
),
),
//Sign up Text
AnimatedPositioned(
duration: defaultDuration,
bottom: !_isShowSignUp
? _size.height /2 -80
:_size.height * 0.3,
right: _isShowSignUp ? _size.width * 0.44 - 80 : 0 ,
child: AnimatedDefaultTextStyle(
duration: defaultDuration,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: !_isShowSignUp ? 20 : 32,
fontWeight: FontWeight.bold,
color: _isShowSignUp ? Colors.white : Colors.white70,
),
child: Transform.rotate(
angle: (90-_animationTextRotate.value) * pi / 180 ,
alignment: Alignment.topRight,
child: InkWell(
onTap: (){
if (_isShowSignUp) {
//Sign up
} else {
updateView();
}
},
child: Container(
padding: const EdgeInsets.symmetric(
vertical: defpaultPadding * 0.75),
// color: Colors.red,
width: 160,
child: Text("Sign Up" . toUpperCase(),
),
),
),
),
),
),
],
);
}
),
);
}
}
import 'package:flutter/material.dart';
const Color login_bg = Color(0xFF00C470);
const Color signup_bg = Color(0xFF000A54);
const double defpaultPadding = 16.0;
const Duration defaultDuration = Duration(milliseconds: 300);
import 'package:flutter/material.dart';
import 'package:flutter_auth_animation/pages/Welcome.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const Welcome()
);
}
}
import 'dart:ui';
class AppColors{
static final Color textColor1= Color(0xFF989acd);
static final Color textColor2 = Color(0xFF878593);
static final Color bigTextColor=Color(0xFF2e2e31);
static final Color mainColor= Color(0xFF5d69b3);
static final Color starColor = Color(0xFFe7bb4e);
static final Color mainTextColor = Color(0xFFababad);
static final Color buttonBackground = Color(0xFFf1f1f9);
}
\ No newline at end of file
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../misc/colors.dart';
import '../widgets/app_text.dart';
import '../widgets/app_text_large.dart';
import '../widgets/responsive_button.dart';
class Welcome extends StatefulWidget {
const Welcome({Key? key}) : super(key: key);
@override
State<Welcome> createState() => _WelcomeState();
}
class _WelcomeState extends State<Welcome> {
List images =[
"welcome-one.png",
"welcome-two.png",
"welcome-three.png",
];
List mainText =[
"Bus Rides",
"Train Rides",
"Combined Rides",
];
List subText =[
"Track your Bus",
"Track your Train",
"Track your Bus/Train",
];
List description =[
"We provide full fledged online bus tracking and scheduling platform to track real-time location of buses and get latest bus schedule data.",
"We provide full fledged online bus tracking and scheduling platform to track real-time location of buses and get latest bus schedule data.",
"We provide full fledged online bus tracking and scheduling platform to track real-time location of buses and get latest bus schedule data.",
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageView.builder(
scrollDirection: Axis.vertical, //vertical slider
itemCount: images.length, //number of items in the vertical slider is equal to the images declared in the 'images' list
itemBuilder: (_,index){ //slider widget
return Container(
width: double.maxFinite,
height: double.maxFinite,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
"img/"+images[index]
),
fit: BoxFit.cover
)
),
child: Container(
margin: const EdgeInsets.only(top:150, left:20, right: 20),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppLargeText(text: mainText[index]),
AppText(text: subText[index], size: 30),
SizedBox(height: 20),
Container(
width: 250,
child: AppText(
text: description[index],
color: AppColors.textColor2,
size: 14,
),
),
SizedBox(height: 40),
ResponsiveButton(width: 120,)
],
),//Col-1
Column(
children: List.generate(3, (indexDots){
return Container(
margin: const EdgeInsets.only(bottom: 2) ,
width: 8,
height: index==indexDots?25:8,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
color: index==indexDots?AppColors.mainColor:AppColors.mainColor.withOpacity(0.3)
),
);
}),
),
],
),
) ,
);
}),
);
}
}
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class AppText extends StatelessWidget {
double size;
final String text;
final Color color;
AppText({Key? key,
this.size=16,
required this.text,
this.color=Colors.black54}) : super(key: key);
@override
Widget build(BuildContext context) {
return Text(
text,
style: TextStyle(
color: color,
fontSize: size,
),
);
}
}
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class AppLargeText extends StatelessWidget {
double size;
final String text;
final Color color;
AppLargeText({Key? key,
this.size=30,
required this.text,
this.color=Colors.black}) : super(key: key);
@override
Widget build(BuildContext context) {
return Text(
text,
style: TextStyle(
color: color,
fontSize: size,
fontWeight: FontWeight.bold,
),
);
}
}
import 'package:flutter/material.dart';
import '../constants.dart';
class LoginForm extends StatelessWidget {
const LoginForm({
Key? key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.symmetric(
horizontal: MediaQuery.of(context).size.width * 0.13),
child: Form(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Spacer(),
TextFormField(
decoration: InputDecoration(
hintText: "Email",
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: defpaultPadding),
child: TextFormField(
obscureText: true,
decoration: InputDecoration(
hintText: "Password",
),
),
),
TextButton(
onPressed: () {},
child: Text(
"Forgot Password?",
style: TextStyle(color: Colors.white),
),
),
Spacer(flex: 2),
],
),
),
);
}
}
import 'package:flutter/cupertino.dart';
import '../misc/colors.dart';
class ResponsiveButton extends StatelessWidget {
bool? isResponsive;
double? width;
ResponsiveButton({Key? key,
this.isResponsive=false,
this.width,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
width: width,
height: 60,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(40),
color: AppColors.mainColor,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset("img/button-one.png")
],
),
);
}
}
import 'package:flutter/material.dart';
import '../constants.dart';
class SignUpForm extends StatelessWidget {
const SignUpForm({
Key? key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.symmetric(
horizontal: MediaQuery.of(context).size.width * 0.13),
child: Form(
child: Column(
children: [
Spacer(),
TextFormField(
decoration: InputDecoration(
hintText: "Email",
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: defpaultPadding),
child: TextFormField(
obscureText: true,
decoration: InputDecoration(
hintText: "Password",
),
),
),
TextFormField(
obscureText: true,
decoration: InputDecoration(
hintText: "Confirm Password",
),
),
Spacer(flex: 2)
],
),
),
);
}
}
import 'package:flutter/material.dart';
class SocalButtns extends StatelessWidget {
const SocalButtns({
Key? key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
IconButton(onPressed: () {}, icon: Image.asset("assets/fb.png")),
IconButton(onPressed: () {}, icon: Image.asset("assets/linkedin.png")),
IconButton(onPressed: () {}, icon: Image.asset("assets/twitter.png")),
],
);
}
}
# Flutter-related
**/Flutter/ephemeral/
**/Pods/
# Xcode-related
**/xcuserdata/
#include "ephemeral/Flutter-Generated.xcconfig"
#include "ephemeral/Flutter-Generated.xcconfig"
//
// Generated file. Do not edit.
//
import FlutterMacOS
import Foundation
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
}
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 51;
objects = {
/* Begin PBXAggregateTarget section */
33CC111A2044C6BA0003C045 /* Flutter Assemble */ = {
isa = PBXAggregateTarget;
buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */;
buildPhases = (
33CC111E2044C6BF0003C045 /* ShellScript */,
);
dependencies = (
);
name = "Flutter Assemble";
productName = FLX;
};
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 33CC111A2044C6BA0003C045;
remoteInfo = FLX;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
33CC110E2044A8840003C045 /* Bundle Framework */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
);
name = "Bundle Framework";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
33CC10ED2044A3C60003C045 /* flutter_auth_animation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "flutter_auth_animation.app"; sourceTree = BUILT_PRODUCTS_DIR; };
33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = "<group>"; };
33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = "<group>"; };
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = "<group>"; };
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = "<group>"; };
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = "<group>"; };
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; };
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
33CC10EA2044A3C60003C045 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
33BA886A226E78AF003329D5 /* Configs */ = {
isa = PBXGroup;
children = (
33E5194F232828860026EE4D /* AppInfo.xcconfig */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
333000ED22D3DE5D00554162 /* Warnings.xcconfig */,
);
path = Configs;
sourceTree = "<group>";
};
33CC10E42044A3C60003C045 = {
isa = PBXGroup;
children = (
33FAB671232836740065AC1E /* Runner */,
33CEB47122A05771004F2AC0 /* Flutter */,
33CC10EE2044A3C60003C045 /* Products */,
D73912EC22F37F3D000D13A0 /* Frameworks */,
);
sourceTree = "<group>";
};
33CC10EE2044A3C60003C045 /* Products */ = {
isa = PBXGroup;
children = (
33CC10ED2044A3C60003C045 /* flutter_auth_animation.app */,
);
name = Products;
sourceTree = "<group>";
};
33CC11242044D66E0003C045 /* Resources */ = {
isa = PBXGroup;
children = (
33CC10F22044A3C60003C045 /* Assets.xcassets */,
33CC10F42044A3C60003C045 /* MainMenu.xib */,
33CC10F72044A3C60003C045 /* Info.plist */,
);
name = Resources;
path = ..;
sourceTree = "<group>";
};
33CEB47122A05771004F2AC0 /* Flutter */ = {
isa = PBXGroup;
children = (
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */,
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
);
path = Flutter;
sourceTree = "<group>";
};
33FAB671232836740065AC1E /* Runner */ = {
isa = PBXGroup;
children = (
33CC10F02044A3C60003C045 /* AppDelegate.swift */,
33CC11122044BFA00003C045 /* MainFlutterWindow.swift */,
33E51913231747F40026EE4D /* DebugProfile.entitlements */,
33E51914231749380026EE4D /* Release.entitlements */,
33CC11242044D66E0003C045 /* Resources */,
33BA886A226E78AF003329D5 /* Configs */,
);
path = Runner;
sourceTree = "<group>";
};
D73912EC22F37F3D000D13A0 /* Frameworks */ = {
isa = PBXGroup;
children = (
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
33CC10EC2044A3C60003C045 /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
33CC10E92044A3C60003C045 /* Sources */,
33CC10EA2044A3C60003C045 /* Frameworks */,
33CC10EB2044A3C60003C045 /* Resources */,
33CC110E2044A8840003C045 /* Bundle Framework */,
3399D490228B24CF009A79C7 /* ShellScript */,
);
buildRules = (
);
dependencies = (
33CC11202044C79F0003C045 /* PBXTargetDependency */,
);
name = Runner;
productName = Runner;
productReference = 33CC10ED2044A3C60003C045 /* flutter_auth_animation.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
33CC10E52044A3C60003C045 /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0920;
LastUpgradeCheck = 0930;
ORGANIZATIONNAME = "";
TargetAttributes = {
33CC10EC2044A3C60003C045 = {
CreatedOnToolsVersion = 9.2;
LastSwiftMigration = 1100;
ProvisioningStyle = Automatic;
SystemCapabilities = {
com.apple.Sandbox = {
enabled = 1;
};
};
};
33CC111A2044C6BA0003C045 = {
CreatedOnToolsVersion = 9.2;
ProvisioningStyle = Manual;
};
};
};
buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 33CC10E42044A3C60003C045;
productRefGroup = 33CC10EE2044A3C60003C045 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
33CC10EC2044A3C60003C045 /* Runner */,
33CC111A2044C6BA0003C045 /* Flutter Assemble */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
33CC10EB2044A3C60003C045 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
3399D490228B24CF009A79C7 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n";
};
33CC111E2044C6BF0003C045 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
Flutter/ephemeral/FlutterInputs.xcfilelist,
);
inputPaths = (
Flutter/ephemeral/tripwire,
);
outputFileListPaths = (
Flutter/ephemeral/FlutterOutputs.xcfilelist,
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
33CC10E92044A3C60003C045 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */,
33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */,
335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
33CC11202044C79F0003C045 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */;
targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
33CC10F42044A3C60003C045 /* MainMenu.xib */ = {
isa = PBXVariantGroup;
children = (
33CC10F52044A3C60003C045 /* Base */,
);
name = MainMenu.xib;
path = Runner;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
338D0CE9231458BD00FA5F75 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
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_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
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_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.11;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
};
name = Profile;
};
338D0CEA231458BD00FA5F75 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
};
name = Profile;
};
338D0CEB231458BD00FA5F75 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Manual;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Profile;
};
33CC10F92044A3C60003C045 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
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_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
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_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
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_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.11;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
33CC10FA2044A3C60003C045 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
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_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
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_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.11;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
};
name = Release;
};
33CC10FC2044A3C60003C045 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
};
name = Debug;
};
33CC10FD2044A3C60003C045 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
};
name = Release;
};
33CC111C2044C6BA0003C045 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Manual;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
33CC111D2044C6BA0003C045 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
33CC10F92044A3C60003C045 /* Debug */,
33CC10FA2044A3C60003C045 /* Release */,
338D0CE9231458BD00FA5F75 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
33CC10FC2044A3C60003C045 /* Debug */,
33CC10FD2044A3C60003C045 /* Release */,
338D0CEA231458BD00FA5F75 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = {
isa = XCConfigurationList;
buildConfigurations = (
33CC111C2044C6BA0003C045 /* Debug */,
33CC111D2044C6BA0003C045 /* Release */,
338D0CEB231458BD00FA5F75 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 33CC10E52044A3C60003C045 /* Project object */;
}
<?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"?>
<Scheme
LastUpgradeVersion = "1000"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
BuildableName = "flutter_auth_animation.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
BuildableName = "flutter_auth_animation.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 = "33CC10EC2044A3C60003C045"
BuildableName = "flutter_auth_animation.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 = "33CC10EC2044A3C60003C045"
BuildableName = "flutter_auth_animation.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>
import Cocoa
import FlutterMacOS
@NSApplicationMain
class AppDelegate: FlutterAppDelegate {
override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true
}
}
{
"images" : [
{
"size" : "16x16",
"idiom" : "mac",
"filename" : "app_icon_16.png",
"scale" : "1x"
},
{
"size" : "16x16",
"idiom" : "mac",
"filename" : "app_icon_32.png",
"scale" : "2x"
},
{
"size" : "32x32",
"idiom" : "mac",
"filename" : "app_icon_32.png",
"scale" : "1x"
},
{
"size" : "32x32",
"idiom" : "mac",
"filename" : "app_icon_64.png",
"scale" : "2x"
},
{
"size" : "128x128",
"idiom" : "mac",
"filename" : "app_icon_128.png",
"scale" : "1x"
},
{
"size" : "128x128",
"idiom" : "mac",
"filename" : "app_icon_256.png",
"scale" : "2x"
},
{
"size" : "256x256",
"idiom" : "mac",
"filename" : "app_icon_256.png",
"scale" : "1x"
},
{
"size" : "256x256",
"idiom" : "mac",
"filename" : "app_icon_512.png",
"scale" : "2x"
},
{
"size" : "512x512",
"idiom" : "mac",
"filename" : "app_icon_512.png",
"scale" : "1x"
},
{
"size" : "512x512",
"idiom" : "mac",
"filename" : "app_icon_1024.png",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
<connections>
<outlet property="delegate" destination="Voe-Tx-rLC" id="GzC-gU-4Uq"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Runner" customModuleProvider="target">
<connections>
<outlet property="applicationMenu" destination="uQy-DD-JDr" id="XBo-yE-nKs"/>
<outlet property="mainFlutterWindow" destination="QvC-M9-y7g" id="gIp-Ho-8D9"/>
</connections>
</customObject>
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
<items>
<menuItem title="APP_NAME" id="1Xt-HY-uBw">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="APP_NAME" systemMenu="apple" id="uQy-DD-JDr">
<items>
<menuItem title="About APP_NAME" id="5kV-Vb-QxS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/>
<menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
<menuItem title="Services" id="NMo-om-nkz">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
<menuItem title="Hide APP_NAME" keyEquivalent="h" id="Olw-nP-bQN">
<connections>
<action selector="hide:" target="-1" id="PnN-Uc-m68"/>
</connections>
</menuItem>
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/>
</connections>
</menuItem>
<menuItem title="Show All" id="Kd2-mp-pUS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
<menuItem title="Quit APP_NAME" keyEquivalent="q" id="4sb-4s-VLi">
<connections>
<action selector="terminate:" target="-1" id="Te7-pn-YzF"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Edit" id="5QF-Oa-p0T">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Edit" id="W48-6f-4Dl">
<items>
<menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg">
<connections>
<action selector="undo:" target="-1" id="M6e-cu-g7V"/>
</connections>
</menuItem>
<menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam">
<connections>
<action selector="redo:" target="-1" id="oIA-Rs-6OD"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/>
<menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG">
<connections>
<action selector="cut:" target="-1" id="YJe-68-I9s"/>
</connections>
</menuItem>
<menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU">
<connections>
<action selector="copy:" target="-1" id="G1f-GL-Joy"/>
</connections>
</menuItem>
<menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL">
<connections>
<action selector="paste:" target="-1" id="UvS-8e-Qdg"/>
</connections>
</menuItem>
<menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="pasteAsPlainText:" target="-1" id="cEh-KX-wJQ"/>
</connections>
</menuItem>
<menuItem title="Delete" id="pa3-QI-u2k">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="delete:" target="-1" id="0Mk-Ml-PaM"/>
</connections>
</menuItem>
<menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m">
<connections>
<action selector="selectAll:" target="-1" id="VNm-Mi-diN"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
<menuItem title="Find" id="4EN-yA-p0u">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Find" id="1b7-l0-nxx">
<items>
<menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W">
<connections>
<action selector="performFindPanelAction:" target="-1" id="cD7-Qs-BN4"/>
</connections>
</menuItem>
<menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="performFindPanelAction:" target="-1" id="WD3-Gg-5AJ"/>
</connections>
</menuItem>
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye">
<connections>
<action selector="performFindPanelAction:" target="-1" id="NDo-RZ-v9R"/>
</connections>
</menuItem>
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV">
<connections>
<action selector="performFindPanelAction:" target="-1" id="HOh-sY-3ay"/>
</connections>
</menuItem>
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
<connections>
<action selector="performFindPanelAction:" target="-1" id="U76-nv-p5D"/>
</connections>
</menuItem>
<menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd">
<connections>
<action selector="centerSelectionInVisibleArea:" target="-1" id="IOG-6D-g5B"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Spelling and Grammar" id="Dv1-io-Yv7">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Spelling" id="3IN-sU-3Bg">
<items>
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI">
<connections>
<action selector="showGuessPanel:" target="-1" id="vFj-Ks-hy3"/>
</connections>
</menuItem>
<menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7">
<connections>
<action selector="checkSpelling:" target="-1" id="fz7-VC-reM"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="bNw-od-mp5"/>
<menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleContinuousSpellChecking:" target="-1" id="7w6-Qz-0kB"/>
</connections>
</menuItem>
<menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleGrammarChecking:" target="-1" id="muD-Qn-j4w"/>
</connections>
</menuItem>
<menuItem title="Correct Spelling Automatically" id="78Y-hA-62v">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticSpellingCorrection:" target="-1" id="2lM-Qi-WAP"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Substitutions" id="9ic-FL-obx">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Substitutions" id="FeM-D8-WVr">
<items>
<menuItem title="Show Substitutions" id="z6F-FW-3nz">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontSubstitutionsPanel:" target="-1" id="oku-mr-iSq"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/>
<menuItem title="Smart Copy/Paste" id="9yt-4B-nSM">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleSmartInsertDelete:" target="-1" id="3IJ-Se-DZD"/>
</connections>
</menuItem>
<menuItem title="Smart Quotes" id="hQb-2v-fYv">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="ptq-xd-QOA"/>
</connections>
</menuItem>
<menuItem title="Smart Dashes" id="rgM-f4-ycn">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticDashSubstitution:" target="-1" id="oCt-pO-9gS"/>
</connections>
</menuItem>
<menuItem title="Smart Links" id="cwL-P1-jid">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticLinkDetection:" target="-1" id="Gip-E3-Fov"/>
</connections>
</menuItem>
<menuItem title="Data Detectors" id="tRr-pd-1PS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticDataDetection:" target="-1" id="R1I-Nq-Kbl"/>
</connections>
</menuItem>
<menuItem title="Text Replacement" id="HFQ-gK-NFA">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticTextReplacement:" target="-1" id="DvP-Fe-Py6"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Transformations" id="2oI-Rn-ZJC">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Transformations" id="c8a-y6-VQd">
<items>
<menuItem title="Make Upper Case" id="vmV-6d-7jI">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="uppercaseWord:" target="-1" id="sPh-Tk-edu"/>
</connections>
</menuItem>
<menuItem title="Make Lower Case" id="d9M-CD-aMd">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="lowercaseWord:" target="-1" id="iUZ-b5-hil"/>
</connections>
</menuItem>
<menuItem title="Capitalize" id="UEZ-Bs-lqG">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="capitalizeWord:" target="-1" id="26H-TL-nsh"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Speech" id="xrE-MZ-jX0">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Speech" id="3rS-ZA-NoH">
<items>
<menuItem title="Start Speaking" id="Ynk-f8-cLZ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="startSpeaking:" target="-1" id="654-Ng-kyl"/>
</connections>
</menuItem>
<menuItem title="Stop Speaking" id="Oyz-dy-DGm">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="stopSpeaking:" target="-1" id="dX8-6p-jy9"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="View" id="H8h-7b-M4v">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="View" id="HyV-fh-RgO">
<items>
<menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa">
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
<connections>
<action selector="toggleFullScreen:" target="-1" id="dU3-MA-1Rq"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Window" id="aUF-d1-5bR">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
<items>
<menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
<connections>
<action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/>
</connections>
</menuItem>
<menuItem title="Zoom" id="R4o-n2-Eq4">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="performZoom:" target="-1" id="DIl-cC-cCs"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
<point key="canvasLocation" x="142" y="-258"/>
</menu>
<window title="APP_NAME" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g" customClass="MainFlutterWindow" customModule="Runner" customModuleProvider="target">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<rect key="contentRect" x="335" y="390" width="800" height="600"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1577"/>
<view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
<rect key="frame" x="0.0" y="0.0" width="800" height="600"/>
<autoresizingMask key="autoresizingMask"/>
</view>
</window>
</objects>
</document>
// Application-level settings for the Runner target.
//
// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the
// future. If not, the values below would default to using the project name when this becomes a
// 'flutter create' template.
// The application's name. By default this is also the title of the Flutter window.
PRODUCT_NAME = flutter_auth_animation
// The application's bundle identifier
PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterAuthAnimation
// The copyright displayed in application information
PRODUCT_COPYRIGHT = Copyright © 2021 com.example. All rights reserved.
#include "../../Flutter/Flutter-Debug.xcconfig"
#include "Warnings.xcconfig"
#include "../../Flutter/Flutter-Release.xcconfig"
#include "Warnings.xcconfig"
WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings
GCC_WARN_UNDECLARED_SELECTOR = YES
CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
CLANG_WARN_PRAGMA_PACK = YES
CLANG_WARN_STRICT_PROTOTYPES = YES
CLANG_WARN_COMMA = YES
GCC_WARN_STRICT_SELECTOR_MATCH = YES
CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
GCC_WARN_SHADOW = YES
CLANG_WARN_UNREACHABLE_CODE = YES
<?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>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.network.server</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>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>NSHumanReadableCopyright</key>
<string>$(PRODUCT_COPYRIGHT)</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
import Cocoa
import FlutterMacOS
class MainFlutterWindow: NSWindow {
override func awakeFromNib() {
let flutterViewController = FlutterViewController.init()
let windowFrame = self.frame
self.contentViewController = flutterViewController
self.setFrame(windowFrame, display: true)
RegisterGeneratedPlugins(registry: flutterViewController)
super.awakeFromNib()
}
}
<?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>com.apple.security.app-sandbox</key>
<true/>
</dict>
</plist>
# 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.2"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.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"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0"
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"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.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"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.11"
material:
dependency: "direct main"
description:
name: material
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0+2"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.7.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"
petitparser:
dependency: transitive
description:
name: petitparser
url: "https://pub.dartlang.org"
source: hosted
version: "4.1.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.8"
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.1"
xml:
dependency: transitive
description:
name: xml
url: "https://pub.dartlang.org"
source: hosted
version: "5.1.2"
sdks:
dart: ">=2.14.0 <3.0.0"
flutter: ">=1.24.0-7.0"
name: flutter_auth_animation
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
flutter_svg: ^0.22.0
material: ^1.0.0+2
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/a_dot_ham.jpeg
# 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
from helpers import load_map_test, load_map_bus, load_map_train,route_177
import math
val = 0
class PathPlanner():
def __init__(self, M, start=None, goal=None, type=None):
self.map = M
self.start= start
self.goal = goal
self.type = type
self.dis = 0
self.closedSet = self.create_closedSet() if goal != None and start != None else None
self.openSet = self.create_openSet() if goal != None and start != None else None
self.cameFrom = self.create_cameFrom() if goal != None and start != None else None
self.gScore = self.create_gScore() if goal != None and start != None else None
self.fScore = self.create_fScore() if goal != None and start != None else None
self.path = self.run_search() if self.map and self.start != None and self.goal != None else None
def reconstruct_path(self, current):
total_path = [current]
while current in self.cameFrom.keys():
current = self.cameFrom[current]
total_path.append(current)
return total_path
def _reset(self):
self.closedSet = None
self.openSet = None
self.cameFrom = None
self.gScore = None
self.fScore = None
self.path = self.run_search() if self.map and self.start and self.goal else None
def run_search(self):
""" """
if self.map == None:
raise(ValueError, "Must create map before running search")
if self.goal == None:
raise(ValueError, "Must create goal node before running search")
if self.start == None:
raise(ValueError, "Must create start node before running search")
self.closedSet = self.closedSet if self.closedSet != None else self.create_closedSet()
self.openSet = self.openSet if self.openSet != None else self.create_openSet()
self.cameFrom = self.cameFrom if self.cameFrom != None else self.create_cameFrom()
self.gScore = self.gScore if self.gScore != None else self.create_gScore()
self.fScore = self.fScore if self.fScore != None else self.create_fScore()
while not self.is_open_empty():
current = self.get_current_node()
if current == self.goal:
self.path = [x for x in reversed(self.reconstruct_path(current))]
return self.path
else:
self.openSet.remove(current)
self.closedSet.add(current)
for neighbor in self.get_neighbors(current):
if neighbor in self.closedSet:
continue # Ignore the neighbor which is already evaluated.
if not neighbor in self.openSet: # Discover a new node
self.openSet.add(neighbor)
# The distance from start to a neighbor
if self.getTempGScore(current, neighbor) >= self.get_gScore(neighbor):
continue
# This path is the best until now. Record it!
global val #
val = val + self.dis
self.record_best_path_to(current, neighbor)
print("No Path Found")
self.path = None
return False
def create_closedSet(self):
return set()
def create_openSet(self):
openSet = set()
openSet.add(self.start)
return openSet
def create_cameFrom(self):
cameFrom = {}
return cameFrom
def create_gScore(self):
gScore = {}
for node in self.map.intersections.keys():
if node == self.start:
gScore[node] = 0
else: gScore[node] = float('inf')
return gScore
def create_fScore(self):
if self.start != None:
fScore = {}
for node in self.map.intersections.keys():
if node == self.start:
fScore[node] = self.heuristic_cost_estimate(self.start)
else: fScore[node] = float('inf')
return fScore
raise(ValueError, "Must create start node before creating fScore.")
def set_map(self, M):
"set map attribute "
self._reset(self)
self.start = None
self.goal = None
self.map = M
def set_start(self, start):
" set start attribute "
self._reset(self)
self.start = start
self.goal = None
def set_goal(self, goal):
"set goal attribute "
self._reset(self)
self.goal = goal
#-------------------------------- get information --------------------------------#
def is_open_empty(self):
"returns True if the open set is empty"
return not bool(self.openSet)
def get_current_node(self):
" Returns the node in the open set with the lowest value of f(node)"
current = None
minim = float('inf')
for node in self.openSet:
if self.fScore[node] < minim:
minim = self.fScore[node]
current = node
return current
def get_neighbors(self, node):
"""Returns the neighbors of a node"""
return set(self.map.roads[node])
def get_traveled_distance(self):
#traveled_distance
return self.dis
#-------------------------------- Calculations --------------------------------#
def get_gScore(self, node):
return self.gScore[node]
def getTempGScore(self, current, neighbor):
# distance from the current node to it's neighbors
g_score_current = self.get_gScore(current)
dist_current_neighbor = self.distance(current,neighbor)
return g_score_current+dist_current_neighbor
def heuristic_cost_estimate(self, node):
if self.goal != None:
heuristic_estimate = self.distance(node,self.goal)
return heuristic_estimate
raise(ValueError, "Must create goal node before calculating huristic ")
def calculate_fscore(self, node):
# F = G + H
f_score = self.get_gScore(node) + self.heuristic_cost_estimate(node)
return f_score
# best path
def record_best_path_to(self, current, neighbor):
self.cameFrom[neighbor] = current
self.gScore[neighbor] = self.getTempGScore(current,neighbor)
self.fScore[neighbor] = self.gScore[neighbor] + self.heuristic_cost_estimate(neighbor)
def distance(self, node_1, node_2):
from math import radians, cos, sin, asin, sqrt
#The math module contains a function named
#radians which converts from degrees to radians.
lon1 = radians(self.map.intersections [node_1][0])
lon2 = radians(self.map.intersections [node_2][0])
lat1 = radians(self.map.intersections [node_1][1])
lat2 = radians(self.map.intersections [node_2][1])
# Haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
c = 2 * asin(sqrt(a))
# Radius of earth in kilometers. Use 3956 for miles
r = 6371
# calculate the result
dist = (c * r)
#print (dist)
self.dis = dist
return dist
# Get route
def main( a, node1, node2):
if a == 3:
map = load_map_train()
elif a == 2:
map = load_map_bus()
else:
map = load_map_test()
planner = PathPlanner(map,node1,node2)
print(map.roads)
path = planner.path
print('distance =' ,val)
if path == [5, 16, 37, 12, 34]:
print("code works for test path!!!")
print(path)
else:
print("Genarated path")
print(path)
# for x in path:
# if routeNo
# print (x)
#for each in path:
main( 1, 2, 14)
\ No newline at end of file
import networkx as nx
import pickle
from chart_studio import plotly as py
import random
from plotly.graph_objs import *
from plotly.offline import init_notebook_mode, plot, iplot
#init_notebook_mode(connected=True)
route_177 = {
1: 34,
2: 42,
3: 54,
4: 67,
5: 80,
6: 92,
7: 105,
8: 109,
9: 117,
10: 126,
11: 134,
12: 140,
13: 149,
14: 157,
15: 163,
}
map_test = {
0: {'pos': (6.911034627182109, 79.84918916006576), 'connections': [1], 'name' : 'Kollupitiya','type': 0,'routeNo': 177, 'hValue': 1},
1: {'pos': (6.911751932322411, 79.86194701315071), 'connections': [0,2], 'name' : 'Viharamahadevi Park', 'type': 0, 'routeNo': 177, 'hValue': 1},
2: {'pos': (6.911385550864001, 79.87682791026592), 'connections': [1,3], 'name' : 'House Of Fashion', 'type': 0, 'routeNo': 177, 'hValue': 1},
3: {'pos': (6.911031363415147, 79.88498429384545), 'connections': [2,4], 'name' : 'Castle Street', 'type': 0, 'routeNo': 177, 'hValue': 1},
4: {'pos': (6.908462881966912, 79.89338919261249), 'connections': [3,5], 'name' : 'Rajagiriya', 'type': 0, 'routeNo': 177, 'hValue': 1},
5: {'pos': (6.906663916178293, 79.90205413217801), 'connections': [4,6], 'name' : 'Hsbc Rajagiriya', 'type': 0, 'routeNo': 177, 'hValue': 1},
6: {'pos': (6.90333333857459, 79.90747047529919), 'connections': [5,7], 'name' : 'Ethulkotte New', 'type': 0, 'routeNo': 177, 'hValue': 1},
7: {'pos': (6.903185701293392, 79.91168232658337), 'connections': [6,8], 'name' : 'Parliament Junction', 'type': 0, 'routeNo': 177, 'hValue': 1},
8: {'pos': (6.902102452411621, 79.91741047710077), 'connections': [7,9], 'name' : 'Battaramulla Junction', 'type': 0, 'routeNo': 177, 'hValue': 1},
9: {'pos': (6.90431022366131, 79.92400480782847), 'connections': [8,10], 'name' : 'Ganahena', 'type': 0, 'routeNo': 177, 'hValue': 1},
10: {'pos': (6.906173952520986, 79.92862087153598), 'connections': [9,11], 'name' : 'Koswatta', 'type': 0, 'routeNo': 177, 'hValue': 1},
11: {'pos': (6.9084657304543455, 79.9383708894408), 'connections': [10,12], 'name' : 'Kotte-Bope', 'type': 0, 'routeNo': 177, 'hValue': 1},
12: {'pos': (6.9085023402918155, 79.94425286198016), 'connections': [11,13], 'name' : 'Thalahena Junction', 'type': 0, 'routeNo': 177, 'hValue': 1},
13: {'pos': (6.903962700873259, 79.95430199947661), 'connections': [12,14], 'name' : 'Malabe', 'type': 0, 'routeNo': 177, 'hValue': 1},
14: {'pos': (6.933539686667202, 79.85005389798111), 'connections': [15], 'name' : 'Fort', 'type': 1, 'routeNo': 8717, 'hValue': 1},
15: {'pos': (6.923619774894732, 79.84965509086771), 'connections': [14,16], 'name' : 'Kompannavidiya', 'type': 1, 'routeNo': 8717, 'hValue': 1},
16: {'pos': (6.911282166657041, 79.84821747831087), 'connections': [15,1,17], 'name' : 'Kollupitiya', 'type': 1, 'routeNo': 8717, 'hValue': 1},
17: {'pos': (6.893710110662125, 79.85300590028642), 'connections': [16,18], 'name' : 'Bambalapitiya', 'type': 1, 'routeNo': 8717, 'hValue': 1},
18: {'pos': (6.875030063532378, 79.85744793142631), 'connections': [17,19], 'name' : 'Wellawatte', 'type': 1, 'routeNo': 8717, 'hValue': 1},
19: {'pos': (6.850915755796403, 79.8620969312958), 'connections': [18], 'name' : 'Dehiwala ', 'type': 1, 'routeNo': 8717, 'hValue': 1},
}
class Map:
def __init__(self, G):
self._graph = G
self.intersections = nx.get_node_attributes(G, "pos")
self.routeNo = nx.get_node_attributes(G, "routeNo")
self.type = nx.get_node_attributes(G, "type")
self.roads = [list(G[node]) for node in G.nodes()]
def save(self, filename):
with open(filename, 'wb') as f:
pickle.dump(self._graph, f)
def load_map_graph(map_dict):
G = nx.Graph()
for node in map_dict.keys():
G.add_node(node, pos=map_dict[node]['pos'], type=map_dict[node]['type'],routeNo=map_dict[node]['routeNo'])
for node in map_dict.keys():
for con_node in map_dict[node]['connections']:
G.add_edge(node, con_node)
return G
def load_map_b(map_dict):
# G = nx.Graph()
# for node in map_dict.keys():
# #nodeValue =
# if map_dict[node]['type'] != 1:
# continue
# else:
# G.add_node(node, pos=map_dict[node]['pos'], type=map_dict[node]['type'],routeNo=map_dict[node]['routeNo'])
G = nx.Graph()
for node in map_dict.keys():
G.add_node(node, pos=map_dict[node]['pos'], type=map_dict[node]['type'],routeNo=map_dict[node]['routeNo'])
# for node in map_dict.keys():
# for con_node in map_dict[node]['connections']:
# if map_dict[con_node]['type'] != 1:
# continue
# else:
# G.add_edge(node, con_node)
for node in map_dict.keys():
for con_node in map_dict[node]['connections']:
if map_dict[node]['type'] != 1:
continue
elif map_dict[con_node]['type'] != 1:
continue
else:
G.add_edge(node, con_node)
return G
#map for train
def load_map_t(map_dict):
G = nx.Graph()
for node in map_dict.keys():
G.add_node(node, pos=map_dict[node]['pos'], type=map_dict[node]['type'],routeNo=map_dict[node]['routeNo'])
for node in map_dict.keys():
for con_node in map_dict[node]['connections']:
if map_dict[node]['type'] == 1:
continue
elif map_dict[con_node]['type'] == 1:
continue
else:
G.add_edge(node, con_node)
return G
def load_map_test():
G = load_map_graph(map_test)
return Map(G)
def load_map_bus():
G = load_map_b(map_test)
return Map(G)
def load_map_train():
G = load_map_t(map_test)
return Map(G)
from helpers import load_map_40
MAP_40_ANSWERS = [
(5, 34, [5, 16, 37, 12, 34]),
(5, 5, [5]),
(8, 24, [8, 14, 16, 37, 12, 17, 10, 24])
]
def test(shortest_path_function):
map_40 = load_map_40()
correct = 0
for start, goal, answer_path in MAP_40_ANSWERS:
path = shortest_path_function(map_40, start, goal).path
if path == answer_path:
correct += 1
print("For start:", start,
"Goal: ", goal,
"Your path:", path,
"Correct: ", answer_path)
else:
print("Error Testing faild !!!" )
if correct == len(MAP_40_ANSWERS):
print("All tests pass ")
else:
print("Only passed", correct, "/", len(MAP_40_ANSWERS), "test cases")
\ No newline at end of file
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "Travelle"
include ':app'
// 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:flutter_cubit/main.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(const 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);
});
}
from bs4 import BeautifulSoup
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
def weather(city):
city = city.replace(" ", "+")
res = requests.get(
f'https://www.google.com/search?q={city}&oq={city}&aqs=chrome.0.35i39l2j0l4j46j69i60.6128j1j7&sourceid=chrome&ie=UTF-8', headers=headers)
soup = BeautifulSoup(res.text, 'html.parser')
location = soup.select('#wob_loc')[0].getText().strip()
time = soup.select('#wob_dts')[0].getText().strip()
info = soup.select('#wob_dc')[0].getText().strip()
weather = soup.select('#wob_tm')[0].getText().strip()
return weather
<!DOCTYPE html>
<html>
<head>
<!--
If you are serving your web app in a path other than the root, change the
href value below to reflect the base path you are serving from.
The path provided below has to start and end with a slash "/" in order for
it to work correctly.
For more details:
* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
This is a placeholder for base href that will be replaced by the value of
the `--base-href` argument provided to `flutter build`.
-->
<base href="$FLUTTER_BASE_HREF">
<meta charset="UTF-8">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<meta name="description" content="A new Flutter project.">
<!-- iOS meta tags & icons -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="flutter_cubit">
<link rel="apple-touch-icon" href="icons/Icon-192.png">
<title>flutter_cubit</title>
<link rel="manifest" href="manifest.json">
</head>
<body>
<!-- This script installs service_worker.js to provide PWA functionality to
application. For more information, see:
https://developers.google.com/web/fundamentals/primers/service-workers -->
<script>
var serviceWorkerVersion = null;
var scriptLoaded = false;
function loadMainDartJs() {
if (scriptLoaded) {
return;
}
scriptLoaded = true;
var scriptTag = document.createElement('script');
scriptTag.src = 'main.dart.js';
scriptTag.type = 'application/javascript';
document.body.append(scriptTag);
}
if ('serviceWorker' in navigator) {
// Service workers are supported. Use them.
window.addEventListener('load', function () {
// Wait for registration to finish before dropping the <script> tag.
// Otherwise, the browser will load the script multiple times,
// potentially different versions.
var serviceWorkerUrl = 'flutter_service_worker.js?v=' + serviceWorkerVersion;
navigator.serviceWorker.register(serviceWorkerUrl)
.then((reg) => {
function waitForActivation(serviceWorker) {
serviceWorker.addEventListener('statechange', () => {
if (serviceWorker.state == 'activated') {
console.log('Installed new service worker.');
loadMainDartJs();
}
});
}
if (!reg.active && (reg.installing || reg.waiting)) {
// No active web worker and we have installed or are installing
// one for the first time. Simply wait for it to activate.
waitForActivation(reg.installing || reg.waiting);
} else if (!reg.active.scriptURL.endsWith(serviceWorkerVersion)) {
// When the app updates the serviceWorkerVersion changes, so we
// need to ask the service worker to update.
console.log('New service worker available.');
reg.update();
waitForActivation(reg.installing);
} else {
// Existing service worker is still good.
console.log('Loading app from service worker.');
loadMainDartJs();
}
});
// If service worker doesn't succeed in a reasonable amount of time,
// fallback to plaint <script> tag.
setTimeout(() => {
if (!scriptLoaded) {
console.warn(
'Failed to load app from service worker. Falling back to plain <script> tag.',
);
loadMainDartJs();
}
}, 4000);
});
} else {
// Service workers not supported. Just drop the <script> tag.
loadMainDartJs();
}
</script>
</body>
</html>
{
"name": "flutter_cubit",
"short_name": "flutter_cubit",
"start_url": ".",
"display": "standalone",
"background_color": "#0175C2",
"theme_color": "#0175C2",
"description": "A new Flutter project.",
"orientation": "portrait-primary",
"prefer_related_applications": false,
"icons": [
{
"src": "icons/Icon-192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "icons/Icon-512.png",
"sizes": "512x512",
"type": "image/png"
},
{
"src": "icons/Icon-maskable-192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "icons/Icon-maskable-512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
]
}
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