LastFeedbackBranch #48
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -111,7 +111,7 @@
|
||||
},
|
||||
{
|
||||
"name": "firebase_core",
|
||||
"rootUri": "file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-1.17.0",
|
||||
"rootUri": "file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-1.17.1",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.16"
|
||||
},
|
||||
@ -583,6 +583,18 @@
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.12"
|
||||
},
|
||||
{
|
||||
"name": "syncfusion_flutter_core",
|
||||
"rootUri": "file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/syncfusion_flutter_core-20.1.57",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.12"
|
||||
},
|
||||
{
|
||||
"name": "syncfusion_flutter_sliders",
|
||||
"rootUri": "file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/syncfusion_flutter_sliders-20.1.57",
|
||||
"packageUri": "lib/",
|
||||
"languageVersion": "2.12"
|
||||
},
|
||||
{
|
||||
"name": "term_glyph",
|
||||
"rootUri": "file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.2.0",
|
||||
@ -668,7 +680,7 @@
|
||||
"languageVersion": "2.16"
|
||||
}
|
||||
],
|
||||
"generated": "2022-05-25T09:46:23.172307Z",
|
||||
"generated": "2022-05-28T02:45:06.679946Z",
|
||||
"generator": "pub",
|
||||
"generatorVersion": "2.16.2"
|
||||
}
|
||||
|
@ -76,8 +76,8 @@ file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartl
|
||||
file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth_web-1.3.1/lib/
|
||||
firebase_core
|
||||
2.16
|
||||
file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-1.17.0/
|
||||
file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-1.17.0/lib/
|
||||
file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-1.17.1/
|
||||
file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-1.17.1/lib/
|
||||
firebase_core_platform_interface
|
||||
2.16
|
||||
file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core_platform_interface-4.4.0/
|
||||
@ -374,6 +374,14 @@ string_scanner
|
||||
2.12
|
||||
file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.1.0/
|
||||
file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.1.0/lib/
|
||||
syncfusion_flutter_core
|
||||
2.12
|
||||
file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/syncfusion_flutter_core-20.1.57/
|
||||
file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/syncfusion_flutter_core-20.1.57/lib/
|
||||
syncfusion_flutter_sliders
|
||||
2.12
|
||||
file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/syncfusion_flutter_sliders-20.1.57/
|
||||
file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/syncfusion_flutter_sliders-20.1.57/lib/
|
||||
term_glyph
|
||||
2.12
|
||||
file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.2.0/
|
||||
|
1
.dart_tool/version
Normal file
1
.dart_tool/version
Normal file
@ -0,0 +1 @@
|
||||
2.10.5
|
@ -1,7 +1,7 @@
|
||||
# This is a generated file; do not edit or check into version control.
|
||||
firebase_auth=C:\\src\\flutter_windows_2.10.5-stable\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\firebase_auth-1.4.1\\
|
||||
firebase_auth_web=C:\\src\\flutter_windows_2.10.5-stable\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\firebase_auth_web-1.3.1\\
|
||||
firebase_core=C:\\src\\flutter_windows_2.10.5-stable\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\firebase_core-1.17.0\\
|
||||
firebase_core=C:\\src\\flutter_windows_2.10.5-stable\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\firebase_core-1.17.1\\
|
||||
firebase_core_web=C:\\src\\flutter_windows_2.10.5-stable\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\firebase_core_web-1.6.4\\
|
||||
flutter_native_splash=C:\\src\\flutter_windows_2.10.5-stable\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\flutter_native_splash-2.1.6\\
|
||||
flutter_plugin_android_lifecycle=C:\\src\\flutter_windows_2.10.5-stable\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\flutter_plugin_android_lifecycle-2.0.6\\
|
||||
|
File diff suppressed because one or more lines are too long
@ -3,7 +3,7 @@
|
||||
#
|
||||
# For more info see: https://dart.dev/go/dot-packages-deprecation
|
||||
#
|
||||
# Generated by pub on 2022-05-25 11:46:23.161305.
|
||||
# Generated by pub on 2022-05-28 04:45:06.667944.
|
||||
archive:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/archive-3.3.0/lib/
|
||||
args:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/args-2.3.1/lib/
|
||||
async:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/async-2.8.2/lib/
|
||||
@ -22,7 +22,7 @@ file:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.
|
||||
firebase_auth:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-1.4.1/lib/
|
||||
firebase_auth_platform_interface:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth_platform_interface-4.3.1/lib/
|
||||
firebase_auth_web:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth_web-1.3.1/lib/
|
||||
firebase_core:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-1.17.0/lib/
|
||||
firebase_core:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-1.17.1/lib/
|
||||
firebase_core_platform_interface:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core_platform_interface-4.4.0/lib/
|
||||
firebase_core_web:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core_web-1.6.4/lib/
|
||||
flutter:file:///C:/src/flutter_windows_2.10.5-stable/flutter/packages/flutter/lib/
|
||||
@ -101,6 +101,8 @@ stack_trace:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/host
|
||||
stream_channel:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/stream_channel-2.1.0/lib/
|
||||
stream_transform:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/stream_transform-2.0.0/lib/
|
||||
string_scanner:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.1.0/lib/
|
||||
syncfusion_flutter_core:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/syncfusion_flutter_core-20.1.57/lib/
|
||||
syncfusion_flutter_sliders:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/syncfusion_flutter_sliders-20.1.57/lib/
|
||||
term_glyph:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.2.0/lib/
|
||||
test_api:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/test_api-0.4.8/lib/
|
||||
typed_data:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/typed_data-1.3.0/lib/
|
||||
|
BIN
build/ios/Debug-iphonesimulator/App.framework/App
Executable file
BIN
build/ios/Debug-iphonesimulator/App.framework/App
Executable file
Binary file not shown.
@ -0,0 +1,507 @@
|
||||
<?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>files</key>
|
||||
<dict>
|
||||
<key>Info.plist</key>
|
||||
<data>
|
||||
2WH3EkzfNpYxRzEQezsUEM18s6A=
|
||||
</data>
|
||||
<key>flutter_assets/AssetManifest.json</key>
|
||||
<data>
|
||||
SpQky+0xMW7M0HM2VxmEoXgajrg=
|
||||
</data>
|
||||
<key>flutter_assets/FontManifest.json</key>
|
||||
<data>
|
||||
nvolsdw14/yVLCY3gpVeLg+xhDs=
|
||||
</data>
|
||||
<key>flutter_assets/NOTICES.Z</key>
|
||||
<data>
|
||||
jWwcVuBiNgVjsZeHMvIvKkgWV7I=
|
||||
</data>
|
||||
<key>flutter_assets/assets/fonts/Courgette-Regular.ttf</key>
|
||||
<data>
|
||||
DmgmuS+PgP4uuAO9732BNVhF4oM=
|
||||
</data>
|
||||
<key>flutter_assets/assets/fonts/Sacramento-Regular.ttf</key>
|
||||
<data>
|
||||
u5QncqH2HC9swPmAqdo58fxgLQA=
|
||||
</data>
|
||||
<key>flutter_assets/assets/images/bild.png</key>
|
||||
<data>
|
||||
iWOUfyc8Fh8mmaASr1E0uPbqcBQ=
|
||||
</data>
|
||||
<key>flutter_assets/assets/images/flutter.png</key>
|
||||
<data>
|
||||
7BIdjPvrVubLWT4+uYh2iQxzs34=
|
||||
</data>
|
||||
<key>flutter_assets/assets/images/outdoor.png</key>
|
||||
<data>
|
||||
O72c7Sm0eoBwjElYC518JLdm6M4=
|
||||
</data>
|
||||
<key>flutter_assets/fonts/MaterialIcons-Regular.otf</key>
|
||||
<data>
|
||||
zg6AEuOKM55BH/RKiXqZqsORXXE=
|
||||
</data>
|
||||
<key>flutter_assets/isolate_snapshot_data</key>
|
||||
<data>
|
||||
/8YINIQYa2MGeFNAjTVvMEJmvKA=
|
||||
</data>
|
||||
<key>flutter_assets/kernel_blob.bin</key>
|
||||
<data>
|
||||
f44g3XGtbY22u5zIiH+q1OsNXUU=
|
||||
</data>
|
||||
<key>flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf</key>
|
||||
<data>
|
||||
P7bb/oR3EhwqCIH1M6LyTuBIWYU=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_google_places/assets/google_black.png</key>
|
||||
<data>
|
||||
gcHJexRXUa/eZ+zWzgfwxNGvVeI=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_google_places/assets/google_white.png</key>
|
||||
<data>
|
||||
/EjTyBzj/nusE+LbwLayR22clfo=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/facebook_new.png</key>
|
||||
<data>
|
||||
wsvjgJWTRgfpc2dHMHwZPKkyZGs=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/google_dark.png</key>
|
||||
<data>
|
||||
rpAxPEeBl3sL+Bt0aHp2hDmiONs=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/google_light.png</key>
|
||||
<data>
|
||||
yFU/skGVK140i1TenTibYoow7cQ=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/facebook_new.png</key>
|
||||
<data>
|
||||
C8ShmQ9LsdcExbbsghUpxj4h5Oo=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/google_dark.png</key>
|
||||
<data>
|
||||
ZxQ7Ofrt7UMTpSfPzye7CTJycXI=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/google_light.png</key>
|
||||
<data>
|
||||
7tff4P+ysEgljcgzmErrqfjcsWw=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/facebook_new.png</key>
|
||||
<data>
|
||||
XG2mV8SALzXfOu+sSsNb3CZwnZc=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/google_dark.png</key>
|
||||
<data>
|
||||
MjWIqUgu7liLZWzQeMGn8FFBd5Y=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/google_light.png</key>
|
||||
<data>
|
||||
AKzmlW2KCuNghpE/NjMH07X42V8=
|
||||
</data>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-brands-400.ttf</key>
|
||||
<data>
|
||||
9K4M4LFRtO0XT/e548Ht8/ou2QU=
|
||||
</data>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-regular-400.ttf</key>
|
||||
<data>
|
||||
TwxaL9PbSu7YG4pf8JX5PQN7/ow=
|
||||
</data>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-solid-900.ttf</key>
|
||||
<data>
|
||||
qCSzIeujm7QkMIhEZjtJuPn4xMA=
|
||||
</data>
|
||||
<key>flutter_assets/vm_snapshot_data</key>
|
||||
<data>
|
||||
kzk1wp8qHso+VmYD8lJ5+HidZCw=
|
||||
</data>
|
||||
</dict>
|
||||
<key>files2</key>
|
||||
<dict>
|
||||
<key>flutter_assets/AssetManifest.json</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
SpQky+0xMW7M0HM2VxmEoXgajrg=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
gHVDc1b762lxJMlHRsvBzuBqvciQiLwoMDuFCMYcGoo=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/FontManifest.json</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
nvolsdw14/yVLCY3gpVeLg+xhDs=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
3osED0JtIrnO/fLMgMteC7/ZcTHqyc+hk1ZDnZrqDDI=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/NOTICES.Z</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
jWwcVuBiNgVjsZeHMvIvKkgWV7I=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
mjjZmUY7Yb9Wu/akBkEvG5Iwb639jTIQLE9bvlflgkc=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/assets/fonts/Courgette-Regular.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
DmgmuS+PgP4uuAO9732BNVhF4oM=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
kUua74ktTfKWAKu+0oVRipQJA8nlchHWqq+OGq7JG/M=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/assets/fonts/Sacramento-Regular.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
u5QncqH2HC9swPmAqdo58fxgLQA=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
pbneZ75FSoJrRthYUS4y7sjDAxK+tMT4ZK7iOQQU6cU=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/assets/images/bild.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
iWOUfyc8Fh8mmaASr1E0uPbqcBQ=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
slX1+TexrVfK25R0I1rlZKWDGROenDfu5UuNtHPksNw=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/assets/images/flutter.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
7BIdjPvrVubLWT4+uYh2iQxzs34=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
vACRH1Ew1JRFlac8BFaCxcg9w8GDTb+9CEu0jZ3hz9k=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/assets/images/outdoor.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
O72c7Sm0eoBwjElYC518JLdm6M4=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
CypYw4nYvoPmgC/M7McGKwCRVnjHd2nPYK/6suc7JDw=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/fonts/MaterialIcons-Regular.otf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
zg6AEuOKM55BH/RKiXqZqsORXXE=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
TDYN86u6z4Vu7PyuO9xbDd/JyDIkfDi8ygoVQ6BE5ys=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/isolate_snapshot_data</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
/8YINIQYa2MGeFNAjTVvMEJmvKA=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
GiXyiy84iwHokWSI8cF+JQcEiNYwhXKJ6iopY39uCfo=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/kernel_blob.bin</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
f44g3XGtbY22u5zIiH+q1OsNXUU=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
1VR65Dn8a70tzXX3exRysSkAwaSnyv424i77ROPZlJo=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
P7bb/oR3EhwqCIH1M6LyTuBIWYU=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
x6NX+tjyECiQtyzbbjyY8U2zoZ7GDbJtE+T+k/dzgI0=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_google_places/assets/google_black.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
gcHJexRXUa/eZ+zWzgfwxNGvVeI=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
ac+pOdlI0CfP987EoH5lbG/G7qPkRm0o8fUXjoZQ0h8=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_google_places/assets/google_white.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
/EjTyBzj/nusE+LbwLayR22clfo=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
Baqn3AhGOQS1CMlsNaXeNDA+oQ+naYgqA+4heYl97iw=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/facebook_new.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
wsvjgJWTRgfpc2dHMHwZPKkyZGs=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
pxnNpeFWC8M+w0qsOisMJySqQlMqHFzIrzWC3NYWhJE=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/google_dark.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
rpAxPEeBl3sL+Bt0aHp2hDmiONs=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
xqAdoh5ef6DNW8CurveVgMot1bkwmdZRbAOwGkHrf9Q=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/google_light.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
yFU/skGVK140i1TenTibYoow7cQ=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
JIlZJwqXe8WyW9aq4kCb5secdhxkh7BXbILq4um+pc8=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/facebook_new.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
C8ShmQ9LsdcExbbsghUpxj4h5Oo=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
MWoizFjctw7wKOyXpv7J6j/S3vqqtZT7M4aMZ5S03VM=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/google_dark.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
ZxQ7Ofrt7UMTpSfPzye7CTJycXI=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
XODgPvRzzyvJITR9YTn71eiz479/YDlg2i0XJO4MFec=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/google_light.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
7tff4P+ysEgljcgzmErrqfjcsWw=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
4PWajBy+Yu+sO1ZSH5Ey46Q00l1Mb9Hp5hE1dUD+ZMY=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/facebook_new.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
XG2mV8SALzXfOu+sSsNb3CZwnZc=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
vz5RfgC+MGor2SKuMWaCJwbJ2RTdTT6jxIZwzceF/gs=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/google_dark.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
MjWIqUgu7liLZWzQeMGn8FFBd5Y=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
ZHcAi3UokXzMpeOUL0n4xUhkJFAefVH5lGql2DQdU64=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/google_light.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
AKzmlW2KCuNghpE/NjMH07X42V8=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
bXLPjBfQxF0mJKnumt7b+egkIvA6byvWCu7bqUODgXc=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-brands-400.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
9K4M4LFRtO0XT/e548Ht8/ou2QU=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
5OdoB6IaKslj5wfd/7NiMoNhjAQ0VySya9wj0Nr9/eY=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-regular-400.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
TwxaL9PbSu7YG4pf8JX5PQN7/ow=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
GmpZWgL5Po3urukCH4vQxdxDoXd8w56sQDVWoOBwCmk=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-solid-900.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
qCSzIeujm7QkMIhEZjtJuPn4xMA=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
+daTPQTFmkKsowvYjuw4u5y+tpsVR/1VDvc+ugvOeho=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/vm_snapshot_data</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
kzk1wp8qHso+VmYD8lJ5+HidZCw=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
SWudSb+UjFAbtsuvOflVVEzSQrNcWWVHTwGa+DH02Gs=
|
||||
</data>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>rules</key>
|
||||
<dict>
|
||||
<key>^.*</key>
|
||||
<true/>
|
||||
<key>^.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^Base\.lproj/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>1010</real>
|
||||
</dict>
|
||||
<key>^version.plist$</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>rules2</key>
|
||||
<dict>
|
||||
<key>.*\.dSYM($|/)</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>11</real>
|
||||
</dict>
|
||||
<key>^(.*/)?\.DS_Store$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>2000</real>
|
||||
</dict>
|
||||
<key>^.*</key>
|
||||
<true/>
|
||||
<key>^.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^Base\.lproj/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>1010</real>
|
||||
</dict>
|
||||
<key>^Info\.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^PkgInfo$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^embedded\.provisionprofile$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^version\.plist$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
build/ios/Debug-iphonesimulator/Runner.app/Frameworks/App.framework/App
Executable file
BIN
build/ios/Debug-iphonesimulator/Runner.app/Frameworks/App.framework/App
Executable file
Binary file not shown.
@ -0,0 +1,507 @@
|
||||
<?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>files</key>
|
||||
<dict>
|
||||
<key>Info.plist</key>
|
||||
<data>
|
||||
2WH3EkzfNpYxRzEQezsUEM18s6A=
|
||||
</data>
|
||||
<key>flutter_assets/AssetManifest.json</key>
|
||||
<data>
|
||||
SpQky+0xMW7M0HM2VxmEoXgajrg=
|
||||
</data>
|
||||
<key>flutter_assets/FontManifest.json</key>
|
||||
<data>
|
||||
nvolsdw14/yVLCY3gpVeLg+xhDs=
|
||||
</data>
|
||||
<key>flutter_assets/NOTICES.Z</key>
|
||||
<data>
|
||||
jWwcVuBiNgVjsZeHMvIvKkgWV7I=
|
||||
</data>
|
||||
<key>flutter_assets/assets/fonts/Courgette-Regular.ttf</key>
|
||||
<data>
|
||||
DmgmuS+PgP4uuAO9732BNVhF4oM=
|
||||
</data>
|
||||
<key>flutter_assets/assets/fonts/Sacramento-Regular.ttf</key>
|
||||
<data>
|
||||
u5QncqH2HC9swPmAqdo58fxgLQA=
|
||||
</data>
|
||||
<key>flutter_assets/assets/images/bild.png</key>
|
||||
<data>
|
||||
iWOUfyc8Fh8mmaASr1E0uPbqcBQ=
|
||||
</data>
|
||||
<key>flutter_assets/assets/images/flutter.png</key>
|
||||
<data>
|
||||
7BIdjPvrVubLWT4+uYh2iQxzs34=
|
||||
</data>
|
||||
<key>flutter_assets/assets/images/outdoor.png</key>
|
||||
<data>
|
||||
O72c7Sm0eoBwjElYC518JLdm6M4=
|
||||
</data>
|
||||
<key>flutter_assets/fonts/MaterialIcons-Regular.otf</key>
|
||||
<data>
|
||||
zg6AEuOKM55BH/RKiXqZqsORXXE=
|
||||
</data>
|
||||
<key>flutter_assets/isolate_snapshot_data</key>
|
||||
<data>
|
||||
/8YINIQYa2MGeFNAjTVvMEJmvKA=
|
||||
</data>
|
||||
<key>flutter_assets/kernel_blob.bin</key>
|
||||
<data>
|
||||
f44g3XGtbY22u5zIiH+q1OsNXUU=
|
||||
</data>
|
||||
<key>flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf</key>
|
||||
<data>
|
||||
P7bb/oR3EhwqCIH1M6LyTuBIWYU=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_google_places/assets/google_black.png</key>
|
||||
<data>
|
||||
gcHJexRXUa/eZ+zWzgfwxNGvVeI=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_google_places/assets/google_white.png</key>
|
||||
<data>
|
||||
/EjTyBzj/nusE+LbwLayR22clfo=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/facebook_new.png</key>
|
||||
<data>
|
||||
wsvjgJWTRgfpc2dHMHwZPKkyZGs=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/google_dark.png</key>
|
||||
<data>
|
||||
rpAxPEeBl3sL+Bt0aHp2hDmiONs=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/google_light.png</key>
|
||||
<data>
|
||||
yFU/skGVK140i1TenTibYoow7cQ=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/facebook_new.png</key>
|
||||
<data>
|
||||
C8ShmQ9LsdcExbbsghUpxj4h5Oo=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/google_dark.png</key>
|
||||
<data>
|
||||
ZxQ7Ofrt7UMTpSfPzye7CTJycXI=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/google_light.png</key>
|
||||
<data>
|
||||
7tff4P+ysEgljcgzmErrqfjcsWw=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/facebook_new.png</key>
|
||||
<data>
|
||||
XG2mV8SALzXfOu+sSsNb3CZwnZc=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/google_dark.png</key>
|
||||
<data>
|
||||
MjWIqUgu7liLZWzQeMGn8FFBd5Y=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/google_light.png</key>
|
||||
<data>
|
||||
AKzmlW2KCuNghpE/NjMH07X42V8=
|
||||
</data>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-brands-400.ttf</key>
|
||||
<data>
|
||||
9K4M4LFRtO0XT/e548Ht8/ou2QU=
|
||||
</data>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-regular-400.ttf</key>
|
||||
<data>
|
||||
TwxaL9PbSu7YG4pf8JX5PQN7/ow=
|
||||
</data>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-solid-900.ttf</key>
|
||||
<data>
|
||||
qCSzIeujm7QkMIhEZjtJuPn4xMA=
|
||||
</data>
|
||||
<key>flutter_assets/vm_snapshot_data</key>
|
||||
<data>
|
||||
kzk1wp8qHso+VmYD8lJ5+HidZCw=
|
||||
</data>
|
||||
</dict>
|
||||
<key>files2</key>
|
||||
<dict>
|
||||
<key>flutter_assets/AssetManifest.json</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
SpQky+0xMW7M0HM2VxmEoXgajrg=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
gHVDc1b762lxJMlHRsvBzuBqvciQiLwoMDuFCMYcGoo=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/FontManifest.json</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
nvolsdw14/yVLCY3gpVeLg+xhDs=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
3osED0JtIrnO/fLMgMteC7/ZcTHqyc+hk1ZDnZrqDDI=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/NOTICES.Z</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
jWwcVuBiNgVjsZeHMvIvKkgWV7I=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
mjjZmUY7Yb9Wu/akBkEvG5Iwb639jTIQLE9bvlflgkc=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/assets/fonts/Courgette-Regular.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
DmgmuS+PgP4uuAO9732BNVhF4oM=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
kUua74ktTfKWAKu+0oVRipQJA8nlchHWqq+OGq7JG/M=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/assets/fonts/Sacramento-Regular.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
u5QncqH2HC9swPmAqdo58fxgLQA=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
pbneZ75FSoJrRthYUS4y7sjDAxK+tMT4ZK7iOQQU6cU=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/assets/images/bild.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
iWOUfyc8Fh8mmaASr1E0uPbqcBQ=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
slX1+TexrVfK25R0I1rlZKWDGROenDfu5UuNtHPksNw=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/assets/images/flutter.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
7BIdjPvrVubLWT4+uYh2iQxzs34=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
vACRH1Ew1JRFlac8BFaCxcg9w8GDTb+9CEu0jZ3hz9k=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/assets/images/outdoor.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
O72c7Sm0eoBwjElYC518JLdm6M4=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
CypYw4nYvoPmgC/M7McGKwCRVnjHd2nPYK/6suc7JDw=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/fonts/MaterialIcons-Regular.otf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
zg6AEuOKM55BH/RKiXqZqsORXXE=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
TDYN86u6z4Vu7PyuO9xbDd/JyDIkfDi8ygoVQ6BE5ys=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/isolate_snapshot_data</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
/8YINIQYa2MGeFNAjTVvMEJmvKA=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
GiXyiy84iwHokWSI8cF+JQcEiNYwhXKJ6iopY39uCfo=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/kernel_blob.bin</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
f44g3XGtbY22u5zIiH+q1OsNXUU=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
1VR65Dn8a70tzXX3exRysSkAwaSnyv424i77ROPZlJo=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
P7bb/oR3EhwqCIH1M6LyTuBIWYU=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
x6NX+tjyECiQtyzbbjyY8U2zoZ7GDbJtE+T+k/dzgI0=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_google_places/assets/google_black.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
gcHJexRXUa/eZ+zWzgfwxNGvVeI=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
ac+pOdlI0CfP987EoH5lbG/G7qPkRm0o8fUXjoZQ0h8=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_google_places/assets/google_white.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
/EjTyBzj/nusE+LbwLayR22clfo=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
Baqn3AhGOQS1CMlsNaXeNDA+oQ+naYgqA+4heYl97iw=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/facebook_new.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
wsvjgJWTRgfpc2dHMHwZPKkyZGs=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
pxnNpeFWC8M+w0qsOisMJySqQlMqHFzIrzWC3NYWhJE=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/google_dark.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
rpAxPEeBl3sL+Bt0aHp2hDmiONs=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
xqAdoh5ef6DNW8CurveVgMot1bkwmdZRbAOwGkHrf9Q=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/google_light.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
yFU/skGVK140i1TenTibYoow7cQ=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
JIlZJwqXe8WyW9aq4kCb5secdhxkh7BXbILq4um+pc8=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/facebook_new.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
C8ShmQ9LsdcExbbsghUpxj4h5Oo=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
MWoizFjctw7wKOyXpv7J6j/S3vqqtZT7M4aMZ5S03VM=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/google_dark.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
ZxQ7Ofrt7UMTpSfPzye7CTJycXI=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
XODgPvRzzyvJITR9YTn71eiz479/YDlg2i0XJO4MFec=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/google_light.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
7tff4P+ysEgljcgzmErrqfjcsWw=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
4PWajBy+Yu+sO1ZSH5Ey46Q00l1Mb9Hp5hE1dUD+ZMY=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/facebook_new.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
XG2mV8SALzXfOu+sSsNb3CZwnZc=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
vz5RfgC+MGor2SKuMWaCJwbJ2RTdTT6jxIZwzceF/gs=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/google_dark.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
MjWIqUgu7liLZWzQeMGn8FFBd5Y=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
ZHcAi3UokXzMpeOUL0n4xUhkJFAefVH5lGql2DQdU64=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/google_light.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
AKzmlW2KCuNghpE/NjMH07X42V8=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
bXLPjBfQxF0mJKnumt7b+egkIvA6byvWCu7bqUODgXc=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-brands-400.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
9K4M4LFRtO0XT/e548Ht8/ou2QU=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
5OdoB6IaKslj5wfd/7NiMoNhjAQ0VySya9wj0Nr9/eY=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-regular-400.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
TwxaL9PbSu7YG4pf8JX5PQN7/ow=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
GmpZWgL5Po3urukCH4vQxdxDoXd8w56sQDVWoOBwCmk=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-solid-900.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
qCSzIeujm7QkMIhEZjtJuPn4xMA=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
+daTPQTFmkKsowvYjuw4u5y+tpsVR/1VDvc+ugvOeho=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/vm_snapshot_data</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
kzk1wp8qHso+VmYD8lJ5+HidZCw=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
SWudSb+UjFAbtsuvOflVVEzSQrNcWWVHTwGa+DH02Gs=
|
||||
</data>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>rules</key>
|
||||
<dict>
|
||||
<key>^.*</key>
|
||||
<true/>
|
||||
<key>^.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^Base\.lproj/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>1010</real>
|
||||
</dict>
|
||||
<key>^version.plist$</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>rules2</key>
|
||||
<dict>
|
||||
<key>.*\.dSYM($|/)</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>11</real>
|
||||
</dict>
|
||||
<key>^(.*/)?\.DS_Store$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>2000</real>
|
||||
</dict>
|
||||
<key>^.*</key>
|
||||
<true/>
|
||||
<key>^.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^Base\.lproj/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>1010</real>
|
||||
</dict>
|
||||
<key>^Info\.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^PkgInfo$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^embedded\.provisionprofile$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^version\.plist$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
Binary file not shown.
BIN
build/ios/Debug-iphonesimulator/Runner.app/Runner
Executable file
BIN
build/ios/Debug-iphonesimulator/Runner.app/Runner
Executable file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
build/ios/iphonesimulator/Runner.app/Frameworks/App.framework/App
Executable file
BIN
build/ios/iphonesimulator/Runner.app/Frameworks/App.framework/App
Executable file
Binary file not shown.
@ -0,0 +1,507 @@
|
||||
<?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>files</key>
|
||||
<dict>
|
||||
<key>Info.plist</key>
|
||||
<data>
|
||||
2WH3EkzfNpYxRzEQezsUEM18s6A=
|
||||
</data>
|
||||
<key>flutter_assets/AssetManifest.json</key>
|
||||
<data>
|
||||
SpQky+0xMW7M0HM2VxmEoXgajrg=
|
||||
</data>
|
||||
<key>flutter_assets/FontManifest.json</key>
|
||||
<data>
|
||||
nvolsdw14/yVLCY3gpVeLg+xhDs=
|
||||
</data>
|
||||
<key>flutter_assets/NOTICES.Z</key>
|
||||
<data>
|
||||
jWwcVuBiNgVjsZeHMvIvKkgWV7I=
|
||||
</data>
|
||||
<key>flutter_assets/assets/fonts/Courgette-Regular.ttf</key>
|
||||
<data>
|
||||
DmgmuS+PgP4uuAO9732BNVhF4oM=
|
||||
</data>
|
||||
<key>flutter_assets/assets/fonts/Sacramento-Regular.ttf</key>
|
||||
<data>
|
||||
u5QncqH2HC9swPmAqdo58fxgLQA=
|
||||
</data>
|
||||
<key>flutter_assets/assets/images/bild.png</key>
|
||||
<data>
|
||||
iWOUfyc8Fh8mmaASr1E0uPbqcBQ=
|
||||
</data>
|
||||
<key>flutter_assets/assets/images/flutter.png</key>
|
||||
<data>
|
||||
7BIdjPvrVubLWT4+uYh2iQxzs34=
|
||||
</data>
|
||||
<key>flutter_assets/assets/images/outdoor.png</key>
|
||||
<data>
|
||||
O72c7Sm0eoBwjElYC518JLdm6M4=
|
||||
</data>
|
||||
<key>flutter_assets/fonts/MaterialIcons-Regular.otf</key>
|
||||
<data>
|
||||
zg6AEuOKM55BH/RKiXqZqsORXXE=
|
||||
</data>
|
||||
<key>flutter_assets/isolate_snapshot_data</key>
|
||||
<data>
|
||||
/8YINIQYa2MGeFNAjTVvMEJmvKA=
|
||||
</data>
|
||||
<key>flutter_assets/kernel_blob.bin</key>
|
||||
<data>
|
||||
f44g3XGtbY22u5zIiH+q1OsNXUU=
|
||||
</data>
|
||||
<key>flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf</key>
|
||||
<data>
|
||||
P7bb/oR3EhwqCIH1M6LyTuBIWYU=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_google_places/assets/google_black.png</key>
|
||||
<data>
|
||||
gcHJexRXUa/eZ+zWzgfwxNGvVeI=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_google_places/assets/google_white.png</key>
|
||||
<data>
|
||||
/EjTyBzj/nusE+LbwLayR22clfo=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/facebook_new.png</key>
|
||||
<data>
|
||||
wsvjgJWTRgfpc2dHMHwZPKkyZGs=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/google_dark.png</key>
|
||||
<data>
|
||||
rpAxPEeBl3sL+Bt0aHp2hDmiONs=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/google_light.png</key>
|
||||
<data>
|
||||
yFU/skGVK140i1TenTibYoow7cQ=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/facebook_new.png</key>
|
||||
<data>
|
||||
C8ShmQ9LsdcExbbsghUpxj4h5Oo=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/google_dark.png</key>
|
||||
<data>
|
||||
ZxQ7Ofrt7UMTpSfPzye7CTJycXI=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/google_light.png</key>
|
||||
<data>
|
||||
7tff4P+ysEgljcgzmErrqfjcsWw=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/facebook_new.png</key>
|
||||
<data>
|
||||
XG2mV8SALzXfOu+sSsNb3CZwnZc=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/google_dark.png</key>
|
||||
<data>
|
||||
MjWIqUgu7liLZWzQeMGn8FFBd5Y=
|
||||
</data>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/google_light.png</key>
|
||||
<data>
|
||||
AKzmlW2KCuNghpE/NjMH07X42V8=
|
||||
</data>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-brands-400.ttf</key>
|
||||
<data>
|
||||
9K4M4LFRtO0XT/e548Ht8/ou2QU=
|
||||
</data>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-regular-400.ttf</key>
|
||||
<data>
|
||||
TwxaL9PbSu7YG4pf8JX5PQN7/ow=
|
||||
</data>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-solid-900.ttf</key>
|
||||
<data>
|
||||
qCSzIeujm7QkMIhEZjtJuPn4xMA=
|
||||
</data>
|
||||
<key>flutter_assets/vm_snapshot_data</key>
|
||||
<data>
|
||||
kzk1wp8qHso+VmYD8lJ5+HidZCw=
|
||||
</data>
|
||||
</dict>
|
||||
<key>files2</key>
|
||||
<dict>
|
||||
<key>flutter_assets/AssetManifest.json</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
SpQky+0xMW7M0HM2VxmEoXgajrg=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
gHVDc1b762lxJMlHRsvBzuBqvciQiLwoMDuFCMYcGoo=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/FontManifest.json</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
nvolsdw14/yVLCY3gpVeLg+xhDs=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
3osED0JtIrnO/fLMgMteC7/ZcTHqyc+hk1ZDnZrqDDI=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/NOTICES.Z</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
jWwcVuBiNgVjsZeHMvIvKkgWV7I=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
mjjZmUY7Yb9Wu/akBkEvG5Iwb639jTIQLE9bvlflgkc=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/assets/fonts/Courgette-Regular.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
DmgmuS+PgP4uuAO9732BNVhF4oM=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
kUua74ktTfKWAKu+0oVRipQJA8nlchHWqq+OGq7JG/M=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/assets/fonts/Sacramento-Regular.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
u5QncqH2HC9swPmAqdo58fxgLQA=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
pbneZ75FSoJrRthYUS4y7sjDAxK+tMT4ZK7iOQQU6cU=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/assets/images/bild.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
iWOUfyc8Fh8mmaASr1E0uPbqcBQ=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
slX1+TexrVfK25R0I1rlZKWDGROenDfu5UuNtHPksNw=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/assets/images/flutter.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
7BIdjPvrVubLWT4+uYh2iQxzs34=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
vACRH1Ew1JRFlac8BFaCxcg9w8GDTb+9CEu0jZ3hz9k=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/assets/images/outdoor.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
O72c7Sm0eoBwjElYC518JLdm6M4=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
CypYw4nYvoPmgC/M7McGKwCRVnjHd2nPYK/6suc7JDw=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/fonts/MaterialIcons-Regular.otf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
zg6AEuOKM55BH/RKiXqZqsORXXE=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
TDYN86u6z4Vu7PyuO9xbDd/JyDIkfDi8ygoVQ6BE5ys=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/isolate_snapshot_data</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
/8YINIQYa2MGeFNAjTVvMEJmvKA=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
GiXyiy84iwHokWSI8cF+JQcEiNYwhXKJ6iopY39uCfo=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/kernel_blob.bin</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
f44g3XGtbY22u5zIiH+q1OsNXUU=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
1VR65Dn8a70tzXX3exRysSkAwaSnyv424i77ROPZlJo=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
P7bb/oR3EhwqCIH1M6LyTuBIWYU=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
x6NX+tjyECiQtyzbbjyY8U2zoZ7GDbJtE+T+k/dzgI0=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_google_places/assets/google_black.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
gcHJexRXUa/eZ+zWzgfwxNGvVeI=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
ac+pOdlI0CfP987EoH5lbG/G7qPkRm0o8fUXjoZQ0h8=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_google_places/assets/google_white.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
/EjTyBzj/nusE+LbwLayR22clfo=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
Baqn3AhGOQS1CMlsNaXeNDA+oQ+naYgqA+4heYl97iw=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/facebook_new.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
wsvjgJWTRgfpc2dHMHwZPKkyZGs=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
pxnNpeFWC8M+w0qsOisMJySqQlMqHFzIrzWC3NYWhJE=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/google_dark.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
rpAxPEeBl3sL+Bt0aHp2hDmiONs=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
xqAdoh5ef6DNW8CurveVgMot1bkwmdZRbAOwGkHrf9Q=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/2.0x/google_light.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
yFU/skGVK140i1TenTibYoow7cQ=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
JIlZJwqXe8WyW9aq4kCb5secdhxkh7BXbILq4um+pc8=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/facebook_new.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
C8ShmQ9LsdcExbbsghUpxj4h5Oo=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
MWoizFjctw7wKOyXpv7J6j/S3vqqtZT7M4aMZ5S03VM=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/google_dark.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
ZxQ7Ofrt7UMTpSfPzye7CTJycXI=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
XODgPvRzzyvJITR9YTn71eiz479/YDlg2i0XJO4MFec=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/3.0x/google_light.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
7tff4P+ysEgljcgzmErrqfjcsWw=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
4PWajBy+Yu+sO1ZSH5Ey46Q00l1Mb9Hp5hE1dUD+ZMY=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/facebook_new.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
XG2mV8SALzXfOu+sSsNb3CZwnZc=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
vz5RfgC+MGor2SKuMWaCJwbJ2RTdTT6jxIZwzceF/gs=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/google_dark.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
MjWIqUgu7liLZWzQeMGn8FFBd5Y=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
ZHcAi3UokXzMpeOUL0n4xUhkJFAefVH5lGql2DQdU64=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/flutter_signin_button/assets/logos/google_light.png</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
AKzmlW2KCuNghpE/NjMH07X42V8=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
bXLPjBfQxF0mJKnumt7b+egkIvA6byvWCu7bqUODgXc=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-brands-400.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
9K4M4LFRtO0XT/e548Ht8/ou2QU=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
5OdoB6IaKslj5wfd/7NiMoNhjAQ0VySya9wj0Nr9/eY=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-regular-400.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
TwxaL9PbSu7YG4pf8JX5PQN7/ow=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
GmpZWgL5Po3urukCH4vQxdxDoXd8w56sQDVWoOBwCmk=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/packages/font_awesome_flutter/lib/fonts/fa-solid-900.ttf</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
qCSzIeujm7QkMIhEZjtJuPn4xMA=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
+daTPQTFmkKsowvYjuw4u5y+tpsVR/1VDvc+ugvOeho=
|
||||
</data>
|
||||
</dict>
|
||||
<key>flutter_assets/vm_snapshot_data</key>
|
||||
<dict>
|
||||
<key>hash</key>
|
||||
<data>
|
||||
kzk1wp8qHso+VmYD8lJ5+HidZCw=
|
||||
</data>
|
||||
<key>hash2</key>
|
||||
<data>
|
||||
SWudSb+UjFAbtsuvOflVVEzSQrNcWWVHTwGa+DH02Gs=
|
||||
</data>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>rules</key>
|
||||
<dict>
|
||||
<key>^.*</key>
|
||||
<true/>
|
||||
<key>^.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^Base\.lproj/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>1010</real>
|
||||
</dict>
|
||||
<key>^version.plist$</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>rules2</key>
|
||||
<dict>
|
||||
<key>.*\.dSYM($|/)</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>11</real>
|
||||
</dict>
|
||||
<key>^(.*/)?\.DS_Store$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>2000</real>
|
||||
</dict>
|
||||
<key>^.*</key>
|
||||
<true/>
|
||||
<key>^.*\.lproj/</key>
|
||||
<dict>
|
||||
<key>optional</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1000</real>
|
||||
</dict>
|
||||
<key>^.*\.lproj/locversion.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>1100</real>
|
||||
</dict>
|
||||
<key>^Base\.lproj/</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>1010</real>
|
||||
</dict>
|
||||
<key>^Info\.plist$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^PkgInfo$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^embedded\.provisionprofile$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
<key>^version\.plist$</key>
|
||||
<dict>
|
||||
<key>weight</key>
|
||||
<real>20</real>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
Binary file not shown.
BIN
build/ios/iphonesimulator/Runner.app/Runner
Executable file
BIN
build/ios/iphonesimulator/Runner.app/Runner
Executable file
Binary file not shown.
6366
build/ios/iphonesimulator/Runner.app/_CodeSignature/CodeResources
Normal file
6366
build/ios/iphonesimulator/Runner.app/_CodeSignature/CodeResources
Normal file
File diff suppressed because it is too large
Load Diff
@ -88,6 +88,8 @@ PODS:
|
||||
- path_provider_ios (0.0.1):
|
||||
- Flutter
|
||||
- PromisesObjC (2.1.0)
|
||||
- webview_flutter_wkwebview (0.0.1):
|
||||
- Flutter
|
||||
|
||||
DEPENDENCIES:
|
||||
- firebase_auth (from `.symlinks/plugins/firebase_auth/ios`)
|
||||
@ -101,6 +103,7 @@ DEPENDENCIES:
|
||||
- location (from `.symlinks/plugins/location/ios`)
|
||||
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
||||
- path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
|
||||
- webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
|
||||
|
||||
SPEC REPOS:
|
||||
trunk:
|
||||
@ -141,6 +144,8 @@ EXTERNAL SOURCES:
|
||||
:path: ".symlinks/plugins/package_info_plus/ios"
|
||||
path_provider_ios:
|
||||
:path: ".symlinks/plugins/path_provider_ios/ios"
|
||||
webview_flutter_wkwebview:
|
||||
:path: ".symlinks/plugins/webview_flutter_wkwebview/ios"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
AppAuth: 80317d99ac7ff2801a2f18ff86b48cd315ed465d
|
||||
@ -167,6 +172,7 @@ SPEC CHECKSUMS:
|
||||
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
|
||||
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
|
||||
PromisesObjC: 99b6f43f9e1044bd87a95a60beff28c2c44ddb72
|
||||
webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f
|
||||
|
||||
PODFILE CHECKSUM: 7368163408c647b7eb699d0d788ba6718e18fb8d
|
||||
|
||||
|
@ -4,19 +4,18 @@ import 'Map.dart';
|
||||
import 'FavoritePage.dart';
|
||||
import 'SettingsPage.dart';
|
||||
import 'globals.dart' as globals;
|
||||
|
||||
import 'ListViewPage.dart';
|
||||
|
||||
class BottomNavPage extends StatefulWidget {
|
||||
|
||||
@override
|
||||
State<BottomNavPage> createState() => BottomNavPageState();
|
||||
}
|
||||
|
||||
class BottomNavPageState extends State<BottomNavPage> {
|
||||
|
||||
int currentIndex = 0;
|
||||
final screens =[
|
||||
final screens = [
|
||||
Map(),
|
||||
ListViewPage(),
|
||||
FavoritePage(),
|
||||
SettingsPage(),
|
||||
];
|
||||
@ -25,25 +24,29 @@ class BottomNavPageState extends State<BottomNavPage> {
|
||||
return Scaffold(
|
||||
body: screens[currentIndex],
|
||||
bottomNavigationBar: BottomNavigationBar(
|
||||
backgroundColor: globals.BACKGROUNDCOLOR,
|
||||
selectedItemColor: globals.ITEMCOLOR,
|
||||
currentIndex: currentIndex,
|
||||
onTap: (index) => setState( () => currentIndex = index),
|
||||
items: const[
|
||||
BottomNavigationBarItem(
|
||||
icon: Icon(Icons.home),
|
||||
label: "Home",
|
||||
),
|
||||
BottomNavigationBarItem(
|
||||
icon: Icon(Icons.favorite),
|
||||
label: "Liked",
|
||||
),
|
||||
BottomNavigationBarItem(
|
||||
icon: Icon(Icons.settings),
|
||||
label: "Settings",
|
||||
),
|
||||
]),
|
||||
type: BottomNavigationBarType.fixed,
|
||||
backgroundColor: globals.BACKGROUNDCOLOR,
|
||||
selectedItemColor: globals.ITEMCOLOR,
|
||||
currentIndex: currentIndex,
|
||||
onTap: (index) => setState(() => currentIndex = index),
|
||||
items: const [
|
||||
BottomNavigationBarItem(
|
||||
icon: Icon(Icons.map_outlined),
|
||||
label: "Map",
|
||||
),
|
||||
BottomNavigationBarItem(
|
||||
icon: Icon(Icons.list_sharp),
|
||||
label: "List View",
|
||||
),
|
||||
BottomNavigationBarItem(
|
||||
icon: Icon(Icons.favorite),
|
||||
label: "Liked",
|
||||
),
|
||||
BottomNavigationBarItem(
|
||||
icon: Icon(Icons.settings),
|
||||
label: "Settings",
|
||||
),
|
||||
]),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,7 @@ import 'mysql.dart';
|
||||
import 'package:flutter_applicationdemo/login/User.dart' as User;
|
||||
import 'login/user.dart';
|
||||
import 'globals.dart' as globals;
|
||||
import 'ManageAccountPage.dart';
|
||||
|
||||
|
||||
class HomePage extends StatefulWidget {
|
||||
@ -103,8 +104,8 @@ class _HomePageState extends State<HomePage> {
|
||||
),
|
||||
onPressed: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) => SignInPage()), //Replace Container() with call to Map-page.
|
||||
context, //SignInPage()
|
||||
MaterialPageRoute(builder: (context) =>SignInPage()), //Replace Container() with call to Map-page.
|
||||
);
|
||||
},
|
||||
child: Text('Sign in',
|
||||
|
88
lib/ListViewPage.dart
Normal file
88
lib/ListViewPage.dart
Normal file
@ -0,0 +1,88 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
|
||||
import 'globals.dart' as globals;
|
||||
import 'package:flutter_applicationdemo/Venue.dart';
|
||||
import 'VenuePage.dart';
|
||||
|
||||
class ListViewPage extends StatefulWidget {
|
||||
const ListViewPage({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<ListViewPage> createState() => _ListViewPageState();
|
||||
}
|
||||
|
||||
class _ListViewPageState extends State<ListViewPage> {
|
||||
final List<Venue> allVenues = globals.VENUES;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Venues near you',),
|
||||
backgroundColor: globals.BACKGROUNDCOLOR,
|
||||
),
|
||||
body: buildListView(),
|
||||
);
|
||||
}
|
||||
|
||||
ListView buildListView() {
|
||||
return ListView.builder(
|
||||
padding: const EdgeInsets.all(8),
|
||||
itemCount: allVenues.length,
|
||||
itemBuilder: (context, index) {
|
||||
return ListTile(
|
||||
shape: buildBorder(),
|
||||
onTap: () => _navigateToVenue(allVenues[index]),
|
||||
leading: buildIconBox(index, context),
|
||||
title: buildTitleText(index),
|
||||
subtitle: buildWeatherRow(),
|
||||
|
||||
trailing: const Text('400m'),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
RoundedRectangleBorder buildBorder() {
|
||||
return RoundedRectangleBorder(
|
||||
side: const BorderSide(color: Color(0xffe9e9e9), width: 1),
|
||||
borderRadius: BorderRadius.circular(5));
|
||||
}
|
||||
|
||||
SizedBox buildIconBox(int index, BuildContext context) {
|
||||
return SizedBox(
|
||||
height: double.infinity,
|
||||
child: allVenues[index].getIcon(context),
|
||||
);
|
||||
}
|
||||
|
||||
Row buildWeatherRow() {
|
||||
return Row(
|
||||
children: [
|
||||
const Text('Current weather: '),
|
||||
const Spacer(
|
||||
flex: 2,
|
||||
),
|
||||
globals.forecast.getCurrentWeatherIcon(),
|
||||
const Spacer(),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Text buildTitleText(int index) {
|
||||
return Text(
|
||||
allVenues[index].venueName.toString(),
|
||||
style: GoogleFonts.roboto(
|
||||
textStyle: const TextStyle(
|
||||
fontSize: 18,
|
||||
color: Color(0xff994411),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
void _navigateToVenue(Venue venue) {
|
||||
Navigator.of(context)
|
||||
.push(MaterialPageRoute(builder: (context) => VenuePage(venue)));
|
||||
}
|
||||
}
|
@ -1,10 +1,152 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_applicationdemo/reusables/InputField.dart';
|
||||
|
||||
import 'package:flutter_applicationdemo/mysql.dart';
|
||||
import 'HomePage.dart';
|
||||
|
||||
class ManageAccountPage extends StatefulWidget {
|
||||
@override
|
||||
State<ManageAccountPage> createState() => ManageAccountPageState();
|
||||
}
|
||||
|
||||
class ManageAccountPageState extends State<ManageAccountPage> {
|
||||
var db = mysql();
|
||||
TextEditingController userNameController = TextEditingController();
|
||||
TextEditingController emailController = TextEditingController();
|
||||
TextEditingController passwordController = TextEditingController();
|
||||
|
||||
Widget _buildNameFiled() {
|
||||
return InputField(
|
||||
text: "new UserName",
|
||||
isPassword: false,
|
||||
icon: const Icon(Icons.person),
|
||||
controller: userNameController
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildEmailFiled() {
|
||||
return InputField(
|
||||
text: "current Email",
|
||||
isPassword: false,
|
||||
icon: const Icon(Icons.email),
|
||||
controller: emailController
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildPasswordFiled() {
|
||||
return InputField(
|
||||
text: "new Password",
|
||||
isPassword: true,
|
||||
icon: const Icon(Icons.lock),
|
||||
controller: passwordController
|
||||
);
|
||||
}
|
||||
|
||||
class ManageAccountPage extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: Center(child: Text('ManageAccountPage',style: TextStyle(fontSize: 60),)),
|
||||
appBar: AppBar(
|
||||
//title: const Text('ManageAccountPage'),
|
||||
backgroundColor: const Color.fromARGB(255, 190, 146, 160),
|
||||
),
|
||||
body: Container(
|
||||
margin: EdgeInsets.all(24),
|
||||
child: Form(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
const Text('Update user data' ,style: TextStyle(fontWeight: FontWeight.bold, fontSize: 25)),
|
||||
const SizedBox(height: 50),
|
||||
_buildEmailFiled(),
|
||||
_buildNameFiled(),
|
||||
_buildPasswordFiled(),
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
UserInput userInput = UserInput(isValid: false, errorMessage: "");
|
||||
await verifyUserInput(userNameController.text, emailController.text,passwordController.text, userInput);
|
||||
if(userInput.isValid) {
|
||||
await updateUserInSQL(emailController.text, userNameController.text, passwordController.text);
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) => HomePage()),
|
||||
);
|
||||
} else {
|
||||
createUserError(userInput.errorMessage);
|
||||
}
|
||||
},
|
||||
child: const Text('Update'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
primary: const Color.fromARGB(255, 190, 146, 160)
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> verifyUserInput(String userName, String email , String password,userInput) async {
|
||||
var result = false;
|
||||
await db.getConnection().then((conn) async {
|
||||
String sql = "SELECT email from maen0574.user where email = '$email';";
|
||||
var results = await conn.query(sql);
|
||||
|
||||
if(results.toString() == "()") {
|
||||
result = true;
|
||||
}
|
||||
});
|
||||
|
||||
if (result == true) {
|
||||
userInput.errorMessage = "email incorrect!";
|
||||
return;
|
||||
} else if (email.contains("'") || !email.contains("@") || email.length < 5) {
|
||||
userInput.errorMessage = "Incorrect email format";
|
||||
return;
|
||||
} else if (userName.contains("'") || userName.length < 6) {
|
||||
userInput.errorMessage =
|
||||
"Incorrect username. \nCharacters limited to a-z, A-Z, 0-9.";
|
||||
return;
|
||||
} else if (password.contains("'") || password.length < 6) {
|
||||
userInput.errorMessage =
|
||||
"Incorrect password. \nPassword can't contain ' and needs to be atleast 6 characters long";
|
||||
return;
|
||||
}else {
|
||||
userInput.isValid = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void createUserError(String stringContext) {
|
||||
showDialog<String>(
|
||||
context: context,
|
||||
builder: (BuildContext context) => AlertDialog(
|
||||
title: const Text("Couldn't update user data"),
|
||||
content: Text(stringContext),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
onPressed: () => Navigator.pop(context, 'OK'),
|
||||
child: const Text('OK'),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> updateUserInSQL(String email, String username, String password) async {
|
||||
await db.getConnection().then((conn) async {
|
||||
String sql = "UPDATE maen0574.user set password = '$password', username = '$username' where email = '$email';";
|
||||
await conn.query(sql);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class UserInput {
|
||||
bool isValid;
|
||||
String errorMessage;
|
||||
UserInput({required this.isValid, required this.errorMessage});
|
||||
bool getIsValid() {
|
||||
return isValid;
|
||||
}
|
||||
}
|
||||
|
609
lib/Map.dart
609
lib/Map.dart
@ -1,14 +1,34 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_applicationdemo/BottomNavPage.dart';
|
||||
import 'package:flutter_applicationdemo/ListViewPage.dart';
|
||||
import 'package:flutter_applicationdemo/WeatherData.dart';
|
||||
import 'package:flutter_applicationdemo/WebScraper.dart';
|
||||
import 'package:flutter_applicationdemo/HomePage.dart';
|
||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
import 'dart:async';
|
||||
import 'login/User.dart';
|
||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||
import 'package:flutter_google_places/flutter_google_places.dart';
|
||||
import 'package:google_api_headers/google_api_headers.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:http/retry.dart';
|
||||
import 'package:intl/number_symbols.dart';
|
||||
import 'package:location/location.dart';
|
||||
import 'package:geolocator/geolocator.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:flutter_applicationdemo/login/User.dart';
|
||||
import 'SettingsPage.dart';
|
||||
import 'WeatherData.dart';
|
||||
import 'venuePage.dart';
|
||||
import 'Venue.dart';
|
||||
import 'globals.dart' as globals;
|
||||
|
||||
import 'package:syncfusion_flutter_sliders/sliders.dart';
|
||||
import 'globals.dart' as globals;
|
||||
|
||||
import 'HomePage.dart';
|
||||
import 'SettingsPage.dart';
|
||||
import 'Venue.dart';
|
||||
import 'globals.dart' as globals;
|
||||
@ -16,7 +36,6 @@ import 'FeedbackPage.dart';
|
||||
import 'login/CreateAccountPage.dart';
|
||||
import 'login/signInPage.dart';
|
||||
|
||||
|
||||
class Map extends StatefulWidget {
|
||||
@override
|
||||
State<Map> createState() => MapState();
|
||||
@ -26,29 +45,29 @@ const kGoogleApiKey = "AIzaSyAUmhd6Xxud8SwgDxJ4LlYlcntm01FGoSk";
|
||||
|
||||
final homeSacffoldKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
|
||||
class MapState extends State<Map> {
|
||||
bool _bottomSheetIsOpen = false;
|
||||
|
||||
Future getMerkerData() async {
|
||||
var url = Uri.parse('https://openstreetgs.stockholm.se/geoservice/api/b8e20fd7-5654-465e-8976-35b4de902b41/wfs?service=wfs&version=1.1.0&request=GetFeature&typeNames=od_gis:Markupplatelse&srsName=EPSG:4326&outputFormat=json');
|
||||
/* Future getMerkerData() async {
|
||||
var url = Uri.parse(
|
||||
'https://openstreetgs.stockholm.se/geoservice/api/b8e20fd7-5654-465e-8976-35b4de902b41/wfs?service=wfs&version=1.1.0&request=GetFeature&typeNames=od_gis:Markupplatelse&srsName=EPSG:4326&outputFormat=json');
|
||||
var response = await http.get(url);
|
||||
|
||||
print('Response status: ${response.statusCode}');
|
||||
// print('Response body: ${response.body.toString()}');
|
||||
// print('Response body: ${response.body.toString()}');
|
||||
var jsonData = jsonDecode(response.body);
|
||||
|
||||
|
||||
|
||||
}
|
||||
}*/
|
||||
|
||||
final Completer<GoogleMapController> _controller = Completer();
|
||||
|
||||
bool? _barFilterValue = true;
|
||||
bool? _restaurantFilterValue = true;
|
||||
bool? _cafeFilterValue = true;
|
||||
dynamic _priceFilterValue = 3;
|
||||
LocationData? _currentPosition;
|
||||
|
||||
final TextEditingController _searchController = TextEditingController();
|
||||
final TextEditingController _searchController = TextEditingController();
|
||||
|
||||
static const CameraPosition _kGooglePlex = CameraPosition(
|
||||
target: LatLng(59.325027,18.068516),
|
||||
static const CameraPosition _stockholmCity = CameraPosition(
|
||||
target: LatLng(59.325027, 18.068516),
|
||||
zoom: 14.4746,
|
||||
);
|
||||
|
||||
@ -61,48 +80,48 @@ class MapState extends State<Map> {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
void createBottomSheet(String venueName) async {
|
||||
var webScraper = WebScraper();
|
||||
await webScraper.getWebsiteData(venueName);
|
||||
Scaffold.of(context).showBottomSheet<void>(
|
||||
((context) {
|
||||
return Container(
|
||||
height: 420,
|
||||
color: Colors.white,
|
||||
child: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: <Widget>[
|
||||
/*const Text('BottomSheet'),
|
||||
ElevatedButton(
|
||||
child: const Text('Close BottomSheet'),
|
||||
onPressed: () {Navigator.pop(context);})*/
|
||||
Container(
|
||||
child: Text(webScraper.openingHoursThisWeek.length.toString()),
|
||||
),
|
||||
|
||||
],
|
||||
)
|
||||
),
|
||||
);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
initialize() {
|
||||
List<Venue> allVenues = globals.VENUES;
|
||||
for(var venue in allVenues) {
|
||||
for (var venue in allVenues) {
|
||||
Marker marker = Marker(
|
||||
markerId: MarkerId(venue.venueID.toString()),
|
||||
position: venue.position,
|
||||
onTap: () => createBottomSheet(venue.venueName),
|
||||
icon: venue.drawIconColor(),
|
||||
);
|
||||
markerId: MarkerId(venue.venueID.toString()),
|
||||
position: venue.position,
|
||||
/*infoWindow: InfoWindow(
|
||||
title: venue.venueName,
|
||||
snippet: venue.venueAddress,
|
||||
),*/
|
||||
// onTap: () => createBottomSheet(venue.venueName),
|
||||
onTap: () => createBottomDrawer(venue),
|
||||
icon: venue.drawIconColor(),
|
||||
);
|
||||
markersList.add(marker);
|
||||
}
|
||||
}
|
||||
|
||||
void createBottomSheet(String venueName) async {
|
||||
var webScraper = WebScraper();
|
||||
await webScraper.getWebsiteData(venueName);
|
||||
Scaffold.of(context).showBottomSheet<void>(((context) {
|
||||
return Container(
|
||||
height: 420,
|
||||
color: Colors.white,
|
||||
child: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: <Widget>[
|
||||
/*const Text('BottomSheet'),
|
||||
ElevatedButton(
|
||||
child: const Text('Close BottomSheet'),
|
||||
onPressed: () {Navigator.pop(context);})*/
|
||||
Container(
|
||||
child: Text(webScraper.openingHoursThisWeek.length.toString()),
|
||||
),
|
||||
],
|
||||
)),
|
||||
);
|
||||
}));
|
||||
}
|
||||
|
||||
Future<LocationData> _getLocationPermission() async {
|
||||
Location location = Location();
|
||||
@ -143,9 +162,10 @@ class MapState extends State<Map> {
|
||||
final Mode _mode = Mode.fullscreen;
|
||||
|
||||
int currentIndex = 0;
|
||||
final screens =[
|
||||
final screens = [
|
||||
Map(),
|
||||
];
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
@ -153,87 +173,248 @@ class MapState extends State<Map> {
|
||||
centerTitle: true,
|
||||
title: const Text("Sun chasers"),
|
||||
key: homeSacffoldKey,
|
||||
//leading: IconButton(icon: Icon(Icons.search), onPressed:() {},),
|
||||
/*actions: <Widget>[
|
||||
IconButton(
|
||||
icon: const Icon(Icons.search),
|
||||
onPressed: () {},
|
||||
),
|
||||
],*/
|
||||
/*title: TextFormField(
|
||||
controller: _searchController,
|
||||
textCapitalization: TextCapitalization.words,
|
||||
decoration: const InputDecoration(hintText: 'Find your place'),
|
||||
onChanged: (value) {
|
||||
print(value);
|
||||
},
|
||||
),*/
|
||||
actions: <Widget>[createFilterMenuButton()],
|
||||
backgroundColor: const Color.fromARGB(255, 190, 146, 160),
|
||||
),
|
||||
/*body: Stack(
|
||||
backgroundColor: const Color.fromARGB(255, 190, 146, 160),
|
||||
),
|
||||
body: Stack(
|
||||
drawer : Drawer(
|
||||
child: Container(
|
||||
child: globals.LOGGED_IN_USER.userID == 0 ? buildDrawerSignedOut(context) : buildDrawerSignedIn(context),
|
||||
),
|
||||
),
|
||||
),*/
|
||||
|
||||
body: Stack (
|
||||
body: Stack(
|
||||
children: [
|
||||
GoogleMap(
|
||||
|
||||
mapType: MapType.normal,
|
||||
initialCameraPosition: _kGooglePlex,
|
||||
mapType: MapType.normal,
|
||||
myLocationEnabled: true,
|
||||
initialCameraPosition: _stockholmCity,
|
||||
markers: markersList.map((e) => e).toSet(),
|
||||
onMapCreated: (GoogleMapController controller) {
|
||||
_controller.complete(controller);
|
||||
},
|
||||
_controller.complete(controller);
|
||||
},
|
||||
onTap: (LatLng) {
|
||||
closeBottomSheetIfOpen();
|
||||
},
|
||||
),
|
||||
// ElevatedButton(onPressed: () {} //_handelPressButton
|
||||
// ,child: const Text("Search Placses"))
|
||||
// ElevatedButton(onPressed: () {} //_handelPressButton
|
||||
// ,child: const Text("Search Placses"))
|
||||
],
|
||||
),
|
||||
|
||||
floatingActionButton: Padding(
|
||||
padding: const EdgeInsets.only(top: 100.0),
|
||||
child: FloatingActionButton(
|
||||
floatingActionButton: Padding(
|
||||
padding: const EdgeInsets.only(top: 100.0),
|
||||
child: FloatingActionButton(
|
||||
onPressed: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => const SettingsPage()));
|
||||
Navigator.push(context,
|
||||
MaterialPageRoute(builder: (context) => const SettingsPage()));
|
||||
},
|
||||
backgroundColor: Colors.blueAccent,
|
||||
child: const Icon(Icons.filter_alt),
|
||||
),
|
||||
),
|
||||
floatingActionButtonLocation: FloatingActionButtonLocation.endTop,
|
||||
);
|
||||
}
|
||||
backgroundColor: Colors.purple,
|
||||
child: const Icon(Icons.filter_alt),
|
||||
),
|
||||
),
|
||||
floatingActionButtonLocation: FloatingActionButtonLocation.endTop,
|
||||
);
|
||||
}
|
||||
|
||||
PopupMenuButton<dynamic> createFilterMenuButton() {
|
||||
return PopupMenuButton(
|
||||
icon: Icon(Icons.filter_list),
|
||||
iconSize: 40,
|
||||
itemBuilder: (context) => [
|
||||
const PopupMenuItem(
|
||||
child: Text(
|
||||
"Filters",
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
),
|
||||
),
|
||||
padding: EdgeInsets.only(left: 60),
|
||||
),
|
||||
createCheckBoxes(),
|
||||
createPriceSlider(),
|
||||
PopupMenuItem(
|
||||
child: ButtonBar(
|
||||
alignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
ElevatedButton(
|
||||
onPressed: null,
|
||||
// TODO: Fixa så att kartan filtreras när man klickar på 'Apply Filters'
|
||||
child: Text(
|
||||
"Apply Filters",
|
||||
style: TextStyle(color: Colors.black),
|
||||
),
|
||||
style: ButtonStyle(
|
||||
backgroundColor: MaterialStateProperty.all<Color>(
|
||||
globals.BUTTONCOLOR)),
|
||||
),
|
||||
],
|
||||
))
|
||||
]);
|
||||
}
|
||||
|
||||
// Creates the checkboxes for the filter menu
|
||||
PopupMenuItem<dynamic> createCheckBoxes() {
|
||||
return PopupMenuItem(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8),
|
||||
child: Expanded(
|
||||
child: Column(
|
||||
children: [
|
||||
Divider(
|
||||
color: Colors.black,
|
||||
),
|
||||
StatefulBuilder(
|
||||
builder: (BuildContext context, StateSetter setState) {
|
||||
return CheckboxListTile(
|
||||
value: _barFilterValue,
|
||||
onChanged: (bool? newValue) {
|
||||
setState(() {
|
||||
_barFilterValue = newValue;
|
||||
});
|
||||
},
|
||||
title: const Icon(
|
||||
Icons.sports_bar,
|
||||
color: Colors.orange,
|
||||
));
|
||||
}),
|
||||
StatefulBuilder(
|
||||
builder: (BuildContext context, StateSetter setState) {
|
||||
return CheckboxListTile(
|
||||
value: _restaurantFilterValue,
|
||||
onChanged: (bool? newValue) {
|
||||
setState(() {
|
||||
_restaurantFilterValue = newValue;
|
||||
});
|
||||
},
|
||||
title: Icon(
|
||||
Icons.restaurant,
|
||||
color: Colors.blueGrey[200],
|
||||
),
|
||||
);
|
||||
}),
|
||||
//Cafe checkbox
|
||||
StatefulBuilder(
|
||||
builder: (BuildContext context, StateSetter setState) {
|
||||
return CheckboxListTile(
|
||||
value: _cafeFilterValue,
|
||||
onChanged: (bool? newValue) {
|
||||
setState(() => _cafeFilterValue = newValue);
|
||||
},
|
||||
title: Icon(
|
||||
Icons.coffee,
|
||||
color: Colors.brown[400],
|
||||
));
|
||||
}),
|
||||
],
|
||||
|
||||
/*floatingActionButton: Padding(
|
||||
padding: const EdgeInsets.only(top: 100.0),
|
||||
child: FloatingActionButton(
|
||||
onPressed: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => const SettingsPage()));
|
||||
},
|
||||
backgroundColor: Colors.purple,
|
||||
child: const Icon(Icons.filter_alt),
|
||||
),
|
||||
),
|
||||
floatingActionButtonLocation: FloatingActionButtonLocation
|
||||
.endTop,*/
|
||||
),
|
||||
)));
|
||||
}
|
||||
|
||||
PopupMenuItem<dynamic> createPriceSlider() {
|
||||
return PopupMenuItem(
|
||||
child: StatefulBuilder(
|
||||
builder: (BuildContext context, StateSetter setState) {
|
||||
return SfSlider(
|
||||
value: _priceFilterValue,
|
||||
onChanged: (dynamic newValue) {
|
||||
setState((() => _priceFilterValue = newValue));
|
||||
},
|
||||
min: 1,
|
||||
max: 3,
|
||||
showTicks: true,
|
||||
interval: 1,
|
||||
activeColor: Colors.blue,
|
||||
showLabels: true,
|
||||
stepSize: 1.0,
|
||||
labelFormatterCallback: (dynamic value, String formattedText) {
|
||||
switch (value) {
|
||||
case 1:
|
||||
return '\$';
|
||||
case 2:
|
||||
return '\$\$';
|
||||
case 3:
|
||||
return '\$\$\$';
|
||||
}
|
||||
return value.toString();
|
||||
});
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _gotoLocation(double lat, double lng) async {
|
||||
final GoogleMapController controller = await _controller.future;
|
||||
controller.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(target: LatLng(lat,lng), zoom: 15)));
|
||||
controller.animateCamera(CameraUpdate.newCameraPosition(
|
||||
CameraPosition(target: LatLng(lat, lng), zoom: 15)));
|
||||
}
|
||||
|
||||
Widget _boxes(double lat, double lng, String resturantName) {
|
||||
return GestureDetector(
|
||||
onTap: () { _gotoLocation(lat, lng);},
|
||||
onTap: () {
|
||||
_gotoLocation(lat, lng);
|
||||
},
|
||||
child: Container(
|
||||
child: FittedBox(
|
||||
child: Material(
|
||||
color: Colors.white,
|
||||
elevation: 14.0,
|
||||
borderRadius: BorderRadius.circular(24.0),
|
||||
shadowColor: Color(0x802196F3),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
Container(
|
||||
width: 250,
|
||||
height: 200,
|
||||
child: ClipRRect(
|
||||
borderRadius: new BorderRadius.circular(24.0),
|
||||
child: const Image(
|
||||
image: AssetImage('assets/images/bild.png')
|
||||
child: FittedBox(
|
||||
child: Material(
|
||||
color: Colors.white,
|
||||
elevation: 14.0,
|
||||
borderRadius: BorderRadius.circular(24.0),
|
||||
shadowColor: Color(0x802196F3),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
Container(
|
||||
width: 250,
|
||||
height: 200,
|
||||
child: ClipRRect(
|
||||
borderRadius: new BorderRadius.circular(24.0),
|
||||
child:
|
||||
const Image(image: AssetImage('assets/images/bild.png')),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Text(resturantName),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Text(resturantName),
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
)
|
||||
),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
@ -246,8 +427,148 @@ class MapState extends State<Map> {
|
||||
zoom: 14.4746)));
|
||||
}
|
||||
|
||||
/* Future<void> _handelPressButton() async {
|
||||
createBottomDrawer(Venue venue) async {
|
||||
// Position? position = await Geolocator.getLastKnownPosition();
|
||||
// double bar = Geolocator.bearingBetween(position != null? position.latitude : 0, position != null? position.longitude : 0, venue.position.latitude, venue.position.longitude);
|
||||
_bottomSheetIsOpen = true;
|
||||
Scaffold.of(context).showBottomSheet<void>(((context) {
|
||||
return InkWell(
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) => VenuePage(venue)),
|
||||
);
|
||||
},
|
||||
child: Container(
|
||||
height: 250,
|
||||
color: const Color(0xFFF5F5F5),
|
||||
child: Center(
|
||||
child: Column(
|
||||
// mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.all(8),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
// mainAxisSize: MainAxisSize.min,
|
||||
children: <Widget>[
|
||||
columnCoveringNameAndAddress(venue),
|
||||
columnCoveringRating(),
|
||||
],
|
||||
),
|
||||
),
|
||||
columnHandlingCloseButton(context),
|
||||
Container(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
const Text('Weather: \t\t'),
|
||||
globals.forecast.getCurrentWeatherIcon(),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Text('– ' +
|
||||
globals.forecast.getCurrentWeatherStatus()),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
const Text('Distance:'),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}));
|
||||
}
|
||||
|
||||
Column columnHandlingCloseButton(BuildContext context) {
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Container(
|
||||
padding: const EdgeInsets.all(8),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
ElevatedButton(
|
||||
child: const Text('Close'),
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
_bottomSheetIsOpen = false;
|
||||
}),
|
||||
ElevatedButton(
|
||||
child: const Text('ListView'),
|
||||
onPressed: () {
|
||||
Navigator.push(context,
|
||||
MaterialPageRoute(builder: (context) => ListViewPage()));
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Column columnCoveringRating() {
|
||||
return Column(
|
||||
children: [
|
||||
Text(
|
||||
'Rating',
|
||||
style: GoogleFonts.robotoCondensed(
|
||||
textStyle: const TextStyle(
|
||||
color: Colors.black87,
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Column columnCoveringNameAndAddress(Venue venue) {
|
||||
return Column(
|
||||
children: [
|
||||
Text(
|
||||
venue.venueName,
|
||||
style: GoogleFonts.roboto(
|
||||
textStyle: const TextStyle(
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 24,
|
||||
)),
|
||||
),
|
||||
Text(
|
||||
venue.venueAddress + ' ' + venue.venueStreetNo,
|
||||
style: GoogleFonts.roboto(
|
||||
textStyle: const TextStyle(
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w300,
|
||||
fontSize: 18,
|
||||
)),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
closeBottomSheetIfOpen() {
|
||||
print(_bottomSheetIsOpen);
|
||||
if (_bottomSheetIsOpen) {
|
||||
Navigator.pop(context);
|
||||
}
|
||||
}
|
||||
|
||||
/* Future<void> _handelPressButton() async {
|
||||
Prediction? p = await PlacesAutocomplete.show(
|
||||
context: context,
|
||||
apiKey: kGoogleApiKey,
|
||||
@ -263,54 +584,45 @@ class MapState extends State<Map> {
|
||||
if (p != null) {
|
||||
displayPrediction(p,homeSacffoldKey.currentState);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Future<void> displayPrediction(Prediction p, ScaffoldState? currentState) async {
|
||||
GoogleMapsPlaces places = GoogleMapsPlaces(
|
||||
apiKey: kGoogleApiKey,
|
||||
apiHeaders: await const GoogleApiHeaders().getHeaders()
|
||||
);
|
||||
|
||||
PlacesDetailsResponse detail = await places.getDetailsByPlaceId(p.placeId!);
|
||||
|
||||
final lat = detail.result.geometry!.location.lat;
|
||||
final lng = detail.result.geometry!.location.lng;
|
||||
|
||||
markersList.clear();
|
||||
markersList.add(Marker(markerId: const MarkerId("0"), position: LatLng(lat, lng), infoWindow: InfoWindow(title: detail.result.name)));
|
||||
|
||||
setState(() {});
|
||||
|
||||
googleMapController.animateCamera(CameraUpdate.newLatLngZoom(LatLng(lat,lng), 14.0));
|
||||
}*/
|
||||
}
|
||||
|
||||
Widget buildDrawerSignedIn(BuildContext context){
|
||||
Widget buildDrawerSignedIn(BuildContext context) {
|
||||
return Drawer(
|
||||
child: ListView(
|
||||
padding: EdgeInsets.zero,
|
||||
children: [
|
||||
DrawerHeader(
|
||||
decoration: const BoxDecoration(color: Color.fromARGB(255, 190, 146, 160)),
|
||||
child: Column(children: const <Widget>[
|
||||
Text('Sun Chaser',
|
||||
style :TextStyle(fontSize: 32),
|
||||
),
|
||||
|
||||
SizedBox(height: 30),
|
||||
Icon(Icons.account_box_rounded),
|
||||
|
||||
],
|
||||
|
||||
decoration:
|
||||
const BoxDecoration(color: Color.fromARGB(255, 190, 146, 160)),
|
||||
child: Column(
|
||||
children: const <Widget>[
|
||||
Text(
|
||||
'Sun Chaser',
|
||||
style: TextStyle(fontSize: 32),
|
||||
),
|
||||
SizedBox(height: 30),
|
||||
Icon(Icons.account_box_rounded),
|
||||
],
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
ListTile(
|
||||
leading: Icon(Icons.logout),
|
||||
title: Text('Sign out'),
|
||||
onTap:(){
|
||||
onTap: () {
|
||||
globals.LOGGED_IN_USER = User(0, "", "");
|
||||
Navigator.push(
|
||||
context,
|
||||
@ -321,7 +633,7 @@ Widget buildDrawerSignedIn(BuildContext context){
|
||||
ListTile(
|
||||
leading: Icon(Icons.thumb_up_alt),
|
||||
title: Text('Give feedback'),
|
||||
onTap:(){
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
@ -329,12 +641,11 @@ Widget buildDrawerSignedIn(BuildContext context){
|
||||
),
|
||||
);
|
||||
},
|
||||
|
||||
),
|
||||
ListTile(
|
||||
leading: Icon(Icons.settings),
|
||||
title: Text('Settings'),
|
||||
onTap:(){
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
@ -343,33 +654,33 @@ Widget buildDrawerSignedIn(BuildContext context){
|
||||
);
|
||||
},
|
||||
),
|
||||
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget buildDrawerSignedOut(BuildContext context){
|
||||
Widget buildDrawerSignedOut(BuildContext context) {
|
||||
return Drawer(
|
||||
child: ListView(
|
||||
padding: EdgeInsets.zero,
|
||||
children: [
|
||||
DrawerHeader(
|
||||
decoration: const BoxDecoration(color: Color.fromARGB(255, 190, 146, 160)),
|
||||
child: Column(children: const <Widget>[
|
||||
Text('Sun Chaser',
|
||||
style :TextStyle(fontSize: 32),
|
||||
),
|
||||
|
||||
SizedBox(height: 30),
|
||||
],
|
||||
decoration:
|
||||
const BoxDecoration(color: Color.fromARGB(255, 190, 146, 160)),
|
||||
child: Column(
|
||||
children: const <Widget>[
|
||||
Text(
|
||||
'Sun Chaser',
|
||||
style: TextStyle(fontSize: 32),
|
||||
),
|
||||
SizedBox(height: 30),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
ListTile(
|
||||
leading: Icon(Icons.account_box_rounded),
|
||||
title: Text('Create account'),
|
||||
onTap:(){
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
@ -377,22 +688,23 @@ Widget buildDrawerSignedOut(BuildContext context){
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
leading: Icon(Icons.login),
|
||||
title: Text('Sign in'),
|
||||
onTap:(){
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => SignInPage(),
|
||||
),
|
||||
);
|
||||
},),
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
leading: Icon(Icons.thumb_up_alt),
|
||||
title: Text('Give feedback'),
|
||||
onTap:(){
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
@ -404,7 +716,7 @@ Widget buildDrawerSignedOut(BuildContext context){
|
||||
ListTile(
|
||||
leading: Icon(Icons.settings),
|
||||
title: Text('Settings'),
|
||||
onTap:(){
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
@ -418,13 +730,10 @@ Widget buildDrawerSignedOut(BuildContext context){
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
class _Marker {
|
||||
|
||||
var Plats_1;
|
||||
var Gatunr_1;
|
||||
var coordinates;
|
||||
|
||||
_Marker(this.Plats_1, this.Gatunr_1, this.coordinates);
|
||||
|
||||
}
|
||||
}
|
@ -50,7 +50,7 @@ class _SettingsPageState extends State<SettingsPage> {
|
||||
'Settings',
|
||||
style: TextStyle(
|
||||
fontSize: 30,
|
||||
color: Colors.grey,
|
||||
color: Colors.white,
|
||||
shadows: <Shadow>[
|
||||
Shadow(
|
||||
offset: Offset(2, 2),
|
||||
@ -104,7 +104,7 @@ class _SettingsPageState extends State<SettingsPage> {
|
||||
title: const Text('Restaurant'),
|
||||
),
|
||||
SettingsTile(
|
||||
title: const Text(""),
|
||||
title: const Text("Price"),
|
||||
value: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: <Widget>[
|
||||
@ -119,17 +119,17 @@ class _SettingsPageState extends State<SettingsPage> {
|
||||
duration: Duration(milliseconds: 1000),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
content: Text('Selected £'),
|
||||
));
|
||||
),);
|
||||
}else{
|
||||
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
|
||||
duration: Duration(milliseconds: 1000),
|
||||
content: Text('Unselected £'),
|
||||
behavior: SnackBarBehavior.floating,
|
||||
));
|
||||
),);
|
||||
}
|
||||
|
||||
});
|
||||
print("Tapped single dollarSign");
|
||||
|
||||
},
|
||||
child: Container(
|
||||
color: _colorContainerLow,
|
||||
|
@ -37,7 +37,7 @@ class ShadowDetector {
|
||||
|
||||
List<Venue> get listWithVenuesInShade => venuesInShade; //Get all venues with their shadow status updated.
|
||||
|
||||
void evaluateShadowsForOneVenue (Venue venue) async {
|
||||
Future evaluateShadowsForOneVenue (Venue venue) async {
|
||||
LatLng pos= venue.position;
|
||||
final lat = pos.latitude.toString();
|
||||
final lng = pos.longitude.toString();
|
||||
|
105
lib/Venue.dart
105
lib/Venue.dart
@ -1,31 +1,108 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||
|
||||
class Venue {
|
||||
late String venueName;
|
||||
late int venueID;
|
||||
late VenueType typeOfVenue;
|
||||
int venueID;
|
||||
String venueName;
|
||||
String venueAddress;
|
||||
String venueStreetNo;
|
||||
late LatLng position;
|
||||
late InfoWindow infoWindow;
|
||||
bool inShade = false;
|
||||
|
||||
Venue(this.venueID, this.venueName, this.venueAddress, this.venueStreetNo,
|
||||
this.position);
|
||||
|
||||
Venue(this.venueName,
|
||||
this.venueID, this.typeOfVenue, this.position);
|
||||
factory Venue.fromJson(Map<String, dynamic> json, id) {
|
||||
var tempId = id;
|
||||
var tempName = json['name'];
|
||||
var tempAddress = json['address'];
|
||||
var tempStreetNo = json['streetNo'];
|
||||
var tempCoordinates = json['coordinates'];
|
||||
|
||||
var splitArr = [];
|
||||
splitArr = tempCoordinates.toString().split(';');
|
||||
LatLng tempPosition = LatLng(double.parse(splitArr[1]), double.parse(splitArr[0]));
|
||||
|
||||
|
||||
/* print(splitArr[0].toString() + ' : ' + splitArr[1].toString());
|
||||
print('Coordinates: ' + tempCoordinates);
|
||||
print('Parsed: ' + double.parse(splitArr[0]).toString());
|
||||
print(LatLng(double.parse(splitArr[1]), double.parse(splitArr[0])));
|
||||
print(tempAddress + tempName);
|
||||
print(tempPosition.latitude.toString() + " " + splitArr[0]);*/
|
||||
|
||||
// print('Json-Object:');
|
||||
// print(json);
|
||||
|
||||
// print(venues);
|
||||
// print(json['name']);
|
||||
// print(json['address']);
|
||||
// print(json['streetNo']);
|
||||
// print(json['coordinates']);
|
||||
|
||||
if (tempName != null &&
|
||||
tempAddress != null &&
|
||||
tempStreetNo != null &&
|
||||
tempCoordinates != null) {
|
||||
return Venue(tempId, tempName, tempAddress, tempStreetNo, tempPosition);
|
||||
} else {
|
||||
return Venue(0, 'name', 'address', 'streetNo', const LatLng(0, 0));
|
||||
}
|
||||
}
|
||||
|
||||
BitmapDescriptor drawIconColor() {
|
||||
if(inShade) {
|
||||
if (inShade) {
|
||||
return BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueAzure);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
return BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueYellow);
|
||||
}
|
||||
}
|
||||
|
||||
Widget getVenue(BuildContext context) {
|
||||
return Text(venueName);
|
||||
}
|
||||
|
||||
Widget getAddress(BuildContext context) {
|
||||
return Text(venueAddress + ' ' + venueStreetNo);
|
||||
}
|
||||
|
||||
Widget getCoordinates(BuildContext context) {
|
||||
return Text(position.toString());
|
||||
}
|
||||
|
||||
LatLng getPositionAsLatLng(BuildContext context) {
|
||||
return position;
|
||||
}
|
||||
|
||||
Widget getIcon(BuildContext context) {
|
||||
if (venueName.toLowerCase().contains('estau')) {
|
||||
return const Icon(Icons.restaurant);
|
||||
} else if (venueName.toLowerCase().contains('kaf')) {
|
||||
return const Icon(Icons.local_cafe);
|
||||
} else if (venueName.toLowerCase().contains('pizz')) {
|
||||
return const Icon(Icons.local_pizza);
|
||||
} else {
|
||||
return const Icon(Icons.food_bank);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ID: ' +
|
||||
venueID.toString() +
|
||||
', ' +
|
||||
'name: ' +
|
||||
venueName +
|
||||
', ' +
|
||||
'address: ' +
|
||||
venueAddress +
|
||||
' ' +
|
||||
venueStreetNo +
|
||||
', ' +
|
||||
'coordinates: ' +
|
||||
position.toString();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
enum VenueType{
|
||||
cafe, restaurant, bar
|
||||
}
|
||||
enum VenueType { cafe, restaurant, bar }
|
||||
|
100
lib/VenueInfo.dart
Normal file
100
lib/VenueInfo.dart
Normal file
@ -0,0 +1,100 @@
|
||||
import 'dart:collection';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:html/dom.dart' as dom;
|
||||
import 'dart:io';
|
||||
|
||||
class VenueInfo {
|
||||
|
||||
static const photoSize = '600x400'; //Can be replaced with custom size (Example Format: '300x400')
|
||||
late LinkedHashMap<String, dynamic> _photos;
|
||||
late List<dynamic> _tastes;
|
||||
late int _priceClass;
|
||||
late double _rating;
|
||||
late int _totalRatings;
|
||||
late bool _openNow;
|
||||
late String _openHoursToday;
|
||||
|
||||
|
||||
VenueInfo(/*this._photos, this._tastes, this._priceClass, this._rating, this._totalRatings, this._openNow, this._openHoursToday*/);
|
||||
|
||||
Future getVenueInfo(String venueName) async {
|
||||
|
||||
final fourSquareURL =
|
||||
Uri.parse('https://foursquare.com/explore?mode=url&near=Stockholm%2C%20Sweden&nearGeoId=72057594040601666&q=$venueName');
|
||||
|
||||
final response1 = await http.get(fourSquareURL);
|
||||
if(response1.statusCode == 200) {
|
||||
dom.Document html = dom.Document.html(response1.body);
|
||||
|
||||
var fsqId = html.getElementsByClassName('card singleRecommendation hasPhoto tipWithLogging leftPhotoLayout').map((e) => e.attributes['data-id']).toList()[0];
|
||||
|
||||
final response2 = await http.get(
|
||||
Uri.parse('https://api.foursquare.com/v3/places/$fsqId?fields=price%2Crating%2Cphotos%2Chours%2Cstats%2Ctastes'),
|
||||
headers: {
|
||||
HttpHeaders.authorizationHeader: 'fsq3LBbeZ8imQK8X1hov7DTb9F64Xs1fs2bojHQ99QNm4TE='
|
||||
},
|
||||
);
|
||||
|
||||
if(response2.statusCode == 200) {
|
||||
Map data = jsonDecode(response2.body);
|
||||
_priceClass = data['price'];
|
||||
_rating = data['rating'];
|
||||
_photos = data['photos'][0];
|
||||
_openNow = data['hours']['open_now'];
|
||||
_totalRatings = data['stats']['total_ratings'];
|
||||
_tastes = data['tastes'];
|
||||
if(data['hours']['display'] != null) {
|
||||
_openHoursToday = data['hours']['display'];
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw const HttpException("No connection to api.foursquare.com");
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw const HttpException("No connection to foursquare.com");
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
double getRating() {
|
||||
return _rating;
|
||||
}
|
||||
|
||||
int getTotalRatings() { //Number of people who contributed to rating score
|
||||
return _totalRatings;
|
||||
}
|
||||
|
||||
String getOpenStatus() {
|
||||
if(_openNow)
|
||||
return 'Open now!';
|
||||
else
|
||||
return 'Closed';
|
||||
}
|
||||
|
||||
String getOpeningHours() {
|
||||
if(_openHoursToday.isNotEmpty) {
|
||||
return _openHoursToday;
|
||||
}
|
||||
return 'N/A';
|
||||
}
|
||||
|
||||
|
||||
String getPriceClass () {
|
||||
return '\$'*_priceClass;
|
||||
}
|
||||
String getPhotoURL () {
|
||||
return _photos['prefix'] + photoSize + _photos['suffix'];
|
||||
}
|
||||
|
||||
bool isOpenNow() {
|
||||
return _openNow;
|
||||
}
|
||||
|
||||
|
||||
}
|
146
lib/WeatherData.dart
Normal file
146
lib/WeatherData.dart
Normal file
@ -0,0 +1,146 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||
|
||||
class WeatherData {
|
||||
final int weatherValue;
|
||||
final int temperature;
|
||||
|
||||
WeatherData(this.weatherValue, this.temperature);
|
||||
|
||||
factory WeatherData.fromJson(Map<String, dynamic> json) {
|
||||
var value = json.values;
|
||||
var tempWeatherData;
|
||||
var tempTemperature;
|
||||
|
||||
if (value.first['wsymb2'] is int) {
|
||||
tempWeatherData = value.first['wsymb2'];
|
||||
}
|
||||
if (value.first['temp'] is double) {
|
||||
tempTemperature = value.first['temp'];
|
||||
}
|
||||
|
||||
if (tempWeatherData != null && tempTemperature != null) {
|
||||
return WeatherData(tempWeatherData, tempTemperature.round());
|
||||
} else {
|
||||
return WeatherData(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
int getCurrentTemperature() {
|
||||
return temperature;
|
||||
}
|
||||
|
||||
String getCurrentWeatherStatus() {
|
||||
String weatherStatus;
|
||||
switch (weatherValue) {
|
||||
case 0:
|
||||
weatherStatus = 'Undefined';
|
||||
break;
|
||||
case 1:
|
||||
weatherStatus = 'Clear sky';
|
||||
break;
|
||||
case 2:
|
||||
weatherStatus = 'Nearly clear sky';
|
||||
break;
|
||||
case 3:
|
||||
weatherStatus = 'Variable cloudiness';
|
||||
break;
|
||||
case 4:
|
||||
weatherStatus = 'Halfclear sky';
|
||||
break;
|
||||
case 5:
|
||||
weatherStatus = 'Cloudy sky';
|
||||
break;
|
||||
case 6:
|
||||
weatherStatus = 'Overcast';
|
||||
break;
|
||||
case 7:
|
||||
weatherStatus = 'Fog';
|
||||
break;
|
||||
case 8:
|
||||
weatherStatus = 'Light rain showers';
|
||||
break;
|
||||
case 9:
|
||||
weatherStatus = 'Moderate rain showers';
|
||||
break;
|
||||
case 10:
|
||||
weatherStatus = 'Heavy rain showers';
|
||||
break;
|
||||
case 11:
|
||||
weatherStatus = 'Thunderstorm';
|
||||
break;
|
||||
case 12:
|
||||
weatherStatus = 'Light sleet showers';
|
||||
break;
|
||||
case 13:
|
||||
weatherStatus = 'Moderate sleet showers';
|
||||
break;
|
||||
case 14:
|
||||
weatherStatus = 'Heavy sleet showers';
|
||||
break;
|
||||
case 15:
|
||||
weatherStatus = 'Light snow showers';
|
||||
break;
|
||||
case 16:
|
||||
weatherStatus = 'Moderate snow showers';
|
||||
break;
|
||||
case 17:
|
||||
weatherStatus = 'Heavy snow showers';
|
||||
break;
|
||||
default:
|
||||
weatherStatus = 'Undefined';
|
||||
}
|
||||
return weatherStatus;
|
||||
}
|
||||
|
||||
Widget getCurrentWeatherIcon() {
|
||||
switch (weatherValue) {
|
||||
case 1:
|
||||
return const Icon(
|
||||
Icons.sunny,
|
||||
color: Color.fromARGB(255, 255, 161, 19),
|
||||
);
|
||||
case 2:
|
||||
return const Icon(
|
||||
Icons.sunny,
|
||||
color: Color.fromARGB(255, 255, 161, 19),
|
||||
);
|
||||
case 3:
|
||||
return const FaIcon(FontAwesomeIcons.cloudSun);
|
||||
case 4:
|
||||
return const FaIcon(FontAwesomeIcons.cloudSun);
|
||||
case 5:
|
||||
return const FaIcon(FontAwesomeIcons.cloud);
|
||||
case 6:
|
||||
return const FaIcon(FontAwesomeIcons.cloud);
|
||||
case 7:
|
||||
return const FaIcon(FontAwesomeIcons.smog);
|
||||
case 8:
|
||||
return const FaIcon(FontAwesomeIcons.umbrella);
|
||||
case 9:
|
||||
return const FaIcon(FontAwesomeIcons.cloudRain);
|
||||
case 10:
|
||||
return const FaIcon(FontAwesomeIcons.cloudShowersHeavy);
|
||||
case 11:
|
||||
return const FaIcon(FontAwesomeIcons.cloudflare);
|
||||
case 12:
|
||||
return const FaIcon(FontAwesomeIcons.cloudRain);
|
||||
case 13:
|
||||
return const FaIcon(FontAwesomeIcons.cloudShowersHeavy);
|
||||
case 14:
|
||||
return const FaIcon(FontAwesomeIcons.cloudShowersHeavy);
|
||||
case 15:
|
||||
return const FaIcon(FontAwesomeIcons.snowflake);
|
||||
case 16:
|
||||
return const FaIcon(FontAwesomeIcons.snowflake);
|
||||
case 17:
|
||||
return const FaIcon(FontAwesomeIcons.snowflake);
|
||||
default:
|
||||
return const FaIcon(FontAwesomeIcons.times);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -7,9 +7,9 @@ class WebScraper {
|
||||
late List<String> openingHoursThisWeek;
|
||||
late String openingHoursToday;
|
||||
late String reviewScore;
|
||||
//late String priceClass;
|
||||
late String priceClass;
|
||||
|
||||
WebScraper() { //Must provide an URL from bing search engine.
|
||||
WebScraper() {
|
||||
|
||||
}
|
||||
|
||||
@ -35,7 +35,7 @@ class WebScraper {
|
||||
.toList()[0]
|
||||
.toString();
|
||||
|
||||
/* final tripAdvisorURL = htmlBing.querySelectorAll('div.infoModule.b_divsec.topBleed.noSeparator > div > a')
|
||||
final tripAdvisorURL = htmlBing.querySelectorAll('div.infoModule.b_divsec.topBleed.noSeparator > div > a')
|
||||
.map((e) => e.attributes['href'])
|
||||
.toList()[0]
|
||||
.toString();
|
||||
@ -47,7 +47,7 @@ class WebScraper {
|
||||
.getElementsByClassName('drUyy')
|
||||
.map((e) => e.text)
|
||||
.toList()[0]
|
||||
.toString();*/
|
||||
.toString();
|
||||
}
|
||||
|
||||
List<String> get getOpeningHoursThisWeek => openingHoursThisWeek; //First item is monday, last item is sunday.
|
||||
@ -55,6 +55,6 @@ class WebScraper {
|
||||
|
||||
String get getOpeningHoursToday => openingHoursToday; //Output example: "Open · Closes 01:00" (Gets automatically updated).
|
||||
String get getReviewScore => reviewScore; // Output example: "Star Rating: 4 out of 5.".
|
||||
//String get getPriceClass => priceClass; // Output example: "$$ - $$$".
|
||||
String get getPriceClass => priceClass; // Output example: "$$ - $$$".
|
||||
|
||||
}
|
@ -1,3 +1,5 @@
|
||||
import 'package:flutter_applicationdemo/WeatherData.dart';
|
||||
|
||||
import 'Venue.dart';
|
||||
import 'package:flutter_applicationdemo/login/User.dart';
|
||||
import '../login/User.dart';
|
||||
@ -7,7 +9,6 @@ import 'package:flutter/material.dart';
|
||||
|
||||
import 'HomePage.dart';
|
||||
import 'Venue.dart';
|
||||
import 'Venue.dart';
|
||||
import 'main.dart';
|
||||
|
||||
User LOGGED_IN_USER = User(0, "", "");
|
||||
@ -19,6 +20,7 @@ Color TEXTCOLOR = const Color.fromARGB(255, 79, 98, 114);
|
||||
Color SHADOWCOLOR = const Color.fromARGB(255, 0, 0, 0);
|
||||
Color TEXTWHITE = const Color.fromARGB(0, 0, 0, 0);
|
||||
late List<Venue> VENUES = [];
|
||||
late WeatherData forecast;
|
||||
|
||||
Venue? getVenueByID(int searchedVenueID){
|
||||
for(var V in VENUES){
|
||||
|
@ -1,4 +1,6 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:firebase_auth/firebase_auth.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@ -8,9 +10,11 @@ import 'package:flutter_applicationdemo/login/GoogleSignInProvider.dart';
|
||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||
import 'package:flutter_applicationdemo/login/GoogleSignInProvider.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
import 'BottomNavPage.dart';
|
||||
import 'Map.dart';
|
||||
import 'WeatherData.dart';
|
||||
import 'Venue.dart';
|
||||
import 'mysql.dart';
|
||||
import 'package:flutter_applicationdemo/login/User.dart';
|
||||
@ -21,10 +25,29 @@ void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
await Firebase.initializeApp();
|
||||
await loadAllVenues();
|
||||
await fetchWeather();
|
||||
|
||||
runApp(MyApp());
|
||||
}
|
||||
|
||||
Future fetchWeather() async {
|
||||
WeatherData tempWeather = WeatherData(0, 0);
|
||||
Uri weatherDataURI = Uri.parse(
|
||||
'https://group-4-75.pvt.dsv.su.se/target/weather-0.0.2-SNAPSHOT.war/weather');
|
||||
|
||||
final response = await http.get(weatherDataURI);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
var data = json.decode(response.body);
|
||||
tempWeather = WeatherData.fromJson(data);
|
||||
print(data);
|
||||
|
||||
globals.forecast = tempWeather;
|
||||
} else {
|
||||
throw const HttpException("Problem fetching the weather data");
|
||||
}
|
||||
}
|
||||
|
||||
class MyApp extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@ -41,19 +64,52 @@ class MyApp extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
}
|
||||
Future<void> loadAllVenues() async{
|
||||
globals.VENUES = [];
|
||||
var db = mysql();
|
||||
await db.getConnection().then((conn) async {
|
||||
String sql = "select venueName, venueID, latitude, longitude from maen0574.venue";
|
||||
await conn.query(sql).then((results){
|
||||
for(var row in results){
|
||||
globals.VENUES.add(Venue(row[0], row[1], VenueType.restaurant, LatLng(row[2], row[3])));
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var sd = ShadowDetector();
|
||||
await sd.evaluateShadowsForAllVenues(globals.VENUES);
|
||||
Future loadAllVenues() async {
|
||||
Uri venueDataURI = Uri.parse(
|
||||
'https://group-4-75.pvt.dsv.su.se/target/weather-0.0.4-SNAPSHOT.war/venue');
|
||||
|
||||
}
|
||||
final response = await http.get(venueDataURI);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
addVenues(response);
|
||||
|
||||
// var sd = ShadowDetector();
|
||||
// await sd.evaluateShadowsForAllVenues(seventyFiveVenues);
|
||||
} else {
|
||||
throw const HttpException("Problem fetching the weather data");
|
||||
}
|
||||
}
|
||||
|
||||
void addVenues(http.Response response) {
|
||||
var data = json.decode(response.body);
|
||||
var _allVenuesTemp = [];
|
||||
|
||||
addValidVenues(data, _allVenuesTemp);
|
||||
|
||||
for (Venue venue in _allVenuesTemp) {
|
||||
globals.VENUES.add(venue);
|
||||
}
|
||||
}
|
||||
|
||||
void addValidVenues(data, List<dynamic> _allVenuesTemp) {
|
||||
for (var i = 0; i < data.values.first.length; i++) {
|
||||
if (data.values.first[i]['name'] == null) {
|
||||
continue;
|
||||
} else if (data.values.first[i]['address'].contains('null')) {
|
||||
continue;
|
||||
} else if (!data.values.first[i]['name'].contains('©') &&
|
||||
!data.values.first[i]['name'].contains('¶') &&
|
||||
!data.values.first[i]['name'].contains('¥') &&
|
||||
!data.values.first[i]['name'].contains('Ã') &&
|
||||
!data.values.first[i]['name'].contains('Â') &&
|
||||
!data.values.first[i]['address'].contains('©') &&
|
||||
!data.values.first[i]['address'].contains('¶') &&
|
||||
!data.values.first[i]['address'].contains('¥') &&
|
||||
!data.values.first[i]['address'].contains('Ã')) {
|
||||
_allVenuesTemp.add(Venue.fromJson(data.values.first[i], i));
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ class InputField extends StatelessWidget {
|
||||
required this.text,
|
||||
required this.isPassword,
|
||||
required this.icon,
|
||||
required this.controller})
|
||||
required this.controller, ontap})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
|
@ -6,148 +6,10 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'VenueInfo.dart';
|
||||
import 'WeatherData.dart';
|
||||
import 'globals.dart' as globals;
|
||||
|
||||
// Color _backgroundColor = const Color(0xffac7b84);
|
||||
|
||||
class WeatherData {
|
||||
final int weatherValue;
|
||||
final int temperature;
|
||||
|
||||
WeatherData(this.weatherValue, this.temperature);
|
||||
|
||||
factory WeatherData.fromJson(Map<String, dynamic> json) {
|
||||
var value = json.values;
|
||||
var tempWeatherData;
|
||||
var tempTemperature;
|
||||
|
||||
if (value.first['wsymb2'] is int) {
|
||||
tempWeatherData = value.first['wsymb2'];
|
||||
}
|
||||
if (value.first['temp'] is double) {
|
||||
tempTemperature = value.first['temp'];
|
||||
}
|
||||
|
||||
if (tempWeatherData != null && tempTemperature != null) {
|
||||
return WeatherData(tempWeatherData, tempTemperature.round());
|
||||
} else {
|
||||
return WeatherData(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
int getCurrentTemperature() {
|
||||
return temperature;
|
||||
}
|
||||
|
||||
String getCurrentWeatherStatus() {
|
||||
String weatherStatus;
|
||||
switch (weatherValue) {
|
||||
case 0:
|
||||
weatherStatus = 'Undefined';
|
||||
break;
|
||||
case 1:
|
||||
weatherStatus = 'Clear sky';
|
||||
break;
|
||||
case 2:
|
||||
weatherStatus = 'Nearly clear sky';
|
||||
break;
|
||||
case 3:
|
||||
weatherStatus = 'Variable cloudiness';
|
||||
break;
|
||||
case 4:
|
||||
weatherStatus = 'Halfclear sky';
|
||||
break;
|
||||
case 5:
|
||||
weatherStatus = 'Cloudy sky';
|
||||
break;
|
||||
case 6:
|
||||
weatherStatus = 'Overcast';
|
||||
break;
|
||||
case 7:
|
||||
weatherStatus = 'Fog';
|
||||
break;
|
||||
case 8:
|
||||
weatherStatus = 'Light rain showers';
|
||||
break;
|
||||
case 9:
|
||||
weatherStatus = 'Moderate rain showers';
|
||||
break;
|
||||
case 10:
|
||||
weatherStatus = 'Heavy rain showers';
|
||||
break;
|
||||
case 11:
|
||||
weatherStatus = 'Thunderstorm';
|
||||
break;
|
||||
case 12:
|
||||
weatherStatus = 'Light sleet showers';
|
||||
break;
|
||||
case 13:
|
||||
weatherStatus = 'Moderate sleet showers';
|
||||
break;
|
||||
case 14:
|
||||
weatherStatus = 'Heavy sleet showers';
|
||||
break;
|
||||
case 15:
|
||||
weatherStatus = 'Light snow showers';
|
||||
break;
|
||||
case 16:
|
||||
weatherStatus = 'Moderate snow showers';
|
||||
break;
|
||||
case 17:
|
||||
weatherStatus = 'Heavy snow showers';
|
||||
break;
|
||||
default:
|
||||
weatherStatus = 'Undefined';
|
||||
}
|
||||
return weatherStatus;
|
||||
}
|
||||
|
||||
Widget getCurrentWeatherIcon() {
|
||||
switch (weatherValue) {
|
||||
case 1:
|
||||
return const Icon(
|
||||
Icons.sunny,
|
||||
color: Color.fromARGB(255, 251, 183, 9),
|
||||
);
|
||||
case 2:
|
||||
return const Icon(
|
||||
Icons.sunny,
|
||||
color: Color.fromARGB(255, 251, 183, 9),
|
||||
);
|
||||
case 3:
|
||||
return const FaIcon(FontAwesomeIcons.cloudSun);
|
||||
case 4:
|
||||
return const FaIcon(FontAwesomeIcons.cloudSun);
|
||||
case 5:
|
||||
return const FaIcon(FontAwesomeIcons.cloud);
|
||||
case 6:
|
||||
return const FaIcon(FontAwesomeIcons.cloud);
|
||||
case 7:
|
||||
return const FaIcon(FontAwesomeIcons.smog);
|
||||
case 8:
|
||||
return const FaIcon(FontAwesomeIcons.umbrella);
|
||||
case 9:
|
||||
return const FaIcon(FontAwesomeIcons.cloudRain);
|
||||
case 10:
|
||||
return const FaIcon(FontAwesomeIcons.cloudShowersHeavy);
|
||||
case 11:
|
||||
return const FaIcon(FontAwesomeIcons.cloudflare);
|
||||
case 12:
|
||||
return const FaIcon(FontAwesomeIcons.cloudRain);
|
||||
case 13:
|
||||
return const FaIcon(FontAwesomeIcons.cloudShowersHeavy);
|
||||
case 14:
|
||||
return const FaIcon(FontAwesomeIcons.cloudShowersHeavy);
|
||||
case 15:
|
||||
return const FaIcon(FontAwesomeIcons.snowflake);
|
||||
case 16:
|
||||
return const FaIcon(FontAwesomeIcons.snowflake);
|
||||
case 17:
|
||||
return const FaIcon(FontAwesomeIcons.snowflake);
|
||||
default:
|
||||
return const Icon(Icons.not_accessible);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class VenuePage extends StatefulWidget {
|
||||
const VenuePage(this.venue, {Key? key}) : super(key: key);
|
||||
@ -161,9 +23,11 @@ class _VenuePageState extends State<VenuePage> {
|
||||
late WeatherData currentWeather;
|
||||
final String imageLink = '';
|
||||
late final Venue venue;
|
||||
|
||||
late VenueInfo venueInfo;
|
||||
_VenuePageState(this.venue);
|
||||
|
||||
|
||||
|
||||
validateAndGetImageLink() {
|
||||
if (imageLink == '') {
|
||||
return 'https://live.staticflickr.com/6205/6081773215_19444220b6_b.jpg';
|
||||
@ -175,24 +39,31 @@ class _VenuePageState extends State<VenuePage> {
|
||||
@override
|
||||
void initState() {
|
||||
refreshWeather();
|
||||
gatherVenueInfo();
|
||||
}
|
||||
|
||||
Future gatherVenueInfo( ) async {
|
||||
VenueInfo vu = VenueInfo();
|
||||
venueInfo = vu;
|
||||
venueInfo = await vu.getVenueInfo(venue.venueName);
|
||||
}
|
||||
|
||||
|
||||
Future refreshWeather() async {
|
||||
WeatherData tempWeather = WeatherData(0, 0);
|
||||
currentWeather = tempWeather;
|
||||
|
||||
Uri weatherDataURI = Uri.parse(
|
||||
'https://group-4-75.pvt.dsv.su.se/target/weather-0.0.2-SNAPSHOT.war/weather');
|
||||
'https://group-4-75.pvt.dsv.su.se/target/weather-0.0.4-SNAPSHOT.war/weather');
|
||||
|
||||
final responce = await http.get(weatherDataURI);
|
||||
final response = await http.get(weatherDataURI);
|
||||
|
||||
if (responce.statusCode == 200) {
|
||||
var data = json.decode(responce.body);
|
||||
if (response.statusCode == 200) {
|
||||
var data = json.decode(response.body);
|
||||
tempWeather = WeatherData.fromJson(data);
|
||||
|
||||
print(data);
|
||||
|
||||
setState(() {
|
||||
globals.forecast = tempWeather;
|
||||
currentWeather = tempWeather; //Could be a widget instead??
|
||||
});
|
||||
} else {
|
||||
@ -203,102 +74,129 @@ class _VenuePageState extends State<VenuePage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: const Color(0xfffceff9),
|
||||
appBar: AppBar(
|
||||
title: Text(venue.venueName),
|
||||
backgroundColor: const Color(0xffac7b84),
|
||||
),
|
||||
body: Center(child: SingleChildScrollView(
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
child: Column(children: <Widget>[
|
||||
Row(
|
||||
children: const [
|
||||
ShareButton(),
|
||||
SavePlaceButton(),
|
||||
],
|
||||
),
|
||||
Row(children: [
|
||||
Expanded(
|
||||
child: Image.network(validateAndGetImageLink()),
|
||||
),
|
||||
]),
|
||||
// Row(
|
||||
// children: const [
|
||||
// Text(
|
||||
// 'Placeholder for image',
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
Row(children: [
|
||||
Expanded(
|
||||
child: Column(
|
||||
children: [
|
||||
Text(venue.venueName),
|
||||
Text('This is the address'),
|
||||
],
|
||||
)),
|
||||
Expanded(
|
||||
child: Container(
|
||||
// decoration: BoxDecoration(
|
||||
// border: Border.all(color: const Color(0xffaaaaaa)),
|
||||
// ),
|
||||
// color: const Color(0xffe9e9e9),
|
||||
child: Column(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(4.0),
|
||||
child: Text('Weather Status:',
|
||||
style: GoogleFonts.robotoCondensed(
|
||||
textStyle: const TextStyle(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
)),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
Column(
|
||||
children: [
|
||||
currentWeather.getCurrentWeatherIcon(),
|
||||
Text(currentWeather.getCurrentWeatherStatus()),
|
||||
],
|
||||
backgroundColor: const Color(0xfffceff9),
|
||||
appBar: AppBar(
|
||||
title: Text(venue.venueName),
|
||||
backgroundColor: const Color(0xffac7b84),
|
||||
),
|
||||
body: Center(
|
||||
child: FutureBuilder(
|
||||
future: gatherVenueInfo(),
|
||||
builder: (context, snapshot) {
|
||||
if(snapshot.connectionState == ConnectionState.done) {
|
||||
return SingleChildScrollView(
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
child: Column(children: <Widget>[
|
||||
Row(
|
||||
children: const [
|
||||
ShareButton(),
|
||||
SavePlaceButton(),
|
||||
],
|
||||
),
|
||||
Row(children: [
|
||||
Expanded(
|
||||
child: Image.network(venueInfo.getPhotoURL()),
|
||||
),
|
||||
]),
|
||||
// Row(
|
||||
// children: const [
|
||||
// Text(
|
||||
// 'Placeholder for image',
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
Row(children: [
|
||||
Expanded(
|
||||
child: Column(
|
||||
children: [
|
||||
Text(venue.venueName,
|
||||
style: const TextStyle(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.bold,
|
||||
)
|
||||
),
|
||||
Text(venue.venueAddress + ' ' + venue.venueStreetNo),
|
||||
],
|
||||
)),
|
||||
Expanded(
|
||||
child: Container(
|
||||
// decoration: BoxDecoration(
|
||||
// border: Border.all(color: const Color(0xffaaaaaa)),
|
||||
// ),
|
||||
// color: const Color(0xffe9e9e9),
|
||||
child: buildWeatherColumn(),
|
||||
),
|
||||
Text(currentWeather
|
||||
.getCurrentTemperature()
|
||||
.toString() +
|
||||
'\u2103'),
|
||||
]),
|
||||
],
|
||||
),
|
||||
),
|
||||
)
|
||||
]),
|
||||
const AboutTheSpotTable(),
|
||||
/*GridView.count(
|
||||
)
|
||||
]),
|
||||
AboutTheSpotTable(venueInfo: venueInfo),
|
||||
/*GridView.count(
|
||||
crossAxisCount: 2,
|
||||
children: [],
|
||||
)*/
|
||||
]),
|
||||
]),
|
||||
),
|
||||
);
|
||||
}
|
||||
else {
|
||||
return CircularProgressIndicator();
|
||||
}
|
||||
}
|
||||
)
|
||||
));
|
||||
}
|
||||
|
||||
Column buildWeatherColumn() {
|
||||
return Column(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(4.0),
|
||||
child: /*Text('Weather Status:',
|
||||
style: GoogleFonts.robotoCondensed(
|
||||
textStyle: const TextStyle(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
)),*/
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
Column(
|
||||
children: [
|
||||
currentWeather.getCurrentWeatherIcon(),
|
||||
Text(currentWeather.getCurrentWeatherStatus()),
|
||||
],
|
||||
),
|
||||
Text(currentWeather
|
||||
.getCurrentTemperature()
|
||||
.toString() +
|
||||
'\u2103'),
|
||||
]),
|
||||
),
|
||||
),
|
||||
));
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//Just an example table
|
||||
class AboutTheSpotTable extends StatelessWidget {
|
||||
const AboutTheSpotTable({
|
||||
class AboutTheSpotTable extends StatefulWidget {
|
||||
final VenueInfo venueInfo;
|
||||
AboutTheSpotTable({
|
||||
Key? key,
|
||||
required this.venueInfo,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<AboutTheSpotTable> createState() => _AboutTheSpotTableState();
|
||||
}
|
||||
|
||||
class _AboutTheSpotTableState extends State<AboutTheSpotTable> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return DataTable(
|
||||
headingRowHeight: 30,
|
||||
columnSpacing: 100,
|
||||
dataRowHeight: 30,
|
||||
//dataRowHeight: 30,
|
||||
dataTextStyle: GoogleFonts.robotoCondensed(
|
||||
color: const Color(0xff4F6272),
|
||||
),
|
||||
@ -307,22 +205,22 @@ class AboutTheSpotTable extends StatelessWidget {
|
||||
label: Text('About the spot',
|
||||
style: GoogleFonts.roboto(
|
||||
textStyle: const TextStyle(
|
||||
fontSize: 18,
|
||||
)))),
|
||||
fontSize: 18,
|
||||
)))),
|
||||
const DataColumn(label: Text('', style: TextStyle())),
|
||||
],
|
||||
rows: const [
|
||||
rows: [
|
||||
DataRow(cells: [
|
||||
DataCell(Text('Type of venue')),
|
||||
DataCell(Text('Saloon')),
|
||||
]),
|
||||
DataRow(cells: [
|
||||
DataCell(Text('Pricing')),
|
||||
DataCell(Text('\$\$\$')),
|
||||
DataCell(Text(widget.venueInfo.getPriceClass())),
|
||||
]),
|
||||
DataRow(cells: [
|
||||
DataCell(Text('Rating')),
|
||||
DataCell(Text('4.2/5')),
|
||||
DataCell(Text(widget.venueInfo.getRating().toString() + ' (' + widget.venueInfo.getTotalRatings().toString() + ' ratings)')),
|
||||
]),
|
||||
DataRow(cells: [
|
||||
DataCell(Text('Current activity')),
|
||||
@ -330,29 +228,14 @@ class AboutTheSpotTable extends StatelessWidget {
|
||||
]),
|
||||
DataRow(cells: [
|
||||
DataCell(Text('Opening hours')),
|
||||
DataCell(Text('11:00-23:00')),
|
||||
DataCell(Text(widget.venueInfo.getOpeningHours())),
|
||||
]),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// @override
|
||||
// Widget build(BuildContext context) {
|
||||
// return Scaffold(
|
||||
// backgroundColor: const Color(0xfffceff9),
|
||||
// appBar: AppBar(
|
||||
// title: const Text('My Venue'),
|
||||
// backgroundColor: _backgroundColor,
|
||||
// ),
|
||||
// body: Row(
|
||||
// children: const <Widget>[
|
||||
// ShareButton(),
|
||||
// SavePlaceButton(),
|
||||
// ],
|
||||
// ));
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
class SavePlaceButton extends StatelessWidget {
|
||||
const SavePlaceButton({
|
||||
@ -370,7 +253,7 @@ class SavePlaceButton extends StatelessWidget {
|
||||
),
|
||||
label: const Text('Save place'),
|
||||
style: TextButton.styleFrom(
|
||||
primary: Color(0xff4f6272),
|
||||
primary: const Color(0xff4f6272),
|
||||
),
|
||||
),
|
||||
);
|
||||
@ -392,4 +275,4 @@ class ShareButton extends StatelessWidget {
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
20
pubspec.lock
20
pubspec.lock
@ -133,7 +133,7 @@ packages:
|
||||
name: firebase_core
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.17.0"
|
||||
version: "1.17.1"
|
||||
firebase_core_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -353,7 +353,7 @@ packages:
|
||||
source: hosted
|
||||
version: "0.15.0"
|
||||
http:
|
||||
dependency: "direct main"
|
||||
dependency: transitive
|
||||
description:
|
||||
name: http
|
||||
url: "https://pub.dartlang.org"
|
||||
@ -374,7 +374,7 @@ packages:
|
||||
source: hosted
|
||||
version: "3.1.3"
|
||||
intl:
|
||||
dependency: transitive
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: intl
|
||||
url: "https://pub.dartlang.org"
|
||||
@ -672,6 +672,20 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
syncfusion_flutter_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: syncfusion_flutter_core
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "20.1.57"
|
||||
syncfusion_flutter_sliders:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: syncfusion_flutter_sliders
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "20.1.57"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -33,7 +33,6 @@ dependencies:
|
||||
|
||||
# The following adds the Cupertino Icons font to your application.
|
||||
# Use with the CupertinoIcons class for iOS style icons.
|
||||
http: ^0.13.4
|
||||
dio: ^4.0.0
|
||||
flutter_polyline_points: ^0.2.6
|
||||
cupertino_icons: ^1.0.2
|
||||
@ -49,13 +48,15 @@ dependencies:
|
||||
font_awesome_flutter: ^9.2.0
|
||||
provider: ^5.0.0
|
||||
webview_flutter: ^3.0.0
|
||||
|
||||
syncfusion_flutter_sliders: ^20.1.57
|
||||
intl: ^0.17.0
|
||||
#Google Sign-in
|
||||
firebase_auth: ^1.1.4
|
||||
google_sign_in: ^5.0.3
|
||||
get: ^4.6.1
|
||||
mysql1: ^0.19.0
|
||||
html: ^0.15.0
|
||||
|
||||
|
||||
flutter_native_splash:
|
||||
background_image: assets/images/outdoor.png
|
||||
|
Loading…
x
Reference in New Issue
Block a user