Feat: add permission handle for upload file

This commit is contained in:
orangdeso 2025-04-02 04:37:03 +07:00
parent 5535879255
commit afc667838b
17 changed files with 912 additions and 102 deletions

View File

@ -3,13 +3,13 @@
"packages": [ "packages": [
{ {
"name": "_flutterfire_internals", "name": "_flutterfire_internals",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/_flutterfire_internals-1.3.53", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/_flutterfire_internals-1.3.54",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.2" "languageVersion": "3.2"
}, },
{ {
"name": "args", "name": "args",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/args-2.6.0", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/args-2.7.0",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.3" "languageVersion": "3.3"
}, },
@ -57,19 +57,19 @@
}, },
{ {
"name": "cloud_firestore", "name": "cloud_firestore",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore-5.6.4", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore-5.6.6",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.2" "languageVersion": "3.2"
}, },
{ {
"name": "cloud_firestore_platform_interface", "name": "cloud_firestore_platform_interface",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_platform_interface-6.6.4", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_platform_interface-6.6.6",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.2" "languageVersion": "3.2"
}, },
{ {
"name": "cloud_firestore_web", "name": "cloud_firestore_web",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_web-4.4.4", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_web-4.4.6",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.4" "languageVersion": "3.4"
}, },
@ -79,6 +79,12 @@
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "2.18" "languageVersion": "2.18"
}, },
{
"name": "cross_file",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cross_file-0.3.4+2",
"packageUri": "lib/",
"languageVersion": "3.3"
},
{ {
"name": "crypto", "name": "crypto",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/crypto-3.0.6", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/crypto-3.0.6",
@ -91,6 +97,18 @@
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.1" "languageVersion": "3.1"
}, },
{
"name": "device_info_plus",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/device_info_plus-11.3.0",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "device_info_plus_platform_interface",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/device_info_plus_platform_interface-7.0.2",
"packageUri": "lib/",
"languageVersion": "2.18"
},
{ {
"name": "dotted_dashed_line", "name": "dotted_dashed_line",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/dotted_dashed_line-0.0.3", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/dotted_dashed_line-0.0.3",
@ -121,27 +139,33 @@
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.0" "languageVersion": "3.0"
}, },
{
"name": "file_picker",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/file_picker-10.0.0",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{ {
"name": "firebase_auth", "name": "firebase_auth",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth-5.5.1", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth-5.5.2",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.2" "languageVersion": "3.2"
}, },
{ {
"name": "firebase_auth_platform_interface", "name": "firebase_auth_platform_interface",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_platform_interface-7.6.1", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_platform_interface-7.6.2",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.2" "languageVersion": "3.2"
}, },
{ {
"name": "firebase_auth_web", "name": "firebase_auth_web",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_web-5.14.1", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_web-5.14.2",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.4" "languageVersion": "3.4"
}, },
{ {
"name": "firebase_core", "name": "firebase_core",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core-3.12.1", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core-3.13.0",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.2" "languageVersion": "3.2"
}, },
@ -153,25 +177,25 @@
}, },
{ {
"name": "firebase_core_web", "name": "firebase_core_web",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_web-2.21.1", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_web-2.22.0",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.4" "languageVersion": "3.4"
}, },
{ {
"name": "firebase_storage", "name": "firebase_storage",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage-12.4.4", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage-12.4.5",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.2" "languageVersion": "3.2"
}, },
{ {
"name": "firebase_storage_platform_interface", "name": "firebase_storage_platform_interface",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_platform_interface-5.2.4", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_platform_interface-5.2.5",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.2" "languageVersion": "3.2"
}, },
{ {
"name": "firebase_storage_web", "name": "firebase_storage_web",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_web-3.10.11", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_web-3.10.12",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.4" "languageVersion": "3.4"
}, },
@ -187,6 +211,12 @@
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "2.12" "languageVersion": "2.12"
}, },
{
"name": "flutter_plugin_android_lifecycle",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.26",
"packageUri": "lib/",
"languageVersion": "3.5"
},
{ {
"name": "flutter_screenutil", "name": "flutter_screenutil",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_screenutil-5.9.3", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_screenutil-5.9.3",
@ -219,7 +249,7 @@
}, },
{ {
"name": "get", "name": "get",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/get-4.6.6", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/get-4.7.2",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "2.15" "languageVersion": "2.15"
}, },
@ -337,6 +367,42 @@
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.2" "languageVersion": "3.2"
}, },
{
"name": "permission_handler",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler-11.4.0",
"packageUri": "lib/",
"languageVersion": "3.5"
},
{
"name": "permission_handler_android",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_android-12.1.0",
"packageUri": "lib/",
"languageVersion": "3.5"
},
{
"name": "permission_handler_apple",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_apple-9.4.6",
"packageUri": "lib/",
"languageVersion": "2.15"
},
{
"name": "permission_handler_html",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_html-0.1.3+5",
"packageUri": "lib/",
"languageVersion": "3.3"
},
{
"name": "permission_handler_platform_interface",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_platform_interface-4.3.0",
"packageUri": "lib/",
"languageVersion": "3.5"
},
{
"name": "permission_handler_windows",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_windows-0.2.1",
"packageUri": "lib/",
"languageVersion": "2.12"
},
{ {
"name": "petitparser", "name": "petitparser",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/petitparser-6.0.2", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/petitparser-6.0.2",
@ -363,13 +429,13 @@
}, },
{ {
"name": "shared_preferences", "name": "shared_preferences",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences-2.5.2", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences-2.5.3",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.5" "languageVersion": "3.5"
}, },
{ {
"name": "shared_preferences_android", "name": "shared_preferences_android",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_android-2.4.6", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_android-2.4.7",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.5" "languageVersion": "3.5"
}, },
@ -489,7 +555,19 @@
}, },
{ {
"name": "web", "name": "web",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/web-1.1.0", "rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/web-1.1.1",
"packageUri": "lib/",
"languageVersion": "3.4"
},
{
"name": "win32",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/win32-5.10.1",
"packageUri": "lib/",
"languageVersion": "3.5"
},
{
"name": "win32_registry",
"rootUri": "file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/win32_registry-1.1.5",
"packageUri": "lib/", "packageUri": "lib/",
"languageVersion": "3.4" "languageVersion": "3.4"
}, },
@ -518,7 +596,7 @@
"languageVersion": "3.4" "languageVersion": "3.4"
} }
], ],
"generated": "2025-03-29T09:11:46.461455Z", "generated": "2025-03-31T15:19:30.948302Z",
"generator": "pub", "generator": "pub",
"generatorVersion": "3.5.0", "generatorVersion": "3.5.0",
"flutterRoot": "file:///D:/Flutter/flutter_sdk/flutter_3.24.0", "flutterRoot": "file:///D:/Flutter/flutter_sdk/flutter_3.24.0",

View File

@ -1,11 +1,11 @@
_flutterfire_internals _flutterfire_internals
3.2 3.2
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/_flutterfire_internals-1.3.53/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/_flutterfire_internals-1.3.54/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/_flutterfire_internals-1.3.53/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/_flutterfire_internals-1.3.54/lib/
args args
3.3 3.3
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/args-2.6.0/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/args-2.7.0/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/args-2.6.0/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/args-2.7.0/lib/
async async
2.18 2.18
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/async-2.11.0/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/async-2.11.0/
@ -36,20 +36,24 @@ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/clock-1.1.1/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/clock-1.1.1/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/clock-1.1.1/lib/
cloud_firestore cloud_firestore
3.2 3.2
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore-5.6.4/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore-5.6.6/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore-5.6.4/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore-5.6.6/lib/
cloud_firestore_platform_interface cloud_firestore_platform_interface
3.2 3.2
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_platform_interface-6.6.4/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_platform_interface-6.6.6/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_platform_interface-6.6.4/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_platform_interface-6.6.6/lib/
cloud_firestore_web cloud_firestore_web
3.4 3.4
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_web-4.4.4/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_web-4.4.6/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_web-4.4.4/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cloud_firestore_web-4.4.6/lib/
collection collection
2.18 2.18
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/collection-1.18.0/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/collection-1.18.0/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/collection-1.18.0/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/collection-1.18.0/lib/
cross_file
3.3
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cross_file-0.3.4+2/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cross_file-0.3.4+2/lib/
crypto crypto
3.4 3.4
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/crypto-3.0.6/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/crypto-3.0.6/
@ -58,6 +62,14 @@ cupertino_icons
3.1 3.1
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cupertino_icons-1.0.8/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cupertino_icons-1.0.8/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cupertino_icons-1.0.8/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/cupertino_icons-1.0.8/lib/
device_info_plus
3.4
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/device_info_plus-11.3.0/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/device_info_plus-11.3.0/lib/
device_info_plus_platform_interface
2.18
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/device_info_plus_platform_interface-7.0.2/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/device_info_plus_platform_interface-7.0.2/lib/
dotted_dashed_line dotted_dashed_line
2.17 2.17
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/dotted_dashed_line-0.0.3/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/dotted_dashed_line-0.0.3/
@ -78,46 +90,54 @@ file
3.0 3.0
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/file-7.0.1/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/file-7.0.1/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/file-7.0.1/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/file-7.0.1/lib/
file_picker
3.4
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/file_picker-10.0.0/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/file_picker-10.0.0/lib/
firebase_auth firebase_auth
3.2 3.2
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth-5.5.1/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth-5.5.2/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth-5.5.1/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth-5.5.2/lib/
firebase_auth_platform_interface firebase_auth_platform_interface
3.2 3.2
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_platform_interface-7.6.1/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_platform_interface-7.6.2/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_platform_interface-7.6.1/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_platform_interface-7.6.2/lib/
firebase_auth_web firebase_auth_web
3.4 3.4
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_web-5.14.1/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_web-5.14.2/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_web-5.14.1/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_auth_web-5.14.2/lib/
firebase_core firebase_core
3.2 3.2
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core-3.12.1/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core-3.13.0/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core-3.12.1/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core-3.13.0/lib/
firebase_core_platform_interface firebase_core_platform_interface
3.2 3.2
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_platform_interface-5.4.0/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_platform_interface-5.4.0/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_platform_interface-5.4.0/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_platform_interface-5.4.0/lib/
firebase_core_web firebase_core_web
3.4 3.4
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_web-2.21.1/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_web-2.22.0/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_web-2.21.1/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_core_web-2.22.0/lib/
firebase_storage firebase_storage
3.2 3.2
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage-12.4.4/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage-12.4.5/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage-12.4.4/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage-12.4.5/lib/
firebase_storage_platform_interface firebase_storage_platform_interface
3.2 3.2
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_platform_interface-5.2.4/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_platform_interface-5.2.5/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_platform_interface-5.2.4/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_platform_interface-5.2.5/lib/
firebase_storage_web firebase_storage_web
3.4 3.4
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_web-3.10.11/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_web-3.10.12/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_web-3.10.11/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/firebase_storage_web-3.10.12/lib/
flutter_picker flutter_picker
2.12 2.12
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_picker-2.1.0/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_picker-2.1.0/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_picker-2.1.0/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_picker-2.1.0/lib/
flutter_plugin_android_lifecycle
3.5
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.26/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.26/lib/
flutter_screenutil flutter_screenutil
2.17 2.17
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_screenutil-5.9.3/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_screenutil-5.9.3/
@ -132,8 +152,8 @@ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_switch-0.3.
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_switch-0.3.2/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_switch-0.3.2/lib/
get get
2.15 2.15
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/get-4.6.6/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/get-4.7.2/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/get-4.6.6/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/get-4.7.2/lib/
google_fonts google_fonts
2.14 2.14
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/google_fonts-6.2.1/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/google_fonts-6.2.1/
@ -210,6 +230,30 @@ path_provider_windows
3.2 3.2
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_windows-2.3.0/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_windows-2.3.0/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_windows-2.3.0/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_windows-2.3.0/lib/
permission_handler
3.5
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler-11.4.0/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler-11.4.0/lib/
permission_handler_android
3.5
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_android-12.1.0/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_android-12.1.0/lib/
permission_handler_apple
2.15
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_apple-9.4.6/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_apple-9.4.6/lib/
permission_handler_html
3.3
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_html-0.1.3+5/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_html-0.1.3+5/lib/
permission_handler_platform_interface
3.5
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_platform_interface-4.3.0/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_platform_interface-4.3.0/lib/
permission_handler_windows
2.12
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_windows-0.2.1/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/permission_handler_windows-0.2.1/lib/
petitparser petitparser
3.2 3.2
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/petitparser-6.0.2/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/petitparser-6.0.2/
@ -228,12 +272,12 @@ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/qr-3.0.2/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/qr-3.0.2/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/qr-3.0.2/lib/
shared_preferences shared_preferences
3.5 3.5
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences-2.5.2/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences-2.5.3/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences-2.5.2/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences-2.5.3/lib/
shared_preferences_android shared_preferences_android
3.5 3.5
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_android-2.4.6/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_android-2.4.7/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_android-2.4.6/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_android-2.4.7/lib/
shared_preferences_foundation shared_preferences_foundation
3.4 3.4
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/
@ -308,8 +352,16 @@ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/vm_service-14.2.4/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/vm_service-14.2.4/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/vm_service-14.2.4/lib/
web web
3.4 3.4
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/web-1.1.0/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/web-1.1.1/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/web-1.1.0/lib/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/web-1.1.1/lib/
win32
3.5
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/win32-5.10.1/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/win32-5.10.1/lib/
win32_registry
3.4
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/win32_registry-1.1.5/
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/win32_registry-1.1.5/lib/
xdg_directories xdg_directories
3.3 3.3
file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/xdg_directories-1.1.0/ file:///C:/Users/ASUS/AppData/Local/Pub/Cache/hosted/pub.dev/xdg_directories-1.1.0/

View File

@ -25,7 +25,7 @@ if (flutterVersionName == null) {
android { android {
namespace = "com.example.e_porter" namespace = "com.example.e_porter"
compileSdk = flutter.compileSdkVersion compileSdk = 35 // flutter.compileSdkVersion
ndkVersion = "25.1.8937393" ndkVersion = "25.1.8937393"
compileOptions { compileOptions {

View File

@ -1,4 +1,17 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Permissions -->
<!-- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="29" />
<uses-permission
android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
android:maxSdkVersion="34" /> -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<application <application
android:label="e_porter" android:label="e_porter"
android:name="${applicationName}" android:name="${applicationName}"

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 5C8.86 5 6.27598 7.425 6.02148 10.5H5.75C3.4065 10.5 1.5 12.4065 1.5 14.75C1.5 17.0935 3.4065 19 5.75 19H10.25V17.5H5.75C4.2335 17.5 3 16.2665 3 14.75C3 13.2335 4.2335 12 5.75 12H6.75C7.1645 12 7.5 11.6645 7.5 11.25V11C7.5 8.519 9.519 6.5 12 6.5C14.481 6.5 16.5 8.519 16.5 11V11.25C16.5 11.6645 16.8355 12 17.25 12H18.25C19.7665 12 21 13.2335 21 14.75C21 16.2665 19.7665 17.5 18.25 17.5H13.75V19H18.25C20.5935 19 22.5 17.0935 22.5 14.75C22.5 12.4065 20.5935 10.5 18.25 10.5H17.9785C17.724 7.425 15.14 5 12 5ZM11.9883 11.9893C11.8742 11.9911 11.762 12.019 11.6603 12.0708C11.5586 12.1226 11.47 12.1969 11.4014 12.2881L9.21973 14.4697C9.14775 14.5388 9.09028 14.6216 9.0507 14.7132C9.01111 14.8048 8.99019 14.9034 8.98918 15.0032C8.98817 15.1029 9.00707 15.2019 9.04479 15.2943C9.08251 15.3867 9.13828 15.4706 9.20883 15.5412C9.27939 15.6117 9.36332 15.6675 9.4557 15.7052C9.54808 15.7429 9.64706 15.7618 9.74684 15.7608C9.84662 15.7598 9.9452 15.7389 10.0368 15.6993C10.1284 15.6597 10.2112 15.6023 10.2803 15.5303L11.25 14.5605V20.25C11.2486 20.3494 11.267 20.4481 11.304 20.5403C11.3411 20.6325 11.3961 20.7164 11.4659 20.7872C11.5357 20.858 11.6188 20.9142 11.7105 20.9526C11.8022 20.9909 11.9006 21.0107 12 21.0107C12.0994 21.0107 12.1978 20.9909 12.2895 20.9526C12.3812 20.9142 12.4643 20.858 12.5341 20.7872C12.6039 20.7164 12.6589 20.6325 12.696 20.5403C12.733 20.4481 12.7514 20.3494 12.75 20.25V14.5605L13.7197 15.5303C13.7888 15.6023 13.8716 15.6597 13.9632 15.6993C14.0548 15.7389 14.1534 15.7598 14.2532 15.7608C14.3529 15.7618 14.4519 15.7429 14.5443 15.7052C14.6367 15.6675 14.7206 15.6117 14.7912 15.5412C14.8617 15.4706 14.9175 15.3867 14.9552 15.2943C14.9929 15.2019 15.0118 15.1029 15.0108 15.0032C15.0098 14.9034 14.9889 14.8048 14.9493 14.7132C14.9097 14.6216 14.8523 14.5388 14.7803 14.4697L12.5947 12.2842C12.5237 12.1911 12.4318 12.1159 12.3265 12.0647C12.2212 12.0135 12.1054 11.9877 11.9883 11.9893Z" fill="#004B87"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -51,6 +51,7 @@ class CustomeIcons {
static SvgPicture AddUserFemaleOutline({double? size, Color? color}) => getIcon('ic_add_user_female', color: color); static SvgPicture AddUserFemaleOutline({double? size, Color? color}) => getIcon('ic_add_user_female', color: color);
static SvgPicture LogoutOutline({double? size, Color? color}) => getIcon('ic_logout', color: color); static SvgPicture LogoutOutline({double? size, Color? color}) => getIcon('ic_logout', color: color);
static SvgPicture RemoveOutline({double? size, Color? color}) => getIcon('ic_remove', color: color); static SvgPicture RemoveOutline({double? size, Color? color}) => getIcon('ic_remove', color: color);
static SvgPicture UploadOutline({double? size, Color? color}) => getIcon('ic_upload', color: color);
static SvgPicture FlightSeatFilled({double? size, Color? color}) => getIcon('ic_flight_seat_filled', color: color); static SvgPicture FlightSeatFilled({double? size, Color? color}) => getIcon('ic_flight_seat_filled', color: color);
static SvgPicture PlaneRightFilled({double? size, Color? color}) => getIcon('ic_plane_filled', color: color); static SvgPicture PlaneRightFilled({double? size, Color? color}) => getIcon('ic_plane_filled', color: color);

View File

@ -0,0 +1,70 @@
import 'dart:developer';
import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
class PermissionHelper {
static Future<bool> requestStoragePermission() async {
try {
PermissionStatus status;
if (Platform.isAndroid) {
final androidInfo = await DeviceInfoPlugin().androidInfo;
if (androidInfo.version.sdkInt >= 30) {
status = await Permission.manageExternalStorage.status;
if (status.isDenied || status.isRestricted || status.isLimited) {
status = await Permission.manageExternalStorage.request();
}
} else {
status = await Permission.storage.status;
if (status.isDenied || status.isRestricted || status.isLimited) {
status = await Permission.storage.request();
}
}
} else {
status = await Permission.storage.status;
if (status.isDenied || status.isRestricted || status.isLimited) {
status = await Permission.storage.request();
}
}
log('Final storage permission status: $status');
if (status.isGranted) {
return true; // Permission granted
} else if (status.isPermanentlyDenied) {
Get.snackbar(
'Permission Denied',
'Storage permission is required to download files. Please enable it in the settings.',
mainButton: TextButton(
onPressed: () async {
bool opened = await openAppSettings();
if (!opened) {
Get.snackbar(
'Settings Unavailable',
'Could not open settings. Please enable the permission manually.',
snackPosition: SnackPosition.TOP,
);
}
},
child: Text('Open Settings'),
),
snackPosition: SnackPosition.TOP,
);
} else {
Get.snackbar(
'Permission Denied',
'Storage permission is required to download files.',
snackPosition: SnackPosition.TOP,
);
}
} catch (e) {
log('Error checking permissions: $e');
}
return false;
}
}

View File

@ -0,0 +1,25 @@
class UploadFileModel {
final String fileName;
final String filePath;
final int fileSize;
double progress;
String remainingTime;
FileUploadStatus status;
UploadFileModel({
required this.fileName,
required this.filePath,
required this.fileSize,
required this.progress,
required this.remainingTime,
required this.status,
});
}
// Status enum for file upload
enum FileUploadStatus {
pending,
uploading,
completed,
failed,
}

View File

@ -6,9 +6,14 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:zoom_tap_animation/zoom_tap_animation.dart'; import 'package:intl/intl.dart';
import '../../../../_core/component/button/button_fill.dart'; import '../../../../_core/component/button/button_fill.dart';
import '../../../../_core/service/logger_service.dart';
import '../../../../domain/models/porter_service_model.dart';
import '../../../../domain/models/ticket_model.dart';
import '../../../../domain/models/user_entity.dart';
import '../../../controllers/ticket_controller.dart';
import '../../routes/app_rountes.dart';
class PaymentScreen extends StatefulWidget { class PaymentScreen extends StatefulWidget {
const PaymentScreen({super.key}); const PaymentScreen({super.key});
@ -18,6 +23,55 @@ class PaymentScreen extends StatefulWidget {
} }
class _PaymentScreenState extends State<PaymentScreen> { class _PaymentScreenState extends State<PaymentScreen> {
late final String ticketId;
late final String flightId;
late String? ticketDate;
late final int passenger;
late final List<PassengerModel?> selectedPassengers;
late List<String> numberSeat;
late List<String> selectedServiceLabels;
late Map<String, PorterServiceModel?> selectedPorterServices;
late double totalPrice;
late double grandTotal;
late double totalAll;
late String expiryTime;
final TicketController ticketController = Get.find<TicketController>();
FlightModel? flightData;
String? departureTime;
String? arrivalTime;
@override
void initState() {
super.initState();
final args = Get.arguments as Map<String, dynamic>;
ticketId = args['ticketId'] ?? '';
flightId = args['flightId'] ?? '';
ticketDate = args['date'];
passenger = args['passenger'] ?? 0;
selectedPassengers = args['selectedPassenger'] ?? [];
numberSeat = args['numberSeat'] ?? '';
totalPrice = args['totalPrice'] ?? 0.0;
grandTotal = args['grandTotal'] ?? 0.0;
totalAll = args['totalAll'] ?? 0.0;
selectedServiceLabels = args['selectedServiceLabels'] ?? [];
selectedPorterServices = args['selectedPorterServices'] ?? {};
expiryTime = args['expiryTime'] ?? '';
fetchDataFlight();
}
Future<void> fetchDataFlight() async {
try {
FlightModel flight = await ticketController.getFlightById(ticketId: ticketId, flightId: flightId);
setState(() {
flightData = flight;
});
} catch (e) {
logger.e('Terjadi kesalahan: $e');
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@ -42,14 +96,21 @@ class _PaymentScreenState extends State<PaymentScreen> {
children: [ children: [
TypographyStyles.h5("E-Porter", color: GrayColors.gray800), TypographyStyles.h5("E-Porter", color: GrayColors.gray800),
SizedBox(height: 10.h), SizedBox(height: 10.h),
TypographyStyles.body("Citilink (103)", color: GrayColors.gray800, fontWeight: FontWeight.w400), TypographyStyles.body(
"${flightData?.airLines} (${flightData?.code})",
color: GrayColors.gray800,
fontWeight: FontWeight.w400,
),
SizedBox(height: 16.h), SizedBox(height: 16.h),
TypographyStyles.h5("Rp 2.460.000", color: GrayColors.gray800), TypographyStyles.h5(
"Rp ${NumberFormat.decimalPattern('id_ID').format(totalAll)}",
color: GrayColors.gray800,
),
SizedBox(height: 32.h), SizedBox(height: 32.h),
SvgPicture.asset('assets/images/qris.svg'), SvgPicture.asset('assets/images/qris.svg'),
SizedBox(height: 20.h), SizedBox(height: 20.h),
TypographyStyles.small( TypographyStyles.small(
"Berlaku hingga : 28 Januari 2025, 16:40", "Berlaku hingga : $expiryTime",
color: GrayColors.gray600, color: GrayColors.gray600,
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
) )
@ -60,14 +121,12 @@ class _PaymentScreenState extends State<PaymentScreen> {
), ),
), ),
bottomNavigationBar: CustomeShadowCotainner( bottomNavigationBar: CustomeShadowCotainner(
child: ZoomTapAnimation( child: ButtonFill(
child: ButtonFill( text: 'Lanjutkan',
text: 'Lanjutkan', textColor: Colors.white,
textColor: Colors.white, onTap: () {
onTap: () { Get.toNamed(Routes.UPLOADFILE);
// Get.toNamed(Routes.TICKETBOOKINGSTEP2); },
},
),
), ),
), ),
); );

View File

@ -1,3 +1,5 @@
import 'dart:developer';
import 'package:e_porter/_core/component/card/custome_shadow_cotainner.dart'; import 'package:e_porter/_core/component/card/custome_shadow_cotainner.dart';
import 'package:e_porter/_core/constants/colors.dart'; import 'package:e_porter/_core/constants/colors.dart';
import 'package:e_porter/_core/constants/typography.dart'; import 'package:e_porter/_core/constants/typography.dart';
@ -217,6 +219,10 @@ class _TicketBookingStep4ScreenState extends State<TicketBookingStep4Screen> {
labelButton: "Buat Pesanan", labelButton: "Buat Pesanan",
iconButton: CustomeIcons.ProtectOutline(color: Colors.white), iconButton: CustomeIcons.ProtectOutline(color: Colors.white),
onTap: () { onTap: () {
final DateTime currentTime = DateTime.now();
final DateTime expiryTime = currentTime.add(Duration(hours: 1));
final String formattedExpiryTime =
"${DateFormat('dd MMMM yyyy', 'en_US').format(expiryTime)}, ${DateFormat.Hm().format(expiryTime)}";
final argument = { final argument = {
'ticketId': ticketId, 'ticketId': ticketId,
'flightId': flightId, 'flightId': flightId,
@ -228,6 +234,8 @@ class _TicketBookingStep4ScreenState extends State<TicketBookingStep4Screen> {
'grandTotal': grandTotal, 'grandTotal': grandTotal,
'selectedServiceLabels': selectedServiceLabels, 'selectedServiceLabels': selectedServiceLabels,
'selectedPorterServices': selectedPorterServices, 'selectedPorterServices': selectedPorterServices,
'totalAll': totalAll(),
'expiryTime': formattedExpiryTime,
}; };
Get.toNamed(Routes.PAYMENT, arguments: argument); Get.toNamed(Routes.PAYMENT, arguments: argument);
}, },
@ -293,7 +301,7 @@ class _TicketBookingStep4ScreenState extends State<TicketBookingStep4Screen> {
width: 40.w, width: 40.w,
height: 26.h, height: 26.h,
errorBuilder: (context, error, stackTrace) { errorBuilder: (context, error, stackTrace) {
print("Error loading image: $error"); log("Error loading image: $error");
return Container( return Container(
width: 40.w, width: 40.w,
height: 10.h, height: 10.h,

View File

@ -0,0 +1,379 @@
import 'package:e_porter/_core/constants/colors.dart';
import 'package:e_porter/_core/constants/typography.dart';
import 'package:e_porter/_core/service/permission_service.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_svg/svg.dart';
import 'package:get/get.dart';
import 'package:zoom_tap_animation/zoom_tap_animation.dart';
import '../../../../_core/component/appbar/appbar_component.dart';
import '../../../../_core/component/button/button_fill.dart';
import '../../../../_core/component/card/custome_shadow_cotainner.dart';
import '../../../../domain/models/upload_file_model.dart';
class UploadFileScreen extends StatefulWidget {
const UploadFileScreen({super.key});
@override
State<UploadFileScreen> createState() => _UploadFileScreenState();
}
class _UploadFileScreenState extends State<UploadFileScreen> {
final List<UploadFileModel> uploadedFiles = [];
bool isUploading = false;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: GrayColors.gray50,
appBar: DefaultAppbarComponent(
title: 'Upload Bukti Pembayaran',
textColor: Colors.white,
backgroundColors: PrimaryColors.primary800,
onTab: () {
Get.back();
},
),
body: SafeArea(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 20.h),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: double.infinity,
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 16.h),
decoration: BoxDecoration(
color: PrimaryColors.primary50,
borderRadius: BorderRadius.circular(10.r),
border: Border.all(width: 1.w, color: PrimaryColors.primary800),
),
child: Column(
children: [
SvgPicture.asset('assets/icons/ic_upload.svg', width: 32.w, height: 32.h),
SizedBox(height: 8.h),
TypographyStyles.body('Upload Bukti Pembayaran disini', color: GrayColors.gray800),
SizedBox(height: 16.h),
ZoomTapAnimation(
child: GestureDetector(
onTap: () => _pickFile(),
child: Container(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 10.h),
decoration: BoxDecoration(
color: GrayColors.gray300,
borderRadius: BorderRadius.circular(8.r),
),
child: TypographyStyles.caption('Pilih File', color: GrayColors.gray800),
),
),
)
],
),
),
SizedBox(height: 10.h),
TypographyStyles.small(
'Silahkan upload bukti pembayaran anda disini',
color: GrayColors.gray500,
fontWeight: FontWeight.w400,
),
SizedBox(height: 32.h),
TypographyStyles.body('Upload File', color: GrayColors.gray800),
SizedBox(height: 16.h),
Column(
children: uploadedFiles.isEmpty
? [_buildEmptyState()]
: uploadedFiles.map((file) => _buildFileItem(file)).toList(),
),
],
),
),
),
),
bottomNavigationBar: CustomeShadowCotainner(
child: ButtonFill(
text: 'Upload',
textColor: Colors.white,
onTap: () {
if (uploadedFiles.isNotEmpty) {
_submitFiles();
} else {
Get.snackbar(
'Peringatan',
'Silahkan pilih file terlebih dahulu',
backgroundColor: Colors.red,
colorText: Colors.white,
);
}
},
),
),
);
}
Widget _buildEmptyState() {
return Container(
height: 100.h,
width: double.infinity,
alignment: Alignment.center,
child: TypographyStyles.caption(
'Belum ada file yang dipilih',
color: GrayColors.gray500,
),
);
}
Widget _buildFileItem(UploadFileModel file) {
IconData fileIcon;
if (file.fileName.toLowerCase().endsWith('.zip')) {
fileIcon = Icons.folder_zip_outlined;
} else if (file.fileName.toLowerCase().endsWith('.jpg') ||
file.fileName.toLowerCase().endsWith('.jpeg') ||
file.fileName.toLowerCase().endsWith('.png')) {
fileIcon = Icons.image_outlined;
} else if (file.fileName.toLowerCase().endsWith('.mp4') || file.fileName.toLowerCase().endsWith('.mov')) {
fileIcon = Icons.video_file_outlined;
} else {
fileIcon = Icons.insert_drive_file_outlined;
}
return Container(
margin: EdgeInsets.only(bottom: 12.h),
padding: EdgeInsets.all(12.r),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8.r),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.05),
blurRadius: 4.r,
offset: Offset(0, 2),
),
],
),
child: Column(
children: [
Row(
children: [
Icon(fileIcon, size: 24.r, color: GrayColors.gray700),
SizedBox(width: 12.w),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TypographyStyles.small(file.fileName, color: GrayColors.gray800, fontWeight: FontWeight.w500),
SizedBox(height: 4.h),
Row(
children: [
TypographyStyles.caption(
'${(file.fileSize / (1024 * 1024)).toStringAsFixed(1)} mb',
color: file.status == FileUploadStatus.failed ? Colors.red : GrayColors.gray600,
fontWeight: FontWeight.w400,
),
if (file.status == FileUploadStatus.uploading)
Padding(
padding: EdgeInsets.only(left: 8.w),
child: TypographyStyles.caption(
'| ${file.progress}% - ${file.remainingTime} sec left',
color: GrayColors.gray600,
fontWeight: FontWeight.w400,
),
),
if (file.status == FileUploadStatus.failed)
Padding(
padding: EdgeInsets.only(left: 8.w),
child: TypographyStyles.caption(
'Upload failed',
color: Colors.red,
fontWeight: FontWeight.w400,
),
),
],
),
],
),
),
Row(
children: [
if (file.status == FileUploadStatus.failed)
IconButton(
icon: Icon(Icons.refresh, size: 20.r, color: GrayColors.gray600),
onPressed: () => _retryUpload(file),
),
IconButton(
icon: Icon(Icons.delete_outline, size: 20.r, color: GrayColors.gray600),
onPressed: () => _removeFile(file),
),
],
),
],
),
if (file.status == FileUploadStatus.uploading) ...[
SizedBox(height: 8.h),
LinearProgressIndicator(
value: file.progress / 100,
backgroundColor: GrayColors.gray200,
valueColor: AlwaysStoppedAnimation<Color>(PrimaryColors.primary600),
),
],
],
),
);
}
Future<void> _pickFile() async {
bool permissionGranted = await PermissionHelper.requestStoragePermission();
if (!permissionGranted) {
Get.snackbar(
'Permission Denied',
'Storage permission is required to select files.',
backgroundColor: Colors.red,
colorText: Colors.white,
);
return;
}
try {
FilePickerResult? result = await FilePicker.platform.pickFiles(
type: FileType.custom,
allowedExtensions: ['jpg', 'jpeg', 'png', 'pdf', 'zip', 'mp4'],
);
if (result != null) {
final file = result.files.first;
final newFile = UploadFileModel(
fileName: file.name,
filePath: file.path!,
fileSize: file.size,
progress: 0,
remainingTime: '0',
status: FileUploadStatus.pending,
);
setState(() {
uploadedFiles.add(newFile);
});
// Simulasikan proses loading lokal
_simulateLocalLoading(newFile);
}
} catch (e) {
print('Error picking file: $e');
Get.snackbar(
'Error',
'Terjadi kesalahan saat memilih file',
backgroundColor: Colors.red,
colorText: Colors.white,
);
}
}
void _simulateLocalLoading(UploadFileModel file) {
setState(() {
file.status = FileUploadStatus.uploading;
});
// Simulate progressing upload - in a real app this would be actual file reading/processing
int progress = 0;
Future.doWhile(() async {
if (progress >= 100) return false;
await Future.delayed(Duration(milliseconds: 100));
progress += 5;
if (mounted) {
setState(() {
file.progress = progress.toDouble();
file.remainingTime = ((100 - progress) ~/ 10).toString();
});
}
return progress < 100 && file.status == FileUploadStatus.uploading;
}).then((_) {
if (mounted && file.status == FileUploadStatus.uploading) {
setState(() {
// Simulate some files failing to upload for demonstration
if (file.fileName.contains('Icon-Set')) {
file.status = FileUploadStatus.failed;
} else {
file.status = FileUploadStatus.completed;
}
});
}
});
}
void _retryUpload(UploadFileModel file) {
setState(() {
file.progress = 0;
file.remainingTime = '0';
});
_simulateLocalLoading(file);
}
void _removeFile(UploadFileModel file) {
setState(() {
uploadedFiles.remove(file);
});
}
void _submitFiles() {
// Check if all files are uploaded successfully
bool allCompleted = uploadedFiles.every((file) => file.status == FileUploadStatus.completed);
if (!allCompleted) {
Get.dialog(
AlertDialog(
title: Text('Peringatan'),
content: Text('Beberapa file belum selesai diupload. Apakah Anda ingin melanjutkan?'),
actions: [
TextButton(
onPressed: () => Get.back(),
child: Text('Batal'),
),
TextButton(
onPressed: () {
Get.back();
_uploadToServer();
},
child: Text('Lanjutkan'),
),
],
),
);
} else {
_uploadToServer();
}
}
void _uploadToServer() {
// Simulate uploading to server
Get.snackbar(
'Info',
'Mengupload bukti pembayaran...',
backgroundColor: PrimaryColors.primary600,
colorText: Colors.white,
);
// Here you would actually send the files to your server
// For now, let's just simulate a successful upload
Future.delayed(Duration(seconds: 2), () {
Get.snackbar(
'Sukses',
'Bukti pembayaran berhasil diupload',
backgroundColor: Colors.green,
colorText: Colors.white,
);
// Navigate back or to a success screen
Future.delayed(Duration(seconds: 1), () {
// Get.offNamed(Routes.SUCCESS_SCREEN);
Get.back();
});
});
}
}

View File

@ -22,6 +22,7 @@ import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step1_sc
import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step2_screen.dart'; import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step2_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step3_screen.dart'; import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step3_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step4_screen.dart'; import 'package:e_porter/presentation/screens/home/pages/ticket_booking_step4_screen.dart';
import 'package:e_porter/presentation/screens/home/pages/upload_file_screen.dart';
import 'package:e_porter/presentation/screens/navigation/main_navigation.dart'; import 'package:e_porter/presentation/screens/navigation/main_navigation.dart';
import 'package:e_porter/presentation/screens/onboarding/onboarding_screen.dart'; import 'package:e_porter/presentation/screens/onboarding/onboarding_screen.dart';
import 'package:e_porter/presentation/screens/profile/pages/profile_screen.dart'; import 'package:e_porter/presentation/screens/profile/pages/profile_screen.dart';
@ -120,6 +121,10 @@ class AppRoutes {
name: Routes.PAYMENT, name: Routes.PAYMENT,
page: () => PaymentScreen(), page: () => PaymentScreen(),
), ),
GetPage(
name: Routes.UPLOADFILE,
page: () => UploadFileScreen(),
),
GetPage( GetPage(
name: Routes.TRANSACTIONHISTORY, name: Routes.TRANSACTIONHISTORY,
page: () => transactionHistory(), page: () => transactionHistory(),
@ -161,6 +166,7 @@ class Routes {
static const TICKETBOOKINGSTEP4 = '/ticket_booking_step4'; static const TICKETBOOKINGSTEP4 = '/ticket_booking_step4';
static const CHOOSECHAIR = '/choose_chair'; static const CHOOSECHAIR = '/choose_chair';
static const PAYMENT = '/payment'; static const PAYMENT = '/payment';
static const UPLOADFILE = '/upload_file';
static const TRANSACTIONHISTORY = '/transaction_history'; static const TRANSACTIONHISTORY = '/transaction_history';
static const DETAILTICKET = '/detail_ticket'; static const DETAILTICKET = '/detail_ticket';
static const PRINTBOARDINGPASS = '/print_boarding_pass'; static const PRINTBOARDINGPASS = '/print_boarding_pass';

View File

@ -6,6 +6,8 @@ import FlutterMacOS
import Foundation import Foundation
import cloud_firestore import cloud_firestore
import device_info_plus
import file_picker
import firebase_auth import firebase_auth
import firebase_core import firebase_core
import firebase_storage import firebase_storage
@ -14,6 +16,8 @@ import shared_preferences_foundation
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FLTFirebaseFirestorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseFirestorePlugin")) FLTFirebaseFirestorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseFirestorePlugin"))
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin"))
FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin")) FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin"))
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
FLTFirebaseStoragePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseStoragePlugin")) FLTFirebaseStoragePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseStoragePlugin"))

View File

@ -5,18 +5,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: _flutterfire_internals name: _flutterfire_internals
sha256: "7fd72d77a7487c26faab1d274af23fb008763ddc10800261abbfb2c067f183d5" sha256: de9ecbb3ddafd446095f7e833c853aff2fa1682b017921fe63a833f9d6f0e422
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.53" version: "1.3.54"
args: args:
dependency: transitive dependency: transitive
description: description:
name: args name: args
sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.6.0" version: "2.7.0"
async: async:
dependency: transitive dependency: transitive
description: description:
@ -77,26 +77,26 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: cloud_firestore name: cloud_firestore
sha256: "8dfe49146560af035314477995bdfb4a7104f33cb7f881748572fbda38ecfa55" sha256: "89a5e32716794b6a8d0ec1b5dfda988194e92daedaa3f3bed66fa0d0a595252e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.6.4" version: "5.6.6"
cloud_firestore_platform_interface: cloud_firestore_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: cloud_firestore_platform_interface name: cloud_firestore_platform_interface
sha256: dc0bcc3239a4feaa4b7b184dc4b689bc97e6cea1a8320ee0d7ee64b3607858ea sha256: "9f012844eb59be6827ed97415875c5a29ccacd28bc79bf85b4680738251a33df"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.6.4" version: "6.6.6"
cloud_firestore_web: cloud_firestore_web:
dependency: transitive dependency: transitive
description: description:
name: cloud_firestore_web name: cloud_firestore_web
sha256: "5091ed6771c886c9a93b1ec1ffa61770056210f1a3312095a73a5a4bab0c6a9f" sha256: b8b754269be0e907acd9ff63ad60f66b84c78d330ca1d7e474f86c9527ddc803
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.4.4" version: "4.4.6"
collection: collection:
dependency: transitive dependency: transitive
description: description:
@ -105,6 +105,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.18.0" version: "1.18.0"
cross_file:
dependency: transitive
description:
name: cross_file
sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
url: "https://pub.dev"
source: hosted
version: "0.3.4+2"
crypto: crypto:
dependency: transitive dependency: transitive
description: description:
@ -121,6 +129,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.8" version: "1.0.8"
device_info_plus:
dependency: "direct main"
description:
name: device_info_plus
sha256: "72d146c6d7098689ff5c5f66bcf593ac11efc530095385356e131070333e64da"
url: "https://pub.dev"
source: hosted
version: "11.3.0"
device_info_plus_platform_interface:
dependency: transitive
description:
name: device_info_plus_platform_interface
sha256: "0b04e02b30791224b31969eb1b50d723498f402971bff3630bca2ba839bd1ed2"
url: "https://pub.dev"
source: hosted
version: "7.0.2"
dotted_dashed_line: dotted_dashed_line:
dependency: "direct main" dependency: "direct main"
description: description:
@ -161,38 +185,46 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.0.1" version: "7.0.1"
file_picker:
dependency: "direct main"
description:
name: file_picker
sha256: "36a1652d99cb6bf8ccc8b9f43aded1fd60b234d23ce78af422c07f950a436ef7"
url: "https://pub.dev"
source: hosted
version: "10.0.0"
firebase_auth: firebase_auth:
dependency: "direct main" dependency: "direct main"
description: description:
name: firebase_auth name: firebase_auth
sha256: "91587615d7d9165c65a030426e3cf40bbec37c486f52ff654af17aba5be3d208" sha256: "54c62b2d187709114dd09ce658a8803ee91f9119b0e0d3fc2245130ad9bff9ad"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.5.1" version: "5.5.2"
firebase_auth_platform_interface: firebase_auth_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: firebase_auth_platform_interface name: firebase_auth_platform_interface
sha256: "1dcf1dbdd90fe97fa37ab3631b561bf584adb88f6be0b0dd915fff799ad53192" sha256: "5402d13f4bb7f29f2fb819f3b6b5a5a56c9f714aef2276546d397e25ac1b6b8e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.6.1" version: "7.6.2"
firebase_auth_web: firebase_auth_web:
dependency: transitive dependency: transitive
description: description:
name: firebase_auth_web name: firebase_auth_web
sha256: "3774cb13547e28b180fed2a5e696b4b36f97f4b1fadc7b04a0200e5009344d98" sha256: "2be496911f0807895d5fe8067b70b7d758142dd7fb26485cbe23e525e2547764"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.14.1" version: "5.14.2"
firebase_core: firebase_core:
dependency: "direct main" dependency: "direct main"
description: description:
name: firebase_core name: firebase_core
sha256: f4d8f49574a4e396f34567f3eec4d38ab9c3910818dec22ca42b2a467c685d8b sha256: "017d17d9915670e6117497e640b2859e0b868026ea36bf3a57feb28c3b97debe"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.12.1" version: "3.13.0"
firebase_core_platform_interface: firebase_core_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -205,34 +237,34 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: firebase_core_web name: firebase_core_web
sha256: faa5a76f6380a9b90b53bc3bdcb85bc7926a382e0709b9b5edac9f7746651493 sha256: "129a34d1e0fb62e2b488d988a1fc26cc15636357e50944ffee2862efe8929b23"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.21.1" version: "2.22.0"
firebase_storage: firebase_storage:
dependency: "direct main" dependency: "direct main"
description: description:
name: firebase_storage name: firebase_storage
sha256: "2274bb277d0d56d4a106fd89bad5e8f7c005bae77dc3df5abd36101957010840" sha256: b66435730252985c49aabe83e0490bcfab2e7b3f2192bf421ca596fa490de14a
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "12.4.4" version: "12.4.5"
firebase_storage_platform_interface: firebase_storage_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: firebase_storage_platform_interface name: firebase_storage_platform_interface
sha256: "36ed6ebc2453a500c6d1e63c8126459056a70a798d53636242b0325951814cf5" sha256: "08d32cae58200c34f504098d106952213f2e4c32db111ae7757a86887428ab81"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.2.4" version: "5.2.5"
firebase_storage_web: firebase_storage_web:
dependency: transitive dependency: transitive
description: description:
name: firebase_storage_web name: firebase_storage_web
sha256: e169fc825cbd91c70d73f75b7e8be9ada272b4297184f779ca124b42945828fe sha256: d6aee6867f8c369a88484367a8b1f0f6d0f022b4ff2622b51e32dfeef839f9d4
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.10.11" version: "3.10.12"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@ -246,6 +278,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.1.0"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: "1c2b787f99bdca1f3718543f81d38aa1b124817dfeb9fb196201bea85b6134bf"
url: "https://pub.dev"
source: hosted
version: "2.0.26"
flutter_screenutil: flutter_screenutil:
dependency: "direct main" dependency: "direct main"
description: description:
@ -284,10 +324,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: get name: get
sha256: e4e7335ede17452b391ed3b2ede016545706c01a02292a6c97619705e7d2a85e sha256: c79eeb4339f1f3deffd9ec912f8a923834bec55f7b49c9e882b8fef2c139d425
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.6.6" version: "4.7.2"
google_fonts: google_fonts:
dependency: "direct main" dependency: "direct main"
description: description:
@ -377,7 +417,7 @@ packages:
source: hosted source: hosted
version: "1.15.0" version: "1.15.0"
path: path:
dependency: transitive dependency: "direct main"
description: description:
name: path name: path
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
@ -440,6 +480,54 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.0" version: "2.3.0"
permission_handler:
dependency: "direct main"
description:
name: permission_handler
sha256: "59adad729136f01ea9e35a48f5d1395e25cba6cea552249ddbe9cf950f5d7849"
url: "https://pub.dev"
source: hosted
version: "11.4.0"
permission_handler_android:
dependency: transitive
description:
name: permission_handler_android
sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc
url: "https://pub.dev"
source: hosted
version: "12.1.0"
permission_handler_apple:
dependency: transitive
description:
name: permission_handler_apple
sha256: f84a188e79a35c687c132a0a0556c254747a08561e99ab933f12f6ca71ef3c98
url: "https://pub.dev"
source: hosted
version: "9.4.6"
permission_handler_html:
dependency: transitive
description:
name: permission_handler_html
sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24"
url: "https://pub.dev"
source: hosted
version: "0.1.3+5"
permission_handler_platform_interface:
dependency: transitive
description:
name: permission_handler_platform_interface
sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878
url: "https://pub.dev"
source: hosted
version: "4.3.0"
permission_handler_windows:
dependency: transitive
description:
name: permission_handler_windows
sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
url: "https://pub.dev"
source: hosted
version: "0.2.1"
petitparser: petitparser:
dependency: transitive dependency: transitive
description: description:
@ -476,18 +564,18 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: shared_preferences name: shared_preferences
sha256: "846849e3e9b68f3ef4b60c60cf4b3e02e9321bc7f4d8c4692cf87ffa82fc8a3a" sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.5.2" version: "2.5.3"
shared_preferences_android: shared_preferences_android:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_android name: shared_preferences_android
sha256: a768fc8ede5f0c8e6150476e14f38e2417c0864ca36bb4582be8e21925a03c22 sha256: "9f9f3d372d4304723e6136663bb291c0b93f5e4c8a4a6314347f481a33bda2b1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.6" version: "2.4.7"
shared_preferences_foundation: shared_preferences_foundation:
dependency: transitive dependency: transitive
description: description:
@ -641,10 +729,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: web name: web
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.0" version: "1.1.1"
win32:
dependency: transitive
description:
name: win32
sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e
url: "https://pub.dev"
source: hosted
version: "5.10.1"
win32_registry:
dependency: transitive
description:
name: win32_registry
sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852"
url: "https://pub.dev"
source: hosted
version: "1.1.5"
xdg_directories: xdg_directories:
dependency: transitive dependency: transitive
description: description:

View File

@ -53,6 +53,10 @@ dependencies:
google_fonts: ^6.2.1 google_fonts: ^6.2.1
dotted_dashed_line: ^0.0.3 dotted_dashed_line: ^0.0.3
barcode_widget: ^2.0.4 barcode_widget: ^2.0.4
file_picker: ^10.0.0
path: ^1.9.0
permission_handler: ^11.4.0
device_info_plus: ^11.3.0
# pin_code_fields: ^8.0.1 # pin_code_fields: ^8.0.1
# dio: ^5.8.0+1 # dio: ^5.8.0+1

View File

@ -10,6 +10,7 @@
#include <firebase_auth/firebase_auth_plugin_c_api.h> #include <firebase_auth/firebase_auth_plugin_c_api.h>
#include <firebase_core/firebase_core_plugin_c_api.h> #include <firebase_core/firebase_core_plugin_c_api.h>
#include <firebase_storage/firebase_storage_plugin_c_api.h> #include <firebase_storage/firebase_storage_plugin_c_api.h>
#include <permission_handler_windows/permission_handler_windows_plugin.h>
void RegisterPlugins(flutter::PluginRegistry* registry) { void RegisterPlugins(flutter::PluginRegistry* registry) {
CloudFirestorePluginCApiRegisterWithRegistrar( CloudFirestorePluginCApiRegisterWithRegistrar(
@ -20,4 +21,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); registry->GetRegistrarForPlugin("FirebaseCorePluginCApi"));
FirebaseStoragePluginCApiRegisterWithRegistrar( FirebaseStoragePluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FirebaseStoragePluginCApi")); registry->GetRegistrarForPlugin("FirebaseStoragePluginCApi"));
PermissionHandlerWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
} }

View File

@ -7,6 +7,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
firebase_auth firebase_auth
firebase_core firebase_core
firebase_storage firebase_storage
permission_handler_windows
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST