diff --git a/.dart_tool/dartpad/web_plugin_registrant.dart b/.dart_tool/dartpad/web_plugin_registrant.dart new file mode 100644 index 0000000..75482db --- /dev/null +++ b/.dart_tool/dartpad/web_plugin_registrant.dart @@ -0,0 +1,16 @@ +// Flutter web plugin registrant file. +// +// Generated file. Do not edit. +// + +// @dart = 2.13 +// ignore_for_file: type=lint + +import 'package:file_picker/_internal/file_picker_web.dart'; +import 'package:flutter_web_plugins/flutter_web_plugins.dart'; + +void registerPlugins([final Registrar? pluginRegistrar]) { + final Registrar registrar = pluginRegistrar ?? webPluginRegistrar; + FilePickerWeb.registerWith(registrar); + registrar.registerMessageHandler(); +} diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json new file mode 100644 index 0000000..8cf8525 --- /dev/null +++ b/.dart_tool/package_config.json @@ -0,0 +1,341 @@ +{ + "configVersion": 2, + "packages": [ + { + "name": "async", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/async-2.11.0", + "packageUri": "lib/", + "languageVersion": "2.18" + }, + { + "name": "boolean_selector", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/boolean_selector-2.1.1", + "packageUri": "lib/", + "languageVersion": "2.17" + }, + { + "name": "characters", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/characters-1.3.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "clock", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/clock-1.1.1", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "collection", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/collection-1.19.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "cross_file", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/cross_file-0.3.4+2", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "cupertino_icons", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/cupertino_icons-1.0.8", + "packageUri": "lib/", + "languageVersion": "3.1" + }, + { + "name": "fake_async", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/fake_async-1.3.1", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "ffi", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/ffi-2.1.3", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "file_picker", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/file_picker-8.3.1", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "flutter", + "rootUri": "file:///C:/src/flutter/flutter/packages/flutter", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "flutter_lints", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_lints-5.0.0", + "packageUri": "lib/", + "languageVersion": "3.5" + }, + { + "name": "flutter_plugin_android_lifecycle", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.24", + "packageUri": "lib/", + "languageVersion": "3.5" + }, + { + "name": "flutter_test", + "rootUri": "file:///C:/src/flutter/flutter/packages/flutter_test", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "flutter_web_plugins", + "rootUri": "file:///C:/src/flutter/flutter/packages/flutter_web_plugins", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "get", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/get-4.6.6", + "packageUri": "lib/", + "languageVersion": "2.15" + }, + { + "name": "http", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/http-1.3.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "http_parser", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/http_parser-4.1.2", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "intl", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/intl-0.20.1", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "leak_tracker", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/leak_tracker-10.0.7", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "leak_tracker_flutter_testing", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.8", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "leak_tracker_testing", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/leak_tracker_testing-3.0.1", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "lints", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/lints-5.1.1", + "packageUri": "lib/", + "languageVersion": "3.6" + }, + { + "name": "matcher", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/matcher-0.12.16+1", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "material_color_utilities", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/material_color_utilities-0.11.1", + "packageUri": "lib/", + "languageVersion": "2.17" + }, + { + "name": "meta", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/meta-1.15.0", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "path", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path-1.9.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "path_provider", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider-2.1.5", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "path_provider_android", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_android-2.2.15", + "packageUri": "lib/", + "languageVersion": "3.5" + }, + { + "name": "path_provider_foundation", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_foundation-2.4.1", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "path_provider_linux", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_linux-2.2.1", + "packageUri": "lib/", + "languageVersion": "2.19" + }, + { + "name": "path_provider_platform_interface", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_platform_interface-2.1.2", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "path_provider_windows", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_windows-2.3.0", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "pixel_snap", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/pixel_snap-0.1.5", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "platform", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/platform-3.1.6", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "plugin_platform_interface", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/plugin_platform_interface-2.1.8", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "simple_gesture_detector", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/simple_gesture_detector-0.2.1", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "sizer", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/sizer-3.0.5", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "sky_engine", + "rootUri": "file:///C:/src/flutter/flutter/bin/cache/pkg/sky_engine", + "packageUri": "lib/", + "languageVersion": "3.2" + }, + { + "name": "source_span", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/source_span-1.10.0", + "packageUri": "lib/", + "languageVersion": "2.18" + }, + { + "name": "stack_trace", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/stack_trace-1.12.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "stream_channel", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/stream_channel-2.1.2", + "packageUri": "lib/", + "languageVersion": "2.19" + }, + { + "name": "string_scanner", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/string_scanner-1.3.0", + "packageUri": "lib/", + "languageVersion": "3.1" + }, + { + "name": "table_calendar", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/table_calendar-3.2.0", + "packageUri": "lib/", + "languageVersion": "3.0" + }, + { + "name": "term_glyph", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/term_glyph-1.2.1", + "packageUri": "lib/", + "languageVersion": "2.12" + }, + { + "name": "test_api", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/test_api-0.7.3", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "typed_data", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/typed_data-1.4.0", + "packageUri": "lib/", + "languageVersion": "3.5" + }, + { + "name": "vector_math", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/vector_math-2.1.4", + "packageUri": "lib/", + "languageVersion": "2.14" + }, + { + "name": "vm_service", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/vm_service-14.3.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "vph_common_widgets", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/vph_common_widgets-0.0.3", + "packageUri": "lib/", + "languageVersion": "2.19" + }, + { + "name": "vph_web_date_picker", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/vph_web_date_picker-0.0.6", + "packageUri": "lib/", + "languageVersion": "2.19" + }, + { + "name": "web", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/web-1.1.0", + "packageUri": "lib/", + "languageVersion": "3.4" + }, + { + "name": "win32", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/win32-5.10.1", + "packageUri": "lib/", + "languageVersion": "3.5" + }, + { + "name": "xdg_directories", + "rootUri": "file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/xdg_directories-1.1.0", + "packageUri": "lib/", + "languageVersion": "3.3" + }, + { + "name": "shayog", + "rootUri": "../", + "packageUri": "lib/", + "languageVersion": "3.6" + } + ], + "generated": "2025-02-07T11:05:55.892643Z", + "generator": "pub", + "generatorVersion": "3.6.1", + "flutterRoot": "file:///C:/src/flutter/flutter", + "flutterVersion": "3.27.3", + "pubCache": "file:///C:/Users/Admin/AppData/Local/Pub/Cache" +} diff --git a/.dart_tool/package_config_subset b/.dart_tool/package_config_subset new file mode 100644 index 0000000..a9515de --- /dev/null +++ b/.dart_tool/package_config_subset @@ -0,0 +1,221 @@ +async +2.18 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/async-2.11.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/async-2.11.0/lib/ +boolean_selector +2.17 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/boolean_selector-2.1.1/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/boolean_selector-2.1.1/lib/ +characters +2.12 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/characters-1.3.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/characters-1.3.0/lib/ +clock +2.12 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/clock-1.1.1/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/clock-1.1.1/lib/ +collection +3.4 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/collection-1.19.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/collection-1.19.0/lib/ +cross_file +3.3 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/cross_file-0.3.4+2/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/cross_file-0.3.4+2/lib/ +cupertino_icons +3.1 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/cupertino_icons-1.0.8/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/cupertino_icons-1.0.8/lib/ +fake_async +2.12 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/fake_async-1.3.1/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/fake_async-1.3.1/lib/ +ffi +3.3 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/ffi-2.1.3/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/ffi-2.1.3/lib/ +file_picker +3.4 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/file_picker-8.3.1/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/file_picker-8.3.1/lib/ +flutter_lints +3.5 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_lints-5.0.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_lints-5.0.0/lib/ +flutter_plugin_android_lifecycle +3.5 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.24/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.24/lib/ +get +2.15 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/get-4.6.6/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/get-4.6.6/lib/ +http +3.4 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/http-1.3.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/http-1.3.0/lib/ +http_parser +3.4 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/http_parser-4.1.2/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/http_parser-4.1.2/lib/ +intl +3.3 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/intl-0.20.1/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/intl-0.20.1/lib/ +leak_tracker +3.2 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/leak_tracker-10.0.7/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/leak_tracker-10.0.7/lib/ +leak_tracker_flutter_testing +3.2 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.8/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.8/lib/ +leak_tracker_testing +3.2 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/leak_tracker_testing-3.0.1/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/leak_tracker_testing-3.0.1/lib/ +lints +3.6 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/lints-5.1.1/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/lints-5.1.1/lib/ +matcher +3.0 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/matcher-0.12.16+1/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/matcher-0.12.16+1/lib/ +material_color_utilities +2.17 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/material_color_utilities-0.11.1/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/material_color_utilities-0.11.1/lib/ +meta +2.12 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/meta-1.15.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/meta-1.15.0/lib/ +path +3.0 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path-1.9.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path-1.9.0/lib/ +path_provider +3.4 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider-2.1.5/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider-2.1.5/lib/ +path_provider_android +3.5 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_android-2.2.15/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_android-2.2.15/lib/ +path_provider_foundation +3.3 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_foundation-2.4.1/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_foundation-2.4.1/lib/ +path_provider_linux +2.19 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_linux-2.2.1/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_linux-2.2.1/lib/ +path_provider_platform_interface +3.0 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_platform_interface-2.1.2/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_platform_interface-2.1.2/lib/ +path_provider_windows +3.2 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_windows-2.3.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_windows-2.3.0/lib/ +pixel_snap +3.0 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/pixel_snap-0.1.5/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/pixel_snap-0.1.5/lib/ +platform +3.2 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/platform-3.1.6/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/platform-3.1.6/lib/ +plugin_platform_interface +3.0 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/plugin_platform_interface-2.1.8/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/plugin_platform_interface-2.1.8/lib/ +simple_gesture_detector +2.12 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/simple_gesture_detector-0.2.1/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/simple_gesture_detector-0.2.1/lib/ +sizer +2.12 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/sizer-3.0.5/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/sizer-3.0.5/lib/ +source_span +2.18 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/source_span-1.10.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/source_span-1.10.0/lib/ +stack_trace +3.4 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/stack_trace-1.12.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/stack_trace-1.12.0/lib/ +stream_channel +2.19 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/stream_channel-2.1.2/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/stream_channel-2.1.2/lib/ +string_scanner +3.1 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/string_scanner-1.3.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/string_scanner-1.3.0/lib/ +table_calendar +3.0 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/table_calendar-3.2.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/table_calendar-3.2.0/lib/ +term_glyph +2.12 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/term_glyph-1.2.1/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/term_glyph-1.2.1/lib/ +test_api +3.4 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/test_api-0.7.3/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/test_api-0.7.3/lib/ +typed_data +3.5 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/typed_data-1.4.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/typed_data-1.4.0/lib/ +vector_math +2.14 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/vector_math-2.1.4/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/vector_math-2.1.4/lib/ +vm_service +3.3 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/vm_service-14.3.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/vm_service-14.3.0/lib/ +vph_common_widgets +2.19 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/vph_common_widgets-0.0.3/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/vph_common_widgets-0.0.3/lib/ +vph_web_date_picker +2.19 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/vph_web_date_picker-0.0.6/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/vph_web_date_picker-0.0.6/lib/ +web +3.4 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/web-1.1.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/web-1.1.0/lib/ +win32 +3.5 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/win32-5.10.1/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/win32-5.10.1/lib/ +xdg_directories +3.3 +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/xdg_directories-1.1.0/ +file:///C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/xdg_directories-1.1.0/lib/ +shayog +3.6 +file:///C:/Users/Admin/Downloads/shayog/ +file:///C:/Users/Admin/Downloads/shayog/lib/ +sky_engine +3.2 +file:///C:/src/flutter/flutter/bin/cache/pkg/sky_engine/ +file:///C:/src/flutter/flutter/bin/cache/pkg/sky_engine/lib/ +flutter +3.3 +file:///C:/src/flutter/flutter/packages/flutter/ +file:///C:/src/flutter/flutter/packages/flutter/lib/ +flutter_test +3.3 +file:///C:/src/flutter/flutter/packages/flutter_test/ +file:///C:/src/flutter/flutter/packages/flutter_test/lib/ +flutter_web_plugins +3.2 +file:///C:/src/flutter/flutter/packages/flutter_web_plugins/ +file:///C:/src/flutter/flutter/packages/flutter_web_plugins/lib/ +2 diff --git a/.dart_tool/version b/.dart_tool/version new file mode 100644 index 0000000..e25f6e7 --- /dev/null +++ b/.dart_tool/version @@ -0,0 +1 @@ +3.27.3 \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml new file mode 100644 index 0000000..8337b2a --- /dev/null +++ b/.idea/caches/deviceStreaming.xml @@ -0,0 +1,461 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..5c94cb2 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..f12ab1a --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/shayog.iml b/.idea/shayog.iml new file mode 100644 index 0000000..3ec3084 --- /dev/null +++ b/.idea/shayog.iml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java new file mode 100644 index 0000000..8a72c20 --- /dev/null +++ b/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java @@ -0,0 +1,34 @@ +package io.flutter.plugins; + +import androidx.annotation.Keep; +import androidx.annotation.NonNull; +import io.flutter.Log; + +import io.flutter.embedding.engine.FlutterEngine; + +/** + * Generated file. Do not edit. + * This file is generated by the Flutter tool based on the + * plugins that support the Android platform. + */ +@Keep +public final class GeneratedPluginRegistrant { + private static final String TAG = "GeneratedPluginRegistrant"; + public static void registerWith(@NonNull FlutterEngine flutterEngine) { + try { + flutterEngine.getPlugins().add(new com.mr.flutter.plugin.filepicker.FilePickerPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin file_picker, com.mr.flutter.plugin.filepicker.FilePickerPlugin", e); + } + try { + flutterEngine.getPlugins().add(new io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin flutter_plugin_android_lifecycle, io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin", e); + } + try { + flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin path_provider_android, io.flutter.plugins.pathprovider.PathProviderPlugin", e); + } + } +} diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..13372ae Binary files /dev/null and b/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/android/gradlew b/android/gradlew new file mode 100644 index 0000000..9d82f78 --- /dev/null +++ b/android/gradlew @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat new file mode 100644 index 0000000..8a0b282 --- /dev/null +++ b/android/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android/local.properties b/android/local.properties new file mode 100644 index 0000000..5fbcdd2 --- /dev/null +++ b/android/local.properties @@ -0,0 +1,5 @@ +sdk.dir=C:\\Users\\Admin\\AppData\\Local\\Android\\sdk +flutter.sdk=C:\\src\\flutter\\flutter +flutter.buildMode=release +flutter.versionName=1.0.0 +flutter.versionCode=1 \ No newline at end of file diff --git a/android/shayog_android.iml b/android/shayog_android.iml new file mode 100644 index 0000000..3e44773 --- /dev/null +++ b/android/shayog_android.iml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ios/Flutter/Generated.xcconfig b/ios/Flutter/Generated.xcconfig new file mode 100644 index 0000000..fef6e64 --- /dev/null +++ b/ios/Flutter/Generated.xcconfig @@ -0,0 +1,14 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=C:\src\flutter\flutter +FLUTTER_APPLICATION_PATH=C:\Users\Admin\Downloads\shayog +COCOAPODS_PARALLEL_CODE_SIGN=true +FLUTTER_TARGET=lib\main.dart +FLUTTER_BUILD_DIR=build +FLUTTER_BUILD_NAME=1.0.0 +FLUTTER_BUILD_NUMBER=1 +EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386 +EXCLUDED_ARCHS[sdk=iphoneos*]=armv7 +DART_OBFUSCATION=false +TRACK_WIDGET_CREATION=true +TREE_SHAKE_ICONS=false +PACKAGE_CONFIG=.dart_tool/package_config.json diff --git a/ios/Flutter/flutter_export_environment.sh b/ios/Flutter/flutter_export_environment.sh new file mode 100644 index 0000000..a5055b5 --- /dev/null +++ b/ios/Flutter/flutter_export_environment.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=C:\src\flutter\flutter" +export "FLUTTER_APPLICATION_PATH=C:\Users\Admin\Downloads\shayog" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_TARGET=lib\main.dart" +export "FLUTTER_BUILD_DIR=build" +export "FLUTTER_BUILD_NAME=1.0.0" +export "FLUTTER_BUILD_NUMBER=1" +export "DART_OBFUSCATION=false" +export "TRACK_WIDGET_CREATION=true" +export "TREE_SHAKE_ICONS=false" +export "PACKAGE_CONFIG=.dart_tool/package_config.json" diff --git a/ios/Runner/GeneratedPluginRegistrant.h b/ios/Runner/GeneratedPluginRegistrant.h new file mode 100644 index 0000000..7a89092 --- /dev/null +++ b/ios/Runner/GeneratedPluginRegistrant.h @@ -0,0 +1,19 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GeneratedPluginRegistrant_h +#define GeneratedPluginRegistrant_h + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface GeneratedPluginRegistrant : NSObject ++ (void)registerWithRegistry:(NSObject*)registry; +@end + +NS_ASSUME_NONNULL_END +#endif /* GeneratedPluginRegistrant_h */ diff --git a/ios/Runner/GeneratedPluginRegistrant.m b/ios/Runner/GeneratedPluginRegistrant.m new file mode 100644 index 0000000..058bfeb --- /dev/null +++ b/ios/Runner/GeneratedPluginRegistrant.m @@ -0,0 +1,28 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#import "GeneratedPluginRegistrant.h" + +#if __has_include() +#import +#else +@import file_picker; +#endif + +#if __has_include() +#import +#else +@import path_provider_foundation; +#endif + +@implementation GeneratedPluginRegistrant + ++ (void)registerWithRegistry:(NSObject*)registry { + [FilePickerPlugin registerWithRegistrar:[registry registrarForPlugin:@"FilePickerPlugin"]]; + [PathProviderPlugin registerWithRegistrar:[registry registrarForPlugin:@"PathProviderPlugin"]]; +} + +@end diff --git a/lib/components/common/input_field.dart b/lib/components/common/input_field.dart index 7e926d1..d645bb1 100644 --- a/lib/components/common/input_field.dart +++ b/lib/components/common/input_field.dart @@ -45,9 +45,10 @@ class InputField extends StatelessWidget { // return Container(height: 0, color: Colors.transparent); // }, style: 12.txtSBoldBlack, - maxLength: maxLength, - decoration: InputDecoration( - counterText: '', +maxLength: maxLength, + decoration: InputDecoration(counterText: '', + + isDense: true, hintStyle: 11.txtSBoldGrey, maintainHintHeight: true, @@ -61,6 +62,7 @@ class InputField extends StatelessWidget { focusedErrorBorder: underLineBorder ?? inputBorder, filled: true, hintText: title ?? "", + labelStyle: 12.txtSBoldGrey, fillColor: AppColors.clrD9, errorText: "", diff --git a/lib/components/styles/app_strings.dart b/lib/components/styles/app_strings.dart index 7a1d7bf..a2f7a1a 100644 --- a/lib/components/styles/app_strings.dart +++ b/lib/components/styles/app_strings.dart @@ -87,6 +87,9 @@ class AppStrings { static const String paymentView = "Payment View"; static const String transporterInbound = "Transporter Inbound Transaction"; static const String close = "Close"; + static const String billDayConfiguration = "Bill Day Configuration"; + static const String bufferDayConfiguration = "Buffer Day Configuration"; + static const String ccnConfiguration = "CCN Configuration"; static const String utrAmt = "UTR Amount "; diff --git a/lib/feature/presentation/screens/admin/configuration_management/configuration_screen.dart b/lib/feature/presentation/screens/admin/configuration_management/configuration_screen.dart index 92ddd02..8f71760 100644 --- a/lib/feature/presentation/screens/admin/configuration_management/configuration_screen.dart +++ b/lib/feature/presentation/screens/admin/configuration_management/configuration_screen.dart @@ -1,42 +1,300 @@ import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:get/get_core/src/get_main.dart'; +import 'package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart'; +import 'package:shayog/feature/presentation/screens/admin/configuration_management/configuration_screen_controller.dart'; +import '../../../../../components/common/common_btn.dart'; +import '../../../../../components/common/input_field.dart'; +import '../../../../../components/styles/app_colors.dart'; +import '../../../../../components/styles/app_images.dart'; +import '../../../../../components/styles/app_strings.dart'; import '../../../widgets/custom_table.dart'; -class ConfigurationScreen extends StatelessWidget { +class ConfigurationScreen extends StatefulWidget { const ConfigurationScreen({super.key}); + @override + State createState() => _ConfigurationScreenState(); +} + +class _ConfigurationScreenState extends State { + final ctrl = Get.put(ConfigurationScreenController()); @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(8.0), child: Column( children: [ - // Row 1 (Header Row) - Row( - children: [ - CustomTable(text:"Header 1", isHeader: true), - CustomTable(text:"Header 2", isHeader: true), - CustomTable(text:"Header 3", isHeader: true), - ], - ), - Row( - children: [ - CustomTable(text:"Row 1, Col 1"), - CustomTable(text:"Row 1, Col 2"), - CustomTable(text:"Row 1, Col 3"), - ], - ), - Row( - children: [ - CustomTable(text:"Row 2, Col 1"), - CustomTable(text:"Row 2, Col 2"), - CustomTable(text:"Row 2, Col 3"), - ], + Container( + padding: EdgeInsets.only(bottom: 4), + margin: EdgeInsets.all(8), + child: Column( + children: [ + Container( + margin: EdgeInsets.only(bottom: 12), + height: 45, + color: AppColors.primaryClr, + child: Row( + children: [ + ListView.separated( + padding: EdgeInsets.symmetric(horizontal: 16), + scrollDirection: Axis.horizontal, + shrinkWrap: true, + itemBuilder: (context, index) { + return Obx( + () => InkWell( + onTap: () { + ctrl.selectedState.value = index; + }, + child: Container( + margin: EdgeInsets.only(bottom: 10, top: 10), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: + ctrl.selectedState.value == index + ? Colors.white + : AppColors.primaryClr, + width: 3))), + child: Center( + child: Text( + ctrl.userTabs[index].title ?? "", + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w900, + color: Colors.white), + ), + ), + ), + ), + ); + }, + separatorBuilder: (context, index) { + return SizedBox(width: 16); + }, + itemCount: ctrl.userTabs.length), + Spacer(), + InkWell( + child: Image.asset(AppImages.refresh, + height: 10, width: 10)), + Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + AppStrings.refresh, + style: TextStyle( + color: AppColors.white, + fontSize: 10, + fontWeight: FontWeight.normal), + ), + ), + ], + ), + ), + ], + ), ), - ], + Container( + padding: EdgeInsets.all(16), + color: AppColors.clrF2, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _commonText( + "Plant", + ), + SizedBox(height: 8), + InputField( + title: "Select Plant ", + ), + // Obx( + // () => Container( + // padding: EdgeInsets.only(left: 8), + // height: 35, + // decoration: BoxDecoration( + // borderRadius: + // BorderRadius.circular(4.0), + // color: AppColors.clrD9, + // border: Border.all( + // color: AppColors.clrGrey)), + // child: DropdownButton( + // icon: Icon( + // Icons + // .keyboard_arrow_down_outlined, + // size: 20, + // color: AppColors.darkGrey), + // + // isExpanded: true, + // underline: SizedBox(), + // + // value: ctrl + // .selectedInvoice.value, + // // Use the selected value + // onChanged: (String? newValue) { + // if (newValue != null) { + // ctrl.selectedInvoice.value = + // newValue; // Update the selected value + // } + // }, + // items: ctrl.invoiceNoItems + // .map((String value) { + // return DropdownMenuItem( + // value: value.toString(), + // child: Text( + // value, + // style: TextStyle( + // fontSize: 12, + // color: + // AppColors.darkGrey), + // ), + // ); + // }).toList(), + // ), + // ), + // ), + ], + )), + SizedBox(width: 16), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _commonText( + "User Name", + ), + SizedBox(height: 8), + InputField( + title: "Select User Name", + ), + ], + )), + SizedBox(width: 16), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _commonText( + "Product Name", + ), + SizedBox(height: 8), + InputField( + title: "Select Product Name ", + ), + // Obx( + // () => Container( + // padding: EdgeInsets.only(left: 8), + // height: 35, + // decoration: BoxDecoration( + // borderRadius: + // BorderRadius.circular(4.0), + // color: AppColors.clrD9, + // border: Border.all( + // color: AppColors.clrGrey)), + // child: DropdownButton( + // icon: Icon( + // Icons + // .keyboard_arrow_down_outlined, + // size: 20, + // color: AppColors.darkGrey), + // + // isExpanded: true, + // underline: SizedBox(), + // + // value: ctrl + // .selectedFreightNo.value, + // // Use the selected value + // onChanged: (String? newValue) { + // if (newValue != null) { + // ctrl + // .selectedFreightNo.value = + // newValue; // Update the selected value + // } + // }, + // items: ctrl.freightBillNoItems + // .map((String value) { + // return DropdownMenuItem( + // value: value.toString(), + // child: Text( + // value, + // style: TextStyle( + // fontSize: 12, + // color: + // AppColors.darkGrey), + // ), + // ); + // }).toList(), + // ), + // ), + // ), + ], + )), + ], + ), + Padding( + padding: + const EdgeInsets.only(top: 16.0, left: 0, right: 8), + child: Row( + children: [ + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _commonText( + "Bill day", + ), + SizedBox(height: 8), + InputField( + title: "Select Bill Day", + ), + ], + )), + ], + ), + ), + Padding( + padding: const EdgeInsets.all(16.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + CommonBtn( + bkClr: Colors.white, + text: AppStrings.cancel, + clickAction: () {}, + ), + SizedBox(width: 16), + CommonBtn( + bkClr: Colors.white, + text: AppStrings.submit, + clickAction: () {}, + ), + ], + ), + ), + ], + ), + ) + ], ), ); } + _commonText(String title) { + return Text( + title, + style: TextStyle( + fontSize: 13, color: Colors.black, fontWeight: FontWeight.w900), + ); + } } diff --git a/lib/feature/presentation/screens/admin/configuration_management/configuration_screen_controller.dart b/lib/feature/presentation/screens/admin/configuration_management/configuration_screen_controller.dart new file mode 100644 index 0000000..bfc1959 --- /dev/null +++ b/lib/feature/presentation/screens/admin/configuration_management/configuration_screen_controller.dart @@ -0,0 +1,24 @@ +import 'package:get/get_rx/src/rx_types/rx_types.dart'; +import 'package:get/get_state_manager/src/simple/get_controllers.dart'; + +import '../../../../../components/common/common_model.dart'; +import '../../../../../components/styles/app_strings.dart'; + +class ConfigurationScreenController extends GetxController{ + var selectedState = 0.obs; + RxBool isSelected = false.obs; + RxList userTabs = [ + CommonModel(title: AppStrings.billDayConfiguration), + CommonModel(title: AppStrings.bufferDayConfiguration), + CommonModel(title: AppStrings.ccnConfiguration), + ].obs; + var selectedInvoice = '41896424644'.obs; // Default value + var selectedFreightNo = '9841651635426'.obs; // Default value + void toggleContainer() { + isSelected.value = true; + print("isSelected.value..${isSelected.value}"); + } + var invoiceNoItems = ['41896424644', '41896424644', + '41896424644', '41896424644','41896424644'].obs; + var freightBillNoItems = ['9841651635426','9841651635426','9841651635426','9841651635426','9841651635426']; +} diff --git a/lib/feature/presentation/screens/admin/freight_bills/freightbill_screen.dart b/lib/feature/presentation/screens/admin/freight_bills/freightbill_screen.dart index a4e6627..40a78b9 100644 --- a/lib/feature/presentation/screens/admin/freight_bills/freightbill_screen.dart +++ b/lib/feature/presentation/screens/admin/freight_bills/freightbill_screen.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:shayog/components/styles/textStyles.dart'; @@ -342,10 +343,6 @@ class FreightBillScreen extends StatelessWidget { TableRow( decoration: BoxDecoration(color: AppColors.secondaryClr), children: [ - _cellText( - text: "SR. No.", - clr: Colors.black, - fontWeight: FontWeight.bold), _cellText( text: "Transporter Name", clr: Colors.black, @@ -378,7 +375,6 @@ class FreightBillScreen extends StatelessWidget { fontWeight: FontWeight.bold), ]), TableRow(children: [ - _cellText(text: "01"), _cellText(text: "User 1"), _cellText(text: "9841651635426", clr: AppColors.primaryClr), _cellText(text: "1 August 2024"), @@ -389,7 +385,6 @@ class FreightBillScreen extends StatelessWidget { _cellText(text: "78646646"), ]), TableRow(children: [ - _cellText(text: "02"), _cellText(text: "User 2"), _cellText(text: "9841651635426", clr: AppColors.primaryClr), _cellText(text: "1 August 2024"), @@ -400,7 +395,6 @@ class FreightBillScreen extends StatelessWidget { _cellText(text: "78646646"), ]), TableRow(children: [ - _cellText(text: "03"), _cellText(text: "User 3"), _cellText(text: "9841651635426", clr: AppColors.primaryClr), _cellText(text: "1 August 2024"), @@ -411,7 +405,6 @@ class FreightBillScreen extends StatelessWidget { _cellText(text: "-"), ]), TableRow(children: [ - _cellText(text: "04"), _cellText(text: "User 4"), _cellText(text: "9841651635426", clr: AppColors.primaryClr), _cellText(text: "1 August 2024"), @@ -422,7 +415,6 @@ class FreightBillScreen extends StatelessWidget { _cellText(text: "78646646"), ]), TableRow(children: [ - _cellText(text: "05"), _cellText(text: "User 5"), _cellText(text: "9841651635426", clr: AppColors.primaryClr), _cellText(text: "1 August 2024"), diff --git a/lib/feature/presentation/screens/admin/masters/controller/master_ctrl.dart b/lib/feature/presentation/screens/admin/masters/controller/master_ctrl.dart index fe63227..17c0615 100644 --- a/lib/feature/presentation/screens/admin/masters/controller/master_ctrl.dart +++ b/lib/feature/presentation/screens/admin/masters/controller/master_ctrl.dart @@ -6,6 +6,7 @@ import '../../../../../../components/styles/app_strings.dart'; class MasterCtrl extends GetxController{ var selectedUser = 0.obs; + RxBool isSelected = false.obs; var supplierCode = 'Supplier Code'.obs; var bpGrouping = 'BP Grouping'.obs; var accountGrp = 'Supplier Account Group'.obs; @@ -24,4 +25,8 @@ class MasterCtrl extends GetxController{ CommonModel(title: AppStrings.plantMaster), ].obs; + void toggleContainer() { + isSelected.value = true; + print("isSelected.value..${isSelected.value}"); + } } \ No newline at end of file diff --git a/lib/feature/presentation/screens/admin/masters/master_screen.dart b/lib/feature/presentation/screens/admin/masters/master_screen.dart index 9418492..a4235d6 100644 --- a/lib/feature/presentation/screens/admin/masters/master_screen.dart +++ b/lib/feature/presentation/screens/admin/masters/master_screen.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import '../../../../../components/common/common_btn.dart'; import '../../../../../components/common/custom_drop_down.dart'; +import '../../../../../components/common/input_field.dart'; import '../../../../../components/styles/app_colors.dart'; import '../../../../../components/styles/app_images.dart'; import '../../../../../components/styles/app_strings.dart'; @@ -79,6 +81,7 @@ class MasterScreen extends StatelessWidget { ), ), InkWell( + onTap: masterCtrl.toggleContainer, child: Image.asset(AppImages.filter, height: 12, width: 12)), Padding( @@ -107,13 +110,371 @@ class MasterScreen extends StatelessWidget { ], ), ), + Obx( + () => masterCtrl.isSelected.value + ? Container( + padding: EdgeInsets.all(16), + color: AppColors.clrF2, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _commonText( + "Supplier Code", + ), + SizedBox(height: 8), + InputField( + title: "Enter Supplier Code ", + ), + // Obx( + // () => Container( + // padding: EdgeInsets.only(left: 8), + // height: 35, + // decoration: BoxDecoration( + // borderRadius: + // BorderRadius.circular(4.0), + // color: AppColors.clrD9, + // border: Border.all( + // color: AppColors.clrGrey)), + // child: DropdownButton( + // icon: Icon( + // Icons + // .keyboard_arrow_down_outlined, + // size: 20, + // color: AppColors.darkGrey), + // + // isExpanded: true, + // underline: SizedBox(), + // + // value: ctrl + // .selectedInvoice.value, + // // Use the selected value + // onChanged: (String? newValue) { + // if (newValue != null) { + // ctrl.selectedInvoice.value = + // newValue; // Update the selected value + // } + // }, + // items: ctrl.invoiceNoItems + // .map((String value) { + // return DropdownMenuItem( + // value: value.toString(), + // child: Text( + // value, + // style: TextStyle( + // fontSize: 12, + // color: + // AppColors.darkGrey), + // ), + // ); + // }).toList(), + // ), + // ), + // ), + ], + )), + SizedBox(width: 16), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _commonText( + "Supplier Name", + ), + SizedBox(height: 8), + InputField( + title: "Enter Supplier Name", + ), + ], + )), + SizedBox(width: 16), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _commonText( + "Supplier Account Group", + ), + SizedBox(height: 8), + InputField( + title: "Supplier Account Group ", + ), + // Obx( + // () => Container( + // padding: EdgeInsets.only(left: 8), + // height: 35, + // decoration: BoxDecoration( + // borderRadius: + // BorderRadius.circular(4.0), + // color: AppColors.clrD9, + // border: Border.all( + // color: AppColors.clrGrey)), + // child: DropdownButton( + // icon: Icon( + // Icons + // .keyboard_arrow_down_outlined, + // size: 20, + // color: AppColors.darkGrey), + // + // isExpanded: true, + // underline: SizedBox(), + // + // value: ctrl + // .selectedFreightNo.value, + // // Use the selected value + // onChanged: (String? newValue) { + // if (newValue != null) { + // ctrl + // .selectedFreightNo.value = + // newValue; // Update the selected value + // } + // }, + // items: ctrl.freightBillNoItems + // .map((String value) { + // return DropdownMenuItem( + // value: value.toString(), + // child: Text( + // value, + // style: TextStyle( + // fontSize: 12, + // color: + // AppColors.darkGrey), + // ), + // ); + // }).toList(), + // ), + // ), + // ), + ], + )), + ], + ), + Padding( + padding: + const EdgeInsets.only(top: 16.0, left: 0, right: 8), + child: Row( + children: [ + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _commonText( + "State", + ), + SizedBox(height: 8), + InputField( + title: "Select State ", + ), + // Obx( + // () => Container( + // padding: EdgeInsets.only(left: 8), + // height: 35, + // decoration: BoxDecoration( + // borderRadius: + // BorderRadius.circular(4.0), + // color: AppColors.clrD9, + // border: Border.all( + // color: AppColors.clrGrey)), + // child: DropdownButton( + // icon: Icon( + // Icons + // .keyboard_arrow_down_outlined, + // size: 20, + // color: AppColors.darkGrey), + // + // isExpanded: true, + // underline: SizedBox(), + // + // value: ctrl + // .selectedInvoice.value, + // // Use the selected value + // onChanged: (String? newValue) { + // if (newValue != null) { + // ctrl.selectedInvoice.value = + // newValue; // Update the selected value + // } + // }, + // items: ctrl.invoiceNoItems + // .map((String value) { + // return DropdownMenuItem( + // value: value.toString(), + // child: Text( + // value, + // style: TextStyle( + // fontSize: 12, + // color: + // AppColors.darkGrey), + // ), + // ); + // }).toList(), + // ), + // ), + // ), + ], + )), + SizedBox(width: 16,), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _commonText( + "BP Group", + ), + SizedBox(height: 8), + InputField( + title: "Select BP Group ", + ), + // Obx( + // () => Container( + // padding: EdgeInsets.only(left: 8), + // height: 35, + // decoration: BoxDecoration( + // borderRadius: + // BorderRadius.circular(4.0), + // color: AppColors.clrD9, + // border: Border.all( + // color: AppColors.clrGrey)), + // child: DropdownButton( + // icon: Icon( + // Icons + // .keyboard_arrow_down_outlined, + // size: 20, + // color: AppColors.darkGrey), + // + // isExpanded: true, + // underline: SizedBox(), + // + // value: ctrl + // .selectedInvoice.value, + // // Use the selected value + // onChanged: (String? newValue) { + // if (newValue != null) { + // ctrl.selectedInvoice.value = + // newValue; // Update the selected value + // } + // }, + // items: ctrl.invoiceNoItems + // .map((String value) { + // return DropdownMenuItem( + // value: value.toString(), + // child: Text( + // value, + // style: TextStyle( + // fontSize: 12, + // color: + // AppColors.darkGrey), + // ), + // ); + // }).toList(), + // ), + // ), + // ), + ], + )), + SizedBox(width: 16,), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _commonText( + "Status", + ), + SizedBox(height: 8), + InputField( + title: "Select Status ", + ), + // Obx( + // () => Container( + // padding: EdgeInsets.only(left: 8), + // height: 35, + // decoration: BoxDecoration( + // borderRadius: + // BorderRadius.circular(4.0), + // color: AppColors.clrD9, + // border: Border.all( + // color: AppColors.clrGrey)), + // child: DropdownButton( + // icon: Icon( + // Icons + // .keyboard_arrow_down_outlined, + // size: 20, + // color: AppColors.darkGrey), + // + // isExpanded: true, + // underline: SizedBox(), + // + // value: ctrl + // .selectedInvoice.value, + // // Use the selected value + // onChanged: (String? newValue) { + // if (newValue != null) { + // ctrl.selectedInvoice.value = + // newValue; // Update the selected value + // } + // }, + // items: ctrl.invoiceNoItems + // .map((String value) { + // return DropdownMenuItem( + // value: value.toString(), + // child: Text( + // value, + // style: TextStyle( + // fontSize: 12, + // color: + // AppColors.darkGrey), + // ), + // ); + // }).toList(), + // ), + // ), + // ), + ], + )), + ], + ), + ), + Padding( + padding: const EdgeInsets.all(16.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + CommonBtn( + bkClr: Colors.white, + text: AppStrings.cancel, + clickAction: () {}, + ), + SizedBox(width: 16), + CommonBtn( + text: AppStrings.submit, + + clickAction: () {}, + ), + ], + ), + ), + ], + ), + ) + : SizedBox(), + ), + SizedBox(height: 20,), Obx(() { switch (masterCtrl.selectedUser.value) { case 0: return _tableView(); - - - default: + default: return Text(""); } }), @@ -129,10 +490,11 @@ _tableView(){ TableRow( decoration: BoxDecoration(color: AppColors.secondaryClr), children: [ - _cellText(text: "SR. No."), + // _cellText(text: "SR. No."), //CustomTable(text: "SR. NO."), CustomDropdown( items: masterCtrl.supplier, + backClr: AppColors.clrD9, itemLabel: (item) => item, onSelected: (selected) { if (selected != null) { @@ -142,6 +504,7 @@ _tableView(){ hintText: 'Supplier Code'), CustomDropdown( items: masterCtrl.supplier, + backClr: AppColors.clrD9, itemLabel: (item) => item, onSelected: (selected) { if (selected != null) { @@ -151,6 +514,7 @@ _tableView(){ hintText: 'BP Grouping'), CustomDropdown( items: masterCtrl.supplier, + backClr: AppColors.clrD9, itemLabel: (item) => item, onSelected: (selected) { if (selected != null) { @@ -160,6 +524,7 @@ _tableView(){ hintText: 'Supplier Account Group'), CustomDropdown( items: masterCtrl.supplier, + backClr: AppColors.clrD9, itemLabel: (item) => item, onSelected: (selected) { if (selected != null) { @@ -170,7 +535,6 @@ _tableView(){ _cellText(text: "Legal Entity"), ]), TableRow(children: [ - _cellText(text: "01"), _cellText(text: "11059440"), _cellText(text: "ZIPT"), _cellText(text: "ZIPT"), @@ -178,7 +542,6 @@ _tableView(){ _cellText(text: "0"), ]), TableRow(children: [ - _cellText(text: "02"), _cellText(text: "11059440"), _cellText(text: "ZIPT"), _cellText(text: "ZIPT"), @@ -187,7 +550,6 @@ _tableView(){ ]), TableRow(children: [ - _cellText(text: "03"), _cellText(text: "11059440"), _cellText(text: "ZIPT"), _cellText(text: "ZIPT"), @@ -195,7 +557,6 @@ _tableView(){ _cellText(text: "0"), ]), TableRow(children: [ - _cellText(text: "04"), _cellText(text: "11059440"), _cellText(text: "ZIPT"), _cellText(text: "ZIPT"), @@ -219,4 +580,11 @@ _tableView(){ ), ); } + _commonText(String title) { + return Text( + title, + style: TextStyle( + fontSize: 13, color: Colors.black, fontWeight: FontWeight.w900), + ); + } } diff --git a/lib/feature/presentation/screens/admin/user_management/model/getAllUserResModel.dart b/lib/feature/presentation/screens/admin/user_management/model/getAllUserResModel.dart index 77e405d..3f493d4 100644 --- a/lib/feature/presentation/screens/admin/user_management/model/getAllUserResModel.dart +++ b/lib/feature/presentation/screens/admin/user_management/model/getAllUserResModel.dart @@ -24,9 +24,9 @@ class GetAllUserResModel { GetAllUserResModel({ this.content, this.pageable, - this.last, this.totalElements, this.totalPages, + this.last, this.size, this.number, this.sort, @@ -38,9 +38,9 @@ class GetAllUserResModel { factory GetAllUserResModel.fromJson(Map json) => GetAllUserResModel( content: json["content"] == null ? [] : List>.from(json["content"]!.map((x) => List.from(x.map((x) => AllUser.fromJson(x))))), pageable: json["pageable"] == null ? null : Pageable.fromJson(json["pageable"]), - last: json["last"], totalElements: json["totalElements"], totalPages: json["totalPages"], + last: json["last"], size: json["size"], number: json["number"], sort: json["sort"] == null ? null : Sort.fromJson(json["sort"]), @@ -52,9 +52,9 @@ class GetAllUserResModel { Map toJson() => { "content": content == null ? [] : List.from(content!.map((x) => List.from(x.map((x) => x.toJson())))), "pageable": pageable?.toJson(), - "last": last, "totalElements": totalElements, "totalPages": totalPages, + "last": last, "size": size, "number": number, "sort": sort?.toJson(), diff --git a/lib/feature/presentation/screens/transporter/model/get_invoice_request.dart b/lib/feature/presentation/screens/transporter/model/get_invoice_request.dart new file mode 100644 index 0000000..96c0f2a --- /dev/null +++ b/lib/feature/presentation/screens/transporter/model/get_invoice_request.dart @@ -0,0 +1,48 @@ +// To parse this JSON data, do +// +// final getInvoiceRequest = getInvoiceRequestFromJson(jsonString); + +import 'dart:convert'; + +GetInvoiceRequest getInvoiceRequestFromJson(String str) => + GetInvoiceRequest.fromJson(json.decode(str)); + +String getInvoiceRequestToJson(GetInvoiceRequest data) => + json.encode(data.toJson()); + +class GetInvoiceRequest { + final String? invoiceId; + final String? freightBillNo; + final String? invFromDate; + final String? invToDate; + final String? freightFromDate; + final String? freightToDate; + + GetInvoiceRequest({ + this.invoiceId, + this.freightBillNo, + this.invFromDate, + this.invToDate, + this.freightFromDate, + this.freightToDate, + }); + + factory GetInvoiceRequest.fromJson(Map json) => + GetInvoiceRequest( + invoiceId: json["invoice_id"], + freightBillNo: json["freightBillNo"], + invFromDate: json["invFromDate"], + invToDate: json["invToDate"], + freightFromDate: json["freightFromDate"], + freightToDate: json["freightToDate"], + ); + + Map toJson() => { + "invoice_id": invoiceId, + "freightBillNo": freightBillNo, + "invFromDate": invFromDate, + "invToDate": invToDate, + "freightFromDate": freightFromDate, + "freightToDate": freightToDate, + }; +} diff --git a/lib/feature/presentation/screens/transporter/view/ctrl/invoice_management_controller.dart b/lib/feature/presentation/screens/transporter/view/ctrl/invoice_management_controller.dart index fa24570..f8fcdb3 100644 --- a/lib/feature/presentation/screens/transporter/view/ctrl/invoice_management_controller.dart +++ b/lib/feature/presentation/screens/transporter/view/ctrl/invoice_management_controller.dart @@ -7,8 +7,10 @@ import 'package:shayog/services/network/get_requests.dart'; import 'package:shayog/services/network/post_request.dart'; import '../../../../../../components/common/common_model.dart'; import '../../../../../../components/styles/app_strings.dart'; +import '../../../../../../services/network/post_request.dart'; +import '../../model/get_invoice_response.dart'; -class InvoiceManagementController extends GetxController { +class InvoiceManagementController extends GetxController{ var selectedState = 0.obs; Rx selectedPlant = "Select Plant".obs; Rx selectedFreightBill = "Select Bill No.".obs; @@ -56,7 +58,7 @@ class InvoiceManagementController extends GetxController { CommonModel(title: AppStrings.viewInvoice), CommonModel(title: AppStrings.cancelledInvoice), CommonModel(title: AppStrings.ccnView), - ].obs; // Default value + ].obs;// Default value RxInt totalPages = 3.obs; RxInt totalElements = 3.obs; var pageSize = 2.obs; @@ -71,7 +73,10 @@ class InvoiceManagementController extends GetxController { TextEditingController fromController = TextEditingController(); DateTime fromSelectedDate = DateTime.now(); // Initialize with a default value RxBool dateCheck = false.obs; - + // Validation variables + RxBool showPlantError = false.obs; + RxBool showProductError = false.obs; + RxBool showTransactionError = false.obs; String getFormattedDate(DateTime date) { return "${date.day.toString().padLeft(2, '0')}-${date.month.toString() .padLeft(2, '0')}-${date.year}"; @@ -86,10 +91,24 @@ class InvoiceManagementController extends GetxController { // RxBool showProductErrorViewFreight = false.obs; var freightViewLoader = false.obs; var freightBillData = [].obs; + RxBool isFilterVisibleGenerateFreight = false.obs; + var selectTransactionTypeFreight = ''.obs; + var selectProductFreight = ''.obs; + RxString selectPlantViewFreight = ''.obs; + var selectProductViewFreight = ''.obs; + RxString selectPlantPending = ''.obs; + var selectProductPending = ''.obs; + var selectLocationPending = ''.obs; + var selectTransactionTypePending = ''.obs; + RxBool showPlantErrorPending = false.obs; + RxBool showProductErrorPending = false.obs; + RxBool showTransactionErrorPending = false.obs; - void toggleContainer() { - isSelected.value = true; - } + void toggleFilter() { + isFilterVisibleGenerateFreight.value = + !isFilterVisibleGenerateFreight.value; + if (!isFilterVisibleGenerateFreight.value) { + clearFiltersGenerateFreightBill(); }} @override @@ -98,8 +117,29 @@ class InvoiceManagementController extends GetxController { getFreightBills(); super.onInit(); } + void clearFiltersGenerateFreightBill() { + selectPlantFreight.value = ''; + selectProductFreight.value = ''; + selectTransactionTypeFreight.value = ''; + fromController.clear(); + showPlantError.value = false; + showProductError.value = false; + showTransactionError.value = false; + } + void toggleViewFreight() { + isFilterVisibleViewFreight.value = !isFilterVisibleViewFreight.value; + if (!isFilterVisibleViewFreight.value) { + clearFiltersViewFreight(); + } + } - + void togglePending() { + isFilterVisiblePendingGeneration.value = + !isFilterVisiblePendingGeneration.value; + if (!isFilterVisiblePendingGeneration.value) { + clearFiltersPendingGeneration(); + } + } getInvoiceView() async { try { invoiceViewLoader.value = true; @@ -128,7 +168,6 @@ class InvoiceManagementController extends GetxController { invoiceViewLoader.value = false; } } - void changeSort(String field) { if (field == sortField.value) { sortDirection.value = sortDirection.value == "asc" ? "desc" : "asc"; @@ -142,7 +181,28 @@ class InvoiceManagementController extends GetxController { RxBool showPlantErrorFreight = false.obs; RxBool showProductErrorFreight = false.obs; RxString selectPlantFreight = ''.obs; - + RxBool isFilterVisibleViewFreight = false.obs; + RxBool isFilterVisiblePendingGeneration = false.obs; + RxBool showPlantErrorViewFreight = false.obs; + RxBool showProductErrorViewFreight = false.obs; + void clearFiltersViewFreight() { + selectPlantViewFreight.value = ''; + selectProductViewFreight.value = ''; + selectFreightBillValidate.value = ''; + fromController.clear(); + showPlantErrorViewFreight.value = false; + showProductErrorViewFreight.value = false; + showTransactionErrorViewFreight.value = false; + } + void clearFiltersPendingGeneration() { + selectPlantPending.value = ''; + selectProductPending.value = ''; + selectTransactionTypePending.value = ''; + fromController.clear(); + showPlantErrorPending.value = false; + showProductErrorPending.value = false; + showTransactionErrorPending.value = false; + } getFreightBills() async { try { isLoading.value = true; @@ -157,93 +217,7 @@ class InvoiceManagementController extends GetxController { } finally { - - isLoading.value = false; } } -} -// void clearFiltersViewFreight() { -// selectPlantViewFreight.value = ''; -// selectProductViewFreight.value = ''; -// selectFreightBillValidate.value = ''; -// fromController.clear(); -// showPlantErrorViewFreight.value = false; -// showProductErrorViewFreight.value = false; -// showTransactionErrorViewFreight.value = false; -// } -// void handleFilterSubmitViewFreightBill() { -// print('submit call'); -// validateFieldsViewFreightBill(); -// if (selectPlantViewFreight.value.isEmpty || -// selectProductViewFreight.value.isEmpty -// // || -// // selectTransactionTypeViewFreight.value.isEmpty -// ) { -// print('submit call 22'); -// } else { -// print('submit call 1'); -// displayFilteredDataFromViewFreight(); -// } -// } -// void validateFieldsViewFreightBill() { -// showPlantErrorViewFreight.value = selectPlantViewFreight.value.isEmpty; -// showTransactionErrorViewFreight.value = -// selectFreightBillValidate.value.isEmpty; -// showProductErrorViewFreight.value = selectProductViewFreight.value.isEmpty; -// } -// -// void displayFilteredDataFromViewFreight() async { -// try { -// freightViewLoader.value = true; -// Map requestBody = { -// "plant": selectPlantViewFreight.value, -// "productNane": selectProductViewFreight.value, -// "freightBillNo": selectFreightBillValidate.value, -// "transactionType": "", -// "fromLocation": "", -// "grnFromDate": "", -// "grnToDate": "", -// }; -// -// var response = await PostRequests.viewFreightBill(requestBody); -// -// if (response != null) { -// List flattenedContent = -// response.content!.expand((list) => list).toList(); -// -// List filteredData = flattenedContent.where((item) { -// // Plant filter -// bool plantMatch = selectPlantViewFreight.value.isEmpty || -// item.plantCode.toString().toLowerCase() == -// selectPlantViewFreight.value.toLowerCase(); -// -// // Product filter -// bool productMatch = selectProductViewFreight.value.isEmpty || -// item.materialCode.toString().toLowerCase() == -// selectProductViewFreight.value.toLowerCase(); -// -// // Freight bill filter -// bool freightBillMatch = selectFreightBillValidate.value.isEmpty || -// item.freightbillCode.toString().toLowerCase() == -// selectFreightBillValidate.value.toLowerCase(); -// -// -// return plantMatch && productMatch && freightBillMatch; -// }).toList(); -// freightBillData.assignAll(filteredData); -// -// // Update pagination values -// totalPages.value = response.totalPages ?? 0; -// totalElements.value = response.totalElements ?? 0; -// } else { -// freightBillData.clear(); -// } -// } catch (e) { -// freightBillData.clear(); -// } finally { -// freightViewLoader.value = false; -// } -// } - - +} \ No newline at end of file diff --git a/lib/feature/presentation/screens/transporter/view/sub_views/invoice_management_screen.dart b/lib/feature/presentation/screens/transporter/view/sub_views/invoice_management_screen.dart index 1596e5d..cdd2758 100644 --- a/lib/feature/presentation/screens/transporter/view/sub_views/invoice_management_screen.dart +++ b/lib/feature/presentation/screens/transporter/view/sub_views/invoice_management_screen.dart @@ -1,15 +1,27 @@ +import 'dart:io'; + +import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:intl/intl.dart'; +import 'package:path_provider/path_provider.dart'; import 'package:shayog/components/styles/textStyles.dart'; -import 'package:shayog/feature/presentation/screens/transporter/invoice_management/cancelled_view/cancelled_view_screen.dart'; -import 'package:shayog/feature/presentation/screens/transporter/invoice_management/ccn_view/ccn_view_screen.dart'; -import 'package:shayog/feature/presentation/screens/transporter/invoice_management/payment_view/payment_view_screen.dart'; -import 'package:shayog/feature/presentation/screens/transporter/invoice_management/view_invoice/view_invoice_screen.dart'; -import 'package:shayog/feature/presentation/widgets/text_view.dart'; +import 'package:sizer/sizer.dart'; +import 'package:vph_web_date_picker/vph_web_date_picker.dart'; + +import '../../../../../../components/common/common_btn.dart'; +import '../../../../../../components/common/common_button.dart'; +import '../../../../../../components/common/custom_drop_down.dart'; +import '../../../../../../components/common/data_cell.dart'; +import '../../../../../../components/common/input_field.dart'; import '../../../../../../components/styles/app_colors.dart'; import '../../../../../../components/styles/app_images.dart'; import '../../../../../../components/styles/app_strings.dart'; +import '../../../../widgets/text_view.dart'; +import '../../invoice_management/ccn_view/ccn_view_screen.dart'; import '../../invoice_management/payment_view/ctrl/payment_view_ctrl.dart'; +import '../../invoice_management/cancelled_view/cancelled_view_screen.dart'; +import '../../invoice_management/payment_view/payment_view_screen.dart'; import '../ctrl/invoice_management_controller.dart'; class InvoiceManagement extends StatefulWidget { @@ -20,6 +32,8 @@ class InvoiceManagement extends StatefulWidget { } class _TransportViewState extends State { + final ScrollController horizontalScrollController = ScrollController(); + final ScrollController verticalScrollController = ScrollController(); final ctrl = Get.put(InvoiceManagementController()); final paymentCtrl = Get.put(PaymentViewCtrl()); @override @@ -27,87 +41,331 @@ class _TransportViewState extends State { return Column( children: [ Container( - margin: EdgeInsets.symmetric(horizontal: 16, vertical: 8), - height: 50, - color: AppColors.primaryClr, - child: Row( + padding: EdgeInsets.only(bottom: 4), + margin: EdgeInsets.all(16), + child: Column( children: [ - ListView.separated( - shrinkWrap: true, - padding: EdgeInsets.symmetric(horizontal: 16), - scrollDirection: Axis.horizontal, - itemBuilder: (context, index) { - return Obx( - () => InkWell( - onTap: () { - ctrl.selectedState.value = index; - }, - child: Container( - margin: EdgeInsets.only(bottom: 10, top: 10), - decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: ctrl.selectedState.value == index - ? Colors.white - : AppColors.primaryClr, - width: 3))), - child: Center( - child: TextView( - text: ctrl.invoiceTabs[index].title ?? "", - style: 12.txtBoldWhite, - ), - ), + Container( + margin: EdgeInsets.only(bottom: 12), + height: 55, + color: AppColors.primaryClr, + child: Row( + children: [ + ListView.separated( + padding: EdgeInsets.symmetric(horizontal: 16), + scrollDirection: Axis.horizontal, + shrinkWrap: true, + itemBuilder: (context, index) { + return Obx( + () => InkWell( + onTap: () { + ctrl.selectedState.value = index; + }, + child: Container( + margin: EdgeInsets.only(bottom: 10, top: 10), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide( + color: ctrl.selectedState.value == + index + ? Colors.white + : AppColors.primaryClr, + width: 3))), + child: Center( + child: Text( + ctrl.userTabs[index].title ?? "", + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w900, + color: Colors.white), + ), + ), + ), + ), + ); + }, + separatorBuilder: (context, index) { + return SizedBox(width: 16); + }, + itemCount: ctrl.userTabs.length), + Spacer(), + InkWell( + child: Image.asset(AppImages.refresh, + height: 10, width: 10)), + Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + AppStrings.refresh, + style: TextStyle( + color: AppColors.white, + fontSize: 10, + fontWeight: FontWeight.normal), ), ), - ); - }, - separatorBuilder: (context, index) { - return SizedBox(width: 16); - }, - itemCount: ctrl.invoiceTabs.length, - ), - Spacer(), - InkWell( - onTap: (){ - paymentCtrl.resetDropdowns(); - }, - child: Image.asset(AppImages.refresh, height: 16, width: 16)), - Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - AppStrings.refresh, - style: 12.txtBoldWhite, - ), - ), - InkWell( - onTap: () { - switch (ctrl.selectedState.value) { - case 0: - return ctrl.invoiceFilter(); - case 1: - return ctrl.cancelledFilter(); - case 2: - return ctrl.paymentFilter(); - default: - return ctrl.ccnFilter(); - } - }, - child: Image.asset(AppImages.filter, height: 16, width: 16), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: TextView( - text: AppStrings.filter, - style: 12.txtBoldWhite, + GestureDetector( + behavior: HitTestBehavior.translucent, + onTap: () { + print("cdgsa"); + ctrl.isSelected.value = !ctrl.isSelected.value; + // if (ctrl.isSelected.value == 0) { + // ctrl.toggleFilter(); + // } else if (ctrl.isSelected.value == 1) { + // ctrl.toggleViewFreight(); + // } else if (ctrl.isSelected.value == 2) { + // ctrl.togglePending(); + // } + }, + child: Row( + children: [ + Image.asset(AppImages.filter, + height: 16, width: 16), + Padding( + padding: const EdgeInsets.all(8.0), + child: TextView( + text: AppStrings.filter, + style: 12.txtBoldWhite, + ), + ), + ], + ), + ), + ], ), ), ], ), ), + Obx( + () => ctrl.isSelected.value + ? Container( + padding: EdgeInsets.all(8), + color: AppColors.clrF2, + + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + TextView(text: "Plant", isRequired: true), + SizedBox(height: 8), + CustomDropdown( + backClr: AppColors.clrD9, + borderClr: AppColors.clrGrey, + items: ctrl.plant, + + itemLabel: (item) => + "${item.plantCode} - ${item.plantDesc}", + onSelected: (selected) { + if (selected != null) { + ctrl.selectPlantFreight.value = + selected.plantCode ?? ""; + ctrl.showPlantErrorFreight.value = + false; + } + }, + hintText: "Select Plant", + ), + Obx(() => + ctrl.showPlantErrorFreight.value + ? Text( + 'Required', + style: TextStyle( + color: Colors.red, + fontSize: 12), + ) + : Text('')), + ], + ), + ), + SizedBox(width: 16), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + TextView(text: "Freight Bill Date",isRequired: true,), + Container( + height: 35, + child: TextFormField( + key: ctrl.fromTextFieldKey, + controller: ctrl.fromController, + onTap: () async { + final pickedDate = + await showWebDatePicker( + width: 20.w, + context: ctrl + .fromTextFieldKey.currentContext!, + initialDate: + ctrl.fromSelectedDate, + firstDate: DateTime(2000), + lastDate: DateTime.now(), + ); + + if (pickedDate != null) { + ctrl.fromSelectedDate = + pickedDate; + String formattedDate = ctrl + .getFormattedDate(pickedDate); + ctrl.fromController.text = + formattedDate; + ctrl.dateCheck.value = true; + } + }, + decoration: InputDecoration( + fillColor: AppColors.clrD9, + filled: true, + hintText: 'Select Freight Bill Date ', + hintStyle: TextStyle( + fontSize: 12, + overflow: TextOverflow.ellipsis), + border: OutlineInputBorder( + borderRadius: + BorderRadius.circular(2.0), + borderSide: + BorderSide(color: AppColors.black), + ), + enabledBorder: OutlineInputBorder( + borderRadius: + BorderRadius.circular(2.0), + borderSide: BorderSide( + color: AppColors.clrGrey), + ), + focusedBorder: OutlineInputBorder( + borderRadius: + BorderRadius.circular(2.0), + borderSide: BorderSide( + color: AppColors.clrGrey), + ), + disabledBorder: OutlineInputBorder( + borderRadius: + BorderRadius.circular(2.0), + borderSide: BorderSide( + color: AppColors.clrGrey), + ), + suffixIcon: ctrl.dateCheck.value + ? InkWell( + onTap: () { + ctrl.dateCheck.value = + false; + ctrl.fromController + .clear(); + ctrl.fromSelectedDate = + DateTime.now(); + }, + child: Icon(Icons.close, + size: 1.2.w), + ) + : null, + contentPadding: + const EdgeInsets.symmetric( + horizontal: 12.0, vertical: 0.0), + ), + ), + ), + ], + ), + ), + SizedBox(width: 16), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + TextView( + text: "Freight Bill No.", isRequired: true), + SizedBox(height: 8), + CustomDropdown( + backClr: AppColors.clrD9, + borderClr: AppColors.clrGrey, + items: ctrl.freightBill, + itemLabel: (item) => item, + onSelected: (selected) { + if (selected != null) { + ctrl.selectFreightBillValidate.value = + selected; + ctrl.showTransactionErrorViewFreight + .value = false; + } + }, + hintText: "Select Freight Bill No.", + ), + Obx(() => ctrl + .showTransactionErrorViewFreight.value + ? Text( + 'Required', + style: TextStyle( + color: Colors.red, fontSize: 12), + ) + : Text('')), + ], + ), + ), + ], + ), + // Padding( + // padding: + // const EdgeInsets.only(top: 16.0, left: 0, right: 8), + // child: Row( + // children: [ + // Expanded( + // child: Column( + // mainAxisAlignment: MainAxisAlignment.start, + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // _commonText( + // "Freight Bill Date", + // ), + // SizedBox(height: 8), + // InputField( + // title: "Select Bill Date", + // ), + // ], + // )), + // ], + // ), + // ), + // Expanded( + // //flex: 2, + // child: Column( + // children: [ + // TextView( + // text: "", + // ), + // Padding( + // padding: const EdgeInsets.only(top: 8.0), + // child: Row( + // mainAxisAlignment: MainAxisAlignment.end, + // children: [ + // CommonBtn( + // bkClr: Colors.white, + // text: AppStrings.cancel, + // clickAction: () {}, + // ), + // SizedBox(width: 16), + // CommonBtn( + // text: AppStrings.submit, + // clickAction: () {}, + // ), + // ], + // ), + // ), + // ], + // )) + ], + ), + ) + : SizedBox(), + ), Obx(() { switch (ctrl.selectedState.value) { case 0: - return ViewInvoice(); + return _tableView(); case 1: return CancelledView(); case 2: @@ -119,4 +377,213 @@ class _TransportViewState extends State { ], ); } + + _tableView() { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Column( + children: [ + Scrollbar( + thumbVisibility: true, + controller: verticalScrollController, + child: SingleChildScrollView( + controller: verticalScrollController, + child: Scrollbar( + thumbVisibility: true, + controller: horizontalScrollController, + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + controller: horizontalScrollController, + child: Container( + decoration: BoxDecoration( + border: Border.all( + color: Colors.grey.shade400, + width: 1.0, + ), + ), + child: DataTable( + dataRowHeight: 40, + headingRowHeight: 40, + headingRowColor: WidgetStateProperty.all(AppColors.clrF2), + border: TableBorder( + horizontalInside: BorderSide(color: AppColors.clrGrey), + verticalInside: BorderSide(color: AppColors.clrGrey), + bottom: BorderSide(color: AppColors.clrGrey), + left: BorderSide(color: AppColors.clrGrey), + right: BorderSide(color: AppColors.clrGrey), + top: BorderSide(color: AppColors.clrGrey), + ), + columns: [ + dataColumn(" SAP Reference No."), + //dataColumn(AppStrings.productName, onSort: (_, __) => ctrl.changeSort(AppStrings.productName.toLowerCase())), + dataColumn("Freight Bill No."), + //dataColumn(AppStrings.getInvoiceDate), + dataColumn("Freight Bill date"), + dataColumn("Plant Code/Plant Desc."), + dataColumn("Material Code/Material Desc."), + dataColumn("Freight Bill Amount"), + dataColumn("GST Amount"), + dataColumn("Status"), + dataColumn("CCN Amount"), + dataColumn("View CCN"), + dataColumn("View Invoice"), + dataColumn("Add Signature"), + ], + rows: List.generate(ctrl.getInvoiceData.length, + (index) { + final getInvoice = ctrl.getInvoiceData[index]; + return DataRow( + cells: [ + editableCell(index, "${getInvoice.sapReferenceno}"), + editableCell(index, getInvoice.freightbillCode), + editableCell( + index, + DateFormat("dd MMMM yyyy").format( + DateTime.parse('${getInvoice.createdOn}'))), + editableCell(index, "${getInvoice.plantCode} - ${getInvoice.plantDesc}",), + editableCell(index, "${getInvoice.materialCode} - ${getInvoice.materialDescription}",), + editableCell(index, (getInvoice.shipmentCost.toString() ?? "-")), + editableCell( + index, "-"), + editableCell(index, getInvoice.status.toUpperCase()), + editableCell(index,"-"), + editableCell(index, "-"), + editableCell(index, "View Invoice",isLink: true), + DataCell( + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + padding: EdgeInsets.all(4), + decoration: BoxDecoration( + border: Border.all(color: Colors.blue), + borderRadius: BorderRadius.circular(4), + ), + child: InkWell( + onTap: () { }, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.download, + size: 16, color: Colors.blue), + SizedBox(width: 4), + Text('Download', + style: TextStyle( + color: Colors.blue, + fontSize: 12)), + ], + ), + ), + ), + SizedBox(width: 8), + Container( + padding: EdgeInsets.all(4), + decoration: BoxDecoration( + border: Border.all(color: Colors.blue), + borderRadius: BorderRadius.circular(4), + ), + child: InkWell( + onTap: () => handleFileUpload(index), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.upload, + size: 16, color: Colors.blue), + SizedBox(width: 4), + Text('Upload', + style: TextStyle( + color: Colors.blue, + fontSize: 12)), + ], + ), + ), + ), + + //###################### This Function is used to close or cut uploaded File in Local ####################### + // if (uploadedFiles.containsKey(index)) + // IconButton( + // icon: Icon(Icons.close, size: 16, color: Colors.red), + // onPressed: () { + // setState(() { + // uploadedFiles.remove(index); + // }); + // }, + // ), + + //########################################################################################################### + ], + ), + ), + ], + ); + }), + ), + ), + ), + ), + ), + ), + // CustomPagination( + // currentPage: controller.currentPage.value, + // totalPages: controller.totalPages.value, + // onPageChanged: (int page) { + // controller.onPageChanged(page); + // }, + // ), + ], + ), + ); + } + + Future handleFileUpload(int index) async { + try { + FilePickerResult? result = await FilePicker.platform.pickFiles( + type: FileType.custom, + allowedExtensions: ['pdf', 'doc', 'docx', 'xlsx', 'xls'], + allowMultiple: false, + ); + + if (result != null) { + PlatformFile file = result.files.first; + + // Validate file size (optional) + if (file.size > 10 * 1024 * 1024) { // 10MB limit + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('File size must be less than 10MB'), + backgroundColor: Colors.red, + ), + ); + return; + } + final appDir = await getApplicationDocumentsDirectory(); + final String filePath = '${appDir.path}/${file.name}'; + File(file.path!).copy(filePath); + setState(() { + //uploadedFiles[index] = file.name; + }); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('File uploaded: ${file.name}'), + backgroundColor: Colors.green, + ), + ); + } + } catch (e) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Error uploading file: ${e.toString()}'), + backgroundColor: Colors.red, + ), + ); + } + } + + _commonText(String title) { + return Text( + title, + style: TextStyle( + fontSize: 13, color: Colors.black, fontWeight: FontWeight.w900), + ); + } } diff --git a/lib/feature/presentation/widgets/custom_date_range_picker.dart b/lib/feature/presentation/widgets/custom_date_range_picker.dart new file mode 100644 index 0000000..d4c43e7 --- /dev/null +++ b/lib/feature/presentation/widgets/custom_date_range_picker.dart @@ -0,0 +1,253 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class DropdownDateRange extends StatefulWidget { + @override + _DropdownDateRangeState createState() => _DropdownDateRangeState(); +} + +class _DropdownDateRangeState extends State { + bool isCalendarVisible = false; + DateTime selectedStartDate = DateTime.now(); + DateTime selectedEndDate = DateTime.now().add(Duration(days: 5)); + DateTime displayedStartMonth = DateTime.now(); + DateTime displayedEndMonth = DateTime.now().add(Duration(days: 60)); + + List weekdays = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su']; + List months = [ + 'January', 'February', 'March', 'April', 'May', 'June', + 'July', 'August', 'September', 'October', 'November', 'December' + ]; + + @override + Widget build(BuildContext context) { + return Material( + color: Colors.transparent, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + // Clickable Container + GestureDetector( + onTap: () { + setState(() { + isCalendarVisible = !isCalendarVisible; + }); + }, + child: Container( + padding: EdgeInsets.symmetric(horizontal: 16, vertical: 12), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(4), + border: Border.all(color: Colors.grey.shade300), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + '${selectedStartDate.day} ${months[selectedStartDate.month - 1]} ${selectedStartDate.year} - ' + '${selectedEndDate.day} ${months[selectedEndDate.month - 1]} ${selectedEndDate.year}', + style: TextStyle(fontSize: 14), + ), + SizedBox(width: 8), + Icon(Icons.arrow_drop_down), + ], + ), + ), + ), + + // Dropdown Calendar + if (isCalendarVisible) + Container( + margin: EdgeInsets.only(top: 8), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(8), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.2), + spreadRadius: 1, + blurRadius: 8, + offset: Offset(0, 4), + ), + ], + ), + child: Column( + children: [ + Padding( + padding: EdgeInsets.all(16), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + _buildCalendar(displayedStartMonth, true), + SizedBox(width: 32), + _buildCalendar(displayedEndMonth, false), + ], + ), + ), + ], + ), + ), + ], + ), + ); + } + + Widget _buildCalendar(DateTime displayedMonth, bool isStartCalendar) { + return Container( + width: 280, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(8), + ), + child: Column( + children: [ + // Month Header + Padding( + padding: EdgeInsets.all(8), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + IconButton( + icon: Icon(Icons.chevron_left), + onPressed: () { + setState(() { + if (isStartCalendar) { + displayedStartMonth = DateTime( + displayedStartMonth.year, + displayedStartMonth.month - 1, + ); + } else { + displayedEndMonth = DateTime( + displayedEndMonth.year, + displayedEndMonth.month - 1, + ); + } + }); + }, + ), + Text( + '${months[displayedMonth.month - 1]} (${displayedMonth.year})', + style: TextStyle(fontWeight: FontWeight.bold), + ), + IconButton( + icon: Icon(Icons.chevron_right), + onPressed: () { + setState(() { + if (isStartCalendar) { + displayedStartMonth = DateTime( + displayedStartMonth.year, + displayedStartMonth.month + 1, + ); + } else { + displayedEndMonth = DateTime( + displayedEndMonth.year, + displayedEndMonth.month + 1, + ); + } + }); + }, + ), + ], + ), + ), + + // Weekday Headers + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: weekdays.map((day) => + Container( + width: 32, + alignment: Alignment.center, + child: Text( + day, + style: TextStyle( + fontSize: 12, + color: Colors.grey[600], + ), + ), + ), + ).toList(), + ), + + // Calendar Grid + Container( + padding: EdgeInsets.symmetric(vertical: 8), + child: Column( + children: _buildCalendarDays(displayedMonth), + ), + ), + ], + ), + ); + } + + List _buildCalendarDays(DateTime displayedMonth) { + List weeks = []; + DateTime firstDay = DateTime(displayedMonth.year, displayedMonth.month, 1); + int daysInMonth = DateTime(displayedMonth.year, displayedMonth.month + 1, 0).day; + + int firstWeekdayOfMonth = firstDay.weekday; + int currentDay = 1 - firstWeekdayOfMonth + 1; + + for (int week = 0; week < 6; week++) { + List days = []; + + for (int i = 0; i < 7; i++) { + if (currentDay <= 0 || currentDay > daysInMonth) { + days.add(Container(width: 32, height: 32)); + } else { + final date = DateTime(displayedMonth.year, displayedMonth.month, currentDay); + final isSelected = date.isAfter(selectedStartDate.subtract(Duration(days: 1))) && + date.isBefore(selectedEndDate.add(Duration(days: 1))); + final isToday = date.year == DateTime.now().year && + date.month == DateTime.now().month && + date.day == DateTime.now().day; + + days.add( + GestureDetector( + onTap: () { + setState(() { + if (date.isBefore(selectedEndDate)) { + selectedStartDate = date; + } else { + selectedEndDate = date; + } + }); + }, + child: Container( + width: 32, + height: 32, + alignment: Alignment.center, + decoration: BoxDecoration( + color: isSelected ? Colors.blue : Colors.transparent, + borderRadius: BorderRadius.circular(16), + border: isToday ? Border.all(color: Colors.blue) : null, + ), + child: Text( + currentDay.toString(), + style: TextStyle( + color: isSelected ? Colors.white : Colors.black, + fontWeight: isToday ? FontWeight.bold : FontWeight.normal, + ), + ), + ), + ), + ); + } + currentDay++; + } + + weeks.add( + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: days, + ), + ); + } + + return weeks; + } +} + + + diff --git a/lib/feature/presentation/widgets/custom_pagination.dart b/lib/feature/presentation/widgets/custom_pagination.dart index 89c132f..6ad7a2f 100644 --- a/lib/feature/presentation/widgets/custom_pagination.dart +++ b/lib/feature/presentation/widgets/custom_pagination.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:shayog/components/styles/textStyles.dart'; import 'dart:math' as math; diff --git a/lib/main.dart b/lib/main.dart index c6df794..1a45d87 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -17,7 +17,7 @@ class MyApp extends StatelessWidget { return GetMaterialApp( debugShowCheckedModeBanner: false, title: 'Shayog', - initialRoute: PageRoutes.login, + initialRoute: PageRoutes.dashboard, onGenerateRoute: Navigation.onGenerateRoutes, // home: DashboardScreen(), ); diff --git a/lib/services/network/remote_services.dart b/lib/services/network/remote_services.dart index c15af26..b3b7f7d 100644 --- a/lib/services/network/remote_services.dart +++ b/lib/services/network/remote_services.dart @@ -2,7 +2,6 @@ import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; import 'package:http/http.dart' as http; -import 'package:shayog/services/prefrences/prefrences.dart'; import 'package:shayog/utils/helpers.dart'; import '../../utils/alert_service.dart'; import '../model/common_res_model.dart'; diff --git a/lib/services/prefrences/prefrences.dart b/lib/services/prefrences/prefrences.dart index fa4fe08..49b3558 100644 --- a/lib/services/prefrences/prefrences.dart +++ b/lib/services/prefrences/prefrences.dart @@ -2,6 +2,8 @@ // // // + +// import 'package:shared_preferences/shared_preferences.dart'; // // class Preferences { // @@ -14,6 +16,13 @@ // static const prefKeyParent = 'pref_key_parent'; // static const userRoleKey = 'pref_key_user_role'; // + +// // static late SharedPreferences _prefs; +// +// // static Future createInstance() async { +// // _prefs = await SharedPreferences.getInstance(); +// // return; +// // } // static late SharedPreferences _prefs; // // static Future createInstance() async { diff --git a/lib/utils/helpers.dart b/lib/utils/helpers.dart index 30071de..68360e2 100644 --- a/lib/utils/helpers.dart +++ b/lib/utils/helpers.dart @@ -1,4 +1,5 @@ import 'package:flutter/cupertino.dart'; +import 'package:intl/intl.dart'; class Helpers { Helpers._(); @@ -21,6 +22,11 @@ class Helpers { return code >= 200 && code < 300; } + String trimDateUsingDateTime(String dateTimeString) { + DateTime dateTime = DateTime.parse(dateTimeString); + return "${dateTime.year}-${dateTime.month.toString().padLeft(2, '0')}-${dateTime.day.toString().padLeft(2, '0')}"; + } + // static String getImgUrl(String? url) { // debugPrint("url ======= = $url"); // diff --git a/lib/utils/validations.dart b/lib/utils/validations.dart index 91c9022..bd67fbd 100644 --- a/lib/utils/validations.dart +++ b/lib/utils/validations.dart @@ -18,8 +18,10 @@ class Validations { var enteredValue = value?.trim() ?? ''; if (enteredValue.isEmpty) { return 'Required'; - } else if (enteredValue.length != 10) { + } else if (enteredValue.length!= 10) { return "Not a valid number"; + }else if (enteredValue.contains(RegExp(r'[^0-9]'))) { + return "Only digits are allowed"; } else { return null; } diff --git a/macos/Flutter/ephemeral/Flutter-Generated.xcconfig b/macos/Flutter/ephemeral/Flutter-Generated.xcconfig new file mode 100644 index 0000000..b14e7b6 --- /dev/null +++ b/macos/Flutter/ephemeral/Flutter-Generated.xcconfig @@ -0,0 +1,11 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=C:\src\flutter\flutter +FLUTTER_APPLICATION_PATH=C:\Users\Admin\Downloads\shayog +COCOAPODS_PARALLEL_CODE_SIGN=true +FLUTTER_BUILD_DIR=build +FLUTTER_BUILD_NAME=1.0.0 +FLUTTER_BUILD_NUMBER=1 +DART_OBFUSCATION=false +TRACK_WIDGET_CREATION=true +TREE_SHAKE_ICONS=false +PACKAGE_CONFIG=.dart_tool/package_config.json diff --git a/macos/Flutter/ephemeral/flutter_export_environment.sh b/macos/Flutter/ephemeral/flutter_export_environment.sh new file mode 100644 index 0000000..c576a2f --- /dev/null +++ b/macos/Flutter/ephemeral/flutter_export_environment.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=C:\src\flutter\flutter" +export "FLUTTER_APPLICATION_PATH=C:\Users\Admin\Downloads\shayog" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_BUILD_DIR=build" +export "FLUTTER_BUILD_NAME=1.0.0" +export "FLUTTER_BUILD_NUMBER=1" +export "DART_OBFUSCATION=false" +export "TRACK_WIDGET_CREATION=true" +export "TREE_SHAKE_ICONS=false" +export "PACKAGE_CONFIG=.dart_tool/package_config.json" diff --git a/shayog.iml b/shayog.iml new file mode 100644 index 0000000..b3a2b0c --- /dev/null +++ b/shayog.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file