LastFeedbackBranch #48

Merged
nisa9769 merged 4 commits from LastFeedbackBranch into master 2022-05-28 05:33:08 +02:00
53 changed files with 15595 additions and 482 deletions
Showing only changes of commit 26beaa855c - Show all commits

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

File diff suppressed because one or more lines are too long

View File

@ -111,7 +111,7 @@
}, },
{ {
"name": "firebase_core", "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/", "packageUri": "lib/",
"languageVersion": "2.16" "languageVersion": "2.16"
}, },
@ -583,6 +583,18 @@
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "2.12" "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", "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", "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" "languageVersion": "2.16"
} }
], ],
"generated": "2022-05-25T09:46:23.172307Z", "generated": "2022-05-28T02:45:06.679946Z",
"generator": "pub", "generator": "pub",
"generatorVersion": "2.16.2" "generatorVersion": "2.16.2"
} }

View File

@ -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/ 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 firebase_core
2.16 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.1/
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/lib/
firebase_core_platform_interface firebase_core_platform_interface
2.16 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/ 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 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/
file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.1.0/lib/ 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 term_glyph
2.12 2.12
file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.2.0/ 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
View File

@ -0,0 +1 @@
2.10.5

View File

@ -1,7 +1,7 @@
# This is a generated file; do not edit or check into version control. # 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=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_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\\ 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_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\\ 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

View File

@ -3,7 +3,7 @@
# #
# For more info see: https://dart.dev/go/dot-packages-deprecation # 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/ 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/ 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/ 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: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_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_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_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/ 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/ 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_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/ 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/ 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/ 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/ 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/ typed_data:file:///C:/src/flutter_windows_2.10.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/typed_data-1.3.0/lib/

Binary file not shown.

View File

@ -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>

View File

@ -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.

File diff suppressed because it is too large Load Diff

View File

@ -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.

File diff suppressed because it is too large Load Diff

View File

@ -88,6 +88,8 @@ PODS:
- path_provider_ios (0.0.1): - path_provider_ios (0.0.1):
- Flutter - Flutter
- PromisesObjC (2.1.0) - PromisesObjC (2.1.0)
- webview_flutter_wkwebview (0.0.1):
- Flutter
DEPENDENCIES: DEPENDENCIES:
- firebase_auth (from `.symlinks/plugins/firebase_auth/ios`) - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`)
@ -101,6 +103,7 @@ DEPENDENCIES:
- location (from `.symlinks/plugins/location/ios`) - location (from `.symlinks/plugins/location/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`) - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
- webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
SPEC REPOS: SPEC REPOS:
trunk: trunk:
@ -141,6 +144,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/package_info_plus/ios" :path: ".symlinks/plugins/package_info_plus/ios"
path_provider_ios: path_provider_ios:
:path: ".symlinks/plugins/path_provider_ios/ios" :path: ".symlinks/plugins/path_provider_ios/ios"
webview_flutter_wkwebview:
:path: ".symlinks/plugins/webview_flutter_wkwebview/ios"
SPEC CHECKSUMS: SPEC CHECKSUMS:
AppAuth: 80317d99ac7ff2801a2f18ff86b48cd315ed465d AppAuth: 80317d99ac7ff2801a2f18ff86b48cd315ed465d
@ -167,6 +172,7 @@ SPEC CHECKSUMS:
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02 path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
PromisesObjC: 99b6f43f9e1044bd87a95a60beff28c2c44ddb72 PromisesObjC: 99b6f43f9e1044bd87a95a60beff28c2c44ddb72
webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f
PODFILE CHECKSUM: 7368163408c647b7eb699d0d788ba6718e18fb8d PODFILE CHECKSUM: 7368163408c647b7eb699d0d788ba6718e18fb8d

View File

@ -4,19 +4,18 @@ import 'Map.dart';
import 'FavoritePage.dart'; import 'FavoritePage.dart';
import 'SettingsPage.dart'; import 'SettingsPage.dart';
import 'globals.dart' as globals; import 'globals.dart' as globals;
import 'ListViewPage.dart';
class BottomNavPage extends StatefulWidget { class BottomNavPage extends StatefulWidget {
@override @override
State<BottomNavPage> createState() => BottomNavPageState(); State<BottomNavPage> createState() => BottomNavPageState();
} }
class BottomNavPageState extends State<BottomNavPage> { class BottomNavPageState extends State<BottomNavPage> {
int currentIndex = 0; int currentIndex = 0;
final screens = [ final screens = [
Map(), Map(),
ListViewPage(),
FavoritePage(), FavoritePage(),
SettingsPage(), SettingsPage(),
]; ];
@ -25,14 +24,19 @@ class BottomNavPageState extends State<BottomNavPage> {
return Scaffold( return Scaffold(
body: screens[currentIndex], body: screens[currentIndex],
bottomNavigationBar: BottomNavigationBar( bottomNavigationBar: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
backgroundColor: globals.BACKGROUNDCOLOR, backgroundColor: globals.BACKGROUNDCOLOR,
selectedItemColor: globals.ITEMCOLOR, selectedItemColor: globals.ITEMCOLOR,
currentIndex: currentIndex, currentIndex: currentIndex,
onTap: (index) => setState(() => currentIndex = index), onTap: (index) => setState(() => currentIndex = index),
items: const [ items: const [
BottomNavigationBarItem( BottomNavigationBarItem(
icon: Icon(Icons.home), icon: Icon(Icons.map_outlined),
label: "Home", label: "Map",
),
BottomNavigationBarItem(
icon: Icon(Icons.list_sharp),
label: "List View",
), ),
BottomNavigationBarItem( BottomNavigationBarItem(
icon: Icon(Icons.favorite), icon: Icon(Icons.favorite),
@ -46,4 +50,3 @@ class BottomNavPageState extends State<BottomNavPage> {
); );
} }
} }

View File

@ -10,6 +10,7 @@ import 'mysql.dart';
import 'package:flutter_applicationdemo/login/User.dart' as User; import 'package:flutter_applicationdemo/login/User.dart' as User;
import 'login/user.dart'; import 'login/user.dart';
import 'globals.dart' as globals; import 'globals.dart' as globals;
import 'ManageAccountPage.dart';
class HomePage extends StatefulWidget { class HomePage extends StatefulWidget {
@ -103,7 +104,7 @@ class _HomePageState extends State<HomePage> {
), ),
onPressed: () { onPressed: () {
Navigator.push( Navigator.push(
context, context, //SignInPage()
MaterialPageRoute(builder: (context) =>SignInPage()), //Replace Container() with call to Map-page. MaterialPageRoute(builder: (context) =>SignInPage()), //Replace Container() with call to Map-page.
); );
}, },

88
lib/ListViewPage.dart Normal file
View 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)));
}
}

View File

@ -1,10 +1,152 @@
import 'package:flutter/material.dart'; 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 @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( 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;
}
} }

View File

@ -1,14 +1,34 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_applicationdemo/BottomNavPage.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/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 'dart:async';
import 'login/User.dart'; import 'login/User.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:flutter_google_places/flutter_google_places.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/http.dart' as http;
import 'package:http/retry.dart';
import 'package:intl/number_symbols.dart';
import 'package:location/location.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 'SettingsPage.dart';
import 'Venue.dart'; import 'Venue.dart';
import 'globals.dart' as globals; import 'globals.dart' as globals;
@ -16,7 +36,6 @@ import 'FeedbackPage.dart';
import 'login/CreateAccountPage.dart'; import 'login/CreateAccountPage.dart';
import 'login/signInPage.dart'; import 'login/signInPage.dart';
class Map extends StatefulWidget { class Map extends StatefulWidget {
@override @override
State<Map> createState() => MapState(); State<Map> createState() => MapState();
@ -26,28 +45,28 @@ const kGoogleApiKey = "AIzaSyAUmhd6Xxud8SwgDxJ4LlYlcntm01FGoSk";
final homeSacffoldKey = GlobalKey<ScaffoldState>(); final homeSacffoldKey = GlobalKey<ScaffoldState>();
class MapState extends State<Map> { class MapState extends State<Map> {
bool _bottomSheetIsOpen = false;
Future getMerkerData() async { /* 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 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); var response = await http.get(url);
print('Response status: ${response.statusCode}'); print('Response status: ${response.statusCode}');
// print('Response body: ${response.body.toString()}'); // print('Response body: ${response.body.toString()}');
var jsonData = jsonDecode(response.body); var jsonData = jsonDecode(response.body);
}*/
}
final Completer<GoogleMapController> _controller = Completer(); final Completer<GoogleMapController> _controller = Completer();
bool? _barFilterValue = true;
bool? _restaurantFilterValue = true;
bool? _cafeFilterValue = true;
dynamic _priceFilterValue = 3;
LocationData? _currentPosition; LocationData? _currentPosition;
final TextEditingController _searchController = TextEditingController(); final TextEditingController _searchController = TextEditingController();
static const CameraPosition _kGooglePlex = CameraPosition( static const CameraPosition _stockholmCity = CameraPosition(
target: LatLng(59.325027, 18.068516), target: LatLng(59.325027, 18.068516),
zoom: 14.4746, zoom: 14.4746,
); );
@ -61,11 +80,28 @@ class MapState extends State<Map> {
super.initState(); super.initState();
} }
initialize() {
List<Venue> allVenues = globals.VENUES;
for (var venue in allVenues) {
Marker marker = Marker(
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 { void createBottomSheet(String venueName) async {
var webScraper = WebScraper(); var webScraper = WebScraper();
await webScraper.getWebsiteData(venueName); await webScraper.getWebsiteData(venueName);
Scaffold.of(context).showBottomSheet<void>( Scaffold.of(context).showBottomSheet<void>(((context) {
((context) {
return Container( return Container(
height: 420, height: 420,
color: Colors.white, color: Colors.white,
@ -81,29 +117,12 @@ class MapState extends State<Map> {
Container( Container(
child: Text(webScraper.openingHoursThisWeek.length.toString()), child: Text(webScraper.openingHoursThisWeek.length.toString()),
), ),
], ],
) )),
),
);
})
); );
}));
} }
initialize() {
List<Venue> allVenues = globals.VENUES;
for(var venue in allVenues) {
Marker marker = Marker(
markerId: MarkerId(venue.venueID.toString()),
position: venue.position,
onTap: () => createBottomSheet(venue.venueName),
icon: venue.drawIconColor(),
);
markersList.add(marker);
}
}
Future<LocationData> _getLocationPermission() async { Future<LocationData> _getLocationPermission() async {
Location location = Location(); Location location = Location();
@ -146,6 +165,7 @@ class MapState extends State<Map> {
final screens = [ final screens = [
Map(), Map(),
]; ];
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@ -153,31 +173,159 @@ class MapState extends State<Map> {
centerTitle: true, centerTitle: true,
title: const Text("Sun chasers"), title: const Text("Sun chasers"),
key: homeSacffoldKey, 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), backgroundColor: const Color.fromARGB(255, 190, 146, 160),
), ),
/*body: Stack(
backgroundColor: const Color.fromARGB(255, 190, 146, 160),
),
body: Stack(
drawer : Drawer( drawer : Drawer(
child: Container( child: Container(
child: globals.LOGGED_IN_USER.userID == 0 ? buildDrawerSignedOut(context) : buildDrawerSignedIn(context), child: globals.LOGGED_IN_USER.userID == 0 ? buildDrawerSignedOut(context) : buildDrawerSignedIn(context),
), ),
), ),*/
body: Stack( body: Stack(
children: [ children: [
GoogleMap( GoogleMap(
mapType: MapType.normal, mapType: MapType.normal,
initialCameraPosition: _kGooglePlex, myLocationEnabled: true,
initialCameraPosition: _stockholmCity,
markers: markersList.map((e) => e).toSet(), markers: markersList.map((e) => e).toSet(),
onMapCreated: (GoogleMapController controller) { onMapCreated: (GoogleMapController controller) {
_controller.complete(controller); _controller.complete(controller);
}, },
onTap: (LatLng) {
closeBottomSheetIfOpen();
},
), ),
// ElevatedButton(onPressed: () {} //_handelPressButton // ElevatedButton(onPressed: () {} //_handelPressButton
// ,child: const Text("Search Placses")) // ,child: const Text("Search Placses"))
], ],
), ),
floatingActionButton: Padding( 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,
);
}
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 att kartan filtreras när man klickar '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), padding: const EdgeInsets.only(top: 100.0),
child: FloatingActionButton( child: FloatingActionButton(
onPressed: () { onPressed: () {
@ -186,23 +334,58 @@ class MapState extends State<Map> {
MaterialPageRoute( MaterialPageRoute(
builder: (context) => const SettingsPage())); builder: (context) => const SettingsPage()));
}, },
backgroundColor: Colors.blueAccent, backgroundColor: Colors.purple,
child: const Icon(Icons.filter_alt), child: const Icon(Icons.filter_alt),
), ),
), ),
floatingActionButtonLocation: FloatingActionButtonLocation.endTop, 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 { Future<void> _gotoLocation(double lat, double lng) async {
final GoogleMapController controller = await _controller.future; 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) { Widget _boxes(double lat, double lng, String resturantName) {
return GestureDetector( return GestureDetector(
onTap: () { _gotoLocation(lat, lng);}, onTap: () {
_gotoLocation(lat, lng);
},
child: Container( child: Container(
child: FittedBox( child: FittedBox(
child: Material( child: Material(
@ -218,9 +401,8 @@ class MapState extends State<Map> {
height: 200, height: 200,
child: ClipRRect( child: ClipRRect(
borderRadius: new BorderRadius.circular(24.0), borderRadius: new BorderRadius.circular(24.0),
child: const Image( child:
image: AssetImage('assets/images/bild.png') const Image(image: AssetImage('assets/images/bild.png')),
),
), ),
), ),
Container( Container(
@ -232,8 +414,7 @@ class MapState extends State<Map> {
], ],
), ),
), ),
) )),
),
); );
} }
@ -246,8 +427,148 @@ class MapState extends State<Map> {
zoom: 14.4746))); 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( Prediction? p = await PlacesAutocomplete.show(
context: context, context: context,
apiKey: kGoogleApiKey, apiKey: kGoogleApiKey,
@ -263,25 +584,18 @@ class MapState extends State<Map> {
if (p != null) { if (p != null) {
displayPrediction(p,homeSacffoldKey.currentState); displayPrediction(p,homeSacffoldKey.currentState);
} }
} }
Future<void> displayPrediction(Prediction p, ScaffoldState? currentState) async { Future<void> displayPrediction(Prediction p, ScaffoldState? currentState) async {
GoogleMapsPlaces places = GoogleMapsPlaces( GoogleMapsPlaces places = GoogleMapsPlaces(
apiKey: kGoogleApiKey, apiKey: kGoogleApiKey,
apiHeaders: await const GoogleApiHeaders().getHeaders() apiHeaders: await const GoogleApiHeaders().getHeaders()
); );
PlacesDetailsResponse detail = await places.getDetailsByPlaceId(p.placeId!); PlacesDetailsResponse detail = await places.getDetailsByPlaceId(p.placeId!);
final lat = detail.result.geometry!.location.lat; final lat = detail.result.geometry!.location.lat;
final lng = detail.result.geometry!.location.lng; final lng = detail.result.geometry!.location.lng;
markersList.clear(); markersList.clear();
markersList.add(Marker(markerId: const MarkerId("0"), position: LatLng(lat, lng), infoWindow: InfoWindow(title: detail.result.name))); markersList.add(Marker(markerId: const MarkerId("0"), position: LatLng(lat, lng), infoWindow: InfoWindow(title: detail.result.name)));
setState(() {}); setState(() {});
googleMapController.animateCamera(CameraUpdate.newLatLngZoom(LatLng(lat,lng), 14.0)); googleMapController.animateCamera(CameraUpdate.newLatLngZoom(LatLng(lat,lng), 14.0));
}*/ }*/
} }
@ -292,21 +606,19 @@ Widget buildDrawerSignedIn(BuildContext context){
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
children: [ children: [
DrawerHeader( DrawerHeader(
decoration: const BoxDecoration(color: Color.fromARGB(255, 190, 146, 160)), decoration:
child: Column(children: const <Widget>[ const BoxDecoration(color: Color.fromARGB(255, 190, 146, 160)),
Text('Sun Chaser', child: Column(
children: const <Widget>[
Text(
'Sun Chaser',
style: TextStyle(fontSize: 32), style: TextStyle(fontSize: 32),
), ),
SizedBox(height: 30), SizedBox(height: 30),
Icon(Icons.account_box_rounded), Icon(Icons.account_box_rounded),
], ],
), ),
), ),
ListTile( ListTile(
leading: Icon(Icons.logout), leading: Icon(Icons.logout),
title: Text('Sign out'), title: Text('Sign out'),
@ -329,7 +641,6 @@ Widget buildDrawerSignedIn(BuildContext context){
), ),
); );
}, },
), ),
ListTile( ListTile(
leading: Icon(Icons.settings), leading: Icon(Icons.settings),
@ -343,7 +654,6 @@ Widget buildDrawerSignedIn(BuildContext context){
); );
}, },
), ),
], ],
), ),
); );
@ -355,17 +665,18 @@ Widget buildDrawerSignedOut(BuildContext context){
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
children: [ children: [
DrawerHeader( DrawerHeader(
decoration: const BoxDecoration(color: Color.fromARGB(255, 190, 146, 160)), decoration:
child: Column(children: const <Widget>[ const BoxDecoration(color: Color.fromARGB(255, 190, 146, 160)),
Text('Sun Chaser', child: Column(
children: const <Widget>[
Text(
'Sun Chaser',
style: TextStyle(fontSize: 32), style: TextStyle(fontSize: 32),
), ),
SizedBox(height: 30), SizedBox(height: 30),
], ],
), ),
), ),
ListTile( ListTile(
leading: Icon(Icons.account_box_rounded), leading: Icon(Icons.account_box_rounded),
title: Text('Create account'), title: Text('Create account'),
@ -388,7 +699,8 @@ Widget buildDrawerSignedOut(BuildContext context){
builder: (context) => SignInPage(), builder: (context) => SignInPage(),
), ),
); );
},), },
),
ListTile( ListTile(
leading: Icon(Icons.thumb_up_alt), leading: Icon(Icons.thumb_up_alt),
title: Text('Give feedback'), title: Text('Give feedback'),
@ -418,13 +730,10 @@ Widget buildDrawerSignedOut(BuildContext context){
); );
} }
class _Marker { class _Marker {
var Plats_1; var Plats_1;
var Gatunr_1; var Gatunr_1;
var coordinates; var coordinates;
_Marker(this.Plats_1, this.Gatunr_1, this.coordinates); _Marker(this.Plats_1, this.Gatunr_1, this.coordinates);
} }

View File

@ -50,7 +50,7 @@ class _SettingsPageState extends State<SettingsPage> {
'Settings', 'Settings',
style: TextStyle( style: TextStyle(
fontSize: 30, fontSize: 30,
color: Colors.grey, color: Colors.white,
shadows: <Shadow>[ shadows: <Shadow>[
Shadow( Shadow(
offset: Offset(2, 2), offset: Offset(2, 2),
@ -104,7 +104,7 @@ class _SettingsPageState extends State<SettingsPage> {
title: const Text('Restaurant'), title: const Text('Restaurant'),
), ),
SettingsTile( SettingsTile(
title: const Text(""), title: const Text("Price"),
value: Row( value: Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: <Widget>[ children: <Widget>[
@ -119,17 +119,17 @@ class _SettingsPageState extends State<SettingsPage> {
duration: Duration(milliseconds: 1000), duration: Duration(milliseconds: 1000),
behavior: SnackBarBehavior.floating, behavior: SnackBarBehavior.floating,
content: Text('Selected £'), content: Text('Selected £'),
)); ),);
}else{ }else{
ScaffoldMessenger.of(context).showSnackBar(const SnackBar( ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
duration: Duration(milliseconds: 1000), duration: Duration(milliseconds: 1000),
content: Text('Unselected £'), content: Text('Unselected £'),
behavior: SnackBarBehavior.floating, behavior: SnackBarBehavior.floating,
)); ),);
} }
}); });
print("Tapped single dollarSign");
}, },
child: Container( child: Container(
color: _colorContainerLow, color: _colorContainerLow,

View File

@ -37,7 +37,7 @@ class ShadowDetector {
List<Venue> get listWithVenuesInShade => venuesInShade; //Get all venues with their shadow status updated. 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; LatLng pos= venue.position;
final lat = pos.latitude.toString(); final lat = pos.latitude.toString();
final lng = pos.longitude.toString(); final lng = pos.longitude.toString();

View File

@ -1,31 +1,108 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart';
class Venue { class Venue {
late String venueName; int venueID;
late int venueID; String venueName;
late VenueType typeOfVenue; String venueAddress;
String venueStreetNo;
late LatLng position; late LatLng position;
late InfoWindow infoWindow;
bool inShade = false; bool inShade = false;
Venue(this.venueID, this.venueName, this.venueAddress, this.venueStreetNo,
this.position);
Venue(this.venueName, factory Venue.fromJson(Map<String, dynamic> json, id) {
this.venueID, this.typeOfVenue, this.position); 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() { BitmapDescriptor drawIconColor() {
if (inShade) { if (inShade) {
return BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueAzure); return BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueAzure);
} } else {
else {
return BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueYellow); return BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueYellow);
} }
} }
Widget getVenue(BuildContext context) {
return Text(venueName);
} }
Widget getAddress(BuildContext context) {
return Text(venueAddress + ' ' + venueStreetNo);
enum VenueType{
cafe, restaurant, bar
} }
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 }

100
lib/VenueInfo.dart Normal file
View 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
View 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);
}
}
}

View File

@ -7,9 +7,9 @@ class WebScraper {
late List<String> openingHoursThisWeek; late List<String> openingHoursThisWeek;
late String openingHoursToday; late String openingHoursToday;
late String reviewScore; 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] .toList()[0]
.toString(); .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']) .map((e) => e.attributes['href'])
.toList()[0] .toList()[0]
.toString(); .toString();
@ -47,7 +47,7 @@ class WebScraper {
.getElementsByClassName('drUyy') .getElementsByClassName('drUyy')
.map((e) => e.text) .map((e) => e.text)
.toList()[0] .toList()[0]
.toString();*/ .toString();
} }
List<String> get getOpeningHoursThisWeek => openingHoursThisWeek; //First item is monday, last item is sunday. 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 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 getReviewScore => reviewScore; // Output example: "Star Rating: 4 out of 5.".
//String get getPriceClass => priceClass; // Output example: "$$ - $$$". String get getPriceClass => priceClass; // Output example: "$$ - $$$".
} }

View File

@ -1,3 +1,5 @@
import 'package:flutter_applicationdemo/WeatherData.dart';
import 'Venue.dart'; import 'Venue.dart';
import 'package:flutter_applicationdemo/login/User.dart'; import 'package:flutter_applicationdemo/login/User.dart';
import '../login/User.dart'; import '../login/User.dart';
@ -7,7 +9,6 @@ import 'package:flutter/material.dart';
import 'HomePage.dart'; import 'HomePage.dart';
import 'Venue.dart'; import 'Venue.dart';
import 'Venue.dart';
import 'main.dart'; import 'main.dart';
User LOGGED_IN_USER = User(0, "", ""); 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 SHADOWCOLOR = const Color.fromARGB(255, 0, 0, 0);
Color TEXTWHITE = const Color.fromARGB(0, 0, 0, 0); Color TEXTWHITE = const Color.fromARGB(0, 0, 0, 0);
late List<Venue> VENUES = []; late List<Venue> VENUES = [];
late WeatherData forecast;
Venue? getVenueByID(int searchedVenueID){ Venue? getVenueByID(int searchedVenueID){
for(var V in VENUES){ for(var V in VENUES){

View File

@ -1,4 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.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:google_maps_flutter/google_maps_flutter.dart';
import 'package:flutter_applicationdemo/login/GoogleSignInProvider.dart'; import 'package:flutter_applicationdemo/login/GoogleSignInProvider.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:http/http.dart' as http;
import 'BottomNavPage.dart'; import 'BottomNavPage.dart';
import 'Map.dart'; import 'Map.dart';
import 'WeatherData.dart';
import 'Venue.dart'; import 'Venue.dart';
import 'mysql.dart'; import 'mysql.dart';
import 'package:flutter_applicationdemo/login/User.dart'; import 'package:flutter_applicationdemo/login/User.dart';
@ -21,10 +25,29 @@ void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(); await Firebase.initializeApp();
await loadAllVenues(); await loadAllVenues();
await fetchWeather();
runApp(MyApp()); 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 { class MyApp extends StatelessWidget {
@override @override
Widget build(BuildContext context) { 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(); Future loadAllVenues() async {
await sd.evaluateShadowsForAllVenues(globals.VENUES); 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;
}
}
} }

View File

@ -10,7 +10,7 @@ class InputField extends StatelessWidget {
required this.text, required this.text,
required this.isPassword, required this.isPassword,
required this.icon, required this.icon,
required this.controller}) required this.controller, ontap})
: super(key: key); : super(key: key);
@override @override

View File

@ -6,148 +6,10 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:http/http.dart' as http; 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 { class VenuePage extends StatefulWidget {
const VenuePage(this.venue, {Key? key}) : super(key: key); const VenuePage(this.venue, {Key? key}) : super(key: key);
@ -161,9 +23,11 @@ class _VenuePageState extends State<VenuePage> {
late WeatherData currentWeather; late WeatherData currentWeather;
final String imageLink = ''; final String imageLink = '';
late final Venue venue; late final Venue venue;
late VenueInfo venueInfo;
_VenuePageState(this.venue); _VenuePageState(this.venue);
validateAndGetImageLink() { validateAndGetImageLink() {
if (imageLink == '') { if (imageLink == '') {
return 'https://live.staticflickr.com/6205/6081773215_19444220b6_b.jpg'; return 'https://live.staticflickr.com/6205/6081773215_19444220b6_b.jpg';
@ -175,24 +39,31 @@ class _VenuePageState extends State<VenuePage> {
@override @override
void initState() { void initState() {
refreshWeather(); refreshWeather();
gatherVenueInfo();
} }
Future gatherVenueInfo( ) async {
VenueInfo vu = VenueInfo();
venueInfo = vu;
venueInfo = await vu.getVenueInfo(venue.venueName);
}
Future refreshWeather() async { Future refreshWeather() async {
WeatherData tempWeather = WeatherData(0, 0); WeatherData tempWeather = WeatherData(0, 0);
currentWeather = tempWeather; currentWeather = tempWeather;
Uri weatherDataURI = Uri.parse( 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) { if (response.statusCode == 200) {
var data = json.decode(responce.body); var data = json.decode(response.body);
tempWeather = WeatherData.fromJson(data); tempWeather = WeatherData.fromJson(data);
print(data);
setState(() { setState(() {
globals.forecast = tempWeather;
currentWeather = tempWeather; //Could be a widget instead?? currentWeather = tempWeather; //Could be a widget instead??
}); });
} else { } else {
@ -208,7 +79,12 @@ class _VenuePageState extends State<VenuePage> {
title: Text(venue.venueName), title: Text(venue.venueName),
backgroundColor: const Color(0xffac7b84), backgroundColor: const Color(0xffac7b84),
), ),
body: Center(child: SingleChildScrollView( body: Center(
child: FutureBuilder(
future: gatherVenueInfo(),
builder: (context, snapshot) {
if(snapshot.connectionState == ConnectionState.done) {
return SingleChildScrollView(
child: Container( child: Container(
alignment: Alignment.center, alignment: Alignment.center,
child: Column(children: <Widget>[ child: Column(children: <Widget>[
@ -220,7 +96,7 @@ class _VenuePageState extends State<VenuePage> {
), ),
Row(children: [ Row(children: [
Expanded( Expanded(
child: Image.network(validateAndGetImageLink()), child: Image.network(venueInfo.getPhotoURL()),
), ),
]), ]),
// Row( // Row(
@ -234,8 +110,13 @@ class _VenuePageState extends State<VenuePage> {
Expanded( Expanded(
child: Column( child: Column(
children: [ children: [
Text(venue.venueName), Text(venue.venueName,
Text('This is the address'), style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
)
),
Text(venue.venueAddress + ' ' + venue.venueStreetNo),
], ],
)), )),
Expanded( Expanded(
@ -244,18 +125,39 @@ class _VenuePageState extends State<VenuePage> {
// border: Border.all(color: const Color(0xffaaaaaa)), // border: Border.all(color: const Color(0xffaaaaaa)),
// ), // ),
// color: const Color(0xffe9e9e9), // color: const Color(0xffe9e9e9),
child: Column( child: buildWeatherColumn(),
),
)
]),
AboutTheSpotTable(venueInfo: venueInfo),
/*GridView.count(
crossAxisCount: 2,
children: [],
)*/
]),
),
);
}
else {
return CircularProgressIndicator();
}
}
)
));
}
Column buildWeatherColumn() {
return Column(
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.all(4.0), padding: const EdgeInsets.all(4.0),
child: Text('Weather Status:', child: /*Text('Weather Status:',
style: GoogleFonts.robotoCondensed( style: GoogleFonts.robotoCondensed(
textStyle: const TextStyle( textStyle: const TextStyle(
fontSize: 14, fontSize: 14,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
)), )),*/
),
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [ children: [
@ -270,35 +172,31 @@ class _VenuePageState extends State<VenuePage> {
.toString() + .toString() +
'\u2103'), '\u2103'),
]), ]),
),
], ],
), );
),
)
]),
const AboutTheSpotTable(),
/*GridView.count(
crossAxisCount: 2,
children: [],
)*/
]),
),
),
));
} }
} }
//Just an example table //Just an example table
class AboutTheSpotTable extends StatelessWidget { class AboutTheSpotTable extends StatefulWidget {
const AboutTheSpotTable({ final VenueInfo venueInfo;
AboutTheSpotTable({
Key? key, Key? key,
required this.venueInfo,
}) : super(key: key); }) : super(key: key);
@override
State<AboutTheSpotTable> createState() => _AboutTheSpotTableState();
}
class _AboutTheSpotTableState extends State<AboutTheSpotTable> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return DataTable( return DataTable(
headingRowHeight: 30, headingRowHeight: 30,
columnSpacing: 100, columnSpacing: 100,
dataRowHeight: 30, //dataRowHeight: 30,
dataTextStyle: GoogleFonts.robotoCondensed( dataTextStyle: GoogleFonts.robotoCondensed(
color: const Color(0xff4F6272), color: const Color(0xff4F6272),
), ),
@ -311,18 +209,18 @@ class AboutTheSpotTable extends StatelessWidget {
)))), )))),
const DataColumn(label: Text('', style: TextStyle())), const DataColumn(label: Text('', style: TextStyle())),
], ],
rows: const [ rows: [
DataRow(cells: [ DataRow(cells: [
DataCell(Text('Type of venue')), DataCell(Text('Type of venue')),
DataCell(Text('Saloon')), DataCell(Text('Saloon')),
]), ]),
DataRow(cells: [ DataRow(cells: [
DataCell(Text('Pricing')), DataCell(Text('Pricing')),
DataCell(Text('\$\$\$')), DataCell(Text(widget.venueInfo.getPriceClass())),
]), ]),
DataRow(cells: [ DataRow(cells: [
DataCell(Text('Rating')), DataCell(Text('Rating')),
DataCell(Text('4.2/5')), DataCell(Text(widget.venueInfo.getRating().toString() + ' (' + widget.venueInfo.getTotalRatings().toString() + ' ratings)')),
]), ]),
DataRow(cells: [ DataRow(cells: [
DataCell(Text('Current activity')), DataCell(Text('Current activity')),
@ -330,29 +228,14 @@ class AboutTheSpotTable extends StatelessWidget {
]), ]),
DataRow(cells: [ DataRow(cells: [
DataCell(Text('Opening hours')), 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 { class SavePlaceButton extends StatelessWidget {
const SavePlaceButton({ const SavePlaceButton({
@ -370,7 +253,7 @@ class SavePlaceButton extends StatelessWidget {
), ),
label: const Text('Save place'), label: const Text('Save place'),
style: TextButton.styleFrom( style: TextButton.styleFrom(
primary: Color(0xff4f6272), primary: const Color(0xff4f6272),
), ),
), ),
); );

View File

@ -133,7 +133,7 @@ packages:
name: firebase_core name: firebase_core
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.17.0" version: "1.17.1"
firebase_core_platform_interface: firebase_core_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -353,7 +353,7 @@ packages:
source: hosted source: hosted
version: "0.15.0" version: "0.15.0"
http: http:
dependency: "direct main" dependency: transitive
description: description:
name: http name: http
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
@ -374,7 +374,7 @@ packages:
source: hosted source: hosted
version: "3.1.3" version: "3.1.3"
intl: intl:
dependency: transitive dependency: "direct main"
description: description:
name: intl name: intl
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
@ -672,6 +672,20 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.0" 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: term_glyph:
dependency: transitive dependency: transitive
description: description:

View File

@ -33,7 +33,6 @@ dependencies:
# The following adds the Cupertino Icons font to your application. # The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons. # Use with the CupertinoIcons class for iOS style icons.
http: ^0.13.4
dio: ^4.0.0 dio: ^4.0.0
flutter_polyline_points: ^0.2.6 flutter_polyline_points: ^0.2.6
cupertino_icons: ^1.0.2 cupertino_icons: ^1.0.2
@ -49,7 +48,8 @@ dependencies:
font_awesome_flutter: ^9.2.0 font_awesome_flutter: ^9.2.0
provider: ^5.0.0 provider: ^5.0.0
webview_flutter: ^3.0.0 webview_flutter: ^3.0.0
syncfusion_flutter_sliders: ^20.1.57
intl: ^0.17.0
#Google Sign-in #Google Sign-in
firebase_auth: ^1.1.4 firebase_auth: ^1.1.4
google_sign_in: ^5.0.3 google_sign_in: ^5.0.3
@ -57,6 +57,7 @@ dependencies:
mysql1: ^0.19.0 mysql1: ^0.19.0
html: ^0.15.0 html: ^0.15.0
flutter_native_splash: flutter_native_splash:
background_image: assets/images/outdoor.png background_image: assets/images/outdoor.png