From 3b6312448a792b7a8b6cae94f970cf30b32c4379 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Thu, 11 Apr 2024 21:24:44 -0300 Subject: [PATCH 01/73] inclusao de token para notificacao --- lib/controllers/holerite/user_manager.dart | 3 ++- lib/services/holerite/usuario.dart | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/controllers/holerite/user_manager.dart b/lib/controllers/holerite/user_manager.dart index 9502283..1833fd9 100644 --- a/lib/controllers/holerite/user_manager.dart +++ b/lib/controllers/holerite/user_manager.dart @@ -21,6 +21,7 @@ class UserHoleriteManager extends ChangeNotifier { List? listuser; + static String? token; static UsuarioHolerite? sUser; UsuarioHolerite? get user => sUser; set user(UsuarioHolerite? v){ @@ -72,7 +73,7 @@ class UserHoleriteManager extends ChangeNotifier { } Future signInAuth({required String email, required String senha}) async { - listuser = await _service.signInAuth(email: email, senha: senha); + listuser = await _service.signInAuth(email: email, senha: senha, token: token); user = listuser!.last; memorizar(); return true; diff --git a/lib/services/holerite/usuario.dart b/lib/services/holerite/usuario.dart index 6503f4f..87357f1 100644 --- a/lib/services/holerite/usuario.dart +++ b/lib/services/holerite/usuario.dart @@ -11,7 +11,7 @@ class UserHoleriteService { final HttpCli _http = HttpCli(); - Future?> signInAuth({required String email, required String senha}) async { + Future?> signInAuth({required String email, required String senha, String? token}) async { String _metodo = '/holerite/login'; try{ String _email = CPFValidator.isValid(email) ? @@ -21,7 +21,8 @@ class UserHoleriteService { url: Config.conf.apiHoleriteEmail! + _metodo, body: { "Email": _email, - "Senha": senha + "Senha": senha, + "Token": token } ); From cbff26f5428ba5705ea8721bad3868bb79b60024 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Tue, 14 May 2024 09:30:04 -0300 Subject: [PATCH 02/73] ajuste projeto para inclusao dos apps --- .idea/vcs.xml | 4 + example/.gitignore | 45 - example/.metadata | 10 - example/README.md | 16 - example/analysis_options.yaml | 29 - example/android/.gitignore | 13 - example/android/app/build.gradle | 73 - .../android/app/src/debug/AndroidManifest.xml | 7 - .../android/app/src/main/AndroidManifest.xml | 41 - .../plugins/GeneratedPluginRegistrant.java | 124 - .../assecontservices_example/MainActivity.kt | 6 - .../res/drawable-v21/launch_background.xml | 12 - .../main/res/drawable/launch_background.xml | 12 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 442 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 0 bytes .../app/src/main/res/values-night/styles.xml | 18 - .../app/src/main/res/values/styles.xml | 18 - .../app/src/profile/AndroidManifest.xml | 7 - .../assecontservices_example_android.iml | 29 - example/android/build.gradle | 31 - example/android/gradle.properties | 3 - .../android/gradle/wrapper/gradle-wrapper.jar | Bin 53636 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 - example/android/gradlew | 160 - example/android/gradlew.bat | 90 - example/android/local.properties | 5 - example/android/settings.gradle | 11 - example/assets/imagens/DOWN1.png | Bin 25258 -> 0 bytes example/assets/imagens/LOGO_ASSECONT.png | Bin 44938 -> 0 bytes example/assets/imagens/assecont.png | Bin 2634 -> 0 bytes example/assets/imagens/bompacredito.jpg | Bin 77892 -> 0 bytes example/assets/imagens/check.png | Bin 14609 -> 0 bytes example/assets/imagens/dispo.png | Bin 35985 -> 0 bytes example/assets/imagens/email.png | Bin 35417 -> 0 bytes example/assets/imagens/ic_launcher.png | Bin 30435 -> 0 bytes example/assets/imagens/ic_sendM4.png | Bin 27331 -> 0 bytes example/assets/imagens/logo-assepontoweb.png | Bin 16343 -> 0 bytes example/assets/imagens/logo-asseweb.png | Bin 14828 -> 0 bytes example/assets/imagens/logo.png | Bin 4136 -> 0 bytes example/assets/imagens/logo_assepontoweb.png | Bin 6005 -> 0 bytes example/assets/imagens/pending.png | Bin 11996 -> 0 bytes example/assets/imagens/sms.png | Bin 34739 -> 0 bytes example/assets/imagens/visualizado.png | Bin 37439 -> 0 bytes example/ios/.gitignore | 34 - example/ios/Flutter/AppFrameworkInfo.plist | 26 - example/ios/Flutter/Debug.xcconfig | 1 - example/ios/Flutter/Generated.xcconfig | 14 - example/ios/Flutter/Release.xcconfig | 1 - .../ios/Flutter/flutter_export_environment.sh | 13 - example/ios/Runner.xcodeproj/project.pbxproj | 481 - .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - .../xcshareddata/xcschemes/Runner.xcscheme | 87 - .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - example/ios/Runner/AppDelegate.swift | 13 - .../AppIcon.appiconset/Contents.json | 122 - .../Icon-App-1024x1024@1x.png | Bin 10932 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 564 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1283 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 1588 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1025 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 1716 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 1920 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1283 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 1895 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 2665 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 2665 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 3831 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 1888 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 3294 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 3612 -> 0 bytes .../LaunchImage.imageset/Contents.json | 23 - .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/README.md | 5 - .../Runner/Base.lproj/LaunchScreen.storyboard | 37 - example/ios/Runner/Base.lproj/Main.storyboard | 26 - .../ios/Runner/GeneratedPluginRegistrant.h | 19 - .../ios/Runner/GeneratedPluginRegistrant.m | 140 - example/ios/Runner/Info.plist | 47 - example/ios/Runner/Runner-Bridging-Header.h | 1 - example/lib/controller/gethora.dart | 22 - example/lib/controller/gps.dart | 69 - example/lib/controller/home_controller.dart | 13 - example/lib/controller/tutor_controller.dart | 324 - example/lib/main.dart | 43 - example/lib/route_generator.dart | 88 - example/lib/ui/banco_horas/banco_screen.dart | 101 - .../lib/ui/banco_horas/detalhes_banco.dart | 139 - example/lib/ui/camera/foto_screen.dart | 235 - .../ui/comprovantes/comprovantes_screen.dart | 108 - .../comprovantes/detelhes_comprovantes.dart | 115 - example/lib/ui/espelho/detelhes_espelho.dart | 227 - example/lib/ui/espelho/espelho_screen.dart | 94 - example/lib/ui/ferias/ferias.dart | 32 - .../ui/home/componentes/custom_listTile.dart | 73 - .../home/componentes/custom_listTile_web.dart | 66 - .../lib/ui/home/componentes/load_widget.dart | 34 - .../lib/ui/home/componentes/resultados.dart | 196 - example/lib/ui/home/home.dart | 284 - .../lib/ui/login/esqueci_senha_screen.dart | 153 - example/lib/ui/login/login_screen.dart | 352 - example/lib/ui/login/start_screen.dart | 76 - example/lib/ui/marcacoes/Marcacoes.dart | 85 - .../lib/ui/marcacoes/detelhes_marcacao.dart | 117 - example/lib/ui/password/alterar_senha.dart | 165 - example/lib/ui/registro/screen_registro.dart | 369 - .../ui/solicitacoes/lancar_justificativa.dart | 177 - .../lib/ui/solicitacoes/lancar_marcacao.dart | 153 - .../ui/solicitacoes/lancar_solicitacao.dart | 63 - .../solicitacoes/solicitacoes_detalhes.dart | 59 - .../ui/solicitacoes/solicitacoes_screen.dart | 260 - example/pubspec.yaml | 42 - example/web/favicon.ico | Bin 152126 -> 0 bytes example/web/icons/Icon-192.png | Bin 13606 -> 0 bytes example/web/icons/Icon-512.png | Bin 29110 -> 0 bytes example/web/icons/Icon-maskable-192.png | Bin 13606 -> 0 bytes example/web/icons/Icon-maskable-512.png | Bin 29110 -> 0 bytes example/web/index.html | 106 - example/web/manifest.json | 35 - example/web/sqflite_sw.js | 11559 ---------------- example/web/sqlite3.wasm | Bin 686602 -> 0 bytes example/windows/.gitignore | 17 - example/windows/CMakeLists.txt | 95 - example/windows/flutter/CMakeLists.txt | 103 - .../.plugin_symlinks/assecontservices | 1 - .../.plugin_symlinks/path_provider_windows | 1 - .../shared_preferences_windows | 1 - .../.plugin_symlinks/url_launcher_windows | 1 - .../flutter/generated_plugin_registrant.cc | 26 - .../flutter/generated_plugin_registrant.h | 15 - .../windows/flutter/generated_plugins.cmake | 28 - example/windows/runner/CMakeLists.txt | 17 - example/windows/runner/Runner.rc | 121 - example/windows/runner/flutter_window.cpp | 61 - example/windows/runner/flutter_window.h | 33 - example/windows/runner/main.cpp | 43 - example/windows/runner/resource.h | 16 - example/windows/runner/resources/app_icon.ico | Bin 33772 -> 0 bytes example/windows/runner/runner.exe.manifest | 20 - example/windows/runner/utils.cpp | 64 - example/windows/runner/utils.h | 19 - example/windows/runner/win32_window.cpp | 245 - example/windows/runner/win32_window.h | 98 - lib/common/alterar_senha.dart | 2 +- pubspec.yaml | 6 +- 153 files changed, 8 insertions(+), 18965 deletions(-) delete mode 100644 example/.gitignore delete mode 100644 example/.metadata delete mode 100644 example/README.md delete mode 100644 example/analysis_options.yaml delete mode 100644 example/android/.gitignore delete mode 100644 example/android/app/build.gradle delete mode 100644 example/android/app/src/debug/AndroidManifest.xml delete mode 100644 example/android/app/src/main/AndroidManifest.xml delete mode 100644 example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java delete mode 100644 example/android/app/src/main/kotlin/com/assecont/servicos/assecontservices_example/MainActivity.kt delete mode 100644 example/android/app/src/main/res/drawable-v21/launch_background.xml delete mode 100644 example/android/app/src/main/res/drawable/launch_background.xml delete mode 100644 example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 example/android/app/src/main/res/values-night/styles.xml delete mode 100644 example/android/app/src/main/res/values/styles.xml delete mode 100644 example/android/app/src/profile/AndroidManifest.xml delete mode 100644 example/android/assecontservices_example_android.iml delete mode 100644 example/android/build.gradle delete mode 100644 example/android/gradle.properties delete mode 100644 example/android/gradle/wrapper/gradle-wrapper.jar delete mode 100644 example/android/gradle/wrapper/gradle-wrapper.properties delete mode 100644 example/android/gradlew delete mode 100644 example/android/gradlew.bat delete mode 100644 example/android/local.properties delete mode 100644 example/android/settings.gradle delete mode 100644 example/assets/imagens/DOWN1.png delete mode 100644 example/assets/imagens/LOGO_ASSECONT.png delete mode 100644 example/assets/imagens/assecont.png delete mode 100644 example/assets/imagens/bompacredito.jpg delete mode 100644 example/assets/imagens/check.png delete mode 100644 example/assets/imagens/dispo.png delete mode 100644 example/assets/imagens/email.png delete mode 100644 example/assets/imagens/ic_launcher.png delete mode 100644 example/assets/imagens/ic_sendM4.png delete mode 100644 example/assets/imagens/logo-assepontoweb.png delete mode 100644 example/assets/imagens/logo-asseweb.png delete mode 100644 example/assets/imagens/logo.png delete mode 100644 example/assets/imagens/logo_assepontoweb.png delete mode 100644 example/assets/imagens/pending.png delete mode 100644 example/assets/imagens/sms.png delete mode 100644 example/assets/imagens/visualizado.png delete mode 100644 example/ios/.gitignore delete mode 100644 example/ios/Flutter/AppFrameworkInfo.plist delete mode 100644 example/ios/Flutter/Debug.xcconfig delete mode 100644 example/ios/Flutter/Generated.xcconfig delete mode 100644 example/ios/Flutter/Release.xcconfig delete mode 100644 example/ios/Flutter/flutter_export_environment.sh delete mode 100644 example/ios/Runner.xcodeproj/project.pbxproj delete mode 100644 example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme delete mode 100644 example/ios/Runner.xcworkspace/contents.xcworkspacedata delete mode 100644 example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 example/ios/Runner/AppDelegate.swift delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png delete mode 100644 example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png delete mode 100644 example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json delete mode 100644 example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png delete mode 100644 example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png delete mode 100644 example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png delete mode 100644 example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md delete mode 100644 example/ios/Runner/Base.lproj/LaunchScreen.storyboard delete mode 100644 example/ios/Runner/Base.lproj/Main.storyboard delete mode 100644 example/ios/Runner/GeneratedPluginRegistrant.h delete mode 100644 example/ios/Runner/GeneratedPluginRegistrant.m delete mode 100644 example/ios/Runner/Info.plist delete mode 100644 example/ios/Runner/Runner-Bridging-Header.h delete mode 100644 example/lib/controller/gethora.dart delete mode 100644 example/lib/controller/gps.dart delete mode 100644 example/lib/controller/home_controller.dart delete mode 100644 example/lib/controller/tutor_controller.dart delete mode 100644 example/lib/main.dart delete mode 100644 example/lib/route_generator.dart delete mode 100644 example/lib/ui/banco_horas/banco_screen.dart delete mode 100644 example/lib/ui/banco_horas/detalhes_banco.dart delete mode 100644 example/lib/ui/camera/foto_screen.dart delete mode 100644 example/lib/ui/comprovantes/comprovantes_screen.dart delete mode 100644 example/lib/ui/comprovantes/detelhes_comprovantes.dart delete mode 100644 example/lib/ui/espelho/detelhes_espelho.dart delete mode 100644 example/lib/ui/espelho/espelho_screen.dart delete mode 100644 example/lib/ui/ferias/ferias.dart delete mode 100644 example/lib/ui/home/componentes/custom_listTile.dart delete mode 100644 example/lib/ui/home/componentes/custom_listTile_web.dart delete mode 100644 example/lib/ui/home/componentes/load_widget.dart delete mode 100644 example/lib/ui/home/componentes/resultados.dart delete mode 100644 example/lib/ui/home/home.dart delete mode 100644 example/lib/ui/login/esqueci_senha_screen.dart delete mode 100644 example/lib/ui/login/login_screen.dart delete mode 100644 example/lib/ui/login/start_screen.dart delete mode 100644 example/lib/ui/marcacoes/Marcacoes.dart delete mode 100644 example/lib/ui/marcacoes/detelhes_marcacao.dart delete mode 100644 example/lib/ui/password/alterar_senha.dart delete mode 100644 example/lib/ui/registro/screen_registro.dart delete mode 100644 example/lib/ui/solicitacoes/lancar_justificativa.dart delete mode 100644 example/lib/ui/solicitacoes/lancar_marcacao.dart delete mode 100644 example/lib/ui/solicitacoes/lancar_solicitacao.dart delete mode 100644 example/lib/ui/solicitacoes/solicitacoes_detalhes.dart delete mode 100644 example/lib/ui/solicitacoes/solicitacoes_screen.dart delete mode 100644 example/pubspec.yaml delete mode 100644 example/web/favicon.ico delete mode 100644 example/web/icons/Icon-192.png delete mode 100644 example/web/icons/Icon-512.png delete mode 100644 example/web/icons/Icon-maskable-192.png delete mode 100644 example/web/icons/Icon-maskable-512.png delete mode 100644 example/web/index.html delete mode 100644 example/web/manifest.json delete mode 100644 example/web/sqflite_sw.js delete mode 100644 example/web/sqlite3.wasm delete mode 100644 example/windows/.gitignore delete mode 100644 example/windows/CMakeLists.txt delete mode 100644 example/windows/flutter/CMakeLists.txt delete mode 120000 example/windows/flutter/ephemeral/.plugin_symlinks/assecontservices delete mode 120000 example/windows/flutter/ephemeral/.plugin_symlinks/path_provider_windows delete mode 120000 example/windows/flutter/ephemeral/.plugin_symlinks/shared_preferences_windows delete mode 120000 example/windows/flutter/ephemeral/.plugin_symlinks/url_launcher_windows delete mode 100644 example/windows/flutter/generated_plugin_registrant.cc delete mode 100644 example/windows/flutter/generated_plugin_registrant.h delete mode 100644 example/windows/flutter/generated_plugins.cmake delete mode 100644 example/windows/runner/CMakeLists.txt delete mode 100644 example/windows/runner/Runner.rc delete mode 100644 example/windows/runner/flutter_window.cpp delete mode 100644 example/windows/runner/flutter_window.h delete mode 100644 example/windows/runner/main.cpp delete mode 100644 example/windows/runner/resource.h delete mode 100644 example/windows/runner/resources/app_icon.ico delete mode 100644 example/windows/runner/runner.exe.manifest delete mode 100644 example/windows/runner/utils.cpp delete mode 100644 example/windows/runner/utils.h delete mode 100644 example/windows/runner/win32_window.cpp delete mode 100644 example/windows/runner/win32_window.h diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 35eb1dd..41611c9 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,5 +2,9 @@ + + + + \ No newline at end of file diff --git a/example/.gitignore b/example/.gitignore deleted file mode 100644 index a1345d0..0000000 --- a/example/.gitignore +++ /dev/null @@ -1,45 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.packages -.pub-cache/ -.pub/ -/build/ - -# Web related - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Android Studio will place build artifacts here -/android/app/debug -/android/app/profile -/android/app/release diff --git a/example/.metadata b/example/.metadata deleted file mode 100644 index 05f4d5d..0000000 --- a/example/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 097d3313d8e2c7f901932d63e537c1acefb87800 - channel: stable - -project_type: app diff --git a/example/README.md b/example/README.md deleted file mode 100644 index df90942..0000000 --- a/example/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# assecontservices_example - -Demonstrates how to use the assecontservices plugin. - -## Getting Started - -This project is a starting point for a Flutter application. - -A few resources to get you started if this is your first Flutter project: - -- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) - -For help getting started with Flutter, view our -[online documentation](https://flutter.dev/docs), which offers tutorials, -samples, guidance on mobile development, and a full API reference. diff --git a/example/analysis_options.yaml b/example/analysis_options.yaml deleted file mode 100644 index 61b6c4d..0000000 --- a/example/analysis_options.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# This file configures the analyzer, which statically analyzes Dart code to -# check for errors, warnings, and lints. -# -# The issues identified by the analyzer are surfaced in the UI of Dart-enabled -# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be -# invoked from the command line by running `flutter analyze`. - -# The following line activates a set of recommended lints for Flutter apps, -# packages, and plugins designed to encourage good coding practices. -include: package:flutter_lints/flutter.yaml - -linter: - # The lint rules applied to this project can be customized in the - # section below to disable rules from the `package:flutter_lints/flutter.yaml` - # included above or to enable additional rules. A list of all available lints - # and their documentation is published at - # https://dart-lang.github.io/linter/lints/index.html. - # - # Instead of disabling a lint rule for the entire project in the - # section below, it can also be suppressed for a single line of code - # or a specific dart file by using the `// ignore: name_of_lint` and - # `// ignore_for_file: name_of_lint` syntax on the line or in the file - # producing the lint. - rules: - # avoid_print: false # Uncomment to disable the `avoid_print` rule - # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule - -# Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options diff --git a/example/android/.gitignore b/example/android/.gitignore deleted file mode 100644 index 6f56801..0000000 --- a/example/android/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -gradle-wrapper.jar -/.gradle -/captures/ -/gradlew -/gradlew.bat -/local.properties -GeneratedPluginRegistrant.java - -# Remember to never publicly share your keystore. -# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app -key.properties -**/*.keystore -**/*.jks diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle deleted file mode 100644 index a4bcde7..0000000 --- a/example/android/app/build.gradle +++ /dev/null @@ -1,73 +0,0 @@ -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - -android { - compileSdkVersion 34 - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = '1.8' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.assecont.servicos.assecontservices_example" - minSdkVersion 23 - targetSdkVersion 34 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - multiDexEnabled true - } - - buildTypes { - release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug - } - } -} - -flutter { - source '../..' -} - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'com.google.android.material:material:1.6.0-alpha01' - implementation 'com.android.support:multidex:2.0.1' - implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.core:core:1.7.0' -} \ No newline at end of file diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index 2516d50..0000000 --- a/example/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 0cc6851..0000000 --- a/example/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java deleted file mode 100644 index 8ed39f6..0000000 --- a/example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java +++ /dev/null @@ -1,124 +0,0 @@ -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.assecont.servicos.assecontservices.AssecontservicesPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin assecontservices, com.assecont.servicos.assecontservices.AssecontservicesPlugin", e); - } - try { - flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.connectivity.ConnectivityPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin connectivity_plus, dev.fluttercommunity.plus.connectivity.ConnectivityPlugin", e); - } - try { - flutterEngine.getPlugins().add(new com.pinciat.external_path.ExternalPathPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin external_path, com.pinciat.external_path.ExternalPathPlugin", e); - } - try { - flutterEngine.getPlugins().add(new com.afur.flutter_html_to_pdf.FlutterHtmlToPdfPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin flutter_html_to_pdf, com.afur.flutter_html_to_pdf.FlutterHtmlToPdfPlugin", 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 com.baseflow.geocoding.GeocodingPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin geocoding_android, com.baseflow.geocoding.GeocodingPlugin", e); - } - try { - flutterEngine.getPlugins().add(new io.flutter.plugins.googlemaps.GoogleMapsPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin google_maps_flutter_android, io.flutter.plugins.googlemaps.GoogleMapsPlugin", e); - } - try { - flutterEngine.getPlugins().add(new io.flutter.plugins.imagepicker.ImagePickerPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin image_picker_android, io.flutter.plugins.imagepicker.ImagePickerPlugin", e); - } - try { - flutterEngine.getPlugins().add(new dev.britannio.in_app_review.InAppReviewPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin in_app_review, dev.britannio.in_app_review.InAppReviewPlugin", e); - } - try { - flutterEngine.getPlugins().add(new com.iyaffle.launchreview.LaunchReviewPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin launch_review, com.iyaffle.launchreview.LaunchReviewPlugin", e); - } - try { - flutterEngine.getPlugins().add(new io.flutter.plugins.localauth.LocalAuthPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin local_auth_android, io.flutter.plugins.localauth.LocalAuthPlugin", e); - } - try { - flutterEngine.getPlugins().add(new com.lyokone.location.LocationPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin location, com.lyokone.location.LocationPlugin", e); - } - try { - flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin package_info_plus, dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin", 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); - } - try { - flutterEngine.getPlugins().add(new com.xamdesign.safe_device.SafeDevicePlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin safe_device, com.xamdesign.safe_device.SafeDevicePlugin", e); - } - try { - flutterEngine.getPlugins().add(new com.zt.shareextend.ShareExtendPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin share_extend, com.zt.shareextend.ShareExtendPlugin", e); - } - try { - flutterEngine.getPlugins().add(new io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin shared_preferences_android, io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin", e); - } - try { - flutterEngine.getPlugins().add(new com.tekartik.sqflite.SqflitePlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin sqflite, com.tekartik.sqflite.SqflitePlugin", e); - } - try { - flutterEngine.getPlugins().add(new com.syncfusion.flutter.pdfviewer.SyncfusionFlutterPdfViewerPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin syncfusion_flutter_pdfviewer, com.syncfusion.flutter.pdfviewer.SyncfusionFlutterPdfViewerPlugin", e); - } - try { - flutterEngine.getPlugins().add(new com.wongpiwat.trust_location.TrustLocationPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin trust_location, com.wongpiwat.trust_location.TrustLocationPlugin", e); - } - try { - flutterEngine.getPlugins().add(new io.flutter.plugins.urllauncher.UrlLauncherPlugin()); - } catch (Exception e) { - Log.e(TAG, "Error registering plugin url_launcher_android, io.flutter.plugins.urllauncher.UrlLauncherPlugin", e); - } - } -} diff --git a/example/android/app/src/main/kotlin/com/assecont/servicos/assecontservices_example/MainActivity.kt b/example/android/app/src/main/kotlin/com/assecont/servicos/assecontservices_example/MainActivity.kt deleted file mode 100644 index 0696e96..0000000 --- a/example/android/app/src/main/kotlin/com/assecont/servicos/assecontservices_example/MainActivity.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.assecont.servicos.assecontservices_example - -import io.flutter.embedding.android.FlutterActivity - -class MainActivity: FlutterActivity() { -} diff --git a/example/android/app/src/main/res/drawable-v21/launch_background.xml b/example/android/app/src/main/res/drawable-v21/launch_background.xml deleted file mode 100644 index f74085f..0000000 --- a/example/android/app/src/main/res/drawable-v21/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/example/android/app/src/main/res/drawable/launch_background.xml b/example/android/app/src/main/res/drawable/launch_background.xml deleted file mode 100644 index 304732f..0000000 --- a/example/android/app/src/main/res/drawable/launch_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index db77bb4b7b0906d62b1847e87f15cdcacf6a4f29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 17987b79bb8a35cc66c3c1fd44f5a5526c1b78be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index d5f1c8d34e7a88e3f88bea192c3a370d44689c3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 4d6372eebdb28e45604e46eeda8dd24651419bc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` diff --git a/example/android/app/src/main/res/values-night/styles.xml b/example/android/app/src/main/res/values-night/styles.xml deleted file mode 100644 index 3db14bb..0000000 --- a/example/android/app/src/main/res/values-night/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml deleted file mode 100644 index d460d1e..0000000 --- a/example/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/example/android/app/src/profile/AndroidManifest.xml b/example/android/app/src/profile/AndroidManifest.xml deleted file mode 100644 index 2516d50..0000000 --- a/example/android/app/src/profile/AndroidManifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/example/android/assecontservices_example_android.iml b/example/android/assecontservices_example_android.iml deleted file mode 100644 index 1899969..0000000 --- a/example/android/assecontservices_example_android.iml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/example/android/build.gradle b/example/android/build.gradle deleted file mode 100644 index cb313ca..0000000 --- a/example/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext.kotlin_version = '1.8.10' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.2.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/example/android/gradle.properties b/example/android/gradle.properties deleted file mode 100644 index 94adc3a..0000000 --- a/example/android/gradle.properties +++ /dev/null @@ -1,3 +0,0 @@ -org.gradle.jvmargs=-Xmx1536M -android.useAndroidX=true -android.enableJetifier=true diff --git a/example/android/gradle/wrapper/gradle-wrapper.jar b/example/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 13372aef5e24af05341d49695ee84e5f9b594659..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53636 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ⅅ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 H-+%o-(+5aQ diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 562c5e4..0000000 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Fri Jun 23 08:50:38 CEST 2017 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip diff --git a/example/android/gradlew b/example/android/gradlew deleted file mode 100644 index 9d82f78..0000000 --- a/example/android/gradlew +++ /dev/null @@ -1,160 +0,0 @@ -#!/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/example/android/gradlew.bat b/example/android/gradlew.bat deleted file mode 100644 index 8a0b282..0000000 --- a/example/android/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@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/example/android/local.properties b/example/android/local.properties deleted file mode 100644 index b7eb155..0000000 --- a/example/android/local.properties +++ /dev/null @@ -1,5 +0,0 @@ -sdk.dir=C:\\Users\\gabri\\AppData\\Local\\Android\\sdk -flutter.sdk=C:\\SDK\\flutter -flutter.buildMode=debug -flutter.versionName=3.1.2 -flutter.versionCode=1 \ No newline at end of file diff --git a/example/android/settings.gradle b/example/android/settings.gradle deleted file mode 100644 index 44e62bc..0000000 --- a/example/android/settings.gradle +++ /dev/null @@ -1,11 +0,0 @@ -include ':app' - -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() - -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } - -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/example/assets/imagens/DOWN1.png b/example/assets/imagens/DOWN1.png deleted file mode 100644 index 7e8c10c31d6811e42932316d11ecdadf7a0a6ddb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25258 zcmbSyXIE3t7j6;)B%ybt_af4y_uiB$y$C^+UP4EDAQYvGBE1Vp4IQL~qM!%_r9?nT zexM*->HYG*Yuzt!&st~A%z5+7>^=L;v&+0NHP)kmvA_TT0EL0R_9FlQc-sX6ASAbq zLqLt|Z37O}G_Zi&K9P{8$+u%DLfi6Usm##;^vrxYPuRty>a~c2kRapRl3t*tFVG&liT@;#Yp)>a>raA&7u~y2H{8WmE zM?)vh)`3C$>Z=FE#)mW)bY+VCoX5A zRENbbM}1tnO$cfA(KIKqh1|jdbDwnFTKzdmj-~n;%*N`@jiV#8q%(1idtoGMnsJFLH6C2?2bF^CtI( zzWaz3Ayy#{2dN|vMC52?IBBLpsGrPEo>5&70PYNkT3n6zF$I!qu+vaK0PJ#yQ}v#)*%!I}`Hhjbg?ij}>*50VnMu4IhziDg%BOekI)2KM1&J0!GIl@nANU}eX1PrkgT&i=W3 z*hO#aEYsIzPdv_R<49l9TF?A|&Gf&Fl;lwNpMOs6w`J5jPQ<^=^||&$Z_6m+Np1G| zmH$dA@7Ip4xfIz;5-qi2w(-w>#D@wDSR17Hz^0@)6I9YwAOlT0ku2#QumkB;XKF&U zH!IFA!jU0hM!G<<*OPUQb!|M%~gWxQr<XK!8}c&fX<)b&msTn*!S?&&4J|WefXLwzjqx&hx^P_jf_;P~%Y~DV z>q?zc>^t0;kWwTH#`ptlZbh_V?q8XNauxHXEvk) z`PtuZVBQMh>4sZe7=~G{wlf`G`~>Anauyc?zpEnOiz}Qw?>`7(Ak>9lPKMAC{@~9Q zUrMhKhv4p}yKi^VY}=8Gg0+n}S*Nk<<^9PY_kSiKzKbBPYHYUrsVX0J8M;m=bWl5o zt3-<(-73L?t~wdf5aXKk0?jnGgY}SS>$y|71p1)W!M#{)%o;}G0J8z?eN7~-9=bA7 zIME1ejQp%lK@p{Wdao;qkw-K=>2^IhBlwCdcJg`PV7|^KnVF;$&{tOZSiqr`T)+=D z{T;Jjbsf3>5FNq?-go-Xo#y&i$?RtyHj)4$at_$Q1_|lAUM7_i-meja$Nbu4gkKqi zL2LZA$7Gbp_^$BKn(npghvfbCZao?UPGHYrQu9yeo8MRl6B5{#@{Gg=DEErP;RLoM zP0y%GIjKu6OXFN%gP$nLT168*v6d zy>><%7!|R;*f*k!>c63&1=)}tGdRDBk*&};$mq0s> z6QNT|CodWz9xHCMz#j2vcjs$N8=zO<^3RBve<{=8M)>)EK7d2-MUh?qqrY6Cwh0$s zLy?bb3z-x@zulhHa5oyqD`ly0mgvd-B}i%j<$1FQ@W%@ba(<2RA$|0r9y zMoZ*E5NZog*1kC#}^aDxw|}Px=v%L8Aj~|UK#AQCX_S5pQzbH4Lm1RO5P9u zXB>+H#5x4W#6d!b5?AqYyNJkz(Iy{~0)c<^anJk)EpLzmQvtrnIkzhks3$1_@!zm^ z;tnik8`fhLo`$L7akJ3^x0b{Qei$Aof&GI#(6;$GvSOYs5NrHLnk@3(b3dAXrmX2n z_8t`nVJt_$!G1fk0mZO4j3UMVJ1Ht?I^yT92_`Ct_pcdij2O~k9ik>Jcj36_(L~~k zX{8!|(Fgy%gKzt}cXvq2=(I@279?+g+A7j|`Lc^Yo8Y*i!q|91Dfn`1A%|M75>|7{ z?E8UJEc|tCPG-O`?Jv{qA8_n{D#Azak6s(1^zv~R-jBfhYCM;t z3bJ$rTD&mMS-h)RdeU<0^90kAS${_5Q=!76`oQn)#gDbanxQJ4iLvQCk#E_vv##0M zROl!DC?88X@|sFb0>`-z7%x|&<*Nl>t36wGQ=;kjnr}V$|865T@>dtjh8r_`$>Lo0!V<hL~g`{Nq$FP_Usu=Kt zS;-nZWCnfjbMaI!Xsge+ITMN)-!b<#@V-6G^?z(G+PPwF@<0853Lxm8Cau+O4uGtT z<5O;+F?O2{#A}nA*`>}E4Um+po+azbJ?2w4Yn)E2qRf*_Amh*p)sWc^VS3T93*9_v zj@y7>(m@wV5EJzk7kqIJR@~*w`*SrW$1V!ve9wPJ!!%w{7E*63!k&&X8>Ka*%~Djo zJuUzab2z?R*h784^-?k-dH*S|7gO3xK;laY8LN{pnlS25X>kQ$I}NL!Cz4kiGV*({ zE^Uu!y{ukyD?xWqTv4<;NfK$2eEuS4i{QHh)B2}3oyCLSW z&|F^`BHQWR*E-g5#q?3doKd7cB5=Nj#AGMJZkn`DdjdlpDTv+#py9ckvn0 zj{`@f>~{rv-+L4yyM$wigqr{wS=6=O z(8IfzwdZ;m&9EC1=9;0Kz$x5|eL-~ClEN+XX$<^Ttr)tIg1C#e6O5)QRX|H!hC`M< z$k4a%`*@TE2KkictH;j(CYcD4>s=bCc{ol!cdfKNFPMq+Yn)qCoTOCI1rS~dnUcX= z7@>Xr(;-Ysqs=@K=?NDvd!5vI!EZ1T`y1?t{YN&9fz+}i1UyALK#ZE8ydEY&d9>3> zy7WdeFRHdBit@w}tS1)W%fD8YD4@S@F7JqXG3lQ?h98DMk_>8lzxoCn#6`g z1&@}LhAL#g#M({KU4+SSljZ5u@x8*^3FYIX*Kr0Yxx#`#vF%=F$N4ClzX6*nrF&WX zHi7OxCp&xiC#UOy?w}(_B2y9)d9$ZDpo9YP#EyHTrRiUJHl^uqC9dK>>-pi)PEZy` zl23f&>;(3ddA*Xbxw3z}&MV#f?h7V&-uEMY;3GE}_A9Q2&zgd>fug0$v>2|> zVyOyNmGkns411hw>J&Nf+0_^`c zC+5JS3O!|wu`dsuSNQiGvwp0Q%rnSrFBM+fF71rH-_ip_jOUfq4Cb@Awxy z8}EinxQqLqu{iWoTn4`mEEF4>Acoy!diLiQA06rl*o5Z(Vk7zws+r?J8PSNky#uc-s_g-tQv0&O1h;>) zxxGMm08b>;QJt6mS31lThs44H(OGXWPvBw_WJ`gWt*?B{3pEur#7I*1YXi51zHJ$X zDNwNf5dNJ5IvE`Ng~%}Gd*UWoOI2eHhO1o1FrAINB0d-m24VCNH_!ZGu2opCc@6D8 z?JnwEKvCjwt|~f0()-qxeqhtb++R$3OL^a}Al)cY&-~&F=nFfA-jv^e`L9?+V>NM7 z1U;aCLq~Z2H~Q}5GIx&GCMe`X!fM85R=w~h1rW#I8Y6x`#IMVb|A%eleGGZnwH+=( zwcg=BHc@RG$BC`^KZ7Pr&agH`mdQN|!KOIId{g>KZYSuy_%|zF>rOM3ErQ$3*drw~qe$T)l}Ir>P%AUDB#@YKlN{ ziRZA93SA+Mi7Rp&q+O5L+pIcq1>xvBmY4*J@k>b`C3dNJTCxX78Llahu!QW=T|{b}_J9h>i(#LVC% zab)(%f$`wmNPYh(mp(5*$h-L$Je@%a6*BX7vo!`1zUEzf4kbAX@ABs(^B``DqrZ9B zpn6nsFWzL%6>|hI0Y7?wCwvrc$x9OcPhT5c5AKg+Dv34!fYGBuik!^9y~jN#&CT;? zk?`kOqWo38!kJ3_H50i#tm)7FUt1A&%}2FBZ)envX4a}~VujC3KX5NFhW)>Un{{Hy zje_GTFg?yC5o1L8O)*h@>YaXGh9?n0R?L>BcsUZu5ezq6jy zumt|I^zl7x-Z&mRDkWCQ!zP^3e(d07S!%d36P2{mVz{=U32HKzFM zF7uhN1${u#|6Db--TPS;q=QBbiHF;$vV}#hM#j<`^QwBy&+2;ojevgCl)x~}PyCVn z#1O50vP2(;@)kIlid_zoI<~Kc|07iA-a;G3$`J!Rj{0FD($N6fYpm{QUY3rfQzklQ z6jq|%{Tw#+9=7tx20_R6ZHVlqYIa*ERCXvPeXNV!`M&^tkBp|;JeBHKu{&qn7ssz5 z+p0fHc#f$K6IJyvGjj+JDxp8Wnj$^~rW#8l1(0%utMW9y{<{g*gnK}1?WO()u?_IO z{{4&i$dZG`z{)xEMH_LJ*vHS;?`GXBf}$%xP&BB#$2o&?|0^o&o~$2z*zK~(m&8L( zW#%Q9Is}epH0RE$HGQoqtb8e!W zDMG8ux{nvaImTd3*H+w}=4yZP%-1H>;DIFD=K->ISSFGp^1U`xe8&Cn22BC!zAt34 z8)n-pe-jXEu-vj8af-Hh*Nb6_9jw%#3EGSgk(?VWPjmA~sWcVkdMqPKF1+YOhEEl_ae0VcIiYmWFwI~%wskOyM zTV+}e)shlMDEn6%UObl8uYBwzKil}PJfkyiJ8jX?F+qVxWM)nfV9T9!&%h$rr)_&?Czw?+2*M}H8(EDniXKGLMRgKq*$TPg1^hO&1i z1wR0+pBAtReyipztniO+PjQTUm^3ITt}qIrDQA)RZy5o9R{z4>pb=k-SX@@V|IFJq zfg$`MiK0g3oX5Dw&xsdBYEkg&Y%Cvq$pw%ME;0PBGmxHID1k)Gg*)vX1*de{er!mzf#WZFl3Quj1|mR3Vj z3hj^C3hh9~i#jw|D#~-%@z2?T8=WmIy^R~V6cm*{*1Y5Vnzv4|DbD@=Wn?MUS#UkE z#s)a5?X9&l%3;0O^6#+sfNAOM^NJw~OF9%}lWc-i2CAs>*HNPEjzg3YMK zV+>sdArkq7V(|Iw4RTuI56QZ`1FFgMZ{qr3#Fs|dl@-Nn`m=DqxRnP2c8*b?;{nTy z;a;E@Bko_mX0K$M3aHogPh=T*8_MtSlpZB}=SuBFa{8_Z`ALoH1easrQ;hpWfj zOl~c()tiIlKRI0@dF+p4hlBF@)Hx(z5=Hjm|0{}YeZRXgzgcb!#WTkIy%_xX=GtL_)i_Bh14UJ>IEq$uU+S!SSuC9N zti!saOo0JWKnIrr)^%(JFH-ZYeY$QSG4tGo zqo)ZcWZ9nRk6k-yQqE+*v$fY z$_tJs)cEh?NU#qMh+Gw{cRaq*%{Xlf54BE4$*?z?6zqs1vk-sPSK2)D=?+|Kq(EJR zPKUdQX3Brau0fNef>F%6_(kf#!l#qGFx0g5_TK&@AZD%Ax3 zG_)gY+|2pGo9~XdB$Y8l=}uK!V%o*oy7Ytsi69?VNaDx%*bd?a=Dv)jImT7uk_hM1 z6*J#6H?7n}2a^Bjv^}Mh=mUtbPqI;{4+n`AZj8?{^sv)U&72Q8gnd88p2s#^`5XZL zar2SZ*`lNqQK%Z}dA)@m01WcdS=y-wpr5m?c>lmB2Qs)4(cQ{3e=atF*$J@TD!IGjTc0 ztHAoz&L2@pbzc+Cb9zm;^1cd*!?&<6Hlr2!bRV1y-rqqBd*7$5s&w8EyUtU2vj&rf z)nxCnbbTA7Wu@7mBw9(h(mOj@8lYSbZJ>)y6#bM!?n$boWwmpgO)?pL*Ll{`)DSPf zu2$F+!QD%@@aHTN6kb%8#vyRCc5rTQ5|hhPPtbpum=imsOw?oYJxMMxL~lrH!uhaY zz#5N6fmxJ0=m`(k83#zMUz)K!L^|(Z>_i5JS5vONn}e#~@rgLq0hd=?-NzIlX0Ih; zJ_H62xpL=U@a0Dkyn)p!kwUR&`h%a&8|bFPFB>YRIIImC)BG$W3i8}#fDKAt>97Z{ z0qmt`%waWm*n*PM!r-vzdv zfaGi{wdCZniDOopA5->EdZK=OfVWbMlqYMgHsdm;P@};SH5BetqOJw};5r~`K_i!^ zew02hie+`;ZC*`&l8W3~x)Jt@Iiz(i3mjLC^^)P+ zNX{M!NiTE4b&uX3;hBC$L&aV40AXSHZIp`s*AL&mn@pv!vBYaGuf;9@xoWu9E7}>CqBogowBCT!IFXn5f94aJ|Gk+s z%gI!aA4&Cg#8Bv%dazH~4>@OOY<&ppZ1)A}D^6HRsDh?B?i2Nr%&Yu*wlfioy|CXF z8#GU~Y3IpEPtd26_~ za^1HPV5SwVkVy*(>pk61TaJ-e-BV6x6K$fecR+f3>*KSo|2Z_!V5Tm0ir91_ax|$J zavtEl!uD)(?|)V}wx>!v5H^u_8-BKe>8XugA75)-$@I!zHy=l9p2Q^* zwI4Vod3_%tONIICBe)7%+WoAgyx#LRFo1Hm#9iqNQ=LLhhGV4ga~1F(L*Wv+za(Rd z-c~(&JB3`=>RCB%F%6dHyv-hN(XYqr^W!Llt6sF; zrp^XOhsZ?BS{wBbn*+)9^-BlUnR5E*eAD0wGOV4kl2cmi3l8SxbA|w#GAcGpjgGQL z5=Yb)$5GLIeK?xM*!FJ1_|x)%A;K>-+{ZTDtk{R;Wd7gXu``Zx%Of9UwYDoC(4!40 z$N_!*bLS=vnY`cXez^0nu=m7=xCOb_ov*q{Sm|%0WgUSjYVk@99zR&V#p7!Tw+Bfs zuw54*h)JI)Yo&O1o4?6O%&3wd6+5Z~=IGJfMl6d14|e5v@&^B3EkL|Wtp5CQtEPK` z=;0@=U0n2{eG)-kW%AR-uqk0dGsd}%yTl5<^^j&Xtw*bgm++AhodCP;nUriR?u`el zrBg-eDafmp4`iUpESPt~P=_pzL^?M8lF!K56Oo>=$pvgy4* z^aN%YC8!ZdooxtIvp1%^X#eQC{KZu*y_JkKV)WQs4dz6F9eME2s>O#$U+fWASTp3D z>Tu7!Hjvyzzf=Q{pt)XMQc596aTmyUNRmfW%QlKim3{&v-ZE_);Q?M3*0BX78OrwG z>1JqrkLII*g;#f!vrT?Zf)|Ildox)D+C2M>uFafcRdffmoI6?QT{&Hy61M|8o*miA z1hqkfl-Y{CNaBN2KamAXgOxOPG~LGXiBA5=au-Wfak5E_`E5NK4z(2#z-aK;x5qkK zCI23N{hd&7XR`U3iVuSQKP)^*h3yfg6Y3AfDtRXas%qsvZ0d-M*a~Sdp8y5_cK(v& zF+{-d8a}V7rFac0P+#=lHxwr4+-*%L4o&~L`A5khGi4q>_ykd#l>;ak&fUEZj(My# z@j(|{N*3iy<-%BzKmmU! zXOZ@6@w1-9vwQ#EK^I%*rr;CADq?JbrStEj(|AhBUZ=&6en+nhnSe}`MvI})nTVxd zOI{-I;xyCXcmkFB;)0EO^)0N+Zp834P4cl#9g+%v-RT+mJUHY1q@-eT>E8)bg7)9* z*!H8gGC)#a%Ph#74|5J4GIg|h%brB7cs{e$#EpUdr%duSTImp%%IO}>rECGd*x5CJ zw*;md=$9^+CvZBP$SAunK4ukKU^!;rya}xxRH|==N?1Mp9wLG9wFh$+!=#-2xQf^H zidOk(d=b0HZwW77`@=jyoS5q{Er3(Kfnn!Vs&umq!A`YP8$EQ3Xp3B;=EG}C?% zO>J(DAvH|8s5%XiZ!fOB;clE#B%aEr$f&_5xquEsRo7Wv)hv#&RU z;uL|w12X1AUhOOi=imj6zt@NeC|hu*AX2Hw-er=%CMFj$RSkzeZU4}SzPQ5nR%u~w z0jKV+y5g895hHc`uCbOF(tW&=%!m4;cq5nUQr40O?8hpR087hAk@}9#_C9nD)mwhD z?+HGyHO8sE&1qXY`j0oy7?qljl3buO${T?9D)^iy@*0AS-J=TWhPMJP3tSQqQA^Tm z(=q_Em+6S(d`4O3oOtO7 z3hBP^z4~UC;(0?gBoE#}G6l{DgPfUp*5uOE~---vh6D!kQb{?VDn_ZFo@sS6VHi2A+yf~5> z4jk#V8To+9mu$>HA8Ey$NO~#`3)qlK}hO=#3Bt z{_KAtC3Z5t8eH>!itk@1#56Ejsd*l|Px(bWX84y}i@uXEceegjP?~jU=06EkP4F5k z;;D=@>)oKIZ+RDq#Te!H+@+@Q{pDha0qp75=qE$m0vC!Qw9tcrK;_p2o_g4sA0J6HdMGnOv7CY`l2T_bC zS59(J&nqK=spbb<9ga%U-MP8o#Np?{U28TbAUTE6QxtfUqCZafNxro(mMPKKEMAdJ z7O0yXWHkKA>Z*kFJIMvvJx@N0_4_8S>s8+dF2Nj+lnk8{C3oDwUfmrT@jLFaqIgiX8 zccPpH6Wg?%hr=JJbAQI^Yjyo+sw%2uUEx8z4IU6lyixj`jiH$I56}c{v1cfp`140n z{Z+aLltq<^UR`S@k}??r3NYBQPAQ+*lA*Q?vIaDV%d^+cyaqJg?jMQwTR-l5^ndNg zN<;cCtPsPey=mk&1j?lD~q<;PMla9CW5YwdS2iURL z36Zq43pRbzzQEkn$!vqU?Qc|E%Q>g{@6mE%Sx$}dnqh=brORicmfsk${c&lBz!uvG zt^hG^)w_UZ4EFwa4j728uv+-)bVO$&k2{j zeM2qosz=oy!J3)|f78C>v)4HFX#rnm$Eo^$KZbdgYLwije0sIvMtzD?QS9K?9h99O z&0ppCc*5F_^N?{O_%5vxybpfguyv#uBpW*+dk@_o2PqXiM0r;p_R7AZaJy?C>x2yPc+z1y}Z5$yTT?DRh$ zM`T0iYk6CDi9$5{lKed^_!|^jFLlU7kXnznAzt}$vP>JE!(ij40mgo&i~W?%j;3~v zvBv92YcKs`Q)40stnU`lizl`SnCTNQENr5W4K=(NZEle5KZf}@#%9U6XvjiUC$;rebc_#~u_q zLKo{<@fa+XPYVPrZLke668t6~pU@VrD?>K|p;}RM98+%_y@ta=3I|{n?2nl}X>)hV z=%#a;9d9I(FpduwBDYl9fh5C{N|=dZ3aEtuAKJK?-gUva@{V)?lr>niwDA^*;jo3y zTo>aeQO8XQY!q$`NDtKR8tG11P8@jmnGzRU+ZQBMdd5SX-c?OGfi#VW9Dwd2Z7Syi z3VBNW2D6Gh#uC{Ih^`1V*N6ivSF>+lM%ZlJY(P?PUUSQSSJcc%Bde+70=ZMD)C)%3 zxz__>j9%29ujs+mxw^f3R2>5dtsI*adO92KNimX+(S99u4 zK5tnLe5>=}TYJHBM?ERHlDsFq;Wkufj_sCu?>2*7HF~{sJ>A*M)=7wGEPX)CxyI%s zD(zQT0?z{~$$6NIv}EH?41g%Q21siyXdsTXxFCdA{eRCWzObAeQX z{c(rq2T{KRYOc4aduOONAFYDC(n3!uRiD!_*USfl)308orm&gOdx7!<7VgZ*{2ubY zYS?QPJ>-dbdZuUQLjf-k+I0T@fETZn+gkB}Ol*Ps#pYao#FU(>{>+tHZK(03aInuspe#=U$NS4^HR3vwi2>3Bg;{ z)qVK^LDDAiLwfSjI{njevbQJN?}PKj^M*uFce(+0aokcqsqhn03lVsPe5Bu~sC`ep z0=0skfhMROwlerM2lKW=%Y*3WJQU~+-tjicCSe?wOCghg?()%a{kDQIZ&Fl|D#VFg zDu~#LfoG)eGfTaG@oe1<2eCFL=Py$ zo-(jrA#!&P!7OqiMSnEd+T`gwS$*xE4a6?sJJ+D&~xLh0ti^Yuh{ znb>D9NHRIii(D!p;z}ofWYD8`Z7Mf=+y4&p6-i8%d}&?rB%YI_KHe<*&?rJ{i{dt5 z1z8Z%<5o43NVLyA%F%4(NGn!+Pj8KyRC>)7woSo)uW>l`DuSgD}aDM)7<_ zWsMGPvBNFIaXrk(%;(=NrNinEzt3vPdbQr$Ev!rMq*I5sL0UgDYMxzgTFs2?qXJV? zEa&D0KBc@DGs$8va;v^-S!1C^T23_(VL8U_Zlmxd6vCT(hy@AO@HUX6_M9Qs3sONs zeL<8@)JI6}BRFY!CrjLo+{V1)xtvyLq$jAz2Z`rym!_$vI3xBEG0zuepQx#mXhEYdbu#51mIUV)O4pt|nZ#p@XK^jYq6riHb$a9j|Yv-XvK&3O_; zCMnWDi~Ej^6t}dTbU56IrN{-%$=1)iG&fpFVXdea{I>JD0OF=FO2JbfYo3H*r=j;s zvLFwN@3Xu3xA#9}g?pWQqZdw_#ekO-z>WA&(_%i*RcO~@Q*U5W;M5Wcse+A91l$X@ zkgV7ywje8PyP)+y z|L5sc!zjY@h7M<_Ane*J8Lh?^z;@{-CFHTS_{Cuzhu2#$5}~njy{~Tob$Wpya!{of z>sYH^pWfOb{0uL}B!n9VI63KVQq_ zDQnO_uNC^>VJ<%_Hk$a}sY!~$8^X)MujFjtqJ4+{ZRW$}x>fHT&$0zD_2B)*jaWvi zN4OwuDBf=U^c}=nDfGYv@c_mnvS0R=Ga%w8qPyw!na!e_)0mi{Tt{4SS*^g6rok!^ zt+^BGAy2;Z0q_P)D;aYrVDP2Zo+ zBdPlK%QAly%NbG*y`FkI;<9>XC$Pfx&a^$rVI}sO$^cYr{OFOkA>f@l6Z2(Y*gKg+ zmK_7U<9hB|1^+wjc}DuETIX!rnn$Shz^Gn8cC^mkgj)df zZGW&6)gpEauR(cBd~O&Bu=VS|e3y;}m|DW|vjo|$BjPo4!m#jogSdLelywYlJkhgX zGeIgy@pl2n;&TP_1}KUuUhWJ0kW>3U;LNm zk*BC*Q20vxxbL359vH1lgw?gQRVR5ASKGCuFiA}?nY{X?Ag^Sk{Mntksgos_f_w8q zh{xJ=2T+dYct}6zNcDLnhl)MQS?JrRs^Mhynuf~Q5NrsWp(j~r75tD#{+d3lmHd41 zA7eOWM9~9v4>%p}msmCuhcn%j3J{gFVpIpr7Sp)PytZ#@3*EL@yvXHJYeb~C>U7O? zk6#Ntl7@-dP`vW1e0z+Rg=LDrgtMc{R;dDHkmTK)%4@W!wI7Vflg9%`cWnN(R3+ss z(o+5*O{$Cw-!4qFQ|;Z8(EdSg*O|COg4vSRls<|7x22IhN$h zf@Nnp*y|(zq<=AlNilT#JEA%B@hb;n)&SBCR9TOq>0C~H?GW3ig9B(!g8jIpnd!18 z<=nPD>0-imA!+8;BxMt63te?$e$wpA4%Fj|v#T_pFvPnPppaP;s6YOfTC|0wMFGI- zlV@V9|2&V7$kTv9u-7Q@q<`aW9pK5R2jcmc0;0LID#yR*x9uuj{dk^$2-n5&h2rI$ z=IP={Ridx$Yjs*$xt?)2#}&t>4Ci$=uPHa3`Bw$ST2n5cYnV5Hys}40avg-hXQowl zWvVyJTbe{R6u)vlavQ4)HTdd4qiLBGMnB$G0591#VczHzgSi$r4$}7Kk&?2?jGo|p zz|#o$1vKHy!eQpa``pdA@cV-|*n8YHqv@$_Wrh#$3fC4dR%tL@+!Q(E(oC0_uK>a& zSzg6IYUyfSBX8u6ET~jT?~L`=%wao@GT5?95rwO4OdomilVJ?kc3@-66|~#rdP8R! zj||ba+!~DYd4IzTID6b22~`xxd4%gwM`-)Ven&UMWL;Qr@Gs#^~&q!lIvZ6u$LtwSEz@pVhG?O8_oqm{=mxjsM;~ZID z|=MW!z3bx3<$W+@kADm#1) zels9>&qMWN!TopG$0a5tHn70AjHXW9V6>~VW|RVZnOpT`e>u1v)mpd;qq&~%UNMXx zs1tx^NBsMNJ!3pW57EO~85~7WXW*~IzuL4gY}G2Sk2c&4qvmMbn?^lp?MirhOZJy{ zRDxo&e6Chr>i$QHbFB0Uba!EI9EZDdYyGP;0%R~UMA2wGjmQkaYE=N*Wqz5*)yfYm zh^35<+?$&%xGp-wf1bp}nI% z=3Sp%4|Y5Cg67?WFzHaVtjyEfEWUcCDC;YAW}~s(a7`o4@j4>08EVZ(Xpc{JeyWSJ zuM&?8P!G!zDrxc=M9XZgnR}y(1Ennv6N)qYP9DI4UkjbusZI@UjQ|iGYda@71N-2x zsNdIcMDyO_a$z!Xw=IBMoVZD`AO~P zYOl`O7tW8v>lxt{%;Dau>rYsi0Tn@T(-d8-?s#d^^;~ElwQIDs`eS06+imha+?)8( zGi<|(3ESJ!5Ne%i7TVK>!0LVyx(A=d9yU5-uzyKyY0)W>@+}XM_Opw}OJ$ua3zug+ zKr746>6a2NCQ}{<;GthruO$wdd!`h@!_O&>6oL|HSkK4pmm$(K#@L6+qd>@C_0m0f z2=_q%qc-4IGcWc}iZ4k}VsQceBip#RTiE>NZSQsC=X3(N4R!a>MN_ywD1E!d$qHBR zgsGh^)50DP&HZp|J-i!tu=t_8)LYVvbIoOnlUASk47;@m4(a8vlMbS2ZxFn4b$#9s zu>pQX=It?=-n##2X4eEyTd$40HBi0%J-HO0%fW8*<$b==iw1GbZz7bl>R9b;$bjX9 zmLP}4(MD3m4NqXN4AH$j)GF}N$W!Op$R3-|3$Jp#<=f=t8^JF-6S;Z+seVk1{}^qH z4p|0cBOECY#8C_hhGXW`z(}anQ06!Z)_k`9Q%>mP5*mfhPi&|0fz`ca^Gp$=rQrmh zDc>DL9Y4zRd7^`OfAr$=3eVwOQe1;(?Vs_Ga=I-#>{XVq+h-BZ_kUCtBI37gfNGqC z8eqTvI?0kMe^Jh(jm8^ZJZY}k#utZM6}m}$Kc*BeCG!5RAzn*^v!#HV(Ptf}od>Od ziUH6)7^CE;v^@0Ts(NvKaAA35}ndxp4-NT*Y8)=gg0~)W4}TS?xnKS zxCGHLx0kJ`HUT@Qn$6nom_9N%R(L)9RdapyUNXQj)K^2{tL35yu{Sur`jsI?M}MYd zKBnnOAU^yEs%{m_-Km%0aHQ1Mq=lLWZ*ihSdLJwE)vJ|gO`p?q-B80>YsqDpzP6*x zQX%f7N|$tY9lrRTR#I{^(rRk8^(Mkj6AS{>M1leP?1u5%M83p3{Yeun=DqD@gSw>G z_@&cMLb&8}kXP$qgPjj6s=|{9nlM{?;Y`-n7x~8PU9D-7N)+?mHkOnlTNI0q{*#aD zWcnwGMKYpYWzMC7jr|hRJdRWv?8Q!)wmjlFdx=|pHK~W}DsuYX`PPSp(apfhh029k zdDw0QE~RvKamYx@Zd3Gpl~q!IiA49x5X|I=iILN{qF&3mmG_TJ=)jXtmr0Z0@6>YR-?c zR7%o9ZfgPHuO}bN4FJ!99kd>^j2-C8Uh3s*(fXiChSzHr62PV62Yqjlv*D5+a3bb! zb9*-}Kvn!F)R@A9$oT(RcqBk>BN7zC^J0JT(_71~gZHN$G4d5ybBg)aN4XQX~7Uu$8Y02x0cP4x&D*rq||U@*@P^O1DMQp!ri5zN~!uO;K5K_e3SajrkR~F>n$f z^1|rvpWE0yoDP70n0t4G$m}&Zd=RU89hyP%FP2q_XO-@>C{QpGBF7Lh3YRz4CzhfQ zD@b5cJeC$nCwKf^c zn23w8g9Y9I0#*If8^~U_v(RAb_FvX|KL9<33l_0GwIT|~q_N-n(|rO6#ln4#r7Ax7 z1QMa`#9ZF0S%(%tiuwuinza(OPW`zV_L!MB%A$Yy; z!bmY{X??$hc8^Yo@{8Si@y?G1)Ac}}g>Dib6OOEhVrOh2=g{ofAwK@EF>z64x}`Uk zTB5{%06jq$?~^P|&>3$l1`)9`C2SI;RWl>kNi5WugJOTz!QpT-5WUu4F6O=@@p&=s zxbTF4bs^(w|2J>)vbEFmfmCnf$RfhRvcjcc_dYtmWf+Y_cxcNvG0ZTAavW z)rAdB{kv9V=-&n;8&tfkU%FyPFAILKQI5q5LF>WG33^^1HVx7Y0kJ3eLFpgw-{%wk zbp9%E4U8$t1s+i{zT7RR#PXL1zcwtkc3FgU*#x!DIET|nwBRP?}|1ZwnV z&n2YHoTq%Ys05{K?OQVWla?jQTUX|(KM`*We`_ZvQIF(gz;y2a{j>igXdPEY!e`|I z>bg^GPocK)5sHRxA8`s9eIlN5x|hNun@K;ZQx{EiaeKjW;YYX+6-W4bgOM+>Jo)G! zL5B*iXZ;PC3)E#hXFej|R$q?Q9-Zm)IxQpTI%&M4M7^

fmdgtg_D+n{XW{E?$(g`ZwpQEhJ0l)G91=Br3) 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%0A|(+ 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 XEAb^(!elT|u-iB8UeCY!Fz9~)a-D@z diff --git a/example/assets/imagens/ic_sendM4.png b/example/assets/imagens/ic_sendM4.png deleted file mode 100644 index 1aa7daf666f62ed39a200770660bf659094502e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27331 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 L9aQ-ZyQu#GR^W`8 diff --git a/example/assets/imagens/logo-assepontoweb.png b/example/assets/imagens/logo-assepontoweb.png deleted file mode 100644 index 8e5516df63f92271552f6cedca8c99ac44b3e5c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16343 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 TwLRf$FT0=(7urLei4A!>SS02KfLVmKmZx2 z6-}gpZJduRj$0>`(r~g2IW)5|^0cEi{R?Ym7{3Hg#Lee@1r$md1ruJ~X^A4Hg<=_p zwk|rX7$jIY=7`j=3VFQ@iB;xUdTx;S6(1~FPAc9%C3Wx4d5I*97XITw>#_isFa76d zOTz0aZ>2hwqCXE_kI)8YlZ3t?!$w$@kIL!ely%NCF`o0HkdcwnCUz7!5{RY zJX@IawmX~fadUlmF^K;T{zIs--x(Mpkv1rkKa+6|T-=`|IqS$&mpL4H3VPw~C5y`f z5IwCs>jOfD_iU4k36GgZT)#d2K^1I!m+7Q=0JJjegR>Sc$1{EnXk5XZAuv z)Y?@V9BDkMwki4Yw+<~EMub)0h8uo9CNchKYC)`-A;+&!uc&QJBcoN6*c|-cTvzvo zaOYj>;1|gcNhobYsC4K?Mx(5Yvt_#E!k4tJ^H#4kE{f*`ym6&O=oXiKV-k}=PQ1C& zH36u)%v{6y8C9RFrFX;H?fP@Q^6)R&nz-37sJO20m!EX)>zr*Fb&6ufSgo2nyjIA$T$XM&y;?t>+5uu!iufLtvA-_7=h)u)gUgVeX ze{iEfs3|NlJhP;uQDx!H&Dz~3pS$mxpLqezx{B^r?npAm-MTQbrCYC?#hmeN;M_`F zFh#lJPz|q>%mXr66<1Z1re^a|1zMHCgUtDcf1=osSfC}5qf3^X&y6=%c`vjiI#0Vl zRYh%`A^A510t+S>!`3&xy_i04>o}4R836S|sSYB$Lbl$jD$~PzPFgcd`s`El!I2enITSx z!=t-uVis#|?mlLPGsiDIs6T1)yCYB_nX}wBVW#fO6uJ7D)DrgHctn;l^+S5dzg-fl z*I2ou`}FqLN1?n2e#?gd?7IMHLNC4Zg27MO-rQd2Hg;0j-?FDE7<9MUK5mHNxTX)_ zGdf1m?rIcHp|D|zt&4jR6fTZE zj^(8c#sUr$d|dFa12)d*@ZZq~B#C#kKcAS=)oq}N(uP0S-v{xJ&Yy@>Hh#NgqWoO diff --git a/example/assets/imagens/pending.png b/example/assets/imagens/pending.png deleted file mode 100644 index 41b1f5bd00c5eff5d3af2cdec0e5841955a5280e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11996 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 Y81poj5 diff --git a/example/assets/imagens/sms.png b/example/assets/imagens/sms.png deleted file mode 100644 index 1bf1cc32d1f056354113847bf7fa4d3c49e03573..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34739 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 HN6z|RHF~S! diff --git a/example/assets/imagens/visualizado.png b/example/assets/imagens/visualizado.png deleted file mode 100644 index c562be18d704009db6b1a0951fb59fc7ec3d1d1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37439 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 E5A<39p#T5? diff --git a/example/ios/.gitignore b/example/ios/.gitignore deleted file mode 100644 index 7a7f987..0000000 --- a/example/ios/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -**/dgph -*.mode1v3 -*.mode2v3 -*.moved-aside -*.pbxuser -*.perspectivev3 -**/*sync/ -.sconsign.dblite -.tags* -**/.vagrant/ -**/DerivedData/ -Icon? -**/Pods/ -**/.symlinks/ -profile -xcuserdata -**/.generated/ -Flutter/App.framework -Flutter/Flutter.framework -Flutter/Flutter.podspec -Flutter/Generated.xcconfig -Flutter/ephemeral/ -Flutter/app.flx -Flutter/app.zip -Flutter/flutter_assets/ -Flutter/flutter_export_environment.sh -ServiceDefinitions.json -Runner/GeneratedPluginRegistrant.* - -# Exceptions to above rules. -!default.mode1v3 -!default.mode2v3 -!default.pbxuser -!default.perspectivev3 diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist deleted file mode 100644 index 8d4492f..0000000 --- a/example/ios/Flutter/AppFrameworkInfo.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - App - CFBundleIdentifier - io.flutter.flutter.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - App - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - MinimumOSVersion - 9.0 - - diff --git a/example/ios/Flutter/Debug.xcconfig b/example/ios/Flutter/Debug.xcconfig deleted file mode 100644 index 592ceee..0000000 --- a/example/ios/Flutter/Debug.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/example/ios/Flutter/Generated.xcconfig b/example/ios/Flutter/Generated.xcconfig deleted file mode 100644 index 7960212..0000000 --- a/example/ios/Flutter/Generated.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -// This is a generated file; do not edit or check into version control. -FLUTTER_ROOT=C:\sdk\flutter -FLUTTER_APPLICATION_PATH=C:\Users\User\AndroidStudioProjects\LibraryAppFlutter\example -COCOAPODS_PARALLEL_CODE_SIGN=true -FLUTTER_TARGET=lib\main.dart -FLUTTER_BUILD_DIR=build -FLUTTER_BUILD_NAME=3.1.2 -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/example/ios/Flutter/Release.xcconfig b/example/ios/Flutter/Release.xcconfig deleted file mode 100644 index 592ceee..0000000 --- a/example/ios/Flutter/Release.xcconfig +++ /dev/null @@ -1 +0,0 @@ -#include "Generated.xcconfig" diff --git a/example/ios/Flutter/flutter_export_environment.sh b/example/ios/Flutter/flutter_export_environment.sh deleted file mode 100644 index 876d648..0000000 --- a/example/ios/Flutter/flutter_export_environment.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -# This is a generated file; do not edit or check into version control. -export "FLUTTER_ROOT=C:\sdk\flutter" -export "FLUTTER_APPLICATION_PATH=C:\Users\User\AndroidStudioProjects\LibraryAppFlutter\example" -export "COCOAPODS_PARALLEL_CODE_SIGN=true" -export "FLUTTER_TARGET=lib\main.dart" -export "FLUTTER_BUILD_DIR=build" -export "FLUTTER_BUILD_NAME=3.1.2" -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/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index 7f889de..0000000 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,481 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 9705A1C41CF9048500538489 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; - 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; - 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 97C146EB1CF9000F007C117D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 9740EEB11CF90186004384FC /* Flutter */ = { - isa = PBXGroup; - children = ( - 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 9740EEB31CF90195004384FC /* Generated.xcconfig */, - ); - name = Flutter; - sourceTree = ""; - }; - 97C146E51CF9000F007C117D = { - isa = PBXGroup; - children = ( - 9740EEB11CF90186004384FC /* Flutter */, - 97C146F01CF9000F007C117D /* Runner */, - 97C146EF1CF9000F007C117D /* Products */, - ); - sourceTree = ""; - }; - 97C146EF1CF9000F007C117D /* Products */ = { - isa = PBXGroup; - children = ( - 97C146EE1CF9000F007C117D /* Runner.app */, - ); - name = Products; - sourceTree = ""; - }; - 97C146F01CF9000F007C117D /* Runner */ = { - isa = PBXGroup; - children = ( - 97C146FA1CF9000F007C117D /* Main.storyboard */, - 97C146FD1CF9000F007C117D /* Assets.xcassets */, - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, - 97C147021CF9000F007C117D /* Info.plist */, - 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, - 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, - 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, - ); - path = Runner; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 97C146ED1CF9000F007C117D /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 9740EEB61CF901F6004384FC /* Run Script */, - 97C146EA1CF9000F007C117D /* Sources */, - 97C146EB1CF9000F007C117D /* Frameworks */, - 97C146EC1CF9000F007C117D /* Resources */, - 9705A1C41CF9048500538489 /* Embed Frameworks */, - 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Runner; - productName = Runner; - productReference = 97C146EE1CF9000F007C117D /* Runner.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 97C146E61CF9000F007C117D /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1300; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 97C146ED1CF9000F007C117D = { - CreatedOnToolsVersion = 7.3.1; - LastSwiftMigration = 1100; - }; - }; - }; - buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 97C146E51CF9000F007C117D; - productRefGroup = 97C146EF1CF9000F007C117D /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 97C146ED1CF9000F007C117D /* Runner */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 97C146EC1CF9000F007C117D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, - 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Thin Binary"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 97C146EA1CF9000F007C117D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, - 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 97C146FA1CF9000F007C117D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C146FB1CF9000F007C117D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 97C147001CF9000F007C117D /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 249021D3217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Profile; - }; - 249021D4217E4FDB00AE95B9 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.assecont.servicos.assecontservicesExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Profile; - }; - 97C147031CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 97C147041CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SUPPORTED_PLATFORMS = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97C147061CF9000F007C117D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.assecont.servicos.assecontservicesExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 97C147071CF9000F007C117D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.assecont.servicos.assecontservicesExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147031CF9000F007C117D /* Debug */, - 97C147041CF9000F007C117D /* Release */, - 249021D3217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97C147061CF9000F007C117D /* Debug */, - 97C147071CF9000F007C117D /* Release */, - 249021D4217E4FDB00AE95B9 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 97C146E61CF9000F007C117D /* Project object */; -} diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a..0000000 --- a/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c..0000000 --- a/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index c87d15a..0000000 --- a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/example/ios/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1d526a1..0000000 --- a/example/ios/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c..0000000 --- a/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/example/ios/Runner/AppDelegate.swift b/example/ios/Runner/AppDelegate.swift deleted file mode 100644 index 70693e4..0000000 --- a/example/ios/Runner/AppDelegate.swift +++ /dev/null @@ -1,13 +0,0 @@ -import UIKit -import Flutter - -@UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } -} diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index d36b1fa..0000000 --- a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index dc9ada4725e9b0ddb1deab583e5b5102493aa332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10932 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 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png deleted file mode 100644 index f091b6b0bca859a3f474b03065bef75ba58a9e4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png deleted file mode 100644 index d0ef06e7edb86cdfe0d15b4b0d98334a86163658..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1716 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 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index c8f9ed8f5cee1c98386d13b17e89f719e83555b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index a6d6b8609df07bf62e5100a53a01510388bd2b22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png deleted file mode 100644 index a6d6b8609df07bf62e5100a53a01510388bd2b22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png deleted file mode 100644 index 75b2d164a5a98e212cca15ea7bf2ab5de5108680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3831 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 diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png deleted file mode 100644 index c4df70d39da7941ef3f6dcb7f06a192d8dcb308d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png deleted file mode 100644 index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md deleted file mode 100644 index 89c2725..0000000 --- a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Launch Screen Assets - -You can customize the launch screen with your own desired assets by replacing the image files in this directory. - -You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/example/ios/Runner/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index f2e259c..0000000 --- a/example/ios/Runner/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/ios/Runner/Base.lproj/Main.storyboard b/example/ios/Runner/Base.lproj/Main.storyboard deleted file mode 100644 index f3c2851..0000000 --- a/example/ios/Runner/Base.lproj/Main.storyboard +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/ios/Runner/GeneratedPluginRegistrant.h b/example/ios/Runner/GeneratedPluginRegistrant.h deleted file mode 100644 index 7a89092..0000000 --- a/example/ios/Runner/GeneratedPluginRegistrant.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// 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/example/ios/Runner/GeneratedPluginRegistrant.m b/example/ios/Runner/GeneratedPluginRegistrant.m deleted file mode 100644 index fd3dd96..0000000 --- a/example/ios/Runner/GeneratedPluginRegistrant.m +++ /dev/null @@ -1,140 +0,0 @@ -// -// Generated file. Do not edit. -// - -// clang-format off - -#import "GeneratedPluginRegistrant.h" - -#if __has_include() -#import -#else -@import assecontservices; -#endif - -#if __has_include() -#import -#else -@import connectivity_plus; -#endif - -#if __has_include() -#import -#else -@import flutter_html_to_pdf; -#endif - -#if __has_include() -#import -#else -@import geocoding_ios; -#endif - -#if __has_include() -#import -#else -@import google_maps_flutter_ios; -#endif - -#if __has_include() -#import -#else -@import image_picker_ios; -#endif - -#if __has_include() -#import -#else -@import in_app_review; -#endif - -#if __has_include() -#import -#else -@import launch_review; -#endif - -#if __has_include() -#import -#else -@import local_auth_ios; -#endif - -#if __has_include() -#import -#else -@import location; -#endif - -#if __has_include() -#import -#else -@import package_info_plus; -#endif - -#if __has_include() -#import -#else -@import path_provider_foundation; -#endif - -#if __has_include() -#import -#else -@import safe_device; -#endif - -#if __has_include() -#import -#else -@import share_extend; -#endif - -#if __has_include() -#import -#else -@import shared_preferences_foundation; -#endif - -#if __has_include() -#import -#else -@import sqflite; -#endif - -#if __has_include() -#import -#else -@import syncfusion_flutter_pdfviewer; -#endif - -#if __has_include() -#import -#else -@import url_launcher_ios; -#endif - -@implementation GeneratedPluginRegistrant - -+ (void)registerWithRegistry:(NSObject*)registry { - [AssecontservicesPlugin registerWithRegistrar:[registry registrarForPlugin:@"AssecontservicesPlugin"]]; - [ConnectivityPlusPlugin registerWithRegistrar:[registry registrarForPlugin:@"ConnectivityPlusPlugin"]]; - [FlutterHtmlToPdfPlugin registerWithRegistrar:[registry registrarForPlugin:@"FlutterHtmlToPdfPlugin"]]; - [GeocodingPlugin registerWithRegistrar:[registry registrarForPlugin:@"GeocodingPlugin"]]; - [FLTGoogleMapsPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTGoogleMapsPlugin"]]; - [FLTImagePickerPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTImagePickerPlugin"]]; - [InAppReviewPlugin registerWithRegistrar:[registry registrarForPlugin:@"InAppReviewPlugin"]]; - [LaunchReviewPlugin registerWithRegistrar:[registry registrarForPlugin:@"LaunchReviewPlugin"]]; - [FLTLocalAuthPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTLocalAuthPlugin"]]; - [LocationPlugin registerWithRegistrar:[registry registrarForPlugin:@"LocationPlugin"]]; - [FPPPackageInfoPlusPlugin registerWithRegistrar:[registry registrarForPlugin:@"FPPPackageInfoPlusPlugin"]]; - [PathProviderPlugin registerWithRegistrar:[registry registrarForPlugin:@"PathProviderPlugin"]]; - [SafeDevicePlugin registerWithRegistrar:[registry registrarForPlugin:@"SafeDevicePlugin"]]; - [ShareExtendPlugin registerWithRegistrar:[registry registrarForPlugin:@"ShareExtendPlugin"]]; - [SharedPreferencesPlugin registerWithRegistrar:[registry registrarForPlugin:@"SharedPreferencesPlugin"]]; - [SqflitePlugin registerWithRegistrar:[registry registrarForPlugin:@"SqflitePlugin"]]; - [SyncfusionFlutterPdfViewerPlugin registerWithRegistrar:[registry registrarForPlugin:@"SyncfusionFlutterPdfViewerPlugin"]]; - [FLTURLLauncherPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTURLLauncherPlugin"]]; -} - -@end diff --git a/example/ios/Runner/Info.plist b/example/ios/Runner/Info.plist deleted file mode 100644 index 88b35e2..0000000 --- a/example/ios/Runner/Info.plist +++ /dev/null @@ -1,47 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Assecontservices - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - assecontservices_example - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleSignature - ???? - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/example/ios/Runner/Runner-Bridging-Header.h b/example/ios/Runner/Runner-Bridging-Header.h deleted file mode 100644 index 308a2a5..0000000 --- a/example/ios/Runner/Runner-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -#import "GeneratedPluginRegistrant.h" diff --git a/example/lib/controller/gethora.dart b/example/lib/controller/gethora.dart deleted file mode 100644 index 3013177..0000000 --- a/example/lib/controller/gethora.dart +++ /dev/null @@ -1,22 +0,0 @@ - -import 'dart:async'; - -import 'package:flutter/cupertino.dart'; -import 'package:intl/intl.dart'; - -class GetHora extends ChangeNotifier { - GetHora(){ - atualizarhora(); - } - static Timer? timer; - String get horarioAtual => "${DateFormat('HH:mm').format(DateTime.now())}"; - - atualizarhora() { - timer = Timer.periodic( - Duration(seconds: 1), (Timer timer) { - horarioAtual; - notifyListeners(); - } - ); - } -} \ No newline at end of file diff --git a/example/lib/controller/gps.dart b/example/lib/controller/gps.dart deleted file mode 100644 index d3a76eb..0000000 --- a/example/lib/controller/gps.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:google_maps_flutter/google_maps_flutter.dart'; -import 'package:location/location.dart'; -import 'package:assecontservices/assecontservices.dart'; - - - -class Gps extends ChangeNotifier { - Location location = Location(); - LocationData? locationData; - - CameraPosition _cam = const CameraPosition(target: LatLng(-23.5505199, -46.6333094), zoom: 18); - CameraPosition get cam => _cam; - set cam(CameraPosition c){ - _cam = c; - notifyListeners(); - } - - Future get serviceEnabled async { - return await location.serviceEnabled(); - } - - Future get isMockLocation async { - return await SafeDevice.canMockLocation;; - } - - localizacao() async { - PermissionStatus _permissionGranted; - try{ - _permissionGranted = await location.hasPermission(); - if (_permissionGranted == PermissionStatus.denied) { - _permissionGranted = await location.requestPermission(); - } - - bool _serviceEnabled = await location.serviceEnabled(); - if (!_serviceEnabled) { - _serviceEnabled = await location.requestService(); - } - - if ((_permissionGranted == PermissionStatus.granted || - _permissionGranted == PermissionStatus.grantedLimited ) && _serviceEnabled) { - //if(!Config.isIOS) TrustLocation.start(5) ; - //location.changeConfig(accuracy: LocationAccuracy.balanced); - getLocalizacao(); - }else{ - //locationData = null; - } - }catch (e){ - debugPrint(e.toString()); - //locationData = null; - //erro(); - } - } - - getLocalizacao() async { - try{ - locationData = await location.getLocation(); - cam = CameraPosition( - target: LatLng(locationData!.latitude!, locationData!.longitude!), - zoom: 18 - ); - }catch(e){ - debugPrint(e.toString()); - } - } - -} \ No newline at end of file diff --git a/example/lib/controller/home_controller.dart b/example/lib/controller/home_controller.dart deleted file mode 100644 index b2adddd..0000000 --- a/example/lib/controller/home_controller.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -class HomeController extends ChangeNotifier { - static PageController pageController = PageController(); - int page = 0; - int? filtro; - - void setPage(int value) { - page = value; - pageController.jumpToPage(value); - notifyListeners(); - } -} diff --git a/example/lib/controller/tutor_controller.dart b/example/lib/controller/tutor_controller.dart deleted file mode 100644 index 514fa58..0000000 --- a/example/lib/controller/tutor_controller.dart +++ /dev/null @@ -1,324 +0,0 @@ - - -import 'package:assecontservices/assecontservices.dart'; -import 'package:flutter/material.dart'; - -class TutorController { - List itens = []; - - final GlobalKey> keyMenu = GlobalKey(); - final GlobalKey keyMenu1 = GlobalKey(); - final GlobalKey keyMenu2 = GlobalKey(); - final GlobalKey keyMenu3 = GlobalKey(); - final GlobalKey keyMenu4 = GlobalKey(); - final GlobalKey keyMenu5 = GlobalKey(); - final GlobalKey keyResumo = GlobalKey(); - final GlobalKey keyListMenu = GlobalKey(); - final GlobalKey keyRegistro = GlobalKey(); - - init(BuildContext context){ - itens.addAll({ - TutorialItens( - globalKey: keyMenu1, - touchScreen: true, - top: WidgetsBinding.instance.window.padding.top, - left: 10, - right: 180, - children: [ - Container( - color: Colors.black54, - child: CustomText.text( - "Nesse menu é possível alterar o período para consultas.", - style: const TextStyle(color: Colors.white, fontSize: 18), - textAlign: TextAlign.center, - softWrap: true, - ), - ), - const SizedBox( - height: 50, - ) - ], - widgetNext: Container( - padding: const EdgeInsets.all(5), - color: Colors.black12, - child: CustomText.text( - "Continuar", - style: const TextStyle( - color: Config.corPri, - fontWeight: FontWeight.bold, - ), - ), - ), - shapeFocus: ShapeFocus.square), - TutorialItens( - globalKey: keyMenu2, - touchScreen: true, - top: 30 + (WidgetsBinding.instance.window.padding.top), - left: 10, - right: 180, - children: [ - Container( - color: Colors.black54, - child: CustomText.text( - "Nesse menu é possível alterar a senha do usuário.", - style: const TextStyle(color: Colors.white, fontSize: 18), - textAlign: TextAlign.center, - softWrap: true, - ), - ), - const SizedBox( - height: 50, - ) - ], - widgetNext: Container( - padding: const EdgeInsets.all(5), - color: Colors.black12, - child: CustomText.text( - "Continuar", - style: const TextStyle( - color: Config.corPri, - fontWeight: FontWeight.bold, - ), - softWrap: true, - ), - ), - shapeFocus: ShapeFocus.square), - TutorialItens( - globalKey: keyMenu3, - touchScreen: true, - top: 60 + (WidgetsBinding.instance.window.padding.top), - left: 10, - right: 180, - children: [ - Container( - color: Colors.black54, - child: CustomText.text( - "Nesse menu é possível verificar versão do app, alterar modo escuro e autenticação.", - style: const TextStyle(color: Colors.white, fontSize: 18), - textAlign: TextAlign.center, - softWrap: true, - ), - ), - const SizedBox( - height: 50, - ) - ], - widgetNext: Container( - padding: const EdgeInsets.all(5), - color: Colors.black12, - child: CustomText.text( - "Continuar", - style: const TextStyle( - color: Config.corPri, - fontWeight: FontWeight.bold, - ), - ), - ), - shapeFocus: ShapeFocus.square), - if (!Config.isWin) - TutorialItens( - globalKey: keyMenu4, - touchScreen: true, - top: 120 + (WidgetsBinding.instance.window.padding.top), - left: 10, - right: 180, - children: [ - Container( - color: Colors.black54, - child: CustomText.text( - "Nesse menu é possível avaliar o app na loja.", - softWrap: true, - style: const TextStyle(color: Colors.white, fontSize: 18), - textAlign: TextAlign.center, - ), - ), - const SizedBox( - height: 50, - ) - ], - widgetNext: Container( - padding: const EdgeInsets.all(5), - color: Colors.black12, - child: CustomText.text( - "Continuar", - style: const TextStyle( - color: Config.corPri, - fontWeight: FontWeight.bold, - ), - ), - ), - shapeFocus: ShapeFocus.square), - TutorialItens( - globalKey: keyMenu5, - touchScreen: true, - top: 160 + (WidgetsBinding.instance.window.padding.top), - left: 10, - right: 180, - children: [ - Container( - color: Colors.black54, - child: CustomText.text( - "Nesse menu é possível deslogar do usuário atual.", - softWrap: true, - style: const TextStyle(color: Colors.white, fontSize: 18), - textAlign: TextAlign.center, - ), - ), - const SizedBox( - height: 50, - ) - ], - widgetNext: Container( - padding: const EdgeInsets.all(5), - color: Colors.black12, - child: CustomText.text( - "Continuar", - style: const TextStyle( - color: Config.corPri, - fontWeight: FontWeight.bold, - ), - ), - ), - shapeFocus: ShapeFocus.square), - TutorialItens( - globalKey: keyListMenu, - touchScreen: true, - bottom: 100, - right: 0, - left: 0, - children: [ - Container( - color: Colors.black54, - padding: const EdgeInsets.only(top: 20, bottom: 20, left: 20), - child: Center( - child: CustomText.text( - "Lista de menu deslizável na horizontal.", - softWrap: true, - style: const TextStyle(color: Colors.white, fontSize: 18), - textAlign: TextAlign.center, - ), - ), - ), - const SizedBox( - height: 50, - ) - ], - widgetNext: Container( - padding: const EdgeInsets.all(5), - //margin: EdgeInsets.only(right: 30), - color: Colors.black12, - child: CustomText.text( - "Continuar", - style: const TextStyle( - color: Config.corPri, - fontWeight: FontWeight.bold, - ), - ), - ), - shapeFocus: ShapeFocus.square, - ), - TutorialItens( - globalKey: keyResumo, - touchScreen: true, - top: 300, - right: 0, - left: 0, - children: [ - Container( - color: Colors.black54, - padding: const EdgeInsets.only( - top: 20, - bottom: 20, - ), - child: Center( - child: CustomText.text( - "Resumo dos resultados do período.", - softWrap: true, - style: const TextStyle(color: Colors.white, fontSize: 18), - textAlign: TextAlign.center, - ), - ), - ), - const SizedBox( - height: 30, - ) - ], - widgetNext: Container( - padding: - const EdgeInsets.all(5), //margin: EdgeInsets.only(right: 30), - color: Colors.black12, - child: CustomText.text( - "Continuar", - style: const TextStyle( - color: Config.corPri, - fontWeight: FontWeight.bold, - ), - ), - ), - shapeFocus: ShapeFocus.square, - ), - TutorialItens( - globalKey: keyRegistro, - touchScreen: true, - bottom: 220, - right: 20, - left: 20, - children: [ - Container( - color: Colors.black54, - padding: const EdgeInsets.only(top: 20, bottom: 20, right: 50), - child: Center( - child: CustomText.text( - "Clicando em Registrar é possível realizar a marcação de ponto.", - style: const TextStyle(color: Colors.white, fontSize: 18), - textAlign: TextAlign.center, - ), - ), - ), - const SizedBox( - height: 20, - ) - ], - widgetNext: Container( - padding: - const EdgeInsets.all(5), //margin: EdgeInsets.only(right: 30), - color: Colors.black12, - child: CustomText.text( - "Sair", - style: const TextStyle( - color: Config.corPri, - fontWeight: FontWeight.bold, - ), - ), - ), - shapeFocus: ShapeFocus.oval, - ), - }); - - keyStatus(context); - } - - void keyStatus(BuildContext context) async { - Future.delayed(const Duration(microseconds: 200)).then((value) async { - keyMenu.currentState?.showButtonMenu(); - Future.delayed(const Duration(seconds: 1)).then((value) async { - Tutorial.showTutorial(context, itens, (v) { - if (v == (Config.isWin ? 3 : 4) && - (keyMenu.currentState?.mounted ?? false)) { - //keyMenu.currentState!.showButtonMenu(); - Navigator.pop( - keyMenu.currentState!.context, - ); - } else if (v == (Config.isWin ? 5 : 6)) { - Config().priacesso(); - } else if (v == (Config.isWin ? 6 : 7)) { - BiometriaAlert(context); - itens.clear(); - } - }); - }); - }); - } - - -} \ No newline at end of file diff --git a/example/lib/main.dart b/example/lib/main.dart deleted file mode 100644 index 36aec18..0000000 --- a/example/lib/main.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:assecontservices/assecontservices.dart'; - - -import '../route_generator.dart'; -import 'controller/gps.dart'; -import 'controller/home_controller.dart'; -import 'controller/tutor_controller.dart'; - - -void main() { - WidgetsFlutterBinding.ensureInitialized(); - - Assecontservices.init( - config: ConfiguracoesModel( - apiAsseweb: 'https://www.asseweb.com.br/ApiAsseweb', - apiHolerite: 'https://www.asseweb.com.br/AssecontAPI', - apiHoleriteEmail: 'https://www.asseweb.com.br/HoleriteApi', - apiAsseponto: 'https://www.asseponto.com.br/asseponto.api.v5', - apiEspelho: 'https://www.asseponto.com.br/ApiEspelho', - apiAssepontoNova: 'https://www.asseponto.com.br/ApiAsseponto', - androidAppId: 'com.assecont.AssepontoMobile', - iosAppId: 'com.assecont.assepontoweb', - iosAppIdNum: '1490469231', - nomeApp: VersaoApp.PontoApp - ), - titulo: 'Asseponto App', - rotas: RouteGenerator.generateRoute, - providers: [ - - ChangeNotifierProvider( - create: (_)=> Gps(), - ), - ChangeNotifierProvider( - create: (_)=> HomeController(), - ), - Provider( - create: (_)=> TutorController(), - ), - ] - ); -} \ No newline at end of file diff --git a/example/lib/route_generator.dart b/example/lib/route_generator.dart deleted file mode 100644 index cb971d9..0000000 --- a/example/lib/route_generator.dart +++ /dev/null @@ -1,88 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; - -import 'package:assecontservices/assecontservices.dart'; - -import '../ui/espelho/espelho_screen.dart'; -import '../ui/home/home.dart'; -import '../ui/login/start_screen.dart'; -import '../ui/registro/screen_registro.dart'; -import '../ui/banco_horas/banco_screen.dart'; -import '../ui/marcacoes/Marcacoes.dart'; -import '../ui/solicitacoes/solicitacoes_screen.dart'; -import 'ui/comprovantes/comprovantes_screen.dart'; - - -class RouteGenerator { - static Route generateRoute(RouteSettings settings){ - - switch (settings.name) { - case '/': - return MaterialPageRoute( - builder: (_) => IntroScreen() - ); - case '/login': - if(UserPontoManager.susuario != null){ - return MaterialPageRoute( - builder: (_) => Home() - ); - } - return MaterialPageRoute( - builder: (_) => StartScreen() - ); - case '/holerites': - return MaterialPageRoute( - builder: (_) => HoleriteScreen() - ); - case '/espelho': - return MaterialPageRoute( - builder: (_) => EspelhoScreen() - ); - case '/registro': - return MaterialPageRoute( - builder: (_) => RegistroScreen() - ); - case '/comprovantes': - return MaterialPageRoute( - builder: (_) => ComprovantesScreen() - ); - case '/home': - return MaterialPageRoute( - builder: (_) => Home() - ); - case '/banco': - return MaterialPageRoute( - builder: (_) => BancoHorasScreen() - ); - case '/marcacoes': - return MaterialPageRoute( - builder: (_) => MarcacoesPage(filtro: settings.arguments as int?,) - ); - case '/solicitacoes': - return MaterialPageRoute( - builder: (_) => Solicitacoes() - ); - case '/configuracoes': - return MaterialPageRoute( - builder: (_) => ConfigScreen() - ); - default: - return _erroRota(); - } - - } - - static Route _erroRota(){ - return MaterialPageRoute( - builder: (_){ - return Scaffold( - appBar: AppBar(title: CustomText.text("Tela não encontrada!"),), - body: Center( - child: CustomText.text("Tela não encontrada!"), - ), - ); - } - ); - } - -} \ No newline at end of file diff --git a/example/lib/ui/banco_horas/banco_screen.dart b/example/lib/ui/banco_horas/banco_screen.dart deleted file mode 100644 index fb12661..0000000 --- a/example/lib/ui/banco_horas/banco_screen.dart +++ /dev/null @@ -1,101 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; - -import 'package:assecontservices/assecontservices.dart'; - -import 'detalhes_banco.dart'; - -class BancoHorasScreen extends StatefulWidget { - @override - _BancoHorasScreenState createState() => _BancoHorasScreenState(); -} - -class _BancoHorasScreenState extends State { - ConnectionStatusSingleton connectionStatus = ConnectionStatusSingleton.getInstance(); - - final GlobalKey _scaffoldKey = GlobalKey(); - final CalendarWeekController _controller = CalendarWeekController(); - - @override - void initState() { - context.read().getFuncionarioHistorico(); - super.initState(); - } - - - - - @override - Widget build(BuildContext context) { - return Consumer( - builder: (_, banco, __){ - - - String? saldoAnteror() { - String? _saldo; - try{ - if(banco.listabanco.any((element) => - element.data != null ? banco.data.compareTo( - DateTime(element.data!.year, element.data!.month, element.data!.day)) > 0 : false - )) { - _saldo = banco.listabanco.lastWhere((element) => - element.data != null ? banco.data.compareTo( - DateTime(element.data!.year, element.data!.month, - element.data!.day)) > 0 : false - ).saldo; - } - }catch (e){ - _saldo = null; - } - - return _saldo; - } - - return CustomScaffold.calendario( - key: _scaffoldKey, - context: context, - appTitle:'Banco de Horas', - funcData: (DateTime datetime) { - banco.data = datetime; - }, - listdecoration: banco.listdecoration, - controller: _controller, - dataInit: banco.data, - dataMin: context.read().usuario?.periodo?.dataInicial, - dataMax: context.read().usuario?.periodo?.dataFinal, - body: Center( - child: !connectionStatus.hasConnection ? CustomText.text('Verifique sua Conexão com Internet') : - FutureBuilder( - future: banco.getBancodia(), - builder: (context, snapshot){ - Widget resultado = Container(); - String? _saldo = saldoAnteror(); - switch( snapshot.connectionState ){ - case ConnectionState.none : - case ConnectionState.waiting : - resultado = const Center(child: CircularProgressIndicator()); - break; - case ConnectionState.active : - case ConnectionState.done : - if( snapshot.hasError ){ - resultado = GestureDetector( - child: Icon(Icons.autorenew_outlined, - color: Config.corPri, size: 70,), - onTap: (){ - setState(() {}); - } - ); - }else { - resultado = DetalhesBanco(snapshot.data, banco.data, _saldo); - } - break; - } - return resultado; - }, - ) - ), - ); - } - ); - } -} \ No newline at end of file diff --git a/example/lib/ui/banco_horas/detalhes_banco.dart b/example/lib/ui/banco_horas/detalhes_banco.dart deleted file mode 100644 index 4a81602..0000000 --- a/example/lib/ui/banco_horas/detalhes_banco.dart +++ /dev/null @@ -1,139 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; - -import 'package:assecontservices/assecontservices.dart'; - -import '../solicitacoes/lancar_solicitacao.dart'; -import '../solicitacoes/solicitacoes_screen.dart'; - -class DetalhesBanco extends StatefulWidget { - BancoDiasList? bancoHoras; - DateTime? dia; - String? saldo; - DetalhesBanco(this.bancoHoras, this.dia, this.saldo); - - @override - _DetalhesMarcacaoState createState() => _DetalhesMarcacaoState(); -} - -class _DetalhesMarcacaoState extends State { - final ScrollController scrollController = ScrollController(); - bool diaMaiorHoje = false; - - @override - void initState() { - if(widget.dia != null) { - diaMaiorHoje = widget.dia!.compareTo(DateTime.now()) > 0; - } - super.initState(); - } - - Widget card(String menu, String valor){ - return Container( - padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 35), - child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - CustomText.text(menu,style: const TextStyle(fontSize: 20),), - CustomText.text(valor.trim(),style: const TextStyle(fontSize: 20),), - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - List list = context.watch().memorandoDia(widget.dia); - - - - return Scaffold( - body: Container( - decoration: BoxDecoration( - border: Border( - bottom: BorderSide(width: 80, - color: Theme.of(context).scaffoldBackgroundColor)) - ), - //height: MediaQuery.of(context).size.height, - child: SingleChildScrollView( - controller: scrollController, - child: Column(crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const SizedBox(height: 15,), - Padding( - padding: EdgeInsets.symmetric(horizontal: 30), - child: CustomText.text('Resumo'), - ), - const SizedBox(height: 5,), - card("Creditos:", widget.bancoHoras?.credito == null || widget.bancoHoras?.credito == '' || diaMaiorHoje - ? "0:00" : widget.bancoHoras!.credito! ), - if(!diaMaiorHoje && widget.bancoHoras?.descricaoCredito != null && widget.bancoHoras?.descricaoCredito != '') - Container( - padding: const EdgeInsets.symmetric(horizontal: 35), - child: CustomText.text(widget.bancoHoras?.descricaoCredito ?? "", - style: const TextStyle(fontSize: 14),) - ), - const SizedBox(height: 10,), - card("Debitos:", widget.bancoHoras?.debito == null || widget.bancoHoras?.debito == '' || diaMaiorHoje - ? "0:00" : widget.bancoHoras!.debito! ), - if(!diaMaiorHoje && widget.bancoHoras?.descricaoDebito != null && widget.bancoHoras?.descricaoDebito != '') - Container( - padding: const EdgeInsets.symmetric(horizontal: 35), - child: CustomText.text(widget.bancoHoras?.descricaoDebito ?? "", - style: const TextStyle(fontSize: 14),) - ), - - if(!diaMaiorHoje) - const SizedBox(height: 10,), - if(!diaMaiorHoje) - card("Saldo do dia:", widget.bancoHoras?.saldodia == null - ? "0:00" : widget.bancoHoras!.saldodia ), - - if(widget.bancoHoras?.lancamentos != null && widget.bancoHoras?.lancamentos != '') - const SizedBox(height: 10,), - if(widget.bancoHoras?.lancamentos != null && widget.bancoHoras?.lancamentos != '') - card("Lançamentos Manual:", widget.bancoHoras!.lancamentos! ), - if(widget.bancoHoras?.descricaoLancamentos != null && widget.bancoHoras?.descricaoLancamentos != '') - Container( - padding: const EdgeInsets.symmetric(horizontal: 35), - child: CustomText.text(widget.bancoHoras?.descricaoLancamentos ?? "", - style: const TextStyle(fontSize: 14),) - ), - - - if(!diaMaiorHoje) - const SizedBox(height: 15,), - if(!diaMaiorHoje) - card("Saldo:", widget.bancoHoras?.saldo == null ? widget.saldo == null - ? "0:00" : widget.saldo! : widget.bancoHoras!.saldo!), - - const SizedBox(height: 20,), - Padding( - padding: EdgeInsets.symmetric(horizontal: 30), - child: CustomText.text('Obs: Esses dados podem ser alterados ate o fechamento!'), - ), - const Padding( - padding: EdgeInsets.symmetric(horizontal: 30, vertical: 5), - child: Divider(height: 2,), - ), - - ListSolicitacoes( list, 90.0 * list.length, scrollController) - ]), - ), - ), - floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, - floatingActionButton: FloatingActionButton.extended( - backgroundColor: Config.corPri, - onPressed: () async { - CustomAlert.custom( - context: context, - titulo: 'LANÇAR SOLICITAÇÃO', - corpo: LancarSolicitacao( - data: widget.dia - ), - ); - }, - label: CustomText.text('Solicitação'.toUpperCase(), style: const TextStyle(fontSize: 20, color: Colors.white),) - ), - ); - } -} diff --git a/example/lib/ui/camera/foto_screen.dart b/example/lib/ui/camera/foto_screen.dart deleted file mode 100644 index 07a7cad..0000000 --- a/example/lib/ui/camera/foto_screen.dart +++ /dev/null @@ -1,235 +0,0 @@ -import 'dart:convert'; -import 'dart:typed_data'; -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; - -import 'package:assecontservices/assecontservices.dart'; -import 'package:photo_view/photo_view.dart'; - -class ImageHero extends StatefulWidget { - List? foto; - - ImageHero(this.foto); - - @override - _ImageHeroState createState() => _ImageHeroState(); -} - -class _ImageHeroState extends State { - @override - Widget build(BuildContext context) { - return Hero( - tag: "foto", - child: Scaffold( - backgroundColor: Colors.black, - appBar: AppBar( - backgroundColor: Colors.black, - iconTheme: const IconThemeData(color: Colors.white), - ), - body: Stack(alignment: AlignmentDirectional.bottomCenter, children: [ - Container( - //height: MediaQuery.of(context).size.height * 0.78, - color: Colors.black, - child: widget.foto != null - ? PhotoView( - imageProvider: - MemoryImage(Uint8List.fromList(widget.foto!))) - : Container(), - ), - - Container( - height: 80, - color: Colors.black, - padding: const EdgeInsets.only(bottom: 20), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - if (!Config.isWin) - GestureDetector( - onTap: () async { - Uint8List? img = await CameraService.getImage(); - if (img != null) { - carregar(context); - bool result = await context - .read() - .setPhoto(context.read().usuario!, - img, null); - if (result) { - context - .read() - .usuario - ?.funcionario - ?.foto = base64Encode(img); - Navigator.pop(context); - Navigator.pop( - context, - context - .read() - .usuario - ?.funcionario - ?.foto); - } else { - Navigator.pop(context); - CustomAlert.erro( - context: context, - mensage: - 'Não foi possivel atualizar sua foto, tente novamente mais tarde!', - ); - } - } - }, - child: const Icon( - Icons.camera, - color: Colors.white, - size: 50, - ), - ), - //SizedBox(width: 27,), - GestureDetector( - onTap: () async { - Uint8List? img = await CameraService.getGallery(); - - if (img != null) { - carregar(context); - bool result = await context - .read() - .setPhoto(context.read().usuario!, - img, null); - if (result) { - context - .read() - .usuario - ?.funcionario - ?.foto = base64Encode(img); - Navigator.pop(context); - Navigator.pop( - context, - context - .read() - .usuario - ?.funcionario - ?.foto); - } else { - Navigator.pop(context); - CustomAlert.erro( - context: context, - mensage: - 'Não foi possivel atualizar sua foto, tente novamente mais tarde!', - ); - } - } - }, - child: const Icon( - Icons.add_photo_alternate, - color: Colors.white, - size: 50, - ), - ), - ], - ), - ), - //SizedBox(height: 20,), - ]), - ), - ); - } -} - -/* -class ImageHero extends StatefulWidget { - var foto; - - ImageHero(this.foto); - - @override - _ImageHeroState createState() => _ImageHeroState(); -} - -class _ImageHeroState extends State { - @override - Widget build(BuildContext context) { - double height = MediaQuery.of(context).size.height; - double width = MediaQuery.of(context).size.width; - Orientation orientation = MediaQuery.of(context).orientation; - - return Hero(tag: "foto", - child: Scaffold(backgroundColor: Colors.black, - appBar: AppBar( - backgroundColor: Colors.black, - iconTheme: IconThemeData(color: Colors.white), - ), - body: SingleChildScrollView( - child: Container(height: orientation != Orientation.landscape ? height * 0.865 : null, - child: Column(mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container(height: MediaQuery.of(context).size.height * 0.78, - color: Colors.black, - child: PhotoView( - imageProvider: MemoryImage( base64Decode( widget.foto )) - ), - ), - - Container(height: 50, color: Colors.black, - child: Row(mainAxisAlignment: MainAxisAlignment.center, - children: [ - GestureDetector( - onTap: () async { - List img = await CustomCamera().getImage(); - if(img != null){ - await context.read().setPhoto( - img, - onSuccess: () { - context.read().updateImg( base64Encode(img) ); - Navigator.pop(context); - }, - onFail: (s, c) { - WarningAlertBox( - context: context, - title: 'Falha', - messageText: s, - buttonText: 'ok' - ); - } - ); - } - }, - child: Icon(Icons.camera, color: Colors.white, size: 50,), - ), - SizedBox(width: 50,), - GestureDetector( - onTap: () async { - List img = await CustomCamera().getGallery(); - if(img != null){ - await context.read().setPhoto( - img, - onSuccess: () { - context.read().updateImg( base64Encode(img) ); - Navigator.pop(context); - }, - onFail: (s, c) { - WarningAlertBox( - context: context, - title: 'Falha', - messageText: s, - buttonText: 'ok' - ); - } - ); - } - }, - child: Icon(Icons.add_photo_alternate, color: Colors.white, size: 50,), - ), - ], - ), - ), - //SizedBox(height: 20,), - ]), - ), - ) - ), - ); - } -} - - - */ \ No newline at end of file diff --git a/example/lib/ui/comprovantes/comprovantes_screen.dart b/example/lib/ui/comprovantes/comprovantes_screen.dart deleted file mode 100644 index c016aad..0000000 --- a/example/lib/ui/comprovantes/comprovantes_screen.dart +++ /dev/null @@ -1,108 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; - -import 'package:assecontservices/assecontservices.dart'; - -import 'detelhes_comprovantes.dart'; - - -class ComprovantesScreen extends StatefulWidget { - - @override - _ComprovantesScreenState createState() => _ComprovantesScreenState(); -} - -class _ComprovantesScreenState extends State { - final GlobalKey _scaffoldKey = GlobalKey(); - ConnectionStatusSingleton connectionStatus = ConnectionStatusSingleton.getInstance(); - - Apontamento? _apontamento; - - @override - void initState() { - _apontamento = context.read().apontamento.first ; - super.initState(); - } - - @override - Widget build(BuildContext context) { - - return Consumer( - builder: (_, aponta, __){ - - return CustomScaffold.custom( - context: context, - key: _scaffoldKey, - height: 70, - appTitle: 'Meus Comprovantes\nApp/Asseface', - appbar: Center( - child: Container( - height: 40, - constraints: BoxConstraints(maxWidth: 400), - margin: EdgeInsets.only(left: 30, right: 30, bottom: 20, top: 5), - padding: EdgeInsets.symmetric(horizontal: 10), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(15), - border: Border.all(color: Colors.grey, width: 1) - ), - child: DropdownButton( - isExpanded: true, - dropdownColor: Colors.white, - value: _apontamento ?? aponta.apontamento.first, - iconSize: 20, - elevation: 0, - icon: Icon(Icons.arrow_drop_down, color: Colors.black,), - style: TextStyle(color: Colors.black), - underline: Container(), - onChanged: ( newValue) { - setState(() { - _apontamento = newValue; - }); - }, - items: aponta.apontamento. - map>(( value) { - return DropdownMenuItem( - value: value, - child: Padding( - padding: EdgeInsets.symmetric(vertical: 8), - child: CustomText.text(value.descricao ?? ''), - ), - ); - }).toList(), - ), - ), - ), - body: Column( - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: CustomText.text( - kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? 'Esses comprovantes são apenas das marcações realizadasno aplicativo ou equipamento Asseponto facil (Relogio de ponto da Assecont)' - : 'Esses comprovantes são apenas das marcações\nrealizadasno aplicativo ou equipamento\nAsseponto facil (Relogio de ponto da Assecont)', - textAlign: TextAlign.center - ), - ), - Expanded( - child: !connectionStatus.hasConnection ? - Center(child: CustomText.text('Verifique sua Conexão com Internet')) : - aponta.apontamento.isEmpty ? - Center( - child: CustomText.text('Não possui comprovantes de marcações do App/AsseFace neste dia', - style: TextStyle(fontSize: 20),), - ) : _apontamento == null ? - Center( - child: CustomText.text('Seleciona um periodo', - style: TextStyle(fontSize: 20),), - ) : Center( - child: DetalhesComprovantes(_apontamento!) - ) - ), - ], - ), - ); - } - ); - } -} \ No newline at end of file diff --git a/example/lib/ui/comprovantes/detelhes_comprovantes.dart b/example/lib/ui/comprovantes/detelhes_comprovantes.dart deleted file mode 100644 index 5f46286..0000000 --- a/example/lib/ui/comprovantes/detelhes_comprovantes.dart +++ /dev/null @@ -1,115 +0,0 @@ -import 'dart:io'; -import 'dart:typed_data'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; - -import 'package:assecontservices/assecontservices.dart'; - -class DetalhesComprovantes extends StatefulWidget { - Apontamento apontamento; - - DetalhesComprovantes(this.apontamento); - - @override - _DetalhesComprovantesState createState() => _DetalhesComprovantesState(); -} - -class _DetalhesComprovantesState extends State { - bool load = false; - - @override - Widget build(BuildContext context) { - double height = MediaQuery.of(context).size.height - (WidgetsBinding.instance.window.padding.top); - double width = MediaQuery.of(context).size.width; - - return Consumer( - builder: (_, comprovantes,__) { - return Scaffold( - body: Container( - decoration: BoxDecoration( - border: Border(bottom: BorderSide(width: 70, color: Theme.of(context).scaffoldBackgroundColor)) - ), - width: width, - height: height, - alignment: Alignment.topCenter, - padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 12), - child: FutureBuilder>( - future: comprovantes.listarMarcacoes( - context.read().usuario, - widget.apontamento - ), - builder: (_, snapshot){ - Widget resultado; - switch( snapshot.connectionState ){ - case ConnectionState.none : - case ConnectionState.waiting : - resultado = Center( - child: Container( - width: 50, - child: const LinearProgressIndicator(minHeight: 10, backgroundColor: Colors.transparent,) - ), - ); - break; - case ConnectionState.active : - case ConnectionState.done : - if( snapshot.hasError || !snapshot.hasData || snapshot.data == null){ - resultado = GestureDetector( - child: const Center( - child: Icon(Icons.autorenew_outlined, - color: Config.corPri, size: 70,), - ), - onTap: (){ - setState(() {}); - } - ); - }else { - if(snapshot.data != null && snapshot.data!.isNotEmpty){ - resultado = ListView( - children: snapshot.data!.map((e) { - return Hero( - tag: 'File-${e.marcacaoId}', - child: InkWell( - onTap: () async { - carregar(context); - Uint8List? file = await comprovantes.getPDF(context.read().usuario, e.marcacaoId!); - Navigator.pop(context); - if(file != null){ - Navigator.push(context, MaterialPageRoute( - builder: (context)=> FileHero('Comprovante de Ponto - ${DateFormat('dd-MM-yyy HH-mm', 'pt_BR').format(e.dataHora!)}', - memori: file, - ) - )); - }else{ - CustomSnackbar.context(context, 'Não foi possivel gerar seu comprovante, tente novamente mais tarde!', Colors.red); - } - }, - child: Card( - child: Padding( - padding: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? const EdgeInsets.all(8.0) : EdgeInsets.zero , - child: ListTile( - leading: Text(DateFormat('dd/MM\nE', 'pt_BR').format(e.dataHora!).toUpperCase()), - title: Text('Horario da Marcação: ${DateFormat('HH:mm', 'pt_BR').format(e.dataHora!)}'), - ), - ), - ), - ), - ); - }).toList(), - ); - }else{ - resultado = Center(child: CustomText.text('Nenhum comprovante disponivel')); - } - } - break; - } - return resultado; - } - ), - ), - ); - } - ); - } -} diff --git a/example/lib/ui/espelho/detelhes_espelho.dart b/example/lib/ui/espelho/detelhes_espelho.dart deleted file mode 100644 index 3fcf99c..0000000 --- a/example/lib/ui/espelho/detelhes_espelho.dart +++ /dev/null @@ -1,227 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; - - -import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart'; -import 'package:assecontservices/assecontservices.dart'; - -class DetalhesEspelho extends StatefulWidget { - Apontamento apontamento; - DetalhesEspelho(this.apontamento); - - @override - _DetalhesEspelhoState createState() => _DetalhesEspelhoState(); -} - -class _DetalhesEspelhoState extends State { - @override - Widget build(BuildContext context) { - double height = MediaQuery.of(context).size.height - - (WidgetsBinding.instance.window.padding.top); - double width = MediaQuery.of(context).size.width; - - return FutureBuilder( - future: context.read().postEspelhoPontoPDF( - context.read().usuario, widget.apontamento), - builder: (_, snapshot) { - Widget resultado; - switch (snapshot.connectionState) { - case ConnectionState.none: - case ConnectionState.waiting: - resultado = Center( - child: Container( - width: 50, - child: const LinearProgressIndicator( - minHeight: 10, - backgroundColor: Colors.transparent, - )), - ); - break; - case ConnectionState.active: - case ConnectionState.done: - if (snapshot.hasError || - !snapshot.hasData || - snapshot.data == null) { - resultado = GestureDetector( - child: Icon( - Icons.autorenew_outlined, - color: Config.corPri, - size: 60, - ), - onTap: () { - context.read().postEspelhoPontoPDF( - context.read().usuario, - widget.apontamento); - }); - } else { - if (snapshot.data != null) { - - resultado = Scaffold( - body: Center( - child: Container( - decoration: BoxDecoration( - border: snapshot.data?.data != null - ? null - : Border( - bottom: BorderSide( - width: 70, - color: Theme.of(context) - .scaffoldBackgroundColor))), - width: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? 600 : width, - height: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? null : height, - alignment: Alignment.center, - padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 12), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceAround, - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisSize: MainAxisSize.max, - children: [ - Expanded( - child: Container( - alignment: Alignment.center, - decoration: BoxDecoration( - border: Border.all(color: Colors.grey)), - child: Stack( - alignment: Alignment.center, - children: [ - SfPdfViewer.memory( - snapshot.data!.espelhoHtml!, - enableDocumentLinkAnnotation: false, - canShowPaginationDialog: false, - enableDoubleTapZooming: false, - enableTextSelection: false, - canShowScrollStatus: false, - canShowScrollHead: false, - canShowPasswordDialog: false, - pageSpacing: 4, - interactionMode: - PdfInteractionMode.pan), - /*SingleChildScrollView( - child: HtmlContentViewer( - htmlContent: snapshot.data!.espelhoHtml ?? '', - initialContentHeight: MediaQuery.of(context).size.height, - initialContentWidth: MediaQuery.of(context).size.width, - ), - ),*/ - - Hero( - tag: 'File', - child: GestureDetector( - child: Center( - child: Container( - height: 80, width: double.infinity, - alignment: Alignment.center, - color: Colors.black26, - child: Text('Clique aqui para baixar'), - ), - ), - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - FileHero('Espelho de Ponto - ${widget.apontamento.descricao}', - file: kIsWeb ? null : snapshot.data!.espelho!, - memori: snapshot.data!.espelhoHtml!, - ))); - }, - ), - ), - ], - )), - ), - const SizedBox( - height: 10, - ), - if (snapshot.data?.data != null) - Padding( - padding: - const EdgeInsets.symmetric(vertical: 20), - child: CustomText.text('Espelho Assinado em: ' + - DateFormat('dd/MM/yyyy HH:mm') - .format(snapshot.data!.data!)), - ) - ], - )), - ), - floatingActionButtonLocation: - FloatingActionButtonLocation.centerFloat, - floatingActionButton: snapshot.data?.data != null - ? null - : widget.apontamento.datatermino - .compareTo(DateTime.now()) >= - 0 - ? null - : FloatingActionButton.extended( - backgroundColor: Config.corPri, - onPressed: () async { - await CustomAlert.custom( - context: context, - titulo: 'Assinar Espelho de Ponto', - corpo: Container( - padding: const EdgeInsets.only( - bottom: 20, top: 5), - child: CustomText.text( - 'Esta deacordo com as informações\ndo espelho de ponto?', - textAlign: TextAlign.center, - style: TextStyle(fontSize: 16), - ), - ), - txtBotaoSucess: 'CONFIRMAR', - txtBotaoCancel: 'REJEITAR', - funcSucess: () async { - bool result = await context - .read() - .postEspelhoStatus( - context - .read() - .usuario, - widget.apontamento, - true); - if (result) { - setState(() {}); - CustomAlert.sucess( - context: context, - mensage: - 'Espelho de ponto assinado.\n', - ); - } else { - CustomAlert.erro( - context: context, - mensage: - 'Não foi possivel assinar seu espelho\ntente novamente!', - ); - } - }, - funcCancel: () async { - await context - .read() - .postEspelhoStatus( - context - .read() - .usuario, - widget.apontamento, - false); - }); - }, - label: Padding( - padding: EdgeInsets.symmetric(horizontal: 5), - child: CustomText.text( - 'ASSINAR', - style: TextStyle( - fontSize: 20, color: Colors.white), - ), - )), - ); - } else { - resultado = Center( - child: CustomText.text('Nenhum Espelho disponivel')); - } - } - break; - } - return resultado; - }); - } -} diff --git a/example/lib/ui/espelho/espelho_screen.dart b/example/lib/ui/espelho/espelho_screen.dart deleted file mode 100644 index 21ec77f..0000000 --- a/example/lib/ui/espelho/espelho_screen.dart +++ /dev/null @@ -1,94 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; - -import 'package:assecontservices/assecontservices.dart'; - -import 'detelhes_espelho.dart'; - - -class EspelhoScreen extends StatefulWidget { - - @override - _EspelhoScreenState createState() => _EspelhoScreenState(); -} - -class _EspelhoScreenState extends State { - final GlobalKey _scaffoldKey = GlobalKey(); - ConnectionStatusSingleton connectionStatus = ConnectionStatusSingleton.getInstance(); - - @override - void initState() { - List aponta = context.read().apontamento; - if(aponta.length > 0)context.read().setMesAtual(aponta.first); - super.initState(); - } - - - @override - Widget build(BuildContext context) { - //double width = MediaQuery.of(context).size.width; - - return Consumer2( - builder: (_, espelho, aponta, __){ - return CustomScaffold.custom( - context: context, - height: 70, - key: _scaffoldKey, - appTitle: 'Meu Espelhos', - expanAppbar: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Center( - child: Container( - height: 40, - margin: const EdgeInsets.only(left: 30, right: 30, bottom: 20, top: 5), - padding: const EdgeInsets.symmetric(horizontal: 10), - constraints: BoxConstraints(maxWidth: 400), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(15), - border: Border.all(color: Colors.grey, width: 1) - ), - child: DropdownButton( - isExpanded: true, - dropdownColor: Colors.white, - value: espelho.dropdowndata, - iconSize: 20, - elevation: 0, - icon: const Icon(Icons.arrow_drop_down, color: Colors.black,), - style: const TextStyle(color: Colors.black), - underline: Container(), - onChanged: ( newValue) { - espelho.dropdowndata = newValue!; - espelho.apontamento = aponta.apontamento.firstWhere((e) => e.descricao == newValue); - }, - items: aponta.apontamento.map((e) => e.descricao). - toList().map>(( value) { - return DropdownMenuItem( - value: value, - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 8), - child: CustomText.text(value ?? ''), - ), - ); - }).toList(), - ), - ), - ), - ], - ), - body: Container( - child: !connectionStatus.hasConnection ? - Center(child: CustomText.text('Verifique sua Conexão com Internet')) : - espelho.apontamento == null ? - Center( - child: CustomText.text('Usuario nao possui periodo de apontamento', - style: TextStyle(fontSize: 16), textAlign: TextAlign.center,), - ) : Center(child: DetalhesEspelho(espelho.apontamento!)) - ), - ); - } - ); - } -} \ No newline at end of file diff --git a/example/lib/ui/ferias/ferias.dart b/example/lib/ui/ferias/ferias.dart deleted file mode 100644 index 5455c4f..0000000 --- a/example/lib/ui/ferias/ferias.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:assecontservices/assecontservices.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/rendering.dart'; - -class FeriasPage extends StatefulWidget { - @override - _FeriasPageState createState() => _FeriasPageState(); -} - -class _FeriasPageState extends State { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: CustomText.text("Férias"), - centerTitle: true, - ), - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - CustomText.text( - 'Aqui será a página para exibir as FÉRIAS', - style: TextStyle(color: Colors.black, fontSize: 20), - ), - ], - ), - ), - ); - } -} diff --git a/example/lib/ui/home/componentes/custom_listTile.dart b/example/lib/ui/home/componentes/custom_listTile.dart deleted file mode 100644 index 0b6c4ed..0000000 --- a/example/lib/ui/home/componentes/custom_listTile.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:assecontservices/assecontservices.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class CustomListTile extends StatelessWidget { - Widget icon; - String titulo; - String valor; - VoidCallback? function; - - CustomListTile(this.icon, this.titulo, this.valor, this.function); - - @override - Widget build(BuildContext context) { - double width = MediaQuery.of(context).size.width; - - return Padding( - padding: EdgeInsets.symmetric(horizontal: width * 0.025, vertical: 2), - child: Card( - child: InkWell( - onTap: function, - child: Container( - padding: - EdgeInsets.symmetric(horizontal: width * 0.02, vertical: 15), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - flex: 2, - child: Row( - children: [ - icon == null - ? Container() - : Padding( - padding: EdgeInsets.only(right: 12), - child: icon, - ), - Expanded( - child: CustomText.text( - titulo, - maxLines: 1, - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: icon == null ? 12 : 16, - ), - ), - ), - ], - ), - ), - Expanded( - flex: 1, - child: Padding( - padding: const EdgeInsets.only(right: 5), - child: CustomText.text( - valor, - textAlign: TextAlign.end, - maxLines: 1, - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: icon == null ? 14 : 18, - ), - ), - ), - ), - ], - ), - ), - ), - ), - ); - } -} diff --git a/example/lib/ui/home/componentes/custom_listTile_web.dart b/example/lib/ui/home/componentes/custom_listTile_web.dart deleted file mode 100644 index 49f897f..0000000 --- a/example/lib/ui/home/componentes/custom_listTile_web.dart +++ /dev/null @@ -1,66 +0,0 @@ -import 'package:assecontservices/assecontservices.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class CustomListTileWeb extends StatelessWidget { - Widget? icon; - String titulo; - String valor; - VoidCallback? function; - - CustomListTileWeb(this.icon, this.titulo, this.valor, this.function); - - @override - Widget build(BuildContext context) { - double width = MediaQuery.of(context).size.width; - - return Container( - padding: EdgeInsets.symmetric(horizontal: width * 0.025, vertical: 2), - child: Card( - child: InkWell( - onTap: function, - child: Container( - height: 200, width: 200, - padding: EdgeInsets.symmetric(horizontal: width * 0.02, vertical: 15), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - flex: 2, - child: icon == null - ? Container() - : icon!, - ), - Expanded( - child: CustomText.text( - titulo, - maxLines: 1, - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: icon == null ? 12 : 16, - ), - ), - ), - Expanded( - flex: 1, - child: Padding( - padding: const EdgeInsets.only(right: 5), - child: CustomText.text( - valor, - textAlign: TextAlign.end, - maxLines: 1, - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: icon == null ? 18 : 22, - ), - ), - ), - ), - ], - ), - ), - ), - ), - ); - } -} diff --git a/example/lib/ui/home/componentes/load_widget.dart b/example/lib/ui/home/componentes/load_widget.dart deleted file mode 100644 index 203febb..0000000 --- a/example/lib/ui/home/componentes/load_widget.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; - -import 'package:shimmer/shimmer.dart'; -import 'package:assecontservices/assecontservices.dart'; - -Widget shimmerWidget(double width, BuildContext context) { - return Container( - child: Shimmer.fromColors( - baseColor: context.watch().darkTemas ? Colors.grey[800]! : Colors.grey[300]!, - highlightColor: context.watch().darkTemas ? Colors.grey : Colors.white, - child: Container( - padding: EdgeInsets.symmetric(horizontal: width * 0.026), - child: Column( - children:[ - const SizedBox(height: 10,), - Container(margin: const EdgeInsets.only(bottom: 10,), - color: Colors.black, - height: 50, - ), - Container(margin: const EdgeInsets.only(bottom: 10), - color: Colors.black, - height: 50, - ), - Container(margin: const EdgeInsets.only(bottom: 10), - color: Colors.black, - height: 50, - ), - ] - ), - ), - ), - ); -} \ No newline at end of file diff --git a/example/lib/ui/home/componentes/resultados.dart b/example/lib/ui/home/componentes/resultados.dart deleted file mode 100644 index 0419a31..0000000 --- a/example/lib/ui/home/componentes/resultados.dart +++ /dev/null @@ -1,196 +0,0 @@ - - -import 'package:assecontservices/assecontservices.dart'; - - -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import '../../../controller/tutor_controller.dart'; -import 'custom_listTile.dart'; -import 'custom_listTile_web.dart'; -import 'load_widget.dart'; - -class ResiltatosView extends StatefulWidget { - UsuarioPonto? usuario; - HomePontoModel? homeModel; - ScrollController? scrollController; - - ResiltatosView(this.usuario, this.homeModel, this.scrollController); - - @override - State createState() => _ResiltatosViewState(); -} - -class _ResiltatosViewState extends State { - Widget icon = Container(); - VoidCallback? function; - - - @override - Widget build(BuildContext context) { - double width = MediaQuery.of(context).size.width; - dynamic data = DateFormat('EEEE d MMM y', 'pt_BR').format(DateTime.now()); - - return Container( - padding: const EdgeInsets.all(15), - decoration: BoxDecoration( - border: Border(bottom: BorderSide(width: 80, - color: Theme.of(context).scaffoldBackgroundColor))), - child: widget.usuario == null - ? Container( - key: context.read().keyResumo, - child: shimmerWidget(width, context), - ) : Card( - //color: Colors.white.withOpacity(0.95), - child: Column( - children: [ - Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - if(kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone) - Column( - children: [ - CustomText.text( - context.watch().horarioAtual, - textAlign: TextAlign.center, - style: const TextStyle( - fontSize: 50, - fontWeight: FontWeight.bold, - letterSpacing: 2), - ), - CustomText.text(data - .toUpperCase() - .toString() - .replaceAll("-FEIRA", ""), - style: TextStyle(fontSize: 12), textAlign: TextAlign.center), - ], - ), - SizedBox(height: 10,), - //const SizedBox(height: 10,), - Row(children: [ - const SizedBox( - width: 50, - ), - CustomText.text( - 'Resumo:', - style: const TextStyle( - //fontWeight: FontWeight.bold, - fontSize: 14, - ), - ), - ]), - const SizedBox( - width: 5, - ), - CustomText.text( - widget.usuario?.periodo?.descricao?.toUpperCase() ?? '', - style: const TextStyle( - //fontWeight: FontWeight.bold, - fontSize: 14, - ), - ), - ], - ), - ExpandedOrContainer( - key: context.read().keyResumo, - isContainer: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone, - height: 230, - //height: 80.0 * (home.homeModel?.resultadoItemList?.length ?? 1), - child: ListView.builder( - controller: widget.scrollController, - scrollDirection: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? Axis.horizontal : Axis.vertical, - itemBuilder: (BuildContext context, int index) { - customIcon(widget.homeModel?.resultadosList![index].id); - return kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? - CustomListTileWeb( - icon, - widget.homeModel?.resultadosList![index].titulo ?? '', - widget.homeModel?.resultadosList![index].valor ?? '', - (widget.usuario?.app ?? false) ? function - : () { - CustomAlert.info( - context: context, - mensage: - 'Você está utilizando a Versão free.\nContate seu gestor para contratar a versão máster!\n', - ); - } - ) - : CustomListTile( - icon, - widget.homeModel?.resultadosList![index].titulo ?? '', - widget.homeModel?.resultadosList![index].valor ?? '', - (widget.usuario?.app ?? false) ? function - : () { - CustomAlert.info( - context: context, - mensage: - 'Você está utilizando a Versão free.\nContate seu gestor para contratar a versão máster!\n', - ); - }); - }, - itemCount: - (widget.homeModel?.resultadosList?.length ?? 0), - ), - ), - ], - ), - ) - ); - } - - - customIcon(int? desc) { - switch (desc) { - case 2: - icon = Transform.rotate( - angle: 12.0, - child: Icon( - Icons.arrow_forward_outlined, - size: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? 60 : 30, - ), - ); - function = () { - Navigator.pushNamed(context, '/marcacoes', arguments: 2); - }; - break; - case 3: - icon = Transform.rotate( - angle: 15.0, - child: Icon(Icons.arrow_forward_outlined, size: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? 60 : 30), - ); - function = () { - Navigator.pushNamed(context, '/marcacoes', arguments: 1); - }; - break; - case 4: - icon = Icon(Icons.medical_services_outlined, size: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? 60 : 30); - function = () { - Navigator.pushNamed(context, '/marcacoes', arguments: 3); - }; - break; - case 5: - icon = Icon(Icons.account_balance, size: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? 60 : 30); - function = () { - Navigator.pushNamed( - context, - '/banco', - ); - }; - break; - case 1: - icon = Icon(Icons.timer_off_outlined, size: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? 60 : 30); - function = () { - Navigator.pushNamed(context, '/marcacoes', arguments: 4); - }; - break; - default: - icon = Container(); - function = null; - break; - } - } -} - - diff --git a/example/lib/ui/home/home.dart b/example/lib/ui/home/home.dart deleted file mode 100644 index f4b82cb..0000000 --- a/example/lib/ui/home/home.dart +++ /dev/null @@ -1,284 +0,0 @@ - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; - -import 'package:assecontservices/assecontservices.dart'; - -import '../../controller/gps.dart'; -import '../../controller/home_controller.dart'; -import '../../controller/tutor_controller.dart'; - -import '../banco_horas/banco_screen.dart'; -import '../comprovantes/comprovantes_screen.dart'; -import '../espelho/espelho_screen.dart'; -import '../marcacoes/Marcacoes.dart'; -import '../registro/screen_registro.dart'; -import '../solicitacoes/solicitacoes_screen.dart'; -import 'componentes/resultados.dart'; - -class Home extends StatefulWidget { - @override - _HomePageState createState() => _HomePageState(); -} - -class _HomePageState extends State { - final ScrollController scrollController = ScrollController(); - - bool load = false; - - deleteHist() { - RegistroManger().deleteHistorico(); - } - - @override - void initState() { - context.read().getHome(); - context - .read() - .getPeriodo(context.read().usuario); - - RegistroManger().enviarMarcacoes(); - deleteHist(); - if (!kIsWeb) { - context.read().init(context); - } else { - BiometriaAlert(context); - } - super.initState(); - } - - @override - void dispose() { - super.dispose(); - } - - @override - Widget build(BuildContext context) { - - - return Container( - color: context.watch().darkTemas - ? Theme.of(context).appBarTheme.backgroundColor - : Config.corPribar, - child: SafeArea( - child: Consumer(builder: (_, user, __) { - return CustomScaffold.home( - context: context, - height: 170 + MediaQuery.of(context).padding.top, - keyListMenu: context.read().keyListMenu, - listMenu: [ - if(kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone) - CustomMenuItem( - const Icon(Icons.fingerprint_sharp), - 'Registrar', - () { - context.read().setPage(0); - }, - isSelect: context.watch().page == 0, - ), - CustomMenuItem( - const Icon(Icons.calendar_month_sharp), - 'Marcações', - () { - if(kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone) context.read().setPage(1); - else Navigator.pushNamed(context, '/marcacoes'); - }, - isSelect: context.watch().page == 1 - ), - if (!(user.usuario?.app ?? false)) - CustomMenuItem( - const Icon(Icons.receipt_rounded), - 'Comprovantes', - () { - if(kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone) context.read().setPage(5); - else Navigator.pushNamed(context, '/comprovantes'); - }, - isSelect: context.watch().page == 5, - ), - CustomMenuItem( - const Icon( - CupertinoIcons.doc_text_fill, - ), - 'Espelho de Ponto', - () { - if (user.usuario?.app ?? false) { - if(kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone) context.read().setPage(2); - else Navigator.pushNamed(context, '/espelho'); - } else { - CustomAlert.info( - context: context, - mensage: - 'Você está utilizando a Versão free.\nContate seu gestor para contratar a versão máster!\n', - ); - } - }, - isSelect: context.watch().page == 2, - ), - CustomMenuItem( - const Icon( - Icons.account_balance, - ), - 'Banco Horas', - () { - if (user.usuario?.app ?? false) { - if(kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone) context.read().setPage(3); - else Navigator.pushNamed(context, '/banco'); - } else { - CustomAlert.info( - context: context, - mensage: - 'Você está utilizando a Versão free.\nContate seu gestor para contratar a versão máster!\n', - ); - } - }, - isSelect: context.watch().page == 3, - ), - CustomMenuItem( - const Icon(Icons.question_answer), - 'Solicitações', - () { - if (user.usuario?.app ?? false) { - if(kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone) context.read().setPage(4); - else Navigator.pushNamed(context, '/solicitacoes'); - } else { - CustomAlert.info( - context: context, - mensage: - 'Você está utilizando a Versão free.\nContate seu gestor para contratar a versão máster!\n', - ); - } - }, - isSelect: context.watch().page == 4, - ), - if (user.usuario?.app ?? false) - CustomMenuItem( - const Icon(Icons.receipt_rounded), - 'Comprovantes', - () { - if(kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone) context.read().setPage(5); - else Navigator.pushNamed(context, '/comprovantes'); - }, - isSelect: context.watch().page == 5, - ), - - CustomMenuItem( - const Icon(Icons.monetization_on_outlined), - 'Holerites', - () { - if (user.usuario?.app ?? false) { - if(kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone) context.read().setPage(6); - else Navigator.pushNamed(context, '/holerites'); - } else { - CustomAlert.info( - context: context, - mensage: - 'Você está utilizando a Versão free.\nContate seu gestor para contratar a versão máster!\n', - ); - } - }, - isSelect: context.watch().page == 6, - ), - ], - keyMenu: context.read().keyMenu, - key1: context.read().keyMenu1, - key2: context.read().keyMenu2, - key3: context.read().keyMenu3, - key4: context.read().keyMenu4, - key5: context.read().keyMenu5, - foto: user.usuario?.funcionario?.foto, - nome: user.usuario?.funcionario?.nome, - cargo: user.usuario?.funcionario?.cargo, - dados: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - CustomText.text( - 'Olá, ' + (user.usuario?.funcionario?.nome ?? ''), - maxLines: 1, - overflow: TextOverflow.visible, - style: const TextStyle( - fontWeight: FontWeight.bold, - fontSize: 18, - color: Config.corPri), - ), - CustomText.text( - user.usuario?.funcionario?.cargo ?? '', - maxLines: 1, - style: const TextStyle( - fontSize: 14, - color: Config.corPri, - letterSpacing: 1, - ), - ), - const SizedBox( - height: 20, - ), - ], - ), - appTitle: 'ASSEPONTO APP', - body: PageView( - controller: HomeController.pageController, - pageSnapping: false, - physics: const NeverScrollableScrollPhysics(), - children: [ - ResiltatosView(user.usuario,user.homeModel, scrollController), - MarcacoesPage(), - EspelhoScreen(), - BancoHorasScreen(), - Solicitacoes(), - ComprovantesScreen(), - HoleriteScreen(), - ] - ), - buttom: context.watch().page != 0 ? null : FloatingActionButton.extended( - key: context.read().keyRegistro, - backgroundColor: Config.corPri, - onPressed: () async { - if(kIsWeb){ - if(user.usuario?.funcionario?.permitirMarcarPontoWeb ?? true){ - await context.read().postPontoMarcar( - context, context.read().usuario!, null, null, - ); - }else{ - CustomAlert.info( - context: context, - mensage: 'Você não tem permissão para marca o ponto!', - ); - } - }else{ - if (user.usuario?.funcionario?.permitirMarcarPonto ?? true) { - if (context - .read() - .usuario - ?.funcionario - ?.capturarGps ?? - false) { - context.read().localizacao(); - } - Navigator.push( - context, - MaterialPageRoute(builder: (context) => RegistroScreen()), - ); - //setState(() {}); - } else { - CustomAlert.info( - context: context, - mensage: 'Você não tem permissão para marca o ponto!', - ); - } - } - }, - label: CustomText.text( - 'REGISTRAR', - style: const TextStyle(fontSize: 20, color: Colors.white), - ) - ), - ); - }), - ), - ); - } - - -} diff --git a/example/lib/ui/login/esqueci_senha_screen.dart b/example/lib/ui/login/esqueci_senha_screen.dart deleted file mode 100644 index ee095d1..0000000 --- a/example/lib/ui/login/esqueci_senha_screen.dart +++ /dev/null @@ -1,153 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; - - -import 'package:assecontservices/assecontservices.dart'; - - -class EsqueciSenhaScreen extends StatefulWidget { - final GlobalKey scaffoldKey; - EsqueciSenhaScreen(this.scaffoldKey); - - @override - State createState() => _EsqueciSenhaScreenState(); -} - -class _EsqueciSenhaScreenState extends State { - final GlobalKey _formKey = GlobalKey(); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(20.0), - child:Form( - key: _formKey, - child: ListView( - children: [ - _menssagem(), - const SizedBox(height: 13,), - - textFormFieldEmail(context), - - const SizedBox(height: 13,), - _enviarSenha(context), - ], - )), - ); - } - - Container _menssagem( ) { - return Container( - padding: const EdgeInsets.symmetric(horizontal: 15), - child: CustomText.text("Informe o seu e-mail para o envio de sua senha", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 24, color: Colors.white,), - ), - ); - } - - //Enviar Senha - Widget _enviarSenha(BuildContext context) { - double w = MediaQuery.of(context).size.width; - - return Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Container( - width: w * 0.4 > 200 ? 200 : w * 0.4, - //margin: EdgeInsets.symmetric(horizontal: 15), - alignment: Alignment.center, - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(15)), - color: Colors.white, - ), - child: TextButton( - onPressed: () { - context.read().setPage(0); - }, - child: Center( - child: CustomText.text( 'VOLTAR', - style: TextStyle(fontSize: 20, color: Config.corPribar),), - ), - ), - ), - Container( - width: w * 0.4 > 200 ? 200 : w * 0.4, - //margin: EdgeInsets.symmetric(horizontal: 15), - alignment: Alignment.center, - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(15)), - color: Colors.white, - ), - child: TextButton( - onPressed: () { - _clickLogin(context); - }, - child: Center( - child: CustomText.text('ENVIAR', - style: TextStyle(fontSize: 20, color: Config.corPribar),), - ), - ), - ) - ]); - } - - textFormFieldEmail(BuildContext context) { - return Container( - padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 15), - child: TextFormField( - keyboardType: TextInputType.emailAddress, - controller: context.watch().email, - style: const TextStyle(color: Colors.white), - decoration: InputDecoration( - enabledBorder: const UnderlineInputBorder(borderSide: BorderSide(color: Colors.white)), - border: const UnderlineInputBorder(borderSide: BorderSide(color: Colors.white)), - hintStyle: const TextStyle( - color: Colors.white, - ), - errorStyle: TextStyle( color: Colors.red[100]), - hintText: "E-mail", - prefixIcon: const Padding( - padding: EdgeInsets.only(left: 5,right: 10), - child: Icon( - Icons.person, - color: Colors.white, - size: 25, - ), - ), - ), - validator: (email){ - if(!emailValid(email!)){ - return 'E-mail inválido'; - }else{ - return null; - } - }, - ), - ); - } - - _clickLogin(BuildContext context) async { - if (_formKey.currentState!.validate()) { - carregar(context,); - bool result = await context.read().sendPass( - context.read().email.text, - ); - if(result){ - Navigator.pop(context); - context.read().setPage(0); - await CustomAlert.sucess( - context: context, - mensage: 'Nova senha enviada para seu email!\n', - ); - }else{ - Navigator.pop(context); - await CustomAlert.erro( - context: context, - mensage: 'Não foi possivel enviar sua senha, tente novamente!', - ); - } - } - } -} diff --git a/example/lib/ui/login/login_screen.dart b/example/lib/ui/login/login_screen.dart deleted file mode 100644 index 33e4b23..0000000 --- a/example/lib/ui/login/login_screen.dart +++ /dev/null @@ -1,352 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:assecontservices/assecontservices.dart'; - - - -class LoginScreen extends StatefulWidget { - const LoginScreen( - this.scaffoldKey, - ); - - final GlobalKey scaffoldKey; - - @override - _LoginScreenState createState() => _LoginScreenState(); -} - -class _LoginScreenState extends State { - final GlobalKey _formKey = GlobalKey(); - final GlobalKey _formKeyEmail = GlobalKey(); - bool load = false; - bool loadAcessar = true; - - @override - void initState() { - super.initState(); - loadAcessar = !kIsWeb; - } - - @override - Widget build(BuildContext context) { - return Container( - child: SingleChildScrollView( - padding: const EdgeInsets.all(25.0), - child: Column( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - loadAcessar ? acessar() : loginSenha(), - const SizedBox( - height: 20, - ), - !load - ? Container( - margin: const EdgeInsets.symmetric(horizontal: 15), - alignment: Alignment.center, - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(15)), - color: Colors.white, - ), - child: TextButton( - onPressed: () { - loadAcessar - ? _clickAcesso(context - .read() - .email - .text - .trim()) - : _clickLogin( - context.read().email.text.trim(), - context.read().senha.text); - }, - child: Center( - child: CustomText.text( - loadAcessar ? 'ACESSAR' : 'LOGIN', - style: TextStyle( - fontSize: 20, color: Config.corPribar), - ), - ), - ), - ) - : const Center( - child: CircularProgressIndicator(), - ), - const SizedBox( - height: 20, - ), - Container( - alignment: Alignment.centerRight, - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(15)), - ), - child: TextButton( - onPressed: () { - context.read().setPage(1); - }, - child: Center( - child: CustomText.text( - 'ESQUECEU A SENHA', - style: TextStyle( - color: Colors.white70, - fontWeight: FontWeight.w900, - fontSize: 12 - ), - ), - ), - ), - ), - if(!Config.isIOS) - Container( - alignment: Alignment.centerRight, - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(15)), - ), - child: TextButton( - onPressed: () { - PrimeiroAcessoAlert(context); - }, - child: Center( - child: CustomText.text( - 'PRIMEIRO ACESSO', - style: TextStyle( - color: Colors.white70, - fontWeight: FontWeight.w900, - fontSize: 12 - ), - ), - ), - ), - ), - ])), - ); - } - - Widget acessar() { - return Form( - key: _formKeyEmail, - child: Container( - padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 15), - child: TextFormField( - keyboardType: TextInputType.emailAddress, - controller: context.watch().email, - style: const TextStyle(color: Colors.white), - decoration: InputDecoration( - suffixIcon: IconButton( - icon: const Icon( - Icons.clear, - color: Colors.white54, - size: 25, - ), - onPressed: () { - context.read().email.clear(); - }), - enabledBorder: const UnderlineInputBorder( - borderSide: BorderSide(color: Colors.white)), - border: const UnderlineInputBorder( - borderSide: BorderSide(color: Colors.white)), - hintStyle: const TextStyle( - color: Colors.white, - ), - errorStyle: TextStyle(color: Colors.red[100]), - hintText: "E-mail", - prefixIcon: const Padding( - padding: EdgeInsets.only(left: 5, right: 10), - child: Icon( - Icons.person, - color: Colors.white, - size: 25, - ), - ), - ), - validator: (email) { - if (!emailValid(email!)) { - return 'E-mail inválido'; - } else { - return null; - } - }, - ), - ), - ); - } - - Widget loginSenha() { - final focus = FocusNode(); - - return Form( - key: _formKey, - child: Column( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 15), - child: TextFormField( - keyboardType: TextInputType.emailAddress, - controller: context.watch().email, - style: const TextStyle(color: Colors.white), - decoration: InputDecoration( - enabledBorder: const UnderlineInputBorder( - borderSide: BorderSide(color: Colors.white)), - border: const UnderlineInputBorder( - borderSide: BorderSide(color: Colors.white)), - hintStyle: const TextStyle( - color: Colors.white, - ), - errorStyle: TextStyle(color: Colors.red[100]), - hintText: "E-mail", - suffix: GestureDetector( - child: const Icon( - Icons.clear, - color: Colors.white54, - size: 25, - ), - onTap: () { - context.read().email.clear(); - }), - - prefixIcon: const Padding( - padding: EdgeInsets.only(left: 5, right: 10), - child: Icon( - Icons.person, - color: Colors.white, - size: 25, - ), - ), - ), - onSaved: (t){ - FocusScope.of(context).requestFocus(focus); - }, - validator: (email) { - if (!emailValid(email!)) { - return 'E-mail inválido'; - } else { - return null; - } - }, - ), - ), - Container( - padding: const EdgeInsets.symmetric(vertical: 15, horizontal: 15), - child: TextFormField( - keyboardType: TextInputType.visiblePassword, - controller: context.watch().senha, - style: const TextStyle(color: Colors.white), - focusNode: focus, - decoration: InputDecoration( - suffixIcon: GestureDetector( - child: const Icon( - Icons.clear, - color: Colors.white54, - size: 25, - ), - onTap: () { - context.read().senha.clear(); - }), - enabledBorder: const UnderlineInputBorder( - borderSide: BorderSide(color: Colors.white)), - border: const UnderlineInputBorder( - borderSide: BorderSide(color: Colors.white)), - hintStyle: const TextStyle( - color: Colors.white, - ), - errorStyle: TextStyle(color: Colors.red[100]), - hintText: "Senha", - alignLabelWithHint: true, - prefixIcon: const Padding( - padding: EdgeInsets.only(left: 5, right: 10), - child: Icon( - Icons.lock_outline, - color: Colors.white, - size: 25, - ), - ), - ), - obscureText: true, - onSaved: (value){ - _clickLogin( - context.read().email.text.trim(), - context.read().senha.text); - }, - validator: (senha) { - if (senha!.isEmpty || senha.length < 0) { - return "Digite sua senha!"; - } else { - return null; - } - }, - ), - ), - Container( - child: Theme( - data: Theme.of(context).copyWith( - disabledColor: Colors.white, - unselectedWidgetColor: Colors.white), - child: CheckboxListTile( - title: CustomText.text( - "Manter-se Logado", - style: TextStyle(color: Colors.white), - ), - activeColor: Colors.redAccent, - value: context.watch().status, - onChanged: (valor) { - context.read().status = valor!; - }), - )) - ], - ), - ); - } - - _clickLogin(String email, String senha) async { - if (_formKey.currentState!.validate()) { - bool? result = await context.read().auth(context, email, senha, false); - - if(result ?? false){ - Navigator.pushNamedAndRemoveUntil(context, '/home', (route) => false); - } - } - } - - _clickAcesso(String email) async { - if (_formKeyEmail.currentState!.validate()) { - if (context.read().bio) { - if (email == context.read().uemail) { - bool? result = await context.read().auth(context, - email, '', true, - ).onError((error, stackTrace) { - setState(() { - loadAcessar = false; - }); - }); - - if(result ?? false){ - Config.usenha = context.read().senha.text; - Navigator.pushNamedAndRemoveUntil(context, '/home', (route) => false); - }else{ - setState(() { - loadAcessar = false; - }); - } - } else { - setState(() { - loadAcessar = false; - }); - } - } else { - setState(() { - loadAcessar = false; - }); - } - } else { - setState(() { - loadAcessar = false; - }); - } - } -} - -//isabelaf@assecont.com.br diff --git a/example/lib/ui/login/start_screen.dart b/example/lib/ui/login/start_screen.dart deleted file mode 100644 index 4d7b266..0000000 --- a/example/lib/ui/login/start_screen.dart +++ /dev/null @@ -1,76 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -import 'package:assecontservices/assecontservices.dart'; - -import 'esqueci_senha_screen.dart'; -import 'login_screen.dart'; - -class StartScreen extends StatelessWidget { - final GlobalKey _scaffoldKey = GlobalKey(); - final PageController pageController = PageController(); - - - @override - Widget build(BuildContext context) { - double height = MediaQuery.of(context).size.height; - double width = MediaQuery.of(context).size.width; - return Scaffold(key: _scaffoldKey, - body: Container( - alignment: Alignment.center, - constraints: BoxConstraints.expand(), - decoration: BoxDecoration( - gradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [Config.corPribar2, Config.corPribar] - ) - ), - child: ChangeNotifierProvider( - create: (_) => PageManager(pageController), - child: SingleChildScrollView( - child: Container( - width: width,height: height, - child: Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Expanded( - flex: 1, - child: Container( - //width: width, - alignment: Alignment.bottomCenter, - padding: EdgeInsets.only( - left: height * 0.050, right: height * 0.050, //top: height * 0.050 - ), - child: Image.asset("assets/imagens/logo-assepontoweb.png", - fit: BoxFit.fitWidth, - ) - ), - ), - - Expanded( - flex: 2, - child: Container( - //height: height * 0.60, - constraints: BoxConstraints(maxWidth: 500), - alignment: Alignment.topCenter, - child: PageView( - controller: pageController, - physics: const NeverScrollableScrollPhysics(), - children: [ - LoginScreen(_scaffoldKey), - EsqueciSenhaScreen(_scaffoldKey) - ]), - ), - ), - ] - ), - ), - ), - ), - ), - ); - } - -} diff --git a/example/lib/ui/marcacoes/Marcacoes.dart b/example/lib/ui/marcacoes/Marcacoes.dart deleted file mode 100644 index bf75a69..0000000 --- a/example/lib/ui/marcacoes/Marcacoes.dart +++ /dev/null @@ -1,85 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; - - -import 'package:assecontservices/assecontservices.dart'; - -import '../../controller/home_controller.dart'; -import 'detelhes_marcacao.dart'; - -class MarcacoesPage extends StatefulWidget { - int? filtro; - MarcacoesPage({this.filtro}); - - @override - _MarcacoesState createState() => _MarcacoesState(); -} - -class _MarcacoesState extends State { - final GlobalKey _scaffoldKey = new GlobalKey(); - ConnectionStatusSingleton connectionStatus = ConnectionStatusSingleton.getInstance(); - - final CalendarWeekController _controller = CalendarWeekController(); - - - @override - void initState() { - if(kIsWeb) widget.filtro = context.read().filtro; - context.read().getEspelho(filtro: widget.filtro); - super.initState(); - } - - @override - Widget build(BuildContext context) { - - return Consumer( - builder: (_, marcacao, __){ - - return CustomScaffold.calendario( - key: _scaffoldKey, - context: context, - appTitle:'Marcações', - funcData: (DateTime datetime) { - marcacao.data = datetime; - }, - listdecoration: marcacao.listdecoration, - controller: _controller, - dataInit: marcacao.data, - dataMin: context.read().usuario?.periodo?.dataInicial, - dataMax: context.read().usuario?.periodo?.dataFinal, - body: Center( - child: !connectionStatus.hasConnection ? CustomText.text('Verifique sua Conexão com Internet') : - FutureBuilder( - future: marcacao.getMarcacaoDia(), - builder: (context, snapshot){ - Widget resultado; - switch( snapshot.connectionState ){ - case ConnectionState.none : - case ConnectionState.waiting : - resultado = const CircularProgressIndicator(); - break; - case ConnectionState.active : - case ConnectionState.done : - if( snapshot.hasError ){ - resultado = GestureDetector( - child: Icon(Icons.autorenew_outlined, - color: Config.corPri, size: 70,), - onTap: (){ - setState(() {}); - } - ); - }else { - resultado = DetalhesMarcacao(snapshot.data, marcacao.data); - } - break; - } - return resultado; - }, - ) - ) - ); - } - ); - } -} diff --git a/example/lib/ui/marcacoes/detelhes_marcacao.dart b/example/lib/ui/marcacoes/detelhes_marcacao.dart deleted file mode 100644 index 4b04574..0000000 --- a/example/lib/ui/marcacoes/detelhes_marcacao.dart +++ /dev/null @@ -1,117 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; - -import 'package:assecontservices/assecontservices.dart'; - -import '../solicitacoes/lancar_solicitacao.dart'; -import '../solicitacoes/solicitacoes_screen.dart'; - - -class DetalhesMarcacao extends StatefulWidget { - Marcacao? listaMarcacao; - DateTime? dia; - DetalhesMarcacao(this.listaMarcacao, this.dia); - - @override - _DetalhesMarcacaoState createState() => _DetalhesMarcacaoState(); -} - -class _DetalhesMarcacaoState extends State { - final ScrollController scrollController = ScrollController(); - Widget card(String menu, String valor){ - return Container( - padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 35), - child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - CustomText.text(menu, style: const TextStyle(fontSize: 20),), - CustomText.text(valor, style: const TextStyle(fontSize: 20)), - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - List list = context.watch().memorandoDia(widget.dia); - - return Scaffold( - body: Container( - decoration: (UserPontoManager().usuario?.app ?? false) ? - BoxDecoration( - border: Border(bottom: BorderSide(width: 80, - color: Theme.of(context).scaffoldBackgroundColor)) - ) : null, - height: MediaQuery.of(context).size.height, - child: SingleChildScrollView( - controller: scrollController, - child: Column(crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const SizedBox(height: 15,), - Padding( - padding: EdgeInsets.symmetric(horizontal: 30), - child: CustomText.text('Marcações'), - ), - const SizedBox(height: 5,), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 30), - child: Center( - child: CustomText.text(widget.listaMarcacao?.marcacao.toString(). - replaceAll("[", "").replaceAll("]", "").replaceAll(",", " -") ?? "", - maxLines: 2, style: const TextStyle(fontSize: 18), - ), - ), - ), - const Padding( - padding: EdgeInsets.symmetric(horizontal: 30, vertical: 10), - child: Divider(height: 2,), - ), - Padding( - padding: EdgeInsets.symmetric(horizontal: 30), - child: CustomText.text('Resumo'), - ), - const SizedBox(height: 5,), - card("Horas Extras:", widget.listaMarcacao?.resultado?.extras ?? "0:00"), - const SizedBox(height: 10,), - card("Noturno:", widget.listaMarcacao?.resultado?.noturno ?? "0:00"), - const SizedBox(height: 10,), - card("Abonos:", widget.listaMarcacao?.resultado?.abono ?? "0:00"), - const SizedBox(height: 10,), - card("Descontos", widget.listaMarcacao?.resultado?.descontos ?? "0:00"), - const SizedBox(height: 10,), - card("Falta:", widget.listaMarcacao?.resultado?.faltasDias.toString() ?? "0"), - const SizedBox(height: 10,), - Padding( - padding: EdgeInsets.symmetric(horizontal: 30), - child: CustomText.text('Obs: Esses dados podem ser alterados ate o fechamento!'), - ), - - const Padding( - padding: EdgeInsets.symmetric(horizontal: 30, vertical: 5), - child: Divider(height: 2,), - ), - //Expanded(child: null) - ListSolicitacoes( list, 90.0 * list.length, scrollController) - ]), - ), - ), - floatingActionButtonLocation: (UserPontoManager().usuario?.app ?? false) ? - FloatingActionButtonLocation.centerFloat : null, - floatingActionButton: (UserPontoManager().usuario?.app ?? false) ? - FloatingActionButton.extended( - backgroundColor: Config.corPri, - onPressed: () async { - CustomAlert.custom( - context: context, - titulo: 'LANÇAR SOLICITAÇÃO', - corpo: Container( - child: LancarSolicitacao( - data: widget.dia - ) - ), - ); - }, - label: CustomText.text('Solicitação'.toUpperCase(), style: const TextStyle(fontSize: 20, color: Colors.white),) - ) : null, - ); - } -} diff --git a/example/lib/ui/password/alterar_senha.dart b/example/lib/ui/password/alterar_senha.dart deleted file mode 100644 index 9fb882b..0000000 --- a/example/lib/ui/password/alterar_senha.dart +++ /dev/null @@ -1,165 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; -import 'dart:ui'; - - -import 'package:assecontservices/assecontservices.dart'; - - - -Future AlterarSenhaModal(BuildContext context){ - return CustomAlert.custom( - context: context, - titulo: 'Alterar Senha'.toUpperCase(), - corpo: AlertSenha() - ); -} - -class AlertSenha extends StatefulWidget { - - @override - _AlertSenhaState createState() => _AlertSenhaState(); -} - -class _AlertSenhaState extends State { - final GlobalKey _formKey = GlobalKey(); - final TextEditingController senhaAtual = TextEditingController(); - final TextEditingController senhaNova = TextEditingController(); - bool _showSenhaAtual = true; - bool _showSenhaNova = true; - - - @override - Widget build(BuildContext context) { - - return Container( - child: Form( - key: _formKey, - child: Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - CustomText.text( - "Deseja trocar a senha?", - textAlign: TextAlign.center, - style: TextStyle(fontSize: 20), - ), - const SizedBox(height: 12,), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 10,), - child: TextFormField( - controller: senhaAtual, - validator: (value) { - if (value == null || value == '') { - return "Digite sua senha"; - }else if(value != Config.usenha){ - return "Senha Inválida"; - } - return null; - }, - decoration: InputDecoration( - labelText: "Senha Atual", - errorStyle: const TextStyle(color: Colors.red), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(5.0), - ), - - suffixIcon: GestureDetector( - child: Icon( - !_showSenhaAtual - ? Icons.visibility_off - : Icons.visibility, - color: context.watch().darkTemas ? Colors.white : Colors.black, - ), - onTap: () { - setState(() { - _showSenhaAtual = !_showSenhaAtual; - }); - }, - ), - ), - obscureText: _showSenhaAtual, - - ), - ), - - Padding( - padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 15), - child: TextFormField( - controller: senhaNova, - validator: (value) { - if (value == null || value == '') { - return "Digite sua nova senha"; - } - return null; - }, - decoration: InputDecoration( - labelText: "Nova Senha", - errorStyle: const TextStyle(color: Colors.red), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(5.0), - ), - suffixIcon: GestureDetector( - child: Icon( - !_showSenhaNova - ? Icons.visibility_off - : Icons.visibility, - color: context.watch().darkTemas ? Colors.white : Colors.black, - ), - onTap: () { - setState(() { - _showSenhaNova = !_showSenhaNova; - }); - }, - ), - ), - obscureText: _showSenhaNova, - ), - ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 10,), - child: TextButton( - style: TextButton.styleFrom( - primary: Colors.white, - backgroundColor: Config.corPri, - ), - child: Center( - child: CustomText.text("ENVIAR", - style: TextStyle(color: Colors.white, fontSize: 20.0), - ), - ), - // onPressed: () {}, - onPressed: () async { - if (_formKey.currentState!.validate()) { - carregar(context); - bool result = await context.read().alteracaoPass( - context, context.read().usuario!, - senhaAtual.text, senhaNova.text, - ); - - if(result){ - Navigator.pop(context); - Navigator.pop(context); - CustomAlert.sucess( - context: context, - mensage: 'Senha Alterada!', - ); - }else{ - Navigator.pop(context); - CustomAlert.erro( - context: context, - mensage: 'Senha Alterada!\n', - ); - } - } - }, - ), - ), - const SizedBox(height: 15,) - ], - ), - ) - ); - } -} - diff --git a/example/lib/ui/registro/screen_registro.dart b/example/lib/ui/registro/screen_registro.dart deleted file mode 100644 index a2c4169..0000000 --- a/example/lib/ui/registro/screen_registro.dart +++ /dev/null @@ -1,369 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; - -import 'package:google_maps_flutter/google_maps_flutter.dart'; -import 'package:shimmer/shimmer.dart'; -import 'package:assecontservices/assecontservices.dart'; - - -import '../../controller/gps.dart'; - - -class RegistroScreen extends StatefulWidget { - @override - _RegistroState createState() => _RegistroState(); -} - -class _RegistroState extends State { - String txt = "Ponto Registrado com Sucesso"; - -/* @override - void initState() { - super.initState(); - img = context.read().img; - mapa = GoogleMap( - buildingsEnabled: false, - zoomControlsEnabled: false, - mapToolbarEnabled: false, - rotateGesturesEnabled: false, - scrollGesturesEnabled: false, - zoomGesturesEnabled: false, - myLocationButtonEnabled: false, - tiltGesturesEnabled: false, - mapType: MapType.normal, - myLocationEnabled: true, - initialCameraPosition: context.read().cam, - onMapCreated: onMapCreated - ); - }*/ - - @override - Widget build(BuildContext context) { - dynamic data = DateFormat('EEEE d MMM y', 'pt_BR').format(DateTime.now()); - double height = MediaQuery.of(context).size.height - - AppBar().preferredSize.height - MediaQuery.of(context).padding.top; - double width = MediaQuery.of(context).size.width; - - return Scaffold( - appBar: AppBar( - title: CustomText.text('Marcação de Ponto'), - centerTitle: true, - actions: [ - actions(context, registro: true), - ], - ), - body: Container( - height: height, - child: SingleChildScrollView( - child: Stack( - alignment: AlignmentDirectional.topCenter, - children: [ - Container( - height: height, - width: width, - child: Mapa(), - ), - Container( - height: 276, - decoration: BoxDecoration( - color: context.watch().darkTemas - ? Theme.of(context).primaryColor - : Config.corPribar, - borderRadius: const BorderRadius.only( - bottomRight: Radius.circular(45), - bottomLeft: Radius.circular(45), - )), - alignment: Alignment.topCenter, - child: Column( - //mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - width: width * 0.6, - padding: const EdgeInsets.only(left: 15, right: 5), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - CustomText.text( - 'Olá, ${context - .read() - .usuario - ?.funcionario - ?.nome ?? - ''}', - maxLines: 1, - overflow: TextOverflow.visible, - style: const TextStyle( - fontWeight: FontWeight.bold, - fontSize: 18, - color: Config.corPri), - ), - CustomText.text( - context - .read() - .usuario - ?.funcionario - ?.cargo ?? - '', - maxLines: 1, - style: const TextStyle( - fontSize: 14, - color: Config.corPri, - letterSpacing: 1, - ), - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.all(5.0), - child: Hero( - tag: "foto", - child: GestureDetector( - onTap: () async { - List? _img = await Navigator.push( - context, - MaterialPageRoute( - builder: (context) => ImageHero(context - .read() - .usuario - ?.funcionario - ?.foto == - null - ? null - : base64Decode(context - .read() - .usuario! - .funcionario! - .foto!)))); - - if (_img != null) { - context - .read() - .usuario - ?.funcionario - ?.foto = base64Encode(_img); - } - }, - child: Container( - alignment: Alignment.center, - height: 115, - width: 115, - decoration: BoxDecoration( - border: context - .read() - .usuario - ?.funcionario - ?.foto != - null - ? Border.all( - color: Config.corPri, width: 2) - : Border.all( - color: Colors.white, width: 5), - borderRadius: BorderRadius.circular(100), - color: Config.corPri, - image: context - .read() - .usuario - ?.funcionario - ?.foto != - null - ? DecorationImage( - image: MemoryImage(base64Decode( - context - .read() - .usuario! - .funcionario! - .foto!)), - fit: BoxFit.cover) - : null), - child: context - .read() - .usuario - ?.funcionario - ?.foto == - null - ? const Icon( - CupertinoIcons.person, - color: Colors.white, - size: 105, - ) - : null, - ), - ), - ), - ), - ], - ), - Consumer( - builder: (_, hora, __) { - return Container( - alignment: Alignment.center, - padding: const EdgeInsets.only( - top: 20, - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Padding( - padding: const EdgeInsets.only(bottom: 5), - child: CustomText.text( - data - .toUpperCase() - .toString() - .replaceAll("-FEIRA", ""), - textAlign: TextAlign.center, - style: const TextStyle( - fontWeight: FontWeight.bold, - fontSize: 18, - color: Colors.white, - letterSpacing: 1), - ), - ), - CustomText.text( - hora.horarioAtual, - textAlign: TextAlign.center, - style: const TextStyle( - fontSize: 70, - color: Colors.white, - fontWeight: FontWeight.bold, - letterSpacing: 2), - ), - ], - ), - ); - }, - ), - ], - ), - ), - ], - ))), - floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, - floatingActionButton: FloatingActionButton.extended( - backgroundColor: context.watch().regButtom - ? Config.corPri.withOpacity(0.7) - : Config.corPri, - onPressed: context.watch().regButtom - ? null - : () async { - context.read().regButtom = true; - - if (context - .read() - .usuario - ?.funcionario - ?.capturarGps ?? - false) { - await context.read().localizacao(); - } - double? lat = context.read().locationData?.latitude; - double? long = context.read().locationData?.longitude; - - if (!(context.read().usuario?.funcionario?.capturarGps ?? true) || ((await context.read().serviceEnabled))) { - if(await context.read().isMockLocation){ - CustomAlert.info( - context: context, - mensage: 'Identificamos que o recurso de localização fictícia está ativo.\nPor favor, desative essa função para poder realizar a marcação de ponto.', - ); - }else{ - if (!(context - .read() - .usuario - ?.funcionario - ?.capturarGps ?? - true) || - context.read().locationData != null) { - await context.read().postPontoMarcar( - context, - context.read().usuario!, - lat, - long, - ); - } else { - CustomAlert.info( - context: context, - mensage: 'Aguarde carregar o mapa!', - ); - } - } - } else { - Navigator.pop(context); - CustomAlert.info( - context: context, - mensage: 'Ative seu GPS!', - ); - } - context.read().regButtom = false; - }, - label: Center( - child: context.watch().regButtom - ? Shimmer.fromColors( - baseColor: context.watch().darkTemas - ? Colors.grey[800]! - : Colors.grey[300]!, - highlightColor: context.watch().darkTemas - ? Colors.grey - : Colors.white, - child: CustomText.text( - 'AGUARDE..', - style: - const TextStyle(fontSize: 20, color: Colors.white), - ), - ) - : CustomText.text( - 'CONFIRMAR', - style: const TextStyle(fontSize: 20, color: Colors.white), - ) - ) - ), - ); - } -} - -class Mapa extends StatefulWidget { - @override - State createState() => _MapaState(); -} - -class _MapaState extends State { - final Completer _controller = Completer(); - - onMapCreated(GoogleMapController googleMapController) { - _controller.complete(googleMapController); - } - - moveCam(BuildContext context, CameraPosition cam) async { - final GoogleMapController controller = await _controller.future; - controller.animateCamera(CameraUpdate.newCameraPosition(cam)); - } - - @override - Widget build(BuildContext context) { - return Consumer(builder: (_, gps, __) { - moveCam(context, gps.cam); - - return Container( - padding: const EdgeInsets.only(top:200), - child: GoogleMap( - buildingsEnabled: false, - zoomControlsEnabled: false, - mapToolbarEnabled: false, - rotateGesturesEnabled: false, - scrollGesturesEnabled: false, - zoomGesturesEnabled: false, - myLocationButtonEnabled: false, - tiltGesturesEnabled: false, - mapType: MapType.normal, - myLocationEnabled: true, - initialCameraPosition: gps.cam, - onMapCreated: onMapCreated)); - }); - } -} diff --git a/example/lib/ui/solicitacoes/lancar_justificativa.dart b/example/lib/ui/solicitacoes/lancar_justificativa.dart deleted file mode 100644 index 011e8cb..0000000 --- a/example/lib/ui/solicitacoes/lancar_justificativa.dart +++ /dev/null @@ -1,177 +0,0 @@ -import 'dart:io'; -import 'dart:typed_data'; - -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:intl/intl.dart'; - -import 'package:assecontservices/assecontservices.dart'; -import 'package:datetime_picker_formfield/datetime_picker_formfield.dart'; - - -class LancarJustificativa extends StatefulWidget { - - @override - _LancarJustificativaState createState() => _LancarJustificativaState(); -} - -class _LancarJustificativaState extends State { - Widget icone = Container(); - Widget icone2 = Container() ; - - @override - void initState() { - context.read().updateObs(false); - super.initState(); - } - - - - @override - Widget build(BuildContext context) { - - return Consumer( - builder: (_, memo, __) { - - return Container(//height: 310, width: 300, - child: Column(mainAxisSize: MainAxisSize.min, - children: [ - Padding(padding: const EdgeInsets.only(left: 15, right: 15, bottom: 3), - child: DateTimeField( - format: DateFormat('dd/MM/yyyy'), - keyboardType: TextInputType.datetime, - controller: memo.controlerData, - decoration: const InputDecoration( - labelText: "Data:", - prefixIcon: Icon(Icons.today,), - ), - onShowPicker: (context, currentValue) { - return showDatePicker( - context: context, - firstDate: DateTime(1900), - initialDate: currentValue ?? DateTime.now(), - lastDate: DateTime(2100) - ); - }, - ), - ), - const SizedBox(height: 10,), - Padding(padding: const EdgeInsets.only(left: 10, right: 10), - child: Container(padding: const EdgeInsets.all(5), - child: TextField(maxLength: 255, maxLines: 2, readOnly: false, - decoration: const InputDecoration(labelText: "OBS:", - border: OutlineInputBorder(borderSide: BorderSide(width: 5 ,color: Colors.blue)), - prefixIcon: Icon(Icons.edit,), - ), - controller: memo.controlerObs, - ), - ), - ), - const SizedBox(height: 5,), - Row(mainAxisAlignment: MainAxisAlignment.center , - children: [ - Container(decoration: BoxDecoration(//color: Colors.white, - borderRadius: const BorderRadius.all(Radius.circular (50) ), - border: Border.all(color: Colors.grey) - ), - child: Padding( - padding: const EdgeInsets.only(left: 8.0, top: 8, bottom: 8, right: 16), - child: PopupMenuButton( - itemBuilder: (context) => [ - if(!Config.isWin) - PopupMenuItem( - value: 1, - child: CustomText.text("Camera"), - ), - PopupMenuItem( - value: 2, - child: CustomText.text("Galeria"), - ), - ], - initialValue: 1, - offset: const Offset(10,5), - onSelected: (value) async { - Uint8List? _f; - if(value == 1){ - _f = (await CameraService.getImage()) ; - }else{ - _f = (await CameraService.getGallery()) ; - } - - memo.foto = _f ; - - if(memo.foto != null){ - setState(() { - icone = const Icon(Icons.attach_file, color: Colors.blueAccent,); - icone2 = IconButton( - onPressed: (){ - setState(() { - icone = Container(); - icone2 = Container(); - }); - }, - icon: const Icon(Icons.delete), color: Colors.red, - ); - }); - }else{ - setState(() { - icone = Container(); - icone2 = Container(); - }); - } - }, - child: Container( - child: Row(children: [ - Padding(padding: EdgeInsets.only(left:10 ,right: 10), - child: Icon(Icons.camera_alt,), - ), - CustomText.text("Comprovante", ), - ],), - ), - ), - ), - ), - icone, - icone2 - ],), - const SizedBox(height: 20,), - Row(mainAxisAlignment: MainAxisAlignment.end, - children: [ - Container( - child: TextButton( - child: Padding( - padding: EdgeInsets.only(top: 12,), - child: CustomText.text("Cancelar", style: TextStyle(fontSize: 14),), - ), - onPressed: (){ - Navigator.pop(context); - }, - ), - ), - Container( - child: TextButton( - child: Padding( - padding: EdgeInsets.only(top: 12,), - child: CustomText.text("Ok",style: TextStyle(fontSize: 14),), - ), - onPressed: () async { - List _i = memo.controlerData.text.split("/"); - DateTime datahora = DateTime(int.parse(_i[2]), int.parse(_i[1]), int.parse(_i[0])); - - await context.read().postMemorando( - context, context.read().usuario!, - datahora, memo.controlerObs.text, 1, img: memo.foto, - ); - Navigator.pop(context); - }, - ), - ) - ], - ), - ], - ),); - }, - ); - } -} - diff --git a/example/lib/ui/solicitacoes/lancar_marcacao.dart b/example/lib/ui/solicitacoes/lancar_marcacao.dart deleted file mode 100644 index b2a8f7c..0000000 --- a/example/lib/ui/solicitacoes/lancar_marcacao.dart +++ /dev/null @@ -1,153 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:intl/intl.dart'; - -import 'package:assecontservices/assecontservices.dart'; -import 'package:datetime_picker_formfield/datetime_picker_formfield.dart'; - -class LancarMarcacao extends StatefulWidget { - - @override - _LancarMarcacaoState createState() => _LancarMarcacaoState(); -} - -class _LancarMarcacaoState extends State { - List marcacoes = ['','','','']; - - setmarcacao(String titulo, int indice, String string){ - TextEditingController controler_hora = TextEditingController(text: string); - return Container(height: 40, - padding: const EdgeInsets.symmetric(horizontal: 15), - child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded(flex: 1, child: CustomText.text(titulo)), - Expanded(flex: 2, - child: DateTimeField( - format: DateFormat('HH:mm'), - keyboardType: TextInputType.datetime, - controller: controler_hora, - decoration: const InputDecoration(prefixIcon: Icon(Icons.timer,),), - onShowPicker: (context, currentValue) async { - final time = await showTimePicker( - context: context, - initialTime: TimeOfDay.fromDateTime(currentValue ?? DateTime.now()), - ); - return DateTimeField.convert(time); - }, - onChanged: (v){ - if(v != null){ - setState(() { - marcacoes[indice] = DateFormat("HH:mm").format(v); - }); - }else{ - setState(() { - marcacoes[indice] = ''; - }); - } - //debugPrint(marcacoes.toString()); - }, - ), - ), - ], - ), - ); - } - - @override - void initState() { - context.read().updateObs(true); - super.initState(); - } - - - @override - Widget build(BuildContext context) { - return Consumer( - builder: (_, memo, __) { - return Container(//height: 310, width: 300, - child: Column(mainAxisSize: MainAxisSize.min, - children: [ - Padding(padding: const EdgeInsets.only(left: 15, right: 15, bottom: 3), - child: DateTimeField( - format: DateFormat('dd/MM/yyyy'), - keyboardType: TextInputType.datetime, - controller: memo.controlerData, - decoration: const InputDecoration( - labelText: "Data:", - prefixIcon: Icon(Icons.today,), - ), - onShowPicker: (context, currentValue) { - return showDatePicker( - context: context, - firstDate: DateTime(1900), - initialDate: currentValue ?? DateTime.now(), - lastDate: DateTime(2100) - ); - }, - ), - ), - const SizedBox(height: 10,), - Column( - children: [ - setmarcacao('Entrada:', 0, marcacoes[0]), - setmarcacao('Intervalo:', 1, marcacoes[1]), - setmarcacao('Intervalo:', 2, marcacoes[2]), - setmarcacao('Saida:', 3, marcacoes[3]), - ], - ), - const SizedBox(height: 10,), - Padding(padding: const EdgeInsets.only(left: 10, right: 10), - child: Container(padding: const EdgeInsets.all(5), - child: TextField(maxLength: 255, maxLines: 2, readOnly: false, - decoration: const InputDecoration(labelText: "OBS:", - border: OutlineInputBorder(borderSide: BorderSide(width: 5 ,color: Colors.blue)), - prefixIcon: Icon(Icons.edit,), - ), - controller: memo.controlerObs, - ), - ), - ), - - Row(mainAxisAlignment: MainAxisAlignment.end, - children: [ - Container( - child: TextButton( - child: Padding( - padding: EdgeInsets.only(top: 12,), - child: CustomText.text("Cancelar", style: TextStyle(fontSize: 14),), - ), - onPressed: (){ - Navigator.pop(context); - }, - ), - ), - Container( - child: TextButton( - child: Padding( - padding: EdgeInsets.only(top: 12,), - child: CustomText.text("Ok",style: TextStyle(fontSize: 14),), - ), - onPressed: () async { - if(memo.controlerData.text != null && (marcacoes[0] != '' - || marcacoes[1] != '' || marcacoes[2] != '' || marcacoes[3] != '')){ - List _i = memo.controlerData.text.split("/"); - DateTime datahora = DateTime(int.parse(_i[2]), int.parse(_i[1]), int.parse(_i[0])); - await context.read().postMemorando( - context, context.read().usuario!, - datahora, memo.controlerObs.text, 5, marcacao: marcacoes, - ); - - Navigator.pop(context); - } - }, - ), - ) - ], - ), - const SizedBox(height: 5,), - ], - ),); - }, - ); - } -} diff --git a/example/lib/ui/solicitacoes/lancar_solicitacao.dart b/example/lib/ui/solicitacoes/lancar_solicitacao.dart deleted file mode 100644 index cb8d9c0..0000000 --- a/example/lib/ui/solicitacoes/lancar_solicitacao.dart +++ /dev/null @@ -1,63 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:intl/intl.dart'; - -import 'lancar_marcacao.dart'; -import 'lancar_justificativa.dart'; -import 'package:assecontservices/assecontservices.dart'; - - -class LancarSolicitacao extends StatefulWidget { - DateTime? data; - LancarSolicitacao({this.data}); - - @override - _LancarSolicitacaoState createState() => _LancarSolicitacaoState(); -} - -class _LancarSolicitacaoState extends State { - bool start = true; - - @override - Widget build(BuildContext context) { - if(start && widget.data != null){ - context.read().controlerData.text = - DateFormat("dd/MM/yyyy").format(widget.data!); - start = false; - } - - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 10), - child: DropdownButton( - value: context.watch().dropdownValue, - isExpanded: true, - iconSize: 24, - elevation: 16, - icon: Icon(Icons.arrow_drop_down,), - style: TextStyle(fontSize: 16, - color: context.read().darkTemas ? - Colors.white: Colors.black), - underline: Container(height: 1, color: Colors.grey), - onChanged: ( newValue) { - context.read().dropdownValue = newValue!; - }, - items: ["Atestado", "Marcação", ] - .map>((String value) { - return DropdownMenuItem( - value: value, - child: CustomText.text(value), - ); - }).toList(), - ), - ), - SingleChildScrollView( - child: context.watch().dropdownValue == "Atestado" ? - LancarJustificativa() : LancarMarcacao(), - ), - ], - ); - } -} diff --git a/example/lib/ui/solicitacoes/solicitacoes_detalhes.dart b/example/lib/ui/solicitacoes/solicitacoes_detalhes.dart deleted file mode 100644 index 4b2ae17..0000000 --- a/example/lib/ui/solicitacoes/solicitacoes_detalhes.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; - -import 'package:assecontservices/assecontservices.dart'; - -class DetalhesJustificativas extends StatelessWidget { - Memorandos memorando; - String get status { - if(memorando.status == 1){ - return "Pendente"; - }else if(memorando.status == 2){ - return "Aprovado"; - }else if(memorando.status == 3){ - return "Reprovado"; - }else{ - return ""; - } - } - - DetalhesJustificativas(this.memorando); - - Widget card(String menu, String valor){ - return Padding( - padding: const EdgeInsets.symmetric(vertical: 5), - child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - CustomText.text(menu, style: TextStyle(fontSize: 14),), - SizedBox(width: 5,), - CustomText.text(valor, style: TextStyle(fontSize: 14)), - ], - ), - ); - } - - @override - Widget build(BuildContext context) { - - return Container( - width: 500, - height: 160, - child: ListView( - children: [ - card("Status:", status ), - card("Solicitado em:", memorando.dataSolicitacao == null ? '' : - "${DateFormat("dd/MM/yyyy").format(memorando.dataSolicitacao!)}" ), - card("Data Solicitação:", memorando.data == null ? '' : - DateFormat("dd/MM/yyyy").format(memorando.data!) ), - SizedBox(height: 15,), - Column(crossAxisAlignment: CrossAxisAlignment.start, - children: [ - CustomText.text("Descrição:",), - CustomText.text(memorando.descricao ?? '',) - ],), - - ]), - ); - } -} diff --git a/example/lib/ui/solicitacoes/solicitacoes_screen.dart b/example/lib/ui/solicitacoes/solicitacoes_screen.dart deleted file mode 100644 index faaa2d7..0000000 --- a/example/lib/ui/solicitacoes/solicitacoes_screen.dart +++ /dev/null @@ -1,260 +0,0 @@ -import 'package:auto_animated/auto_animated.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:intl/intl.dart' -; -import 'lancar_solicitacao.dart'; -import 'solicitacoes_detalhes.dart'; -import 'package:assecontservices/assecontservices.dart'; - - -class Solicitacoes extends StatefulWidget { - @override - _SolicitacoesState createState() => _SolicitacoesState(); -} - -class _SolicitacoesState extends State { - final GlobalKey _scaffoldKey = GlobalKey(); - List listamemorando = []; - bool load = true; - late DateTime inicio; - late DateTime fim; - - @override - void dispose() { - super.dispose(); - } - - @override - void initState() { - inicio = context.read().usuario?.periodo?.dataInicial ?? DateTime.now().subtract(const Duration(days: 15)); - fim = context.read().usuario?.periodo?.dataFinal ?? DateTime.now().add(const Duration(days: 15)); - context.read().getMemorandos(context.read().usuario!, inicio, fim); - super.initState(); - } - - @override - Widget build(BuildContext context) { - double heightfull = MediaQuery.of(context).size.height; - double height = heightfull - AppBar().preferredSize.height - MediaQuery.of(context).padding.top ; - - return Consumer( - builder: (_,memorandos,__){ - listamemorando = memorandos.memorandos; - - return CustomScaffold.custom( - context: context, - key: _scaffoldKey, - appTitle: "Solicitações", - height: 70, - appbar: Container( - height: 40, - alignment: Alignment.center, - decoration: BoxDecoration( - color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone - ? context.watch().darkTemas ? Colors.black : Colors.white : null, - border: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone - ? Border(top: BorderSide(color: Config.corPribar)) : null - ), - child: TextButton( - onPressed: () async { - final DateTimeRange? picked = await showDateRangePicker( - context: context, - firstDate: DateTime(2000), - lastDate: DateTime(DateTime.now().year + 1), - ); - if (picked != null ) { - memorandos.getMemorandos(context.read().usuario! ,picked.start, picked.end); - setState(() { - inicio = picked.start; - fim = picked.end; - }); - } - }, - child: CustomText.text( - DateFormat('dd/MM/yyyy').format(inicio) + " - " + - DateFormat('dd/MM/yyyy').format(fim), - style: TextStyle(color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone ? - context.watch().darkTemas ? Config.corPri : Config.corPribar : Colors.white, fontSize: 20), - ) - ), - ), - body: Container( - decoration: BoxDecoration( - border: Border(bottom: BorderSide( - width: 60, color: Theme.of(context).scaffoldBackgroundColor)) - ), - child: Padding( - padding: const EdgeInsets.all(10), - child: LiveList( - showItemInterval: const Duration(milliseconds: 0), - showItemDuration: const Duration(milliseconds: 180), - itemCount: listamemorando.length, - itemBuilder: (BuildContext context, int indice, Animation animation){ - String _diasolicitacao = ''; - String _horasolicitacao = ''; - String _data = ''; - String _descricao = ''; - int _status = 0; - if(listamemorando.isNotEmpty && listamemorando[indice].data != null ){ - _diasolicitacao = DateFormat('dd/MM', 'pt_BR'). - format( listamemorando[indice].dataSolicitacao! ).toUpperCase(); - _data = DateFormat('dd/MM/yyyy').format( listamemorando[indice].data! ); - _horasolicitacao = listamemorando[indice].horaSolicitacao!; - _descricao = listamemorando[indice].descricao!; - _status = listamemorando[indice].status!; - } - - return FadeTransition( - opacity: Tween( - begin: 0, end: 1, - ).animate(animation), - child: SlideTransition( - position: Tween( - begin: const Offset(0, -0.1), - end: Offset.zero, - ).animate(animation), - child: GestureDetector( - onTap: (){ - CustomAlert.custom( - context: context, - titulo: 'Detalhes Solicitado'.toUpperCase(), - corpo: Container( - child: DetalhesJustificativas(listamemorando[indice]), - ), - ); - }, - child: Card( - margin: const EdgeInsets.symmetric(horizontal: 10, vertical: 5), - child: Padding( padding: const EdgeInsets.all(8.0), - child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Padding(padding: const EdgeInsets.only( - left: 5, right: 5,bottom: 5, top: 5 ), - child: CustomText.text("${_horasolicitacao}\n${_diasolicitacao}", - textAlign: TextAlign.center, - ), - ), - Expanded( - child: CustomText.text( "Data: ${_data}\n${_descricao}" , - overflow: TextOverflow.ellipsis, - softWrap: true, - maxLines: 2, - ), - ), - Container( - width: 50, - child: _status == 2 ? - Image.asset('assets/imagens/check.png') : - _status == 3 ? - Image.asset('assets/imagens/erro.png', color: Colors.red,) : - _status == 1 ? - Image.asset('assets/imagens/pending.png', color: Config.corPri,) - : Container(), - ) - ],), - ) - ) - ) - ), - ); - }, - ), - ), - ), - buttom: FloatingActionButton( - backgroundColor: Config.corPri, - child: const Center( - child: Icon(Icons.add, size: 30, color: Colors.white,) - ), - onPressed: () async { - await CustomAlert.custom( - context: context, - titulo: 'LANÇAR SOLICITAÇÃO', - corpo: Container( - child: LancarSolicitacao() - ), - ); - memorandos.getMemorandos(context.read().usuario! , inicio, fim); - } - ), - ); - } - ); - } -} - -ListSolicitacoes(List listamemorando, double value, ScrollController controller){ - return SingleChildScrollView( - child: Container( - height: value, - padding: const EdgeInsets.all(10), - child: ListView.builder( - controller: controller, - //showItemInterval: Duration(milliseconds: 0), - //showItemDuration: Duration(milliseconds: 180), - itemCount: listamemorando.length , - itemBuilder: (BuildContext context, int indice, ){ - String _diasolicitacao = ''; - String _horasolicitacao = ''; - String _data = ''; - String _descricao = ''; - int _status = 0; - if(listamemorando.isNotEmpty && listamemorando[indice].data != null){ - _diasolicitacao = DateFormat('dd/MM', 'pt_BR'). - format( listamemorando[indice].dataSolicitacao! ).toUpperCase(); - _data = DateFormat('dd/MM/yyyy').format( listamemorando[indice].data! ); - _horasolicitacao = listamemorando[indice].horaSolicitacao!; - _descricao = listamemorando[indice].descricao!; - _status = listamemorando[indice].status!; - } - - return GestureDetector( - onTap: (){ - CustomAlert.custom( - context: context, - titulo: 'Detalhes Solicitado'.toUpperCase(), - corpo: Container( - child: DetalhesJustificativas(listamemorando[indice]), - ), - ); - }, - child: Card( - margin: const EdgeInsets.symmetric(horizontal: 10, vertical: 5), - child: Padding( padding: const EdgeInsets.all(8.0), - child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Padding(padding: const EdgeInsets.only( - left: 5, right: 5,bottom: 5, top: 5 ), - child: CustomText.text("${_horasolicitacao}\n${_diasolicitacao}", - textAlign: TextAlign.center, - ), - ), - Expanded( - child: CustomText.text( "Data: ${_data}\n${_descricao}" , - overflow: TextOverflow.ellipsis, - softWrap: true, - maxLines: 2, - ), - ), - Container( - width: 50, - child: _status == 2 ? - Image.asset('assets/imagens/check.png') : - _status == 3 ? - Image.asset('assets/imagens/erro.png', color: Colors.red,) : - _status == 1 ? - Image.asset('assets/imagens/pending.png', color: Config.corPri,) - : Container(), - ) - ],), - ) - ) - ); - }, - ), - ), - ); -} \ No newline at end of file diff --git a/example/pubspec.yaml b/example/pubspec.yaml deleted file mode 100644 index 1290f2a..0000000 --- a/example/pubspec.yaml +++ /dev/null @@ -1,42 +0,0 @@ -name: assecontservices_example -description: Demonstrates how to use the assecontservices plugin. - - -version: 3.1.2+1 - -publish_to: 'none' # Remove this line if you wish to publish to pub.dev - -environment: - sdk: ">=2.17.0 <3.0.0" - - -dependencies: - flutter: - sdk: flutter - flutter_localizations: - sdk: flutter - cupertino_icons: ^1.0.6 - - google_maps_flutter: ^2.5.0 - - - datetime_picker_formfield: ^2.0.1 - shimmer: ^3.0.0 - auto_animated: ^3.2.0 - - assecontservices: - path: ../ - - -dev_dependencies: - flutter_test: - sdk: flutter - - flutter_lints: ^3.0.1 - -flutter: - - uses-material-design: true - - assets: - - assets/imagens/ \ No newline at end of file diff --git a/example/web/favicon.ico b/example/web/favicon.ico deleted file mode 100644 index 676b317b1dbc24b12934f621f5df8816e82b5d38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152126 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

QGgD)n-s$+0^np*l931(()%w_Xzts=G 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 diff --git a/example/web/icons/Icon-192.png b/example/web/icons/Icon-192.png deleted file mode 100644 index 043e2749f45561dd0ec547fa4904031b17c8a288..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13606 zcmb_@Ra6{J+b!-cK?etcbCCk2iL&{2Kafu`*U|L zx@)ao-Fwxu>+!1ouBt49iAIVB0|SF8Co84?KKA@~p&-5A)z=-6VPL+T%SnlU^MO4J zM9n1_TzS>!Y83RJ%s=Zq8)SW;rin(8l0q0HQ-l5bO-j62y5zc!1JB$n%_rc~=2-c4 zY;h1N;UGS{G=Y*TF2aZ9$j-}+l@;^E+Te$?TSafrJ8mw2Wzp^}2WM|hZB6g)ON~nn z!wpARcqAI)^iZb|Sa^8Uepn2tFBr(|IJ4~JJz`S*E->)8nE$^YhP)!qWnw?rGGRQL z@`-IpOl|)phs8gR;<}~AKt3W%MoP3u|LC)q!R6Oa(udIx+lMX%p~MwsKwvjiH*io= zsh8p>L27E^n97q$pl$-eL42^uuh!O`=;~D$6;*|?z6i4P-`@&1gT}1)^qC@0r(iL~wy;ddE9H2)_f|Ye zul{iEKJEy->k{^nVbA>^5P8Iq^Ucddk|J3_ket<1|6*AbdKSnECPN{2t(&GWVALmh zCY@tD(W}Q0OJC7!?qgx2WL00y2qWiR?fm9r+A2lpw z2j+=77NVWRrueVUXP!kxAM})b7@LCAB2I z24eb#i$W{}A9Z~iwgaaFkR`{t(B1j2uI_feWP z#tQ9JS*NIGq$e4*pGTo-o*~*)F2Ox0ksduRFrKPkFXtm7mgUqQk!)-f@14{dcx!%K zOqN*HiJVi}U|iUUN6IxP1ZVU3Jp;A?H3)mk^-jcCg_stP=8)kqIWjYQ`wu2Vl~e}3 z!|RO42KDb>eTVQXQQ=Je2r8~+1dkQZS-(0p=Djs;Og+HB?B-Y^S(xyJaM~0l9n7Z6 z#{vQO`YzUjaH)U73pe)FWgkGeC2BS@PD z;O&{Mpq`5@%vWl$#Ilv~Q@jT?-X9+AUA-u1_EfB<7wpRwTUnbcy;wmGV;@I8kr#i< zU4zHdkdkVjX|)6*T2hDh40#Tlv$BwapO@@+>mco$v#`5r)bi&@7|6+C1YJhRt#=V~ zeYsA0SJNJ72Fditvdhm`TnlF@af8gi2K*D*?Wb}0_-N(C|-8J)Wy+P<=!iM zGIXDQ^ErPzY4*nAb@z_J6t98lhaI3Y555F!t>|KR93Q7IMBte(-6WBuob> z3O8jm*8A@9Q87BC z?sJ(2m|E7RP81B{ICgHpx}qiy%S7vkg~LHLzPIKVq_x%kX1{>&X28QX&@8EZ*Be9G zg6-s#^wF>n+D8$>!}t*;j@%JdgEO@@D-*Xn(77|*|1g<429+3#iZ+0y5o_otDFtuIniAVyGVqWQ*L}j} zD^e6ydXGzpQHHGKTqD}hU5dxgHx*9rXwrU-%#Gy&r*EpW;&6C zY8fEJfcfF`7f9f-EHwakA}JXSOiSoUMFD_26aNmtJT%bAzNa~b>FB{32$E`mciG0= zvWI?$Q5#3&ociumnHwMI+MYQ&ID{=$X0J;x9i41)%x(9PVhPz)@lwJ1cXm8vutaho z&)jKcHv0=N+nq`cl~Es>*px1aGtkofBy17G)d>T)9#YfH3eV= zMoZ#;mM(d}dG~d-9sDnowtfFdXu`dihxy&#j9|5PtIc%bq!yB}f7b^HE%ixot0dq<%4p?KXRIj>kFQauBmX_q1JD9(7A80S~ z`56^XdAsNW2R23unQCQg0Bx%R*_zP6#IZ7az(ksS&pvw`ztHW;0DuU}xW#dsU?T$K zZ#&nfP@IOh{Vv+Ry$xH?)kXDQSoA{i4~+?k;+rE6`S7GOMX8@@K)&G4?d3g4eGzYR zjCFI$VB+C+Y@w*UzA`8!qNbQMC|P6Cj-sbX^dMH%=(tj5>l@q+eJOa5h(Obe|xh-jp_1I6w8aJO`v&Qa62nSO3VaTQW9{PT)5Act2@a{fwzL~d#TD#Oc z8`6R3fuV~U41-sCnUteIu4^M|)ct$|FdsFMw?W`={13n>tqzV%EWB(4+jHYOCyRU0 z?+#aL>ArXm5K%cY-u@T3(e>Llfo<&I{h=2Ki$$B*ukpUEyO06>lCy+TbRc-j{7o2T z*K{@pcOYdO=G%_Ho{?VPGQxvjS(osqD~I2T%!v^b%v^f3qe-ZrGG>wbW~p(wL>F2| zC-t_ZmEsBvHj)#`yVo0Rpo^Ak_kq~B3^BC5uzWERl=s#_PI9Ba7t_t@O$TnJaX1y3 z^7?60Ra)muFcI!z9KVUr#&TAzFwjA9d*-z$gZ+X=8_{JFGvBUVFT=TT>0+Wg;AbN0 z4w~HQ6_qY+yP`TcK4x`Klhs|$jc<-3%47F(iE=Lz*}(xO*yuT>$QX|GWTJJ%9h?~0 zg0_huOw;}?*DL0ZDgOgn*1Y0sFqfqb$`d46auEA(qWMvGqxo9&A0^KhBzc*lw3c=fve`b(pBd12fsc+f~$#jdaCZh%~)?B&?3OvS@F_ zZ%EloY{^J`-G%aE2f^dg#6(xayWm8M_~UeVC67YC|Lc3&{W(UD@}a3C2EDQjpftF;2lokG-Gx8X0ewn_8OZ6n{?_yVCFz`kTQy{i0I^{9; z)%ihta&6K# zY5KC#u`rFDncTFM4@T)Ro05;qSt7gK^YaZ~X^C*qF5!AsDQA}uxO(`EGba+UV)9_e zd*&Ce&E4Zv)O&Vxih7nYqb3-t%1OE@!48ZPyaP8s(V|uj5`)WWYRgg{CAyCyx zT`;k4h*!e(!-Go3Gv@PXuTjuPs7wh@GFj8CdJ+gp!JlS*fkIP&#4^2bNt$ji74WnsEOU_f2U*5{rEUY-^^bVvg}>EWK}{=EST*>_p(12jw>Zvnrmi%-5~X6lJD5R0bZI0Wil z2zh@QoS52{C_01JzhC&$%Z@i7xdK~J|7OV55XbfB1q~)?kSPF>qou3*BTjy=ghhz} z`VVedQ{Ob&zCI6@tDm&~Zmk~J4W3H{*W+0vTsp{)#8I<=-J-L1RX7t}wQ9^4UTt1n z*UBG$l=dWcyG7cU4!0o{@7JWulPbpjb{1ZRE7lwI{bpoW&3JyexP!%NEaoqAZGN`! zTictTKdcA_X~WR8X@x*Y^2O*wc&#U&CCtkF+6>Vgp{I=Oe7 z=2jt`kbWhj5GX{<-UMK4w-37hZ9MPkAf)4XN$^)sXE(V|)dME`I%laMJ41vc3&H}N zw*i?4>6ZOsxx3%DIAeCm;-l>}(0hp;s&EssyOaCTv`DXWcPo}%eOxR$H3>azSUT&V z!hyro6&E4^goKYgwpC8?PAPT^RlPhi)Ez(9k$t%AW#g!4m7kdnGa<=o@78;fZD(BD zV@P-!IWJdFbY7TW_`%Q1dt7xLc`bUzJjqEdsq0 zUm~&&*zyFb2ix23bshD|b{`dgzy3z7G40hvEMxy;r)_XA(OU-1zUHyGay85u zwK{1n&eMA@@buw)7?2!=t>}A5SfI~MJ*qKI+z`GQsE)p-TS4fT`q4n(omPuf!vBjB z4<#Sc7W`#WxVT9>a|&&DsDHF&lEnSRdYJqH+frQU8+iz0KyU{iy}jZOe-9ApBMz4&i|0 z;Ct|lFL=?_Qk)PHEvvSQ68(vm$HD)z@~7CDn14=qMWCLH?PIClv?R&zq9G`0l4SEn zUqC0jC+|W2k1QA6M9iRyW`E-%&V7VyRTr45tC#*CVQ1@^7pJ`!>kzbX$_twb^|h3J-qPrUpAe$9b3R6e!Mh}* zY@J$Lir_Bz`TQ~_mKPh^C9q0QaJ^$M%O^HO2cr|~YqpNtVB%t*@?$mKYs{?J>@6Rtfuu0WY{)=s)| zK06;LowKFf;iYHp)^?+5tu~gX!s#HJ9X=P(Ia~@6mU0s&YS}PXmiayIEXsd;UcLGE zGMf5h407ZDM60$=&>`Nd%{c^2rE&?Fp4HeD`uW>^WEHgm5s2AOuxL|w1`8|y{?;8u zfxu;QY|F~$9#`EWt$js436Sk-F(C1(~KjaJ-MhRiT8t0jFZr`v3H z6~DMhDA3aE$MI>}HSu^~{=n_NT_C=nowb{!GhR`}3InXi;C>&bUct^n-+atO-M8GZ zvRN)Y$@KC&VJZ1hf=RRE8j5Z=tJhd-Z*5@#0+BA><^NRsFkU&XKnSkxtCtMteM4}? zp=y-e*9m5aAIb@Z-z&qJRWyM%3@Z3w`?FqIcEj{Do98M|cbP8N!{=cplVnjzp?8#U zsmE8yk3O)OUlj<(>$vqQLestto5~c#9*>2n@1$Cy#F-<9S>l6bxmx~SHO7N3hKlX2 zGu9^sdh~FnKL9+!eAxNl%Vv=dyW1l?{fAHMcD%>t!eOKDPWES(rvd#Y!?*DTADljZ z*`ix2iQl+qd6u2$SGQtejrYX>-UQ$0e==DAwgh4juT9+kBietb6&KZ7MYffsg)$cC z0At6|7?EX5BUTx}*+IGoL{pV7WADztsW=DPLD3E>IlFz3*B4MU=2C07{_q{H`HR-n zhKV!AAjiSam<5lwH*#68tz%k;U3TVY$EmktivhTIaQ8iDCuYRsrw{6IDx; zwIZwTP><@yAkdAiuENC&4i7wrvbYfO|9DP}i_6KkT{UTLp;LcAI}LA=u@fE(Q}#t$QvGmkxMg zB#|X7;@aiZ>(qz9)9lhpb?n~(lgX}(yBp=yD?e*9jp+(_3G7;w<&_K@K@;(YIU*Hx z;o|Q$JNKW*+gL9c zh+S+;lCwO(+VJewsnByF2X0Yg9Qcoa6J*aj$E*tM^XxM0!(2y$w;H~VXDUy4-FSQH zu+pB_fqC)*&X5?~>;Q-38O4;3F(jo(X@m%klUe79yNYx~RXS##ac!=g&bt=Si zJQc|76ywgD-)!qU#lIG`^eBMwhw4HFxsdd&ArA-!1Dwau(cgex((baGzmew4 zMid>pzv_7d{dyp8%@0DRtN%eJz|}u7tSe8m4xibw_{W2w0qfz;l>yd&c}++}A`U%qk`K zAOw#7=sg`xvw%6A$Fomn;jBu%lIUFMr@&nc0rQ~Ai8@^Q2mS$)rluq*mFiLkj%yX{ znvs{?X6-60Nm2CO*Av+Hmc<1jL|e);{V>vFIAbgxO|i6j{|)uz92-p-GvQh(j6(YE z5jh3|@$2{8604+;v0RT`F|S=~FZbNL4@`WQFYx%kj>BHx-xPihfVNl*5RX)0HZ!HK z!mi#+6)tgIt*AU@o=g$DBo)GKi^_5r2KA){Mx%5hjc+EQ-3^f&eDTw^&kNmIp??dN-Dbhobg#iePP0(-f-U3et7gBKrlx%yeJ{wUy^1z54poM4zODTXM`p0VbJ z;Y%6K-Gqe?>Kgy?ahpBh=WiC((q4)C>CE0oU@P4$UMKh|caW*DU{*CX9|4BmDv z=34lWlw~j(at~or50&3bk;chbASn^Xg6(Gsph%ceQ7h2mBm+Mk!8&ViFRB3-wiPGK z)bduzpOsn0NEC@XTIR}IZ(0Ay184aYpv_v+-ezFIw66KE!ndd;v{;`i%0j z!5{GU>%x1;LbTrewt z=oVb|QzX|soNmGENJE@l8Toxnz^OePaxSVQ#Jw=*gL!fCk=TGbcLt%9N(e>Pk0z2r z&W*fxzFJb_igE(1hto-MX6633vDb~(o<*rfsZl`%lf8A^!Rqavlm~f=pp6qMj4GM_ z5vVB6{41@%(E0^cJYjUVYG`}a@>(Fm7J*Elv=Jc7LuN!*KPhYKpXDQVOVNj@by!bA zxxuy5(8%+8+gIP*g+H+41~d2ASu}lq2(rx0jN{$D@XNcro7cA_ZpUhBV{JIczVETf zG;R)Z4cc@O!bI^OTe0Nt*cI#HTb4??)FiE$rJdT2^v;`vb_=Ziex66GMO`~!PgqZK zTn%bI;BYvvX9l_}tHry1`)uV;XKdWpzX2Qh8KAxCrQ17&nRJ&&h2@RC%^P&#J!&gw zJ;09HD9II6TF95VVQCh?kCe{BPLNQfo?8**3aODDoWUFkL?C_;=gFfvcwkv0je$e{)U^dez<+`6n z>*y*P)TPjbmlEtd!Tqw>e>{X`3{lJ^DwcltmAW9JzThq7jvR$nMW~ z+>`0HoKH#j_1v2tc_+*-Nc$wcwq_I}#dhu^^nh4y7IJtQh{@=A9k#-{`B)5KWH zmZ+dqSEf`14@mEu{lbe1QrSc}B#+Qx|TRLPdXq0@%JGzgKDm%@a#+UtGH| zPtxIlrL^-H9Az2iE~XfOIsJ@qZlu^|s*K`4@V@=<>qF9l&pN`oQ=FYS8zYZn$q_V+ z=Y4$vq&rI}FP2aO_RgtoXiub)D0#u{qb)>%$Z7Mes*l3W(9ovmIA@Z^w5n%W;n7HRZoe$TP$EUH&$!&eyr=1RB({xvu0Wdf4pl1j zwm7(cU;}WGkoXJECc^l#P}s8Zga7wr?>t+{#5<`W`*iz)Shcttd!fYM9w@<| zzc5-dzzNGz+G$I`Hpvn9>z{xG5gp`0w5^0{^u}_6-piuKjk69SVw()7PuluuJSYju z-Zql-7Ip>5GjBBNV1Rfvf{z$3i46U6Sf-RNep`QDQGv%lk%&1M z*^r_7NJccftZVC$OXw#`F^yX(rd9Azu#qA2dGMo-CI77V9+{x@jSw>Pp2GaP_LnR;j=XjSO85S>Qc=i$ zQ!a5iGj2`%OgEce%sBdPUS^TRd%$~b0gYe2BI&xJpAx*zv#md^8Y3zK*xpj$yzssn@;}gk^E};Y-KbW7(K+mOW#)gWPvFC zSI~`?E|>oav`AGI87~&;O0XxqB{4fSb`D|vYy@Jhc9ga(Bl9?4+3{A1X>dCes-aIxZP z6cVLi8Hqvq^A%QyJ5Q8lRPs9{@=DCWx_|Ux>a)(2fY?ZwP7?f#1m*aU=3o{OT?m_2 z#y;)7{NH{oHgdoHXVLi=j-SVo+q=+gt##kO6kS0e^J(+TAoQ9EOTHmD*rg0)@{ks( zV7^hSKja>*dB}j7<~F>0!?f@MLjgRN={RwEOC4(e2*PAdw_0w_?whD0SncSxp824M z#<&}=niZ{4)ZM~ER78BZ>j~%Gh|8aGd%T%`W8eUMqfiR-Q?w_^2ziLxB)ATYfvpZA zk{G%Yt{MC7B;8sQwE~_L2cEK>h16j$NeJGOc3sJw!v=`PT|G#1r#V&+W9N#_eG72o z6lwc{I|U#?ZsX@5NGS9WfRaTCux~GpJq{w82YH(I#^h{O**G9ySKx#U!7rS^^o;|E z@Baz7_rf_o3rM#t*L2d@GrZ_{pm_HkVb;0Z<=Gcfj_A7gsk=@o*j3$n_CUhu$H z+C)Hj*l=%&kQYdS3yR9)qR<>_@tKoLr_X%j<=2pKRF118C49vUMY+goF0X@AmIN(lM@SFtmzmvc zBOyuJAF`*|NR0@yFNtq@SwuSaB z7X*w*5*SI;!MBQ^pr}D_fPQ?g}A-uv1u5Vp5j^CYR7H|umnII z?!1k90x)*^E~lF%SJRqr{X)ktuSsclZKdq{DO^DmC~zBm(>A|oV{$`Y_JR&G503_X|hcn+#jOad$!{WNImw zCj)9O5jakP7zJN~Ob`0vq7fm!*4twZI0~E8#aKY0d zy8=5VZh&)mpcgP&Rt~zOYW4?s6Yd9CV@$Y#l4gAA0r79<n{PDF6jWC%p2Js+Ym&rnj+Y1(PGO7T3qHevbsQ?t^7tJmtIs4|E@?841o$v{ zkONZ2e==hCD8FbQ{oyXOf#+Utj%)$X>Ll;y(mpWf< zojqirnv0@V-_OWwmdqmZ39B%i-iD$IsZbliKX}q`oyl4V=fE&EZiO(@kX4#~Y4qA> zN4>sH&oKe(k^pIO!am#eFhg{Q-q|nSw;z*YZaXrHjeIo?-8;-S-X%gdj@CugRCeDJ zMVX-++IV=F5ggT@5g!^{TY&LE@KM4w_U9c==`*q36Tf|LST*+P`&f-9Bnu_7WX5u{sTvu}{&<_())S-%3p4 z?)TBAlmw|ARBmb_26tMu`wr_y=5z0{E9JQ4Wmsr(~s?!|?nwU`cai$zOh^ADN9XBYPfo>O-M zA#ZTO+E%Yixz~SK8PCjOLEJlktHmIlG(=ZBcA)O9Gv3bEqnryiM4F5b7bxa|oh5>S zu-UZ9@O|=A+osrKjj!fDLH*x=59qO3KTB<0ir3B#1?(H)dDUGN3XLK zCfz*?tk1&lj2^6scS*%Mcl?rZY3l)B@lISg5~fR@DtoZyYrrfW&`U}f%x`x)&un5| z96tDnz#iYtAap{{FK==La%)SP7SBmWC)69umetT3A4)Or7MITVDO5wJssy0m9OFz% z|C@r^&MsRFx0<>`YF zVSx&7;15qyRBi{-K2Q4lQSg4Zp#!*lj#pQ#Ru8p$<8^iUpsuS3W*r_YgpV?qeLHik zM6LHtgF!v_hvN1e!ond}2!1MyGFxr;6L}7dIhj3*DWuenD@3Xnx~<>s0fsQ1lg#}; z``4C4dW2S2dpjGH@lIxRf(xab_{0R@kat{X$a{kwyBWQgg7mSb4Y`5Pg#(}vb_2DV z{0SA==PFytg97cs4XOo87}7d5cA894*9+{fqbgBrt@Tr1+bOxx<{6{V>fd&OEir8_ zd?pW1w%CeLA_t6dIwpOtcq*N}{Zv_U(&Qac`&tC=GF!PXV^UF3i7 zk-i1G6ryJ8x9Cym^L&SxUHgFAT}jxfStycu&WVEfRzUM#1ET|f^IBV57|E*agJ)$0GB|fW$bS~$lfB8Lhip} zaYd2@)4n?K6*loE^YvYSXgMs(`*ZpNpZ-EN?NJBFKvihKqo(FSdh+zj%W+&t(W>y@ zH%{Mzmah*ctk3$L|G9_R$H}?c_n}-^^B&l^zo@NU+!?!v4MGtj=s>iDDSR7yT3wr1 zA;>1&4|Y*Y{QQ|Zz1jcq6TIt|=U%%+U5{hmM2h@vufE_cQ$b*O;=+F%4$hZt}Ug>zU0Hw9jO(@Z7P;+Myj%vku1X=L)ETR%BZLha) zd0f6w7EkNs?3Ib2*Oilh|16P&w2iIsI6|=mb4l{p&GR+#kpAqJE%=)$J|V zf9al7hHxmjvC*+Xju*G%Q(D-oPRX;tnmc3WY0LDZ&Y(%5}l5B*}1cU@30|tyvG}Hqs{vvH{50@f2~_wPzxs zp3T0}^o_8;8kHeNQ?20fcCP31q@g^rma~o(vjx(aBDAWRX#RE7SgK92hs{EPS{oMR z)5#>4>x1&iuBUFsEKI4NgzUr=;A+_$7&d8x_Ho?N&wGwCuDTN`7s0kzQL#A z>Qtgt%;pP%Ix20su9KD3L z6?&32a#SzA=kX6&roAIqWYPA-REm9&P}jzM4J#GmXm#dTqPi&|(sKN35vbGIX#g?3 z;ZaXNkk^haWjYs5du z_+x2pF+McRWOgf6RKem0a>m9-E$9OW9!ZAqB< zlV~B>vbuyZr1mVvj_|*k-Te!#Lbzf6qBc;y>cm1jO8T}9yj7(k6-;s2{my50&FaD5 zp$2~#_$nfQ%1_&!`}gMSxa9~`eOZ8lH^PcQOlfUIOOp<(TTZQi$YOEBK(Ah2fl0RC ze>W@uQ0I|*P+zMT05Fw(45zi(63fr6OZOzuyr8kSt^S)ngk!RoSN6Fm^ZHZeagl^BHf1xanas0?`b_NWg-}SoC zHzoB>9)E*xj5ZCsrlV%YJU-;n&*&lna53f|U>L=}S*pGzA#^vYLMExfV)HC`0nLAm zSCk2Z@{n2Jy|KfTZSN0Nyf{LKN(`Yo zXoy#Poqp$jQFZ6vDH<=Hbr2G}Ha{m+zny zhj|G1{~Wp%{$oZoHyOg(yb#!~mUIGXKTq^~P$nD!;z}8f4WAg&9tHJvV*`Raed_ki zX9681%bBFAcrVNE#HZ+?-i3R4RRrSGr^FN<-@oAuH%oATaPN z41%BlKmLV`9DpCtJLb9?klF#R-w+5NL|;qYBE)g6jWUnhI`ZVSIRCAWwe8M~o8hY$ zUJVal{5;q1aJw6acTPYnKVaiRf8dScKhikC^2IwN;Mf0}dQf=x)BX_4sd01|DGJtvhgdqR>(MraZ zLJ}=ne_TWJLC-!za8XDeLI?{x`=HceOb`Z|OD#tK`4bEN`uv}#z=Mf=P%0dPqR8Rg z|NcV-`T75SYbJyo3y&GNko~{^kVEd^;Clc02Vl6Yu|S@BfSwIK=;-?|l{EgCL-YAFWY_P(7sV_P?JF58SgL zNK!h49Ji^_MUjQ=NB&BPoX-f0RW{eSv>IjrWs9S(mYMk@din3@FmJl*G!BP?(P^vq z$8?$A$C(1}B*|jDS&*{1xUd$5f8s5%wB=i?zK|U9JeZt58JTP7-7gA!{M(62yDb+a z`LbjrZp05gDuvwZ+kg;4coS^>?JXalQ4qnspxMxCLBs> zWSkqX^(3Hh`8Y}VZW)JEU(14J3pdLr`SEM?d{R)6$~c@wIqV7@-JuB#DhMKAJ?`b( zuR^7~M_!3eO8-8y*@}?+rj@*p{K;=Lz^z5OLX$ZN>w-J4QocMSuwq7H>{o*iZ*~q# zV@m@Po%D2#B_LhU!q)av?ed2aSG?|$t~XfNkE=o%V^t*W0!ZIUG8)(t4j5)K>a zvBrXW!W0r*sSTZesg5MecJUd5KD;+YJepdg=wl3Ak5C7q?hyxjqxfIAkzVk#S%bM` zFHZVvhg+<>bZz31~7e2mI4m$X`9Xnl15aHJ<)|gq$!k4R#9ST8=Hv7vmIY4+CKS`&gK&z+C$d zH6Ks6h+WBh>zCwYcM|?B&ahZ%&+HbYRGO(kZmJ`=8YUL(77UKU9ViuPuccGSvI-3f z;-!IIh%$Q2#KTn+v5WQ{Z-y!-2(Hh4^75xwYu8yXI;oKcH^-DTuzH^}c6tQgLPP$f zl6Qafxbs-8_d;H_5XuK6)UWAk;hSWzG|dwo7_V12#i_tpS@a3p6SGCASGrnWhT&NH zvt*`a|8G^jV?F*yhtGp1nmwq3CvcR=Ozbkk3}TV4vS|b}OWA$%Rf?xC*lTyLe?TWM zh@z1p;ko$HFEO>aQ(82p?u+jzR&!Jk!*$t(uFLuxng5duWWy2?w`k0p#;wo@2B2FM zdA0+R1?r$JMSs_~h>&r$z~3(_MgHVD|KHN~oen4XKM!1$xR8v^{a+cTBecD{GIU1W z^I~}Cr;>J@0zejis&g%9E?7loy$}AR#^}g&N5{Tsn$Av$Om1uzJ>jKa`g^HfX@;HG zlMO#+YFDpC7uqy}q6aP}4YIqap!ZBNoCz8{?&R#>5HoA(_kQchcU*u@Zjm=mGX-)Z zVEkF9PyS1rfOAM{19-h7mT6&7^&kO+rReLOIa)Xz&u$aG(~^)~^WD`WsxD|>cX@s@ z&Su@#7rwIk`}M>&Q|s-N z)w!l}E5#37bapiXw{A*U6`K%X+Sm^r6l=v9K<6Y;HgAIv87{+CsfXQrGDvsx2&}Q_}zxAF} z-4A*B<&x2t_Vt1N>Z0usLRQsxbso;owRr(Ig&K=qj&Af!=_S5ZhY6pd ze^Et$!}|zt_0vrfOJDPZiVkz~o*2t?b0a@ocX^@atE5EZzB-Jd+2BR3`_YFxd4a2W zdhYWd-AB0Eb*TkX0$lMO$aoXOd}A0(I3)cVlsU#Kmk=t#S3d9z{U2TBR^i6KkI(X5{!mKTSzpl$5e9PF7q@aCf8Cb%nsMsAAJVveZpzCqhL-MFK|yY68PD!5-Qv2C zbWzbU7mxW(>2X1=SQqvMtQ)d7znlSoq>ue#TitXl6{wiJY1gl~Icwx=Y`R@Ve!`_m z{Ly_pMSCBv3$?}F=jF%mfmMVhKD+=L6C3Nw$@X1mp}{KUifbi*?8ng4lpAXsG0$Qj z#I?M#UVJNv%&VX+xC&*}zh9Y6IAjC}G$<3Bg?P4im7hCN3mv`D%rLxGQ@GawZ``oJ zveP^aWO#CersVfsF0~XX{JPC*Xixc5xX?c; z$kiLfW*M3i-;v%{E(&pE80v6l!e$-t8XkYaV^pDH7`#@bITFZ$g7~I@R4xhM=p!E zymS_<8BKP4A9|hK&ds?eOms3Su^_~F939U;K113ZAweyQ@HfQ4EUZ{kDEDla+_?Ip zQ@~L19cH;rsT({ApBvc%|9P#c6}kH0(EdM#%e6s0U`xE|mtusi+s|d;*$6{t^yPMC zQKSmY#^l~XHpdfaPP*Cg3A=kSE(!z}A4mly@=YFu9Gmi$7;{Brj{Wpq!>jrii_-rd z^znhsp8wStqsXLtb(2e>s4&(#!xkgi@b|Gr@KT^Y-xN4w7q`=HZ7h5$IU0HNWYXmF zjq{66g}oi*Pmfi59HD_fufxZdI)1L!>67GXTigtf8d3YaZM>N%V zkItJ8RPn{k#K*9W9p$3KvTxneHVZC*ZQ76SL>EWD+$ zN89{yoPsid<5Y}|G4R$HDzE#(U9I&pqN07J7#vomD0r3^=t0yY(D37LqK10aCcCB` zR*8Mz>$(Cg8lvlGqGiS(9xyd&IMbLY*0~X04Cg0Bs%;JcFva!n@J|e%}m7`}N zT;IB4K$CrF^RLhSVp!czSq@m5Pz6{1J-I$OEgqW4SzyBsWO_J1&~i|Sb3Zz?-P0tk ztTNX>?Wu{14M%Wsz{t=_@~_XF>XUKd-nI&~VQugw`Gs5J^{@Ih z-aHKabY1ha&EDS(zaW6yZ)^N2Fq~cYQH)TR?77tGy}_knJ37b zlQw7Uh)JYN<0f5^hbv3b&I`ZTVG18>^P1fyOuoC1prKX>8YB3Rq1z|`7%1Il1Ti4k zNcmk4%athh=|EI`Rv$fDe65Dz_x65POodW9TFie*`q^HK$y`>2c2W!4*=qptgk$>+ zDN}%WDb~XEPgcC_g?EQYtS?Z-!?uH{kWVkV-p6Fu&p(rf8z@3I7z<2bJ%E`oGkVl& zRf_yo7M)LEZQ<>8mFss_zQ}P3mP;a5WhuW`^Uaq^M>QKY#1!aFJp1X3oX zkQAdg>=Q}Er_|4mO#Gds7G)?0T4JAb?b+%#NG2L1LAl3Wa!+Kh;W0nvm%7_wiVjeU zhiGUSAETLe6jwRb>2xrsDnoR3ZwDXcc57pJJmJeL>T_$gJMd50da%QsPL^fla;@Yco9o7RRY==fhOP%fRI~Ixv@(sUccX*CE?o&jv&;Ze(pQki zP}AeDSKhT|#7er7A_iSaR|$*RMpw8B@Io?zZiI*E3#tNwaAF@1%NwDnS-G#mv4WA_TG z`T+!cl$IRR;_Ut_`5EqYd+{Db=Z}& z+N&Y)b;pKj+XD<*|MQ>ia}~Ce^L)K!r-@7P^6*cW)7j>FN>VaV@PAgS-rr>}d|kB}2kyPsh}QMmqshaAgttEf0{D@gL&4sB+|(9@XEOf1t` zCg=aOR(`JZ`<`+r+2SRAiC-@v`uX1${9EvWTN&gaD;)=G# zJ5wm?p`LDQiErB}o9d50@Zw+p#JnfX4?CMDdx(j$(BKjrO;iC-dWJ9WGg|!pZF+V4Efm5nC8}jl$LcN4laJ8ttdS3`<*-DZfx8kok`d5VU>$*=(FDd zC8BNuA9hK7o@({5LT$%W?c}%zF-p{FnKGhX7C&8!)2rj zu)LuJ#R=}a2`99v>r2k+o7S0cUZc87iBc1u#NxI+F?iJSI6PvrXaJ)X-vG@MDFdko zwYsI#a>ol|t%qbVbq+dh^4Gl0$@M%ndI~N-kx!gy%hg~_A|T&%jTenM9|my1@HutkIKsO3!0@ZpAQzS5YB%OlRloLOq~OV@ri z98UVAGsnZ4yYGH~t_$vM3G->*MOLBGU8MgUA3e3qu1TjMr8!2jAf7;de-WvE#+AN* z_VNpOBrRHR?&XQ{R!`$C=gEL)3_wNx{IFvFtu%XHqbYeh+8s~5VQ{t7_{9!NK;vNN zGfeCaHEUksnK%gdSSN{-GNNX!Xz^kYxGoc@7h#JA*Lk%$mn9NtKCPHou^tZApE z<@}C@ZM;&W=3Nb>>ey_Dq}R+GjW*_9)|*>EG?znYNz3_Jq>&tTjGM|HvRN_q^5hC| z_y`_8`MQ1hDf@6^Q6*+axx|1|Vj4z27-15QxwuP!1ZXWBXJf7$IA22I*qwc-cI&llWaja*hB*uQ&6YO3GIex z{lcra&vZDPdpe#~XkI&5=YVaKrtlv_BHSt2ZqlVM-MD&fZu^|J2uO){pR_tFA!MzN zWEewyw=PYYw>_^Pl}b42?^LVW^XKE!qT5`$w74p1?Rx6T*=4Z2{2VS?w1nEq<_QcLxk1{>0 z>#C;w!oc@i^NRXxFZOtU7e2FCQPG^Mjc_0F&5P}Je}y_H4!08HY2EArHDq(h%_FTi zL^JcL(dS^5;Gylz;9~9#(az7-6-Lo^J0xvY>DIbP*xC~ z{9SY|cT>Xc7oA{E-2SN9jdvevNPSIFyjtP7pqIwUl&5|6F>z?i_S8o;e~=V6>f{2(^rY_C)ZtUm7Z1MFY6HoflVE8 zaW@(>nx#~8Wf6E2yx&jzeD4feh&XijB_-p^TSY&(y0^>JIw~+w4lZ5eAF^h+?m7c* z8nWFr298$}m*2L!l@LYE_rw-o6XhM6iR(c8nt4VXo6DP$!2tlHMLNL88)4 z-cMG5v}giz;`B$IPWfE)o?Ni%U>HPp1b2Kz*(jif$I@`0b+1SqI4e|t>Ds4#<5pr>MEp~b5w zIay5TpJi{#Cnb(O9lBC#iJLq2zpRe#q#SSa;jw3#D_ZrAu&|Vxbb5wcp(W9Tqp2b>S z+@6&8&L2LlVX8Y5}$0ux7JiIfiv>nkPU1!E$GMj!3L0B|*joBRUW-t}AwKJ5g zHODibcClXHeTF3f6X@>srnf&n&?>C$hk*DXtuCgEgO%Q16O48rBe`D>tCKC}ROF4f zU_Nag^;=>Td=KF|@0_O;ac5BIXz}L;CRO4;QQ;x*1vBJot9v<7%JN~?<19mrbVD|P z60Bt+b3W`5=5M;*H;e(XK^+x26gj0%1>vO>`D`o`N2Xjt5R9Rlr;K#O7rFOzVEPIo zl?}0*jLvd%KNh<&+dB*>x-)Ps2FmMF=_$cTYqz89&{Dr}GV!`cF}uCz^=vTBKTMx& z3m6myi^C_H!~5@E-U*@=hwGdtsjiBX<1+3sJgfkbu4>CkP+<|D-tV$fU8(~IR%wBF zRs@anARHL^*|&vBudaT}tbl&(%Dtiwb^4bLBe1$8ng{~Bk!%|d@!GPtk*3!?X8XIY zc1fR5>;;=ZdAJeN9IkHF7*D%!u!9@&eee+6(6s>F!ercO zPs)o}vew(|_%RvTuQ(d~O!{)Vt4wgQ-B)lQerml{Hi4S?E-gL`R4E)GsF*wz5>l~xe=Mt0x>VIkJ#TuiGWKQ$-Z|y z#^~fVGn@FMIe0ORR4xtg{cFp%#fLWsfnQY4#nFjzXjO$F4)VWQfL=9=`3_wlg2<)X zOUnQ1qJJs={3x3w3N34eP{d|+_8QTrI$dNA++o+d3as|)15x*;^N>&a%8&Q{rba95 znk@d{zvH3=4*S)@xoI{5XU)HLOSy8vNj_+J7zS|MZ}b0B!Cb^Yw-!qlu|noHszDcZ ztUK0ycdB!ai9KoyKRP$U;cxiOmIAtJ)z|+F*Y6-`@t@PbogG+ZQE#?0@-SmQC5C?S zWxqv_8ujYt*(^b!A)y*Yn(QtoejT;$!g5qOLg>+=%)klFvz7yQOmpwzeC1ejGD68! z783Z}j1Hk^t7L`eth&rh*zMl?kHvFtbq$E+T`Y*lo-_Ceik1g7l2R|yqNU?XGGO+{ivlZm|~DV zoc&@x9``Xh`l|``ZaX`C>N$?=?9rJP9}H8KTTRC{Wf-vK*j~`X3Ypo1RXxietD#|evjaWE zp*ca)$K^W!eUFj)criaIk@k5wQ47SIZ=}tba^lBPO&5VLZg|#neKHpSD@f3WE&k>; z!g8K^m+C4r){V8t()H>C5ufnmQ-tO?V8UE3EYAg_D*T@X_61Le5{6~3j*E(H$DW04=ZUEK>3K*pT>4WkF*Ukvg55?g>cS=4 zKE9_t4qwU(nbyL;p0RD)0_pjFGl@T1%wM2vWZ!*lN0DRSEIK`y3GeN2O8tTBSZfEo z?PIfLZM``Os0x+yQ{utz6SkJS(l^f0da?l(=-<`{&UpdJtG32|TKjtxrIMBB0M`hA%j9r3EgJ1`Yr#g^h3DYOuEr%mh#Ei(#)JTM z-ykuBPrH1-c{!~B6K#Dz9(z+a1@zM2usOU@`{lc17gv({BQYUNBCcq~s^jYbVz=EM zZm;RAVpYt8LmF0S$d3T_^#X~%g`OPy0cM-N0g}~ul{+DxpSKhHDG)YOt4&;6q4a38 zL%1Ha`_sa6^J*4x1U8WNE$6{fYA8)?%JG~fj z^8>??_lK1FJ1j;fGFH+;tqRCOO~SMYU(D&a3|s_NE9 zcZA+GB)L47K6$#UZeVqk5@c1s7bQ64fzYBFlj`6$+|84PA4uw{def8R=wlWt&xJCd z^6)kx>Gy1DluK~un~xJquD@^0#GU!FlZrfiOp=Fw>04&k9GrW2F%no8MrkG&bSnl4 z%{-y4(kG!p+A6WKzyXvrVeNu*VFBK5Um9+QIIpjhM&oxeu1XiE|2e!k8s?*doWAd} zmi)?m`h?8p{O9~Pu(7}p>hvP#9yKTJq%?l~9i*ZeXywe*ZpIO*{oa2a_CySq@@FRf zEe0-{$F`|YI7=;8HPaW=64W+1PCq1rIf7X@+*#SHe~#uPa!e?~WuK4j=A%P6N!g3} z7B@MzXXtRRx0qO`X^a*>*Ad%p8E!)y?3lmauQ$g9=#P5!Cm1&(&5N08I27EV@eJs8 z;I0ubz&^<@eGuZ|?Eq?Vge&*eMCG3oLJ5Ht{xe_a^V*-WNcRB@&eUAO$J^+?^km!K=~IpYqCp&LXmJ0WM9`D)>s_~o{g>{tRNZ40hf~Ow3VXgg?8#-n_1LDl(9L9b1 zw*6!PH<$82ax}vrbpd`dD#X54&?a*@TTJO7<5feJrQb(=a&6FLO*a5>OhwCd2z zSa26Cj>&GK+CK612{`KwtBaV8i(okc9dWXIKICrC@(UE(zj~IkVgImO5nP~8gECcT++U^1J%$#};3D~UkP0HN?(Dd>@(upXW z6&T;o+a=oq(}oBUs1M@J?GWOSKj^3PCv4{}2TCWcJt5;FrQFeN8)A^mr)^eo9)g3aJ5R8b5^F9aD+Nu~ya+ z(u!v9WoLXPv3A-!=a%aNalS~%f8XgG-L9Pfmrnt>UPq2!Jb)F&Y=!-Bl24~h;O&&s ztxArrs6u@Lvo(AI@DVgtrnsBF(Womo*9kgoplM0F#2^U}$=BqjS`ww*V^?FCVQqfQ z$>=6_)h*iOyv%~@&Ln2DuebeQ$XFqY;&nLww-3Y`2r8NTcQR-r?7QUv<^KtM)%hiq_vNR^ZRtVMKdI- zwCKTD1psrXvG8P=V$rDx|K(7a#&BIAq|Eg1Y>WvYVSh1r>l`{PI#H<=HnThZ>OcjV zY^`^&PlZq+wc>C*d3W>ekWh{QuCckrDXvC_+9P7WJ zwv^?*r&qcU9}&gbBGwY&8`na`i>Id^*->cJuTj};6xLBaZNNz zPKW(e@gMJk|La>q{vYA3&vAZ08-6uwAd~xx&E0=~um=p{B<+iE!{-{(N~zBurkoiJ zCt20r5Ghz+Yu^QpP=kVImqBA^-dmZM>!q;_*|P9>*?(Y+hxP?1eVX*`wiI$ZD3ryW zIqu&&(d6(8N`WV96FA93yf!VH-A_CaPn4+4B$`!Q=*V${F!R)(!2hz^xFy2(-8$<)JUbt~Oo>^9$*|5QUE{pY5b%1c z?2ObDzU^25*U%@}F>gI=^6lNT3XWm#uh($?AYcqdJ;sIgcF@V`OT0Z1w*T%$|D@Y3 znxE=oiw4Y15adDArOC%ZGu-2V4)#9&Q>>oc+mWf2GtGzp!~lTK zgaE#UbvAjW=}kQQAb@0VGnsYfrKT+FwY4`mZt0b{s{8W4X88-v>IRo23}#5X2o3ajd0gMB1kP@D;`O z%exGM@E~!BpQI_q&!&PWaq(GS&VkX)GiK`bPnIKpOY1x$h@Ld|Ow$xsA#jX8AhP7W zs%Hz_U7fEk^6H+Fv0ahRhu_o0S|gayy4&j)eRqAvL-pRp6Xx#XB_%;a8R0AjZu~-A zbiq6J=sP_c-w)}XX@1;5Bc!2z{c|Eg-xoSVy8-*u_*c+^|P~myL$acnrT@w z^C^r)T|O6n&lFIvKef?K7n;eo8--nZeZZM)Jir1bj9;}=B9mit0J-lf$b?WT-U0(y z*%=bE=4qp0bZn)Qwx;)F%PfqiF)9QL7{!|2l@z7TYj$TW?lIo%{HQLqf3@pu@DGA~ zP=FId-LN4z)xD!tyEcuyS!hR*t4xu5Ta5~5SZ3WjC=bfFweQ=h(Qe+9e%fdA`#fiy z|4V!2)Cd=fU7iMDR@mR_P*kRKeiy#TaNbG8uQxXVg!9b$m-#}du(L9|m-{HkRVvRMbJWsjIn}0uKx2cyj(R9W> zHigb@V*&njezG-XEbdR87Ok4WR-g;}dggQ1Tx~SgYNndbX3~HbT*qt3%)-;U8 zB&S!cBq8;SAYKpcuRsk`Z8?%ZiU<^8BT8`Tr@Si3#={7GUx{KTqi<@v7VI3m<{kw% zkJe=@_EcnHA0VG4v|)sUihtvgQZuodBGRZFT(=v(-I$sRG8<2^C3bQ=_ee5i$-sB# z&!X8&PoNf9ebGIB|CCz@+0S8$-}pF7K-IJ5=?uaOnP&J8o3MVF7o?S8#h2H>v+hU_ z&C<*dpO|V(WEc%+D)@&6_tl|u-M?fxPCtvahHOh4ZMNsw9Uov!ywS)^LJLy12BmoN z_7C2hTO58Mdj&MM*w~JDOOoa_1;M3eyMHCEbhEwG2j9JEN|=-;)#c14m(;8pX_lI1 z$H55hcpzy*jsErD>ryV*KPs{(`w}|dbl|Hg8Hbo*v`H$JE!U5z6w11ee(97DV`Exk4>#QUFKjO61ZtlY2YyZLe zY|@t}tS$m}DDtB!l8}}+1sH0j{!d-r_$%lr%$PEd$OUHg2rrp<%OIlUqbaQw*2KE1 zcU0mx2YTn^Tc(?$HSd}43%LBf3*HMkMWJxz6&EFwd@2FNeyuQ1dM@kC@dEWLM)V4V z#D@Ug>|0H9ehKXq$|C;~0Y`NP_sF2ZOxOioP5`dAYjG}LQNI$J%^?6JIe$05 zB<3cSxCf=gx-S0tb@0+kvJqig+U7B+Eq2J=5N|vX64Hw~_UW)v;gRHj`4x7@s?q(@ zQ&ZvGY0=u(`}={flE9=1BEoIf*(lrveWSfNo8_R1UPvZdJaaN&P2vbGcE{(4Uy_uGX&1K@|2dT@ zZZ(1h%fi4FdF_-LGCp(C24a%{zh&rbN@2S!qN;2;oRdV6IZ7>}4KNEmFCs;}mP zjy3{8#ja%m>{QPIfgPu-s?N3v7&BxWxk-PcnECV*8w|`0>k;VTk1P;Vw_l0$szfpl z6uQI_ZYRWp0o3=?$?MbpU0!&mo?}1W(x1seda~Tx2^zT2*oY101>x1cJnep%@nhUzEKpgB3 znUgPE0ccalLl{kd9LLhas}52yovAjc;0 zhcll}yfJb4S|qjjsd1BVrB`iZ*ZTV3*2_T4W@oOWP`s9=Z#tWpeTJEI*F+%(M%Oq` zU+G8e9n_E}s~uye&Daj4h>@Y8|FM5GD0htXj{b0F6PxZ(cBTS=vP!xFd5~E@v#Q|k zY(}57EaP6*dzoAh=#T%l<0DXll)_u7@a~0Hd0U^2yvJRKP&NxT=8y-d`YV_dmB>S} z&uga?xyKJP<)naST<>ovd%oC-*EC!t4NbjP{4i&FYv z7f0BP1wl=sAl^@EgI4A{C_#l03gp&Ibg^b zo?X0s4>pHB53spiLQ(Iqg34e`lvI|8n#mbjSz!doj&7lOdwFuJ%dQ5Pvc@Abh&@be zkYs%}20`BzE3V9x8eMqU0k1j|J;Ow;1vqOikLj;7Y^O_U0LjM+l|h=}iShn(H?m2q z52i`GvANfXn`oQAa9Rpw)R#F@1o887*_AR6)OG7sJ7*gvthvq z^KtX#2TU^M;)HQGXzIQBilGbF_^yz`1Ji#)tmYSj81X~@Itr3GMv-+&tX@{z&scUO z9QZN(!~)~;fYTROWZ{l5Kwh&DZpog|D#ca$MM5cF0Ve)!_t6LKzV zzwMkukw1|1WmT;-SMg#tv4G}bb;5iL4Q~0*s#5T!=<%6b)q8wnJ`Zu_sYY=@ zf0`n@nWc1QimW_@@mAML)8G@b5V_UUN<18AQ}%lGPO@7zG`;uteRS|_HSLx{-E=JP zg*7^ve0vX^-=8&>3sOi9G<7irYDxvZ|Xhg;k z_UVsoIv-RPFMEapmXdn!_d)@P+ScIhg$i!iQLkV`te zb#*q;bT2KTWk?NosVmvg48_DKSq;}%sm*nD0IQ-K0wj3ymk$s>Z zBd=RIXyXs}%bR;4Rrkz?X1iw~-%-?mF|EVOpgSIM=trSatO3i# zmj32^8b5GQqI5S&pUE*p!0!( z16EK_0MxWrN-pBMk#ktC z@yhrehhV=$g`>uq_p0TS9o%KM+0R-T;*a9` zRtE978AX&ud#FM;U21rCy+WK+Aggi8Z#qPfYjv>I2aHW-Q#vaD+O9NL=(PQu&2rC4 z!Lg8&OW_|$f8gABga3k&5*cX90m4BlJ?d}VP z)WIInPH4qUhzaZW$v#W%mM%@Ff^UxkDT|kMVa0q~I+PFi%wGDqlNE8|csxrr%O01Z zp=)Derb+#Brt zVA5hkl=4uM@UH7X$kvKTwXRoxd*@{mT_^qbDK0xs`*1bEQE9g=hCVX7=jDSMPp=7! ztME_Cr4=y~E7Rxi6$fsZYX*i;be$7NwqC)FQXV|s9aF&GZKredn`L-Uj9}{K)?PTK*x(N-w81%K{ z;LE_(9+H99lr<|}K~+A5`Sg)?nn)HFG;3mlqWSiV~{Wh^rUcE#8O?=xAf6O#gw3s~Uhu zT!5xST6J}Pg`Mt;9j&B}5ueXjJG;|7>p1Jq`a@we=nHADTNK`9k{-lNq_nZ>RJ@PRReu=0@);pNo0=oK<%*8Lt7) z{pdzaEons&MP$mER-<=)w>~$e)*&gh6$Ni~iCUf>?mmLh3E_Q4YawQj`D$l&+id^F zQ4o~ z->Az`$0eKzS;<+|trW=EcH65GljDzelKTU*@OtH8k1(&7UAu>N0U7J$l97-sRV)|j6 zl#B7vg-({1*G6Pcrgtb*G=GeNQD~OIOYi_SKIPM&ZrHD95(F z%d~cR!~YteE`;h1A7E9)S`V_`=8fN?Y&xKQKlUh1;ylzLzG-e19IwFcZBMxO?@I>{ zUuLAQ-jBzzO7TEBy|ff!L{@d@J8N>g{a2N!u=F^N1M6Eli=@v>F{B@FSbrTz%><`g zQwc!Zh8^cS>%MRKS^iX&8}WmDy!SH0??^q>`^n@B^Y2+`B|-e;o>A{qBr-3je8>Ai zhMp-Du(&+GzRkQ(&QQrHmeb|)+1O=WmeRU$=qOrVm2fcn?zqU3&?puh8CYf3oX}7& zP{8Bzt67;Uv*(e$--s^@mGp{`NDZMhX{S;vBC?!#jobze+3u#oNbp{4oLFmE zv(tJ6ur@eXFh%IQeup;BIK6AEMdtbcD0RbDT6)rXLcaOPQy` z5)=!jLYX0eoSwk5OOUo?5;+2JK$;mr#r6 zj)POypLDh+gv@TjKA}XN7oT~@T(PTg9!&D!gbAL90A4)bGVgd^yLtXq8mOc9Q$9>u z#^WYr989;XDOajNYor-rg z1k%(nnY6nQ%RvWu@-#vFEtC9%AEW)JGi|MzvCRC|!0tTR51STK?c|fEO zO$zdHwIL?44%Hp=f4B@rVNWd)7a_q?caeg0Bks2Im45bdn^HWuW8G0REKg$JP-R1m z-2`_}-{g94?2;OV_XyQhbRltO&^0kzV8P+eEwURI)l?t~zFcRc%gLa#lvE1w zpIfTh8cz)*EsQ^vJ<&c&;QKsn-FA?j$o9Ink#@d#$-r)jP+ zv8uL+LBp<2R$eSWhEC1iq`dUV%YyLp88(km_;KVgGt8K>WJZCxWBfZ^1#?>@OyK`% z@2$V0`og~dGc$B|mm<>LNQ{bf3P^WIhja}?gQOx20wRr+lu|<@NQrbabPgbb)O_dj zeDCMS=Rdg5nqSUZd+lq@oPG9OdtdL@dvgFp&wGAk(Rmq@Bq&@{y>x&?v9n3tvQ8Gj zJ^f588RVQl>W!Y~A}S%FsH2i%)E`ska5Ef-rI{BxzXMl_lm>{nr`PD#=-~9vFK0;H zj{}IpCaonOb6$c)%;~7>FyMXniKY}K*TW7>RbKjV$iFx0!Vrn7;EO83@=^p8E67q; z7@sW`yvzzk+i0|fu;*37DX`7vsq&*p-LwhMZ=G8$cN(z|Nu@m&K%%9T^!AN~C{H}gUzo($`5@d(AR4_O z#DqSnimW>?#5OXPTk^29+p}mg8HiG}=%AQ?Y}G$e^*Dt-KN%^waMDM&MV&f7pd0S3 z5jpvfm^j!u`g>SV0q(JjXpk5GRolES4i8+!S!X0vw*K+=6~JI+^0I4EjQQ9DpYDSBZ_M47(RTrZaiN2#diQ*1{C%U(k5(;~=-2dfC1br#@t$XCeo! zA%2viBA-aCzr#sKJT9}H$DHVZr1XS5jIDW6L6__GW2=ji_ z+2+Yc!t_e%o`^`#?2jk9zj^$epp_TzHwwy>@65Ec@{dk_YR~O=>0dwuB2`%m|B(Zx zCCu8%O#g4A`pGIYay2Ikvw;l1=!RuCNYp7x5_SPP9ISTK4xs_~$E|PV4y!?W+yG_{ z5d!a0A_(Ay!2nO z+v2x);WUb4@KJB>g!Pdz(z6S@J+O}U-f7ZN_Ckr14ZSjQ&C^{pDOT=GAXO?LB-UvQ zk)L!UJ@#m6TBFoi?dcJDwyfeI`AMxY>+%sO1zwp|G|=SwJKp(sO+gIt4T$~mb2mJq zFTljb{eOvR{B)Q!V{hAWbp945|3Gy=ER;ObJ>T_O^D%e1J!lXPaD5S$Cvz<3Vrxo_E?=%8nOi=k`D(b0ktkQHDONsYB#umvqdfWN4qj-nu{-@4 zPu}W1N=Bz;BIrweKyCuE!o$^i9Ixy#7k#3cdw@w#+rx~`rF`z3eJ%$%QYBAgN1vaL zM)%gk44H&P`AudF@l`A|LCW|ba^>1)iQ~N>tb*fq>d3SkPz?b-1x(rWAffvup{lHY*2UEqzmI zdAphu8j4D(O&aiaS%hfODE$>sVx^n`^vinFvj6CdJ`+}#NO zn=AFk$GnpYe&3lp+kA*%jh{$=ah{XKFJV_*VTYF)vLjx}gXkmYhx?YzQ`XhxB#N4Y zYH6f{@QcX4q?B0D3<^)AHWn>va^Eh83b3+VtkuL z7PsFHYbh+*SH4PPEv>`wML}$@H!gEyk*t>VZ#CPHP(G>NyV1QW|1skSg%SdBPxVb( zzb>lE{_-Y#+_X@UNv8H>j66IceAqid31Lp-h>V)TDV|+|=PNVeshb);^Nmsi%2}xm zqWa)XiyFE?eV#ID@%_-Z4kB9@P# zY;WNgo_ZU^=%cplgw%ryeB|MX! zK|5@=Y@x$Fi7cEb$6EfZ-$Ah}-iUf+kg07DRu4^R*k9!nN&uH$zxeOyo>7Y-bk{!o z-ql0hgqjCb=$y{zKtZU`1R#SwraaJ$97177guk34LyUass zx^1h1p~Yg{Eh+5gjj z$FYK8^x&~Yg5ZpRx8$wv%_nc5@J0MMDRns1`eRqUUl>?Q&ob$Rk0oI+!#qZmlZh^# zkFCejyS+qgoEEI)OT@Y#h?VkpC2n%M&HMoyazPzI(aT@*b3Bv`ysRR_SzB_M@35ghmY!hf$ zh|xSOn5@$4@r-%~7{w@duJkb5YFW+PeQo@wZODdM3Q|9ukXmAeNH85HhXuJ&!MaKr zQ%4YSxL>ohqjf%dFP=w3Vloc(@VLQo}X$wd*wz9`_4RRgD!*?AY zKH|iwhWOoGT>TrUsk1TOv`4LqKm>t5VpTk!Z2IeOi)Mws-$+PFLvUKRJnXu@Y#q1e zM7$iCD*;XU0EAgxzHImID~{C*Gin~wF8%O!%3IdNH^m(jcMQ=`3qT3{yv^=3eWZE4 zGntWGQmb2+7vBmR7=__b)bTe^>38Qh5k)Dt1frMQ~PbknLVR(MWq7OFc@$?);c~Z{E9hX9d zJirxF#|QpYmIpU9F)cy3bsVlv)VH857s?Z=5O57C;^}~j_0_MoI{Or60#@i6HuR@w zYL)i-B;zbHxJB@VJik@_l{Tu&Oa3I>1jmkngbb2#vYS*p%9!vkR|XIv78S5Q@3x%8 z%fVE%aO;qcdbS&1?=II*uD>V+yHR~sDE!oozc$(g=r}9T^d9k^AkG&zjxS}`Xwndb zfV$KWCbzd#XlJnO45EJHi}QgCV<%9;wpO!eI5kSaIo>$XLX+H^l5z3;*p5Z%Ws*F7 zkUl(C0k1qWynQ85C^NdJ1 z!8jHGH21C&wNdtJeH(G7WmVhIKxT!RZ?jAOV=Q{Te%VuvV6UEPP zKw-9PR%}IK=wCaCrf&pE`k4^UNw{*3U4uB*Sen(hKZhGtgU}5w;Lc`OIvXYCHy}(P z6Ci*Wh$8Pji>0w~Wo@}v@Fyl*G^}m7^CE^)#6faN{kkPBnIl(g4#&jr(uqf2tllw& zK@FH#Pr|S)kI;{C3{L=8gQUp|Tnra<`LM9;uA1on5)}|~J54UMnTMh&GfHQ$1teHx3>3mt6xEApMDdKgX&Uj zra6)kf|d_1MhZIwa6St;VW!!i^tf|Q=5xG5wn{~0fG|I>ZR6PzisAO}{-zgOUXSWP z%S9US*RJ*$LcF`BZUc;2=gQ87(#)nTlZ8HaPUJW&g$53;U*VQGQ%WkOa&5Lxy%qn6&(&=Ms1 z=NrjaX9*C(mW%$`o#fuC+z&re7%#E7lhI+pufcW(zT2m0^OexM??pwq9ZqBqgP%_w z?)C`}Jd$x&6%rRs7EbTyQySG55gt>_R~5=3OOsON5dHBX?el;}WukbE@WW?{I%JKY zc?L4O)!CSpm0#@*Ur^Jbty`zrv`xb(V_vb5ZJD2(1$7tBjP3KhpWo0|);>vfF|e|^Hpd3Ut=SBkm6U2@gP(-_CyuUFvcQl9|-ZKcSv67 zmH|4P-z}j}UEN?`xuBu8+$=%9G_bR4$AGdaqO+0E^NTCym|(R0Z6kIc^6EB-hr;IWO}V zcpXy%sitZDh)=lhSiaK!;@(e^QYRfi%EKDHA0G$W75qHXbbf+{1eUVRL=Bn*N zod>R}>vTNBe7B2@qgTJ;eBtv%v!ZO=(SLAuC21a6&Be`UT`q8;KiRA z^az)?>rH8 zay0Z6CoztEyAM(12%oHwFYhs32TjH_-ne}!R1$eoUz>?XT0s`XW}K`_sE~Y}CP2iC z_9r>VqyicM>+aO*v*qRSq6RenRd)QWZE>W+?;9*I_iu{ry@xn_Dih^|GM%eJR+ltrFUrMxpP~2*O`D<&xXF+%TJU5#@k%Z8Z)a~p-W!pm@!v~nMfpGUd5!*Dga zsCT-SFg+J2gwyL3ZcWc~kwT0A=TZ0!_!-v#F{PIE(+g*f{kB|RNYF1l^IOw~Sr3`V z_kQ!50dMre=DcX%Q>UK%7e=D!7g}DTgIsX=o+{!)Ey>ARiD38)GKksgE}S6brer># z$WMoElQs=$c5az};39VyJR>1trSdI0EWaMx->d;Ah9evN*fogj+<~k-3$v4vE%4&v zQ{bHc1V;Of2B5-l8Zb1GJ+PIda++ zNXRVmb73_|8htA~B=}HC;=mg0)&c6pHM$zBPHGL^ltHNQXs5q5{504Q`-S3e=TX2M z4}s^&0x9y{tO79N6qCDy4R53bn&}a4Z`VslwAQm1KVtt{|Gd%uR(`^}sYLBa6rA+} zF{!te)n$hRtKXo&B6c#u$N9Haxg21*L*W?w8^v!hc$$_yBGkA`ciY&SMT~>Dy$09q z4p1K~9i5WNYZY?rouiG)`Yh41Ndbn;pNw z27^tfsvFXKKeLbwFGFMR-!d~0{fb7*7;fSjQ zCo;fpk5BfyE0b1!DnI;#QT9_jsW)g)V+=vdZK^VkEP)lx||<(MSF zY4lGZ_B}*+YcJRH)=sU2=HQRYq#6(zU z=MH&ecCs;w^gQXwHu~C>^%VBaO=iWM6Q66`egV8e()r4pjC6)i+38TM1C+nHFrUIJ z_?gnGdw}dprW=w_>bOggJCW4g zq1a^GeQ;o3KT$ZU_P%Y~Z?$-JHewAqn~~9kwu8b?*imnVeC;Sw#*8DYV%!~03$@ZZ zS_MESJ~+Po zCBYKxP0;zZjvNtLN|zqnm|$nN z@&$Bq3VQAh{c(tsh(?=gAeV0&rX0Q>x8}genhj$RjH5-6rr^zR`mlG!T35AMk{s8E zZ!IcqbVhsEhj@4W^y;YI%v`0}UiOcHpWy_^N3bQ+7rzhinPD&!ZYNQRH5Pmf$(4z0 zSst(K2xCY5@S%5*4`%mcCa`jR`R}A7fA%Gy!nvhGvdY_?)>4Zob8xlegSPc{zGi6T zUvIl~lK?c0RVE1|IP@g-kjx)Sx?y(1C0Q(p_`@uDUCLL6Jb)$H|U)=_i#D=nZT9k^7lxLz}Uw*+PtHD4c(5@X6)Hw`(Ui zY&ej~09fdO(P!~)0avB=iP*c*x^&-fh>hxjIyi@K=0AE16N-szJyXa%CN zzhW0IF^UMc0}c<9XFIPcwi8!y71HCSPTrFDo=6FX*S)nY^$TN~3-aV*39^@Av6Nz<1-f-0oJLL=1|{}w$Ur0pJ0HBftYX80XX*Z(Sn?5u{hMz=ZFN}?woFEidV{~) zg}ml`%YAeE7K1I{%3#L1nm+#07r`MOa5h?0`L=-E-EPGSTBzOI!shH9yl+tf$@WlW3+Kj?jM7HxY zE9zHPZ=T`<^b8{Sk0`C?*l@MOPVIlvH{n{mf5fc?mnDtUy|#7ePCwlqRgV*=G0o zu{cOW4~+qjRl4}zSWUK!2xh`!G@%=q`buW_c!vu_{b*N>Jo%wUxdzho>j7$BT@pb? z>u>V!IiZL=G=$9pm^%fukFp|6En1l>29&5zE#q7apAx{m6%mDWu*-RlR_6@?11^a^iU0-hezfxKsuS*uJN}UG`@nHt1HO2qp9?Qm z&(R1pkcU(}6PavS+b8ORixA5t&oUb%umJ4L?PE@QwK+Wl4dh^_@w2+3+rR`L$n6>j zZ+KJ3_qv4Zed|BX!lDP^oDzxMC$BUSzufNNpIMJj)je6w??M_1A_^Jy~s27R9u&W2mL7`u_-@H+#pZ1^w)4*%8>Qq&%^BqnvqrVrvw;*O#ACc zT$0&}KfdE@!-ncbBg(CQMJJigGQ_=t8n+en)oIf5Spw9zVME84akO&xRi&D;FMN>&&8Ul*F+S z*yZuRh$DcfA~=0+W^#K}@(Qnc-ShsCT>sTQhU*Xoh+vCkL*(?`s-_=gdhMx8{_{MVS2uhx{X7c}( zAPvRBX)d6P+3`ymusu*JcK3Lgh)M~>Bf_~hcT9W@qQ1roOfU5L&JHgCwy!;GLnnV#QXi5r8;u#xK2}k2WMnCD!D#VY zsZ^A(@8<;R;=jmYFV55T;Ul`2GvHpeXwui@SUiIgL|S`80s8XM%_1fP&F%BCL0}Y9 zo+^F0LK@=Noo(GwR=j2#PhCeR>;7Lll>{TzV0b!?%~LwWP%I3$dbAWnMC`j+Y+#9S z#H7=y#M&UV0?HYVtry_MSx@$*N-q_X;~{@Pr66Mul0%f*u_*M?jc*%9X8#SvbpHOC z9{NqUplKqnq5k4Zs9IJ6Ys8PFzv^b#3ssK&Sr$Rkk^PYRYAr?Hog4V{)!D7$lTDI_ zn3LKwZ6w^S@Uu3Bo^lY~DjH9K8AiZb>n9vEK~B}CY;6RiGhVcK9DZm}p+K|7=t%PR zU309}_`1}qLxG;_4wA9Fy~xl}d!t~fn9V&vQxhNhxU_)CmdYml4KjNk7p4R^Q#8ad z0~iR;k%R0lC@`12wmc4GT;-}#{efQH8u~4z0-{G}9zv8!QaiXQLd(kJ%Ycu>V(J2= zdgIwK%dT=9SXh1P7wD}?+X`?Cv#ee=j9@Rjv7P?$l1a*@M_mS?a#KbsKiSr@IMTL^Ure0Qld+$A2NaHnAJ|6vp{%>n4p+-3QX|6ip{IaPPu+hc z3bYMttR}4JwLU&Lko=v(LxRuO$&`gYfX?J#uN7xJtp1VOm+kW!ZDI>B=P$2A4^=C) zDukOGy8WZGl5j}9eHz@_;na;afoE@uo&TM0m8y@bfF??$#_t*qqlQWe9k!L*x-f2@tMe^^^1F*K z25~ThPg;r13_Ug=7Tq7Xs-Opr#&=*jvsUv?_Eq}2SOiS`EIhtcbCCk2iL&{2Kafu`*U|L zx@)ao-Fwxu>+!1ouBt49iAIVB0|SF8Co84?KKA@~p&-5A)z=-6VPL+T%SnlU^MO4J zM9n1_TzS>!Y83RJ%s=Zq8)SW;rin(8l0q0HQ-l5bO-j62y5zc!1JB$n%_rc~=2-c4 zY;h1N;UGS{G=Y*TF2aZ9$j-}+l@;^E+Te$?TSafrJ8mw2Wzp^}2WM|hZB6g)ON~nn z!wpARcqAI)^iZb|Sa^8Uepn2tFBr(|IJ4~JJz`S*E->)8nE$^YhP)!qWnw?rGGRQL z@`-IpOl|)phs8gR;<}~AKt3W%MoP3u|LC)q!R6Oa(udIx+lMX%p~MwsKwvjiH*io= zsh8p>L27E^n97q$pl$-eL42^uuh!O`=;~D$6;*|?z6i4P-`@&1gT}1)^qC@0r(iL~wy;ddE9H2)_f|Ye zul{iEKJEy->k{^nVbA>^5P8Iq^Ucddk|J3_ket<1|6*AbdKSnECPN{2t(&GWVALmh zCY@tD(W}Q0OJC7!?qgx2WL00y2qWiR?fm9r+A2lpw z2j+=77NVWRrueVUXP!kxAM})b7@LCAB2I z24eb#i$W{}A9Z~iwgaaFkR`{t(B1j2uI_feWP z#tQ9JS*NIGq$e4*pGTo-o*~*)F2Ox0ksduRFrKPkFXtm7mgUqQk!)-f@14{dcx!%K zOqN*HiJVi}U|iUUN6IxP1ZVU3Jp;A?H3)mk^-jcCg_stP=8)kqIWjYQ`wu2Vl~e}3 z!|RO42KDb>eTVQXQQ=Je2r8~+1dkQZS-(0p=Djs;Og+HB?B-Y^S(xyJaM~0l9n7Z6 z#{vQO`YzUjaH)U73pe)FWgkGeC2BS@PD z;O&{Mpq`5@%vWl$#Ilv~Q@jT?-X9+AUA-u1_EfB<7wpRwTUnbcy;wmGV;@I8kr#i< zU4zHdkdkVjX|)6*T2hDh40#Tlv$BwapO@@+>mco$v#`5r)bi&@7|6+C1YJhRt#=V~ zeYsA0SJNJ72Fditvdhm`TnlF@af8gi2K*D*?Wb}0_-N(C|-8J)Wy+P<=!iM zGIXDQ^ErPzY4*nAb@z_J6t98lhaI3Y555F!t>|KR93Q7IMBte(-6WBuob> z3O8jm*8A@9Q87BC z?sJ(2m|E7RP81B{ICgHpx}qiy%S7vkg~LHLzPIKVq_x%kX1{>&X28QX&@8EZ*Be9G zg6-s#^wF>n+D8$>!}t*;j@%JdgEO@@D-*Xn(77|*|1g<429+3#iZ+0y5o_otDFtuIniAVyGVqWQ*L}j} zD^e6ydXGzpQHHGKTqD}hU5dxgHx*9rXwrU-%#Gy&r*EpW;&6C zY8fEJfcfF`7f9f-EHwakA}JXSOiSoUMFD_26aNmtJT%bAzNa~b>FB{32$E`mciG0= zvWI?$Q5#3&ociumnHwMI+MYQ&ID{=$X0J;x9i41)%x(9PVhPz)@lwJ1cXm8vutaho z&)jKcHv0=N+nq`cl~Es>*px1aGtkofBy17G)d>T)9#YfH3eV= zMoZ#;mM(d}dG~d-9sDnowtfFdXu`dihxy&#j9|5PtIc%bq!yB}f7b^HE%ixot0dq<%4p?KXRIj>kFQauBmX_q1JD9(7A80S~ z`56^XdAsNW2R23unQCQg0Bx%R*_zP6#IZ7az(ksS&pvw`ztHW;0DuU}xW#dsU?T$K zZ#&nfP@IOh{Vv+Ry$xH?)kXDQSoA{i4~+?k;+rE6`S7GOMX8@@K)&G4?d3g4eGzYR zjCFI$VB+C+Y@w*UzA`8!qNbQMC|P6Cj-sbX^dMH%=(tj5>l@q+eJOa5h(Obe|xh-jp_1I6w8aJO`v&Qa62nSO3VaTQW9{PT)5Act2@a{fwzL~d#TD#Oc z8`6R3fuV~U41-sCnUteIu4^M|)ct$|FdsFMw?W`={13n>tqzV%EWB(4+jHYOCyRU0 z?+#aL>ArXm5K%cY-u@T3(e>Llfo<&I{h=2Ki$$B*ukpUEyO06>lCy+TbRc-j{7o2T z*K{@pcOYdO=G%_Ho{?VPGQxvjS(osqD~I2T%!v^b%v^f3qe-ZrGG>wbW~p(wL>F2| zC-t_ZmEsBvHj)#`yVo0Rpo^Ak_kq~B3^BC5uzWERl=s#_PI9Ba7t_t@O$TnJaX1y3 z^7?60Ra)muFcI!z9KVUr#&TAzFwjA9d*-z$gZ+X=8_{JFGvBUVFT=TT>0+Wg;AbN0 z4w~HQ6_qY+yP`TcK4x`Klhs|$jc<-3%47F(iE=Lz*}(xO*yuT>$QX|GWTJJ%9h?~0 zg0_huOw;}?*DL0ZDgOgn*1Y0sFqfqb$`d46auEA(qWMvGqxo9&A0^KhBzc*lw3c=fve`b(pBd12fsc+f~$#jdaCZh%~)?B&?3OvS@F_ zZ%EloY{^J`-G%aE2f^dg#6(xayWm8M_~UeVC67YC|Lc3&{W(UD@}a3C2EDQjpftF;2lokG-Gx8X0ewn_8OZ6n{?_yVCFz`kTQy{i0I^{9; z)%ihta&6K# zY5KC#u`rFDncTFM4@T)Ro05;qSt7gK^YaZ~X^C*qF5!AsDQA}uxO(`EGba+UV)9_e zd*&Ce&E4Zv)O&Vxih7nYqb3-t%1OE@!48ZPyaP8s(V|uj5`)WWYRgg{CAyCyx zT`;k4h*!e(!-Go3Gv@PXuTjuPs7wh@GFj8CdJ+gp!JlS*fkIP&#4^2bNt$ji74WnsEOU_f2U*5{rEUY-^^bVvg}>EWK}{=EST*>_p(12jw>Zvnrmi%-5~X6lJD5R0bZI0Wil z2zh@QoS52{C_01JzhC&$%Z@i7xdK~J|7OV55XbfB1q~)?kSPF>qou3*BTjy=ghhz} z`VVedQ{Ob&zCI6@tDm&~Zmk~J4W3H{*W+0vTsp{)#8I<=-J-L1RX7t}wQ9^4UTt1n z*UBG$l=dWcyG7cU4!0o{@7JWulPbpjb{1ZRE7lwI{bpoW&3JyexP!%NEaoqAZGN`! zTictTKdcA_X~WR8X@x*Y^2O*wc&#U&CCtkF+6>Vgp{I=Oe7 z=2jt`kbWhj5GX{<-UMK4w-37hZ9MPkAf)4XN$^)sXE(V|)dME`I%laMJ41vc3&H}N zw*i?4>6ZOsxx3%DIAeCm;-l>}(0hp;s&EssyOaCTv`DXWcPo}%eOxR$H3>azSUT&V z!hyro6&E4^goKYgwpC8?PAPT^RlPhi)Ez(9k$t%AW#g!4m7kdnGa<=o@78;fZD(BD zV@P-!IWJdFbY7TW_`%Q1dt7xLc`bUzJjqEdsq0 zUm~&&*zyFb2ix23bshD|b{`dgzy3z7G40hvEMxy;r)_XA(OU-1zUHyGay85u zwK{1n&eMA@@buw)7?2!=t>}A5SfI~MJ*qKI+z`GQsE)p-TS4fT`q4n(omPuf!vBjB z4<#Sc7W`#WxVT9>a|&&DsDHF&lEnSRdYJqH+frQU8+iz0KyU{iy}jZOe-9ApBMz4&i|0 z;Ct|lFL=?_Qk)PHEvvSQ68(vm$HD)z@~7CDn14=qMWCLH?PIClv?R&zq9G`0l4SEn zUqC0jC+|W2k1QA6M9iRyW`E-%&V7VyRTr45tC#*CVQ1@^7pJ`!>kzbX$_twb^|h3J-qPrUpAe$9b3R6e!Mh}* zY@J$Lir_Bz`TQ~_mKPh^C9q0QaJ^$M%O^HO2cr|~YqpNtVB%t*@?$mKYs{?J>@6Rtfuu0WY{)=s)| zK06;LowKFf;iYHp)^?+5tu~gX!s#HJ9X=P(Ia~@6mU0s&YS}PXmiayIEXsd;UcLGE zGMf5h407ZDM60$=&>`Nd%{c^2rE&?Fp4HeD`uW>^WEHgm5s2AOuxL|w1`8|y{?;8u zfxu;QY|F~$9#`EWt$js436Sk-F(C1(~KjaJ-MhRiT8t0jFZr`v3H z6~DMhDA3aE$MI>}HSu^~{=n_NT_C=nowb{!GhR`}3InXi;C>&bUct^n-+atO-M8GZ zvRN)Y$@KC&VJZ1hf=RRE8j5Z=tJhd-Z*5@#0+BA><^NRsFkU&XKnSkxtCtMteM4}? zp=y-e*9m5aAIb@Z-z&qJRWyM%3@Z3w`?FqIcEj{Do98M|cbP8N!{=cplVnjzp?8#U zsmE8yk3O)OUlj<(>$vqQLestto5~c#9*>2n@1$Cy#F-<9S>l6bxmx~SHO7N3hKlX2 zGu9^sdh~FnKL9+!eAxNl%Vv=dyW1l?{fAHMcD%>t!eOKDPWES(rvd#Y!?*DTADljZ z*`ix2iQl+qd6u2$SGQtejrYX>-UQ$0e==DAwgh4juT9+kBietb6&KZ7MYffsg)$cC z0At6|7?EX5BUTx}*+IGoL{pV7WADztsW=DPLD3E>IlFz3*B4MU=2C07{_q{H`HR-n zhKV!AAjiSam<5lwH*#68tz%k;U3TVY$EmktivhTIaQ8iDCuYRsrw{6IDx; zwIZwTP><@yAkdAiuENC&4i7wrvbYfO|9DP}i_6KkT{UTLp;LcAI}LA=u@fE(Q}#t$QvGmkxMg zB#|X7;@aiZ>(qz9)9lhpb?n~(lgX}(yBp=yD?e*9jp+(_3G7;w<&_K@K@;(YIU*Hx z;o|Q$JNKW*+gL9c zh+S+;lCwO(+VJewsnByF2X0Yg9Qcoa6J*aj$E*tM^XxM0!(2y$w;H~VXDUy4-FSQH zu+pB_fqC)*&X5?~>;Q-38O4;3F(jo(X@m%klUe79yNYx~RXS##ac!=g&bt=Si zJQc|76ywgD-)!qU#lIG`^eBMwhw4HFxsdd&ArA-!1Dwau(cgex((baGzmew4 zMid>pzv_7d{dyp8%@0DRtN%eJz|}u7tSe8m4xibw_{W2w0qfz;l>yd&c}++}A`U%qk`K zAOw#7=sg`xvw%6A$Fomn;jBu%lIUFMr@&nc0rQ~Ai8@^Q2mS$)rluq*mFiLkj%yX{ znvs{?X6-60Nm2CO*Av+Hmc<1jL|e);{V>vFIAbgxO|i6j{|)uz92-p-GvQh(j6(YE z5jh3|@$2{8604+;v0RT`F|S=~FZbNL4@`WQFYx%kj>BHx-xPihfVNl*5RX)0HZ!HK z!mi#+6)tgIt*AU@o=g$DBo)GKi^_5r2KA){Mx%5hjc+EQ-3^f&eDTw^&kNmIp??dN-Dbhobg#iePP0(-f-U3et7gBKrlx%yeJ{wUy^1z54poM4zODTXM`p0VbJ z;Y%6K-Gqe?>Kgy?ahpBh=WiC((q4)C>CE0oU@P4$UMKh|caW*DU{*CX9|4BmDv z=34lWlw~j(at~or50&3bk;chbASn^Xg6(Gsph%ceQ7h2mBm+Mk!8&ViFRB3-wiPGK z)bduzpOsn0NEC@XTIR}IZ(0Ay184aYpv_v+-ezFIw66KE!ndd;v{;`i%0j z!5{GU>%x1;LbTrewt z=oVb|QzX|soNmGENJE@l8Toxnz^OePaxSVQ#Jw=*gL!fCk=TGbcLt%9N(e>Pk0z2r z&W*fxzFJb_igE(1hto-MX6633vDb~(o<*rfsZl`%lf8A^!Rqavlm~f=pp6qMj4GM_ z5vVB6{41@%(E0^cJYjUVYG`}a@>(Fm7J*Elv=Jc7LuN!*KPhYKpXDQVOVNj@by!bA zxxuy5(8%+8+gIP*g+H+41~d2ASu}lq2(rx0jN{$D@XNcro7cA_ZpUhBV{JIczVETf zG;R)Z4cc@O!bI^OTe0Nt*cI#HTb4??)FiE$rJdT2^v;`vb_=Ziex66GMO`~!PgqZK zTn%bI;BYvvX9l_}tHry1`)uV;XKdWpzX2Qh8KAxCrQ17&nRJ&&h2@RC%^P&#J!&gw zJ;09HD9II6TF95VVQCh?kCe{BPLNQfo?8**3aODDoWUFkL?C_;=gFfvcwkv0je$e{)U^dez<+`6n z>*y*P)TPjbmlEtd!Tqw>e>{X`3{lJ^DwcltmAW9JzThq7jvR$nMW~ z+>`0HoKH#j_1v2tc_+*-Nc$wcwq_I}#dhu^^nh4y7IJtQh{@=A9k#-{`B)5KWH zmZ+dqSEf`14@mEu{lbe1QrSc}B#+Qx|TRLPdXq0@%JGzgKDm%@a#+UtGH| zPtxIlrL^-H9Az2iE~XfOIsJ@qZlu^|s*K`4@V@=<>qF9l&pN`oQ=FYS8zYZn$q_V+ z=Y4$vq&rI}FP2aO_RgtoXiub)D0#u{qb)>%$Z7Mes*l3W(9ovmIA@Z^w5n%W;n7HRZoe$TP$EUH&$!&eyr=1RB({xvu0Wdf4pl1j zwm7(cU;}WGkoXJECc^l#P}s8Zga7wr?>t+{#5<`W`*iz)Shcttd!fYM9w@<| zzc5-dzzNGz+G$I`Hpvn9>z{xG5gp`0w5^0{^u}_6-piuKjk69SVw()7PuluuJSYju z-Zql-7Ip>5GjBBNV1Rfvf{z$3i46U6Sf-RNep`QDQGv%lk%&1M z*^r_7NJccftZVC$OXw#`F^yX(rd9Azu#qA2dGMo-CI77V9+{x@jSw>Pp2GaP_LnR;j=XjSO85S>Qc=i$ zQ!a5iGj2`%OgEce%sBdPUS^TRd%$~b0gYe2BI&xJpAx*zv#md^8Y3zK*xpj$yzssn@;}gk^E};Y-KbW7(K+mOW#)gWPvFC zSI~`?E|>oav`AGI87~&;O0XxqB{4fSb`D|vYy@Jhc9ga(Bl9?4+3{A1X>dCes-aIxZP z6cVLi8Hqvq^A%QyJ5Q8lRPs9{@=DCWx_|Ux>a)(2fY?ZwP7?f#1m*aU=3o{OT?m_2 z#y;)7{NH{oHgdoHXVLi=j-SVo+q=+gt##kO6kS0e^J(+TAoQ9EOTHmD*rg0)@{ks( zV7^hSKja>*dB}j7<~F>0!?f@MLjgRN={RwEOC4(e2*PAdw_0w_?whD0SncSxp824M z#<&}=niZ{4)ZM~ER78BZ>j~%Gh|8aGd%T%`W8eUMqfiR-Q?w_^2ziLxB)ATYfvpZA zk{G%Yt{MC7B;8sQwE~_L2cEK>h16j$NeJGOc3sJw!v=`PT|G#1r#V&+W9N#_eG72o z6lwc{I|U#?ZsX@5NGS9WfRaTCux~GpJq{w82YH(I#^h{O**G9ySKx#U!7rS^^o;|E z@Baz7_rf_o3rM#t*L2d@GrZ_{pm_HkVb;0Z<=Gcfj_A7gsk=@o*j3$n_CUhu$H z+C)Hj*l=%&kQYdS3yR9)qR<>_@tKoLr_X%j<=2pKRF118C49vUMY+goF0X@AmIN(lM@SFtmzmvc zBOyuJAF`*|NR0@yFNtq@SwuSaB z7X*w*5*SI;!MBQ^pr}D_fPQ?g}A-uv1u5Vp5j^CYR7H|umnII z?!1k90x)*^E~lF%SJRqr{X)ktuSsclZKdq{DO^DmC~zBm(>A|oV{$`Y_JR&G503_X|hcn+#jOad$!{WNImw zCj)9O5jakP7zJN~Ob`0vq7fm!*4twZI0~E8#aKY0d zy8=5VZh&)mpcgP&Rt~zOYW4?s6Yd9CV@$Y#l4gAA0r79<n{PDF6jWC%p2Js+Ym&rnj+Y1(PGO7T3qHevbsQ?t^7tJmtIs4|E@?841o$v{ zkONZ2e==hCD8FbQ{oyXOf#+Utj%)$X>Ll;y(mpWf< zojqirnv0@V-_OWwmdqmZ39B%i-iD$IsZbliKX}q`oyl4V=fE&EZiO(@kX4#~Y4qA> zN4>sH&oKe(k^pIO!am#eFhg{Q-q|nSw;z*YZaXrHjeIo?-8;-S-X%gdj@CugRCeDJ zMVX-++IV=F5ggT@5g!^{TY&LE@KM4w_U9c==`*q36Tf|LST*+P`&f-9Bnu_7WX5u{sTvu}{&<_())S-%3p4 z?)TBAlmw|ARBmb_26tMu`wr_y=5z0{E9JQ4Wmsr(~s?!|?nwU`cai$zOh^ADN9XBYPfo>O-M zA#ZTO+E%Yixz~SK8PCjOLEJlktHmIlG(=ZBcA)O9Gv3bEqnryiM4F5b7bxa|oh5>S zu-UZ9@O|=A+osrKjj!fDLH*x=59qO3KTB<0ir3B#1?(H)dDUGN3XLK zCfz*?tk1&lj2^6scS*%Mcl?rZY3l)B@lISg5~fR@DtoZyYrrfW&`U}f%x`x)&un5| z96tDnz#iYtAap{{FK==La%)SP7SBmWC)69umetT3A4)Or7MITVDO5wJssy0m9OFz% z|C@r^&MsRFx0<>`YF zVSx&7;15qyRBi{-K2Q4lQSg4Zp#!*lj#pQ#Ru8p$<8^iUpsuS3W*r_YgpV?qeLHik zM6LHtgF!v_hvN1e!ond}2!1MyGFxr;6L}7dIhj3*DWuenD@3Xnx~<>s0fsQ1lg#}; z``4C4dW2S2dpjGH@lIxRf(xab_{0R@kat{X$a{kwyBWQgg7mSb4Y`5Pg#(}vb_2DV z{0SA==PFytg97cs4XOo87}7d5cA894*9+{fqbgBrt@Tr1+bOxx<{6{V>fd&OEir8_ zd?pW1w%CeLA_t6dIwpOtcq*N}{Zv_U(&Qac`&tC=GF!PXV^UF3i7 zk-i1G6ryJ8x9Cym^L&SxUHgFAT}jxfStycu&WVEfRzUM#1ET|f^IBV57|E*agJ)$0GB|fW$bS~$lfB8Lhip} zaYd2@)4n?K6*loE^YvYSXgMs(`*ZpNpZ-EN?NJBFKvihKqo(FSdh+zj%W+&t(W>y@ zH%{Mzmah*ctk3$L|G9_R$H}?c_n}-^^B&l^zo@NU+!?!v4MGtj=s>iDDSR7yT3wr1 zA;>1&4|Y*Y{QQ|Zz1jcq6TIt|=U%%+U5{hmM2h@vufE_cQ$b*O;=+F%4$hZt}Ug>zU0Hw9jO(@Z7P;+Myj%vku1X=L)ETR%BZLha) zd0f6w7EkNs?3Ib2*Oilh|16P&w2iIsI6|=mb4l{p&GR+#kpAqJE%=)$J|V zf9al7hHxmjvC*+Xju*G%Q(D-oPRX;tnmc3WY0LDZ&Y(%5}l5B*}1cU@30|tyvG}Hqs{vvH{50@f2~_wPzxs zp3T0}^o_8;8kHeNQ?20fcCP31q@g^rma~o(vjx(aBDAWRX#RE7SgK92hs{EPS{oMR z)5#>4>x1&iuBUFsEKI4NgzUr=;A+_$7&d8x_Ho?N&wGwCuDTN`7s0kzQL#A z>Qtgt%;pP%Ix20su9KD3L z6?&32a#SzA=kX6&roAIqWYPA-REm9&P}jzM4J#GmXm#dTqPi&|(sKN35vbGIX#g?3 z;ZaXNkk^haWjYs5du z_+x2pF+McRWOgf6RKem0a>m9-E$9OW9!ZAqB< zlV~B>vbuyZr1mVvj_|*k-Te!#Lbzf6qBc;y>cm1jO8T}9yj7(k6-;s2{my50&FaD5 zp$2~#_$nfQ%1_&!`}gMSxa9~`eOZ8lH^PcQOlfUIOOp<(TTZQi$YOEBK(Ah2fl0RC ze>W@uQ0I|*P+zMT05Fw(45zi(63fr6OZOzuyr8kSt^S)ngk!RoSN6Fm^ZHZeagl^BHf1xanas0?`b_NWg-}SoC zHzoB>9)E*xj5ZCsrlV%YJU-;n&*&lna53f|U>L=}S*pGzA#^vYLMExfV)HC`0nLAm zSCk2Z@{n2Jy|KfTZSN0Nyf{LKN(`Yo zXoy#Poqp$jQFZ6vDH<=Hbr2G}Ha{m+zny zhj|G1{~Wp%{$oZoHyOg(yb#!~mUIGXKTq^~P$nD!;z}8f4WAg&9tHJvV*`Raed_ki zX9681%bBFAcrVNE#HZ+?-i3R4RRrSGr^FN<-@oAuH%oATaPN z41%BlKmLV`9DpCtJLb9?klF#R-w+5NL|;qYBE)g6jWUnhI`ZVSIRCAWwe8M~o8hY$ zUJVal{5;q1aJw6acTPYnKVaiRf8dScKhikC^2IwN;Mf0}dQf=x)BX_4sd01|DGJtvhgdqR>(MraZ zLJ}=ne_TWJLC-!za8XDeLI?{x`=HceOb`Z|OD#tK`4bEN`uv}#z=Mf=P%0dPqR8Rg z|NcV-`T75SYbJyo3y&GNko~{^kVEd^;Clc02Vl6Yu|S@BfSwIK=;-?|l{EgCL-YAFWY_P(7sV_P?JF58SgL zNK!h49Ji^_MUjQ=NB&BPoX-f0RW{eSv>IjrWs9S(mYMk@din3@FmJl*G!BP?(P^vq z$8?$A$C(1}B*|jDS&*{1xUd$5f8s5%wB=i?zK|U9JeZt58JTP7-7gA!{M(62yDb+a z`LbjrZp05gDuvwZ+kg;4coS^>?JXalQ4qnspxMxCLBs> zWSkqX^(3Hh`8Y}VZW)JEU(14J3pdLr`SEM?d{R)6$~c@wIqV7@-JuB#DhMKAJ?`b( zuR^7~M_!3eO8-8y*@}?+rj@*p{K;=Lz^z5OLX$ZN>w-J4QocMSuwq7H>{o*iZ*~q# zV@m@Po%D2#B_LhU!q)av?ed2aSG?|$t~XfNkE=o%V^t*W0!ZIUG8)(t4j5)K>a zvBrXW!W0r*sSTZesg5MecJUd5KD;+YJepdg=wl3Ak5C7q?hyxjqxfIAkzVk#S%bM` zFHZVvhg+<>bZz31~7e2mI4m$X`9Xnl15aHJ<)|gq$!k4R#9ST8=Hv7vmIY4+CKS`&gK&z+C$d zH6Ks6h+WBh>zCwYcM|?B&ahZ%&+HbYRGO(kZmJ`=8YUL(77UKU9ViuPuccGSvI-3f z;-!IIh%$Q2#KTn+v5WQ{Z-y!-2(Hh4^75xwYu8yXI;oKcH^-DTuzH^}c6tQgLPP$f zl6Qafxbs-8_d;H_5XuK6)UWAk;hSWzG|dwo7_V12#i_tpS@a3p6SGCASGrnWhT&NH zvt*`a|8G^jV?F*yhtGp1nmwq3CvcR=Ozbkk3}TV4vS|b}OWA$%Rf?xC*lTyLe?TWM zh@z1p;ko$HFEO>aQ(82p?u+jzR&!Jk!*$t(uFLuxng5duWWy2?w`k0p#;wo@2B2FM zdA0+R1?r$JMSs_~h>&r$z~3(_MgHVD|KHN~oen4XKM!1$xR8v^{a+cTBecD{GIU1W z^I~}Cr;>J@0zejis&g%9E?7loy$}AR#^}g&N5{Tsn$Av$Om1uzJ>jKa`g^HfX@;HG zlMO#+YFDpC7uqy}q6aP}4YIqap!ZBNoCz8{?&R#>5HoA(_kQchcU*u@Zjm=mGX-)Z zVEkF9PyS1rfOAM{19-h7mT6&7^&kO+rReLOIa)Xz&u$aG(~^)~^WD`WsxD|>cX@s@ z&Su@#7rwIk`}M>&Q|s-N z)w!l}E5#37bapiXw{A*U6`K%X+Sm^r6l=v9K<6Y;HgAIv87{+CsfXQrGDvsx2&}Q_}zxAF} z-4A*B<&x2t_Vt1N>Z0usLRQsxbso;owRr(Ig&K=qj&Af!=_S5ZhY6pd ze^Et$!}|zt_0vrfOJDPZiVkz~o*2t?b0a@ocX^@atE5EZzB-Jd+2BR3`_YFxd4a2W zdhYWd-AB0Eb*TkX0$lMO$aoXOd}A0(I3)cVlsU#Kmk=t#S3d9z{U2TBR^i6KkI(X5{!mKTSzpl$5e9PF7q@aCf8Cb%nsMsAAJVveZpzCqhL-MFK|yY68PD!5-Qv2C zbWzbU7mxW(>2X1=SQqvMtQ)d7znlSoq>ue#TitXl6{wiJY1gl~Icwx=Y`R@Ve!`_m z{Ly_pMSCBv3$?}F=jF%mfmMVhKD+=L6C3Nw$@X1mp}{KUifbi*?8ng4lpAXsG0$Qj z#I?M#UVJNv%&VX+xC&*}zh9Y6IAjC}G$<3Bg?P4im7hCN3mv`D%rLxGQ@GawZ``oJ zveP^aWO#CersVfsF0~XX{JPC*Xixc5xX?c; z$kiLfW*M3i-;v%{E(&pE80v6l!e$-t8XkYaV^pDH7`#@bITFZ$g7~I@R4xhM=p!E zymS_<8BKP4A9|hK&ds?eOms3Su^_~F939U;K113ZAweyQ@HfQ4EUZ{kDEDla+_?Ip zQ@~L19cH;rsT({ApBvc%|9P#c6}kH0(EdM#%e6s0U`xE|mtusi+s|d;*$6{t^yPMC zQKSmY#^l~XHpdfaPP*Cg3A=kSE(!z}A4mly@=YFu9Gmi$7;{Brj{Wpq!>jrii_-rd z^znhsp8wStqsXLtb(2e>s4&(#!xkgi@b|Gr@KT^Y-xN4w7q`=HZ7h5$IU0HNWYXmF zjq{66g}oi*Pmfi59HD_fufxZdI)1L!>67GXTigtf8d3YaZM>N%V zkItJ8RPn{k#K*9W9p$3KvTxneHVZC*ZQ76SL>EWD+$ zN89{yoPsid<5Y}|G4R$HDzE#(U9I&pqN07J7#vomD0r3^=t0yY(D37LqK10aCcCB` zR*8Mz>$(Cg8lvlGqGiS(9xyd&IMbLY*0~X04Cg0Bs%;JcFva!n@J|e%}m7`}N zT;IB4K$CrF^RLhSVp!czSq@m5Pz6{1J-I$OEgqW4SzyBsWO_J1&~i|Sb3Zz?-P0tk ztTNX>?Wu{14M%Wsz{t=_@~_XF>XUKd-nI&~VQugw`Gs5J^{@Ih z-aHKabY1ha&EDS(zaW6yZ)^N2Fq~cYQH)TR?77tGy}_knJ37b zlQw7Uh)JYN<0f5^hbv3b&I`ZTVG18>^P1fyOuoC1prKX>8YB3Rq1z|`7%1Il1Ti4k zNcmk4%athh=|EI`Rv$fDe65Dz_x65POodW9TFie*`q^HK$y`>2c2W!4*=qptgk$>+ zDN}%WDb~XEPgcC_g?EQYtS?Z-!?uH{kWVkV-p6Fu&p(rf8z@3I7z<2bJ%E`oGkVl& zRf_yo7M)LEZQ<>8mFss_zQ}P3mP;a5WhuW`^Uaq^M>QKY#1!aFJp1X3oX zkQAdg>=Q}Er_|4mO#Gds7G)?0T4JAb?b+%#NG2L1LAl3Wa!+Kh;W0nvm%7_wiVjeU zhiGUSAETLe6jwRb>2xrsDnoR3ZwDXcc57pJJmJeL>T_$gJMd50da%QsPL^fla;@Yco9o7RRY==fhOP%fRI~Ixv@(sUccX*CE?o&jv&;Ze(pQki zP}AeDSKhT|#7er7A_iSaR|$*RMpw8B@Io?zZiI*E3#tNwaAF@1%NwDnS-G#mv4WA_TG z`T+!cl$IRR;_Ut_`5EqYd+{Db=Z}& z+N&Y)b;pKj+XD<*|MQ>ia}~Ce^L)K!r-@7P^6*cW)7j>FN>VaV@PAgS-rr>}d|kB}2kyPsh}QMmqshaAgttEf0{D@gL&4sB+|(9@XEOf1t` zCg=aOR(`JZ`<`+r+2SRAiC-@v`uX1${9EvWTN&gaD;)=G# zJ5wm?p`LDQiErB}o9d50@Zw+p#JnfX4?CMDdx(j$(BKjrO;iC-dWJ9WGg|!pZF+V4Efm5nC8}jl$LcN4laJ8ttdS3`<*-DZfx8kok`d5VU>$*=(FDd zC8BNuA9hK7o@({5LT$%W?c}%zF-p{FnKGhX7C&8!)2rj zu)LuJ#R=}a2`99v>r2k+o7S0cUZc87iBc1u#NxI+F?iJSI6PvrXaJ)X-vG@MDFdko zwYsI#a>ol|t%qbVbq+dh^4Gl0$@M%ndI~N-kx!gy%hg~_A|T&%jTenM9|my1@HutkIKsO3!0@ZpAQzS5YB%OlRloLOq~OV@ri z98UVAGsnZ4yYGH~t_$vM3G->*MOLBGU8MgUA3e3qu1TjMr8!2jAf7;de-WvE#+AN* z_VNpOBrRHR?&XQ{R!`$C=gEL)3_wNx{IFvFtu%XHqbYeh+8s~5VQ{t7_{9!NK;vNN zGfeCaHEUksnK%gdSSN{-GNNX!Xz^kYxGoc@7h#JA*Lk%$mn9NtKCPHou^tZApE z<@}C@ZM;&W=3Nb>>ey_Dq}R+GjW*_9)|*>EG?znYNz3_Jq>&tTjGM|HvRN_q^5hC| z_y`_8`MQ1hDf@6^Q6*+axx|1|Vj4z27-15QxwuP!1ZXWBXJf7$IA22I*qwc-cI&llWaja*hB*uQ&6YO3GIex z{lcra&vZDPdpe#~XkI&5=YVaKrtlv_BHSt2ZqlVM-MD&fZu^|J2uO){pR_tFA!MzN zWEewyw=PYYw>_^Pl}b42?^LVW^XKE!qT5`$w74p1?Rx6T*=4Z2{2VS?w1nEq<_QcLxk1{>0 z>#C;w!oc@i^NRXxFZOtU7e2FCQPG^Mjc_0F&5P}Je}y_H4!08HY2EArHDq(h%_FTi zL^JcL(dS^5;Gylz;9~9#(az7-6-Lo^J0xvY>DIbP*xC~ z{9SY|cT>Xc7oA{E-2SN9jdvevNPSIFyjtP7pqIwUl&5|6F>z?i_S8o;e~=V6>f{2(^rY_C)ZtUm7Z1MFY6HoflVE8 zaW@(>nx#~8Wf6E2yx&jzeD4feh&XijB_-p^TSY&(y0^>JIw~+w4lZ5eAF^h+?m7c* z8nWFr298$}m*2L!l@LYE_rw-o6XhM6iR(c8nt4VXo6DP$!2tlHMLNL88)4 z-cMG5v}giz;`B$IPWfE)o?Ni%U>HPp1b2Kz*(jif$I@`0b+1SqI4e|t>Ds4#<5pr>MEp~b5w zIay5TpJi{#Cnb(O9lBC#iJLq2zpRe#q#SSa;jw3#D_ZrAu&|Vxbb5wcp(W9Tqp2b>S z+@6&8&L2LlVX8Y5}$0ux7JiIfiv>nkPU1!E$GMj!3L0B|*joBRUW-t}AwKJ5g zHODibcClXHeTF3f6X@>srnf&n&?>C$hk*DXtuCgEgO%Q16O48rBe`D>tCKC}ROF4f zU_Nag^;=>Td=KF|@0_O;ac5BIXz}L;CRO4;QQ;x*1vBJot9v<7%JN~?<19mrbVD|P z60Bt+b3W`5=5M;*H;e(XK^+x26gj0%1>vO>`D`o`N2Xjt5R9Rlr;K#O7rFOzVEPIo zl?}0*jLvd%KNh<&+dB*>x-)Ps2FmMF=_$cTYqz89&{Dr}GV!`cF}uCz^=vTBKTMx& z3m6myi^C_H!~5@E-U*@=hwGdtsjiBX<1+3sJgfkbu4>CkP+<|D-tV$fU8(~IR%wBF zRs@anARHL^*|&vBudaT}tbl&(%Dtiwb^4bLBe1$8ng{~Bk!%|d@!GPtk*3!?X8XIY zc1fR5>;;=ZdAJeN9IkHF7*D%!u!9@&eee+6(6s>F!ercO zPs)o}vew(|_%RvTuQ(d~O!{)Vt4wgQ-B)lQerml{Hi4S?E-gL`R4E)GsF*wz5>l~xe=Mt0x>VIkJ#TuiGWKQ$-Z|y z#^~fVGn@FMIe0ORR4xtg{cFp%#fLWsfnQY4#nFjzXjO$F4)VWQfL=9=`3_wlg2<)X zOUnQ1qJJs={3x3w3N34eP{d|+_8QTrI$dNA++o+d3as|)15x*;^N>&a%8&Q{rba95 znk@d{zvH3=4*S)@xoI{5XU)HLOSy8vNj_+J7zS|MZ}b0B!Cb^Yw-!qlu|noHszDcZ ztUK0ycdB!ai9KoyKRP$U;cxiOmIAtJ)z|+F*Y6-`@t@PbogG+ZQE#?0@-SmQC5C?S zWxqv_8ujYt*(^b!A)y*Yn(QtoejT;$!g5qOLg>+=%)klFvz7yQOmpwzeC1ejGD68! z783Z}j1Hk^t7L`eth&rh*zMl?kHvFtbq$E+T`Y*lo-_Ceik1g7l2R|yqNU?XGGO+{ivlZm|~DV zoc&@x9``Xh`l|``ZaX`C>N$?=?9rJP9}H8KTTRC{Wf-vK*j~`X3Ypo1RXxietD#|evjaWE zp*ca)$K^W!eUFj)criaIk@k5wQ47SIZ=}tba^lBPO&5VLZg|#neKHpSD@f3WE&k>; z!g8K^m+C4r){V8t()H>C5ufnmQ-tO?V8UE3EYAg_D*T@X_61Le5{6~3j*E(H$DW04=ZUEK>3K*pT>4WkF*Ukvg55?g>cS=4 zKE9_t4qwU(nbyL;p0RD)0_pjFGl@T1%wM2vWZ!*lN0DRSEIK`y3GeN2O8tTBSZfEo z?PIfLZM``Os0x+yQ{utz6SkJS(l^f0da?l(=-<`{&UpdJtG32|TKjtxrIMBB0M`hA%j9r3EgJ1`Yr#g^h3DYOuEr%mh#Ei(#)JTM z-ykuBPrH1-c{!~B6K#Dz9(z+a1@zM2usOU@`{lc17gv({BQYUNBCcq~s^jYbVz=EM zZm;RAVpYt8LmF0S$d3T_^#X~%g`OPy0cM-N0g}~ul{+DxpSKhHDG)YOt4&;6q4a38 zL%1Ha`_sa6^J*4x1U8WNE$6{fYA8)?%JG~fj z^8>??_lK1FJ1j;fGFH+;tqRCOO~SMYU(D&a3|s_NE9 zcZA+GB)L47K6$#UZeVqk5@c1s7bQ64fzYBFlj`6$+|84PA4uw{def8R=wlWt&xJCd z^6)kx>Gy1DluK~un~xJquD@^0#GU!FlZrfiOp=Fw>04&k9GrW2F%no8MrkG&bSnl4 z%{-y4(kG!p+A6WKzyXvrVeNu*VFBK5Um9+QIIpjhM&oxeu1XiE|2e!k8s?*doWAd} zmi)?m`h?8p{O9~Pu(7}p>hvP#9yKTJq%?l~9i*ZeXywe*ZpIO*{oa2a_CySq@@FRf zEe0-{$F`|YI7=;8HPaW=64W+1PCq1rIf7X@+*#SHe~#uPa!e?~WuK4j=A%P6N!g3} z7B@MzXXtRRx0qO`X^a*>*Ad%p8E!)y?3lmauQ$g9=#P5!Cm1&(&5N08I27EV@eJs8 z;I0ubz&^<@eGuZ|?Eq?Vge&*eMCG3oLJ5Ht{xe_a^V*-WNcRB@&eUAO$J^+?^km!K=~IpYqCp&LXmJ0WM9`D)>s_~o{g>{tRNZ40hf~Ow3VXgg?8#-n_1LDl(9L9b1 zw*6!PH<$82ax}vrbpd`dD#X54&?a*@TTJO7<5feJrQb(=a&6FLO*a5>OhwCd2z zSa26Cj>&GK+CK612{`KwtBaV8i(okc9dWXIKICrC@(UE(zj~IkVgImO5nP~8gECcT++U^1J%$#};3D~UkP0HN?(Dd>@(upXW z6&T;o+a=oq(}oBUs1M@J?GWOSKj^3PCv4{}2TCWcJt5;FrQFeN8)A^mr)^eo9)g3aJ5R8b5^F9aD+Nu~ya+ z(u!v9WoLXPv3A-!=a%aNalS~%f8XgG-L9Pfmrnt>UPq2!Jb)F&Y=!-Bl24~h;O&&s ztxArrs6u@Lvo(AI@DVgtrnsBF(Womo*9kgoplM0F#2^U}$=BqjS`ww*V^?FCVQqfQ z$>=6_)h*iOyv%~@&Ln2DuebeQ$XFqY;&nLww-3Y`2r8NTcQR-r?7QUv<^KtM)%hiq_vNR^ZRtVMKdI- zwCKTD1psrXvG8P=V$rDx|K(7a#&BIAq|Eg1Y>WvYVSh1r>l`{PI#H<=HnThZ>OcjV zY^`^&PlZq+wc>C*d3W>ekWh{QuCckrDXvC_+9P7WJ zwv^?*r&qcU9}&gbBGwY&8`na`i>Id^*->cJuTj};6xLBaZNNz zPKW(e@gMJk|La>q{vYA3&vAZ08-6uwAd~xx&E0=~um=p{B<+iE!{-{(N~zBurkoiJ zCt20r5Ghz+Yu^QpP=kVImqBA^-dmZM>!q;_*|P9>*?(Y+hxP?1eVX*`wiI$ZD3ryW zIqu&&(d6(8N`WV96FA93yf!VH-A_CaPn4+4B$`!Q=*V${F!R)(!2hz^xFy2(-8$<)JUbt~Oo>^9$*|5QUE{pY5b%1c z?2ObDzU^25*U%@}F>gI=^6lNT3XWm#uh($?AYcqdJ;sIgcF@V`OT0Z1w*T%$|D@Y3 znxE=oiw4Y15adDArOC%ZGu-2V4)#9&Q>>oc+mWf2GtGzp!~lTK zgaE#UbvAjW=}kQQAb@0VGnsYfrKT+FwY4`mZt0b{s{8W4X88-v>IRo23}#5X2o3ajd0gMB1kP@D;`O z%exGM@E~!BpQI_q&!&PWaq(GS&VkX)GiK`bPnIKpOY1x$h@Ld|Ow$xsA#jX8AhP7W zs%Hz_U7fEk^6H+Fv0ahRhu_o0S|gayy4&j)eRqAvL-pRp6Xx#XB_%;a8R0AjZu~-A zbiq6J=sP_c-w)}XX@1;5Bc!2z{c|Eg-xoSVy8-*u_*c+^|P~myL$acnrT@w z^C^r)T|O6n&lFIvKef?K7n;eo8--nZeZZM)Jir1bj9;}=B9mit0J-lf$b?WT-U0(y z*%=bE=4qp0bZn)Qwx;)F%PfqiF)9QL7{!|2l@z7TYj$TW?lIo%{HQLqf3@pu@DGA~ zP=FId-LN4z)xD!tyEcuyS!hR*t4xu5Ta5~5SZ3WjC=bfFweQ=h(Qe+9e%fdA`#fiy z|4V!2)Cd=fU7iMDR@mR_P*kRKeiy#TaNbG8uQxXVg!9b$m-#}du(L9|m-{HkRVvRMbJWsjIn}0uKx2cyj(R9W> zHigb@V*&njezG-XEbdR87Ok4WR-g;}dggQ1Tx~SgYNndbX3~HbT*qt3%)-;U8 zB&S!cBq8;SAYKpcuRsk`Z8?%ZiU<^8BT8`Tr@Si3#={7GUx{KTqi<@v7VI3m<{kw% zkJe=@_EcnHA0VG4v|)sUihtvgQZuodBGRZFT(=v(-I$sRG8<2^C3bQ=_ee5i$-sB# z&!X8&PoNf9ebGIB|CCz@+0S8$-}pF7K-IJ5=?uaOnP&J8o3MVF7o?S8#h2H>v+hU_ z&C<*dpO|V(WEc%+D)@&6_tl|u-M?fxPCtvahHOh4ZMNsw9Uov!ywS)^LJLy12BmoN z_7C2hTO58Mdj&MM*w~JDOOoa_1;M3eyMHCEbhEwG2j9JEN|=-;)#c14m(;8pX_lI1 z$H55hcpzy*jsErD>ryV*KPs{(`w}|dbl|Hg8Hbo*v`H$JE!U5z6w11ee(97DV`Exk4>#QUFKjO61ZtlY2YyZLe zY|@t}tS$m}DDtB!l8}}+1sH0j{!d-r_$%lr%$PEd$OUHg2rrp<%OIlUqbaQw*2KE1 zcU0mx2YTn^Tc(?$HSd}43%LBf3*HMkMWJxz6&EFwd@2FNeyuQ1dM@kC@dEWLM)V4V z#D@Ug>|0H9ehKXq$|C;~0Y`NP_sF2ZOxOioP5`dAYjG}LQNI$J%^?6JIe$05 zB<3cSxCf=gx-S0tb@0+kvJqig+U7B+Eq2J=5N|vX64Hw~_UW)v;gRHj`4x7@s?q(@ zQ&ZvGY0=u(`}={flE9=1BEoIf*(lrveWSfNo8_R1UPvZdJaaN&P2vbGcE{(4Uy_uGX&1K@|2dT@ zZZ(1h%fi4FdF_-LGCp(C24a%{zh&rbN@2S!qN;2;oRdV6IZ7>}4KNEmFCs;}mP zjy3{8#ja%m>{QPIfgPu-s?N3v7&BxWxk-PcnECV*8w|`0>k;VTk1P;Vw_l0$szfpl z6uQI_ZYRWp0o3=?$?MbpU0!&mo?}1W(x1seda~Tx2^zT2*oY101>x1cJnep%@nhUzEKpgB3 znUgPE0ccalLl{kd9LLhas}52yovAjc;0 zhcll}yfJb4S|qjjsd1BVrB`iZ*ZTV3*2_T4W@oOWP`s9=Z#tWpeTJEI*F+%(M%Oq` zU+G8e9n_E}s~uye&Daj4h>@Y8|FM5GD0htXj{b0F6PxZ(cBTS=vP!xFd5~E@v#Q|k zY(}57EaP6*dzoAh=#T%l<0DXll)_u7@a~0Hd0U^2yvJRKP&NxT=8y-d`YV_dmB>S} z&uga?xyKJP<)naST<>ovd%oC-*EC!t4NbjP{4i&FYv z7f0BP1wl=sAl^@EgI4A{C_#l03gp&Ibg^b zo?X0s4>pHB53spiLQ(Iqg34e`lvI|8n#mbjSz!doj&7lOdwFuJ%dQ5Pvc@Abh&@be zkYs%}20`BzE3V9x8eMqU0k1j|J;Ow;1vqOikLj;7Y^O_U0LjM+l|h=}iShn(H?m2q z52i`GvANfXn`oQAa9Rpw)R#F@1o887*_AR6)OG7sJ7*gvthvq z^KtX#2TU^M;)HQGXzIQBilGbF_^yz`1Ji#)tmYSj81X~@Itr3GMv-+&tX@{z&scUO z9QZN(!~)~;fYTROWZ{l5Kwh&DZpog|D#ca$MM5cF0Ve)!_t6LKzV zzwMkukw1|1WmT;-SMg#tv4G}bb;5iL4Q~0*s#5T!=<%6b)q8wnJ`Zu_sYY=@ zf0`n@nWc1QimW_@@mAML)8G@b5V_UUN<18AQ}%lGPO@7zG`;uteRS|_HSLx{-E=JP zg*7^ve0vX^-=8&>3sOi9G<7irYDxvZ|Xhg;k z_UVsoIv-RPFMEapmXdn!_d)@P+ScIhg$i!iQLkV`te zb#*q;bT2KTWk?NosVmvg48_DKSq;}%sm*nD0IQ-K0wj3ymk$s>Z zBd=RIXyXs}%bR;4Rrkz?X1iw~-%-?mF|EVOpgSIM=trSatO3i# zmj32^8b5GQqI5S&pUE*p!0!( z16EK_0MxWrN-pBMk#ktC z@yhrehhV=$g`>uq_p0TS9o%KM+0R-T;*a9` zRtE978AX&ud#FM;U21rCy+WK+Aggi8Z#qPfYjv>I2aHW-Q#vaD+O9NL=(PQu&2rC4 z!Lg8&OW_|$f8gABga3k&5*cX90m4BlJ?d}VP z)WIInPH4qUhzaZW$v#W%mM%@Ff^UxkDT|kMVa0q~I+PFi%wGDqlNE8|csxrr%O01Z zp=)Derb+#Brt zVA5hkl=4uM@UH7X$kvKTwXRoxd*@{mT_^qbDK0xs`*1bEQE9g=hCVX7=jDSMPp=7! ztME_Cr4=y~E7Rxi6$fsZYX*i;be$7NwqC)FQXV|s9aF&GZKredn`L-Uj9}{K)?PTK*x(N-w81%K{ z;LE_(9+H99lr<|}K~+A5`Sg)?nn)HFG;3mlqWSiV~{Wh^rUcE#8O?=xAf6O#gw3s~Uhu zT!5xST6J}Pg`Mt;9j&B}5ueXjJG;|7>p1Jq`a@we=nHADTNK`9k{-lNq_nZ>RJ@PRReu=0@);pNo0=oK<%*8Lt7) z{pdzaEons&MP$mER-<=)w>~$e)*&gh6$Ni~iCUf>?mmLh3E_Q4YawQj`D$l&+id^F zQ4o~ z->Az`$0eKzS;<+|trW=EcH65GljDzelKTU*@OtH8k1(&7UAu>N0U7J$l97-sRV)|j6 zl#B7vg-({1*G6Pcrgtb*G=GeNQD~OIOYi_SKIPM&ZrHD95(F z%d~cR!~YteE`;h1A7E9)S`V_`=8fN?Y&xKQKlUh1;ylzLzG-e19IwFcZBMxO?@I>{ zUuLAQ-jBzzO7TEBy|ff!L{@d@J8N>g{a2N!u=F^N1M6Eli=@v>F{B@FSbrTz%><`g zQwc!Zh8^cS>%MRKS^iX&8}WmDy!SH0??^q>`^n@B^Y2+`B|-e;o>A{qBr-3je8>Ai zhMp-Du(&+GzRkQ(&QQrHmeb|)+1O=WmeRU$=qOrVm2fcn?zqU3&?puh8CYf3oX}7& zP{8Bzt67;Uv*(e$--s^@mGp{`NDZMhX{S;vBC?!#jobze+3u#oNbp{4oLFmE zv(tJ6ur@eXFh%IQeup;BIK6AEMdtbcD0RbDT6)rXLcaOPQy` z5)=!jLYX0eoSwk5OOUo?5;+2JK$;mr#r6 zj)POypLDh+gv@TjKA}XN7oT~@T(PTg9!&D!gbAL90A4)bGVgd^yLtXq8mOc9Q$9>u z#^WYr989;XDOajNYor-rg z1k%(nnY6nQ%RvWu@-#vFEtC9%AEW)JGi|MzvCRC|!0tTR51STK?c|fEO zO$zdHwIL?44%Hp=f4B@rVNWd)7a_q?caeg0Bks2Im45bdn^HWuW8G0REKg$JP-R1m z-2`_}-{g94?2;OV_XyQhbRltO&^0kzV8P+eEwURI)l?t~zFcRc%gLa#lvE1w zpIfTh8cz)*EsQ^vJ<&c&;QKsn-FA?j$o9Ink#@d#$-r)jP+ zv8uL+LBp<2R$eSWhEC1iq`dUV%YyLp88(km_;KVgGt8K>WJZCxWBfZ^1#?>@OyK`% z@2$V0`og~dGc$B|mm<>LNQ{bf3P^WIhja}?gQOx20wRr+lu|<@NQrbabPgbb)O_dj zeDCMS=Rdg5nqSUZd+lq@oPG9OdtdL@dvgFp&wGAk(Rmq@Bq&@{y>x&?v9n3tvQ8Gj zJ^f588RVQl>W!Y~A}S%FsH2i%)E`ska5Ef-rI{BxzXMl_lm>{nr`PD#=-~9vFK0;H zj{}IpCaonOb6$c)%;~7>FyMXniKY}K*TW7>RbKjV$iFx0!Vrn7;EO83@=^p8E67q; z7@sW`yvzzk+i0|fu;*37DX`7vsq&*p-LwhMZ=G8$cN(z|Nu@m&K%%9T^!AN~C{H}gUzo($`5@d(AR4_O z#DqSnimW>?#5OXPTk^29+p}mg8HiG}=%AQ?Y}G$e^*Dt-KN%^waMDM&MV&f7pd0S3 z5jpvfm^j!u`g>SV0q(JjXpk5GRolES4i8+!S!X0vw*K+=6~JI+^0I4EjQQ9DpYDSBZ_M47(RTrZaiN2#diQ*1{C%U(k5(;~=-2dfC1br#@t$XCeo! zA%2viBA-aCzr#sKJT9}H$DHVZr1XS5jIDW6L6__GW2=ji_ z+2+Yc!t_e%o`^`#?2jk9zj^$epp_TzHwwy>@65Ec@{dk_YR~O=>0dwuB2`%m|B(Zx zCCu8%O#g4A`pGIYay2Ikvw;l1=!RuCNYp7x5_SPP9ISTK4xs_~$E|PV4y!?W+yG_{ z5d!a0A_(Ay!2nO z+v2x);WUb4@KJB>g!Pdz(z6S@J+O}U-f7ZN_Ckr14ZSjQ&C^{pDOT=GAXO?LB-UvQ zk)L!UJ@#m6TBFoi?dcJDwyfeI`AMxY>+%sO1zwp|G|=SwJKp(sO+gIt4T$~mb2mJq zFTljb{eOvR{B)Q!V{hAWbp945|3Gy=ER;ObJ>T_O^D%e1J!lXPaD5S$Cvz<3Vrxo_E?=%8nOi=k`D(b0ktkQHDONsYB#umvqdfWN4qj-nu{-@4 zPu}W1N=Bz;BIrweKyCuE!o$^i9Ixy#7k#3cdw@w#+rx~`rF`z3eJ%$%QYBAgN1vaL zM)%gk44H&P`AudF@l`A|LCW|ba^>1)iQ~N>tb*fq>d3SkPz?b-1x(rWAffvup{lHY*2UEqzmI zdAphu8j4D(O&aiaS%hfODE$>sVx^n`^vinFvj6CdJ`+}#NO zn=AFk$GnpYe&3lp+kA*%jh{$=ah{XKFJV_*VTYF)vLjx}gXkmYhx?YzQ`XhxB#N4Y zYH6f{@QcX4q?B0D3<^)AHWn>va^Eh83b3+VtkuL z7PsFHYbh+*SH4PPEv>`wML}$@H!gEyk*t>VZ#CPHP(G>NyV1QW|1skSg%SdBPxVb( zzb>lE{_-Y#+_X@UNv8H>j66IceAqid31Lp-h>V)TDV|+|=PNVeshb);^Nmsi%2}xm zqWa)XiyFE?eV#ID@%_-Z4kB9@P# zY;WNgo_ZU^=%cplgw%ryeB|MX! zK|5@=Y@x$Fi7cEb$6EfZ-$Ah}-iUf+kg07DRu4^R*k9!nN&uH$zxeOyo>7Y-bk{!o z-ql0hgqjCb=$y{zKtZU`1R#SwraaJ$97177guk34LyUass zx^1h1p~Yg{Eh+5gjj z$FYK8^x&~Yg5ZpRx8$wv%_nc5@J0MMDRns1`eRqUUl>?Q&ob$Rk0oI+!#qZmlZh^# zkFCejyS+qgoEEI)OT@Y#h?VkpC2n%M&HMoyazPzI(aT@*b3Bv`ysRR_SzB_M@35ghmY!hf$ zh|xSOn5@$4@r-%~7{w@duJkb5YFW+PeQo@wZODdM3Q|9ukXmAeNH85HhXuJ&!MaKr zQ%4YSxL>ohqjf%dFP=w3Vloc(@VLQo}X$wd*wz9`_4RRgD!*?AY zKH|iwhWOoGT>TrUsk1TOv`4LqKm>t5VpTk!Z2IeOi)Mws-$+PFLvUKRJnXu@Y#q1e zM7$iCD*;XU0EAgxzHImID~{C*Gin~wF8%O!%3IdNH^m(jcMQ=`3qT3{yv^=3eWZE4 zGntWGQmb2+7vBmR7=__b)bTe^>38Qh5k)Dt1frMQ~PbknLVR(MWq7OFc@$?);c~Z{E9hX9d zJirxF#|QpYmIpU9F)cy3bsVlv)VH857s?Z=5O57C;^}~j_0_MoI{Or60#@i6HuR@w zYL)i-B;zbHxJB@VJik@_l{Tu&Oa3I>1jmkngbb2#vYS*p%9!vkR|XIv78S5Q@3x%8 z%fVE%aO;qcdbS&1?=II*uD>V+yHR~sDE!oozc$(g=r}9T^d9k^AkG&zjxS}`Xwndb zfV$KWCbzd#XlJnO45EJHi}QgCV<%9;wpO!eI5kSaIo>$XLX+H^l5z3;*p5Z%Ws*F7 zkUl(C0k1qWynQ85C^NdJ1 z!8jHGH21C&wNdtJeH(G7WmVhIKxT!RZ?jAOV=Q{Te%VuvV6UEPP zKw-9PR%}IK=wCaCrf&pE`k4^UNw{*3U4uB*Sen(hKZhGtgU}5w;Lc`OIvXYCHy}(P z6Ci*Wh$8Pji>0w~Wo@}v@Fyl*G^}m7^CE^)#6faN{kkPBnIl(g4#&jr(uqf2tllw& zK@FH#Pr|S)kI;{C3{L=8gQUp|Tnra<`LM9;uA1on5)}|~J54UMnTMh&GfHQ$1teHx3>3mt6xEApMDdKgX&Uj zra6)kf|d_1MhZIwa6St;VW!!i^tf|Q=5xG5wn{~0fG|I>ZR6PzisAO}{-zgOUXSWP z%S9US*RJ*$LcF`BZUc;2=gQ87(#)nTlZ8HaPUJW&g$53;U*VQGQ%WkOa&5Lxy%qn6&(&=Ms1 z=NrjaX9*C(mW%$`o#fuC+z&re7%#E7lhI+pufcW(zT2m0^OexM??pwq9ZqBqgP%_w z?)C`}Jd$x&6%rRs7EbTyQySG55gt>_R~5=3OOsON5dHBX?el;}WukbE@WW?{I%JKY zc?L4O)!CSpm0#@*Ur^Jbty`zrv`xb(V_vb5ZJD2(1$7tBjP3KhpWo0|);>vfF|e|^Hpd3Ut=SBkm6U2@gP(-_CyuUFvcQl9|-ZKcSv67 zmH|4P-z}j}UEN?`xuBu8+$=%9G_bR4$AGdaqO+0E^NTCym|(R0Z6kIc^6EB-hr;IWO}V zcpXy%sitZDh)=lhSiaK!;@(e^QYRfi%EKDHA0G$W75qHXbbf+{1eUVRL=Bn*N zod>R}>vTNBe7B2@qgTJ;eBtv%v!ZO=(SLAuC21a6&Be`UT`q8;KiRA z^az)?>rH8 zay0Z6CoztEyAM(12%oHwFYhs32TjH_-ne}!R1$eoUz>?XT0s`XW}K`_sE~Y}CP2iC z_9r>VqyicM>+aO*v*qRSq6RenRd)QWZE>W+?;9*I_iu{ry@xn_Dih^|GM%eJR+ltrFUrMxpP~2*O`D<&xXF+%TJU5#@k%Z8Z)a~p-W!pm@!v~nMfpGUd5!*Dga zsCT-SFg+J2gwyL3ZcWc~kwT0A=TZ0!_!-v#F{PIE(+g*f{kB|RNYF1l^IOw~Sr3`V z_kQ!50dMre=DcX%Q>UK%7e=D!7g}DTgIsX=o+{!)Ey>ARiD38)GKksgE}S6brer># z$WMoElQs=$c5az};39VyJR>1trSdI0EWaMx->d;Ah9evN*fogj+<~k-3$v4vE%4&v zQ{bHc1V;Of2B5-l8Zb1GJ+PIda++ zNXRVmb73_|8htA~B=}HC;=mg0)&c6pHM$zBPHGL^ltHNQXs5q5{504Q`-S3e=TX2M z4}s^&0x9y{tO79N6qCDy4R53bn&}a4Z`VslwAQm1KVtt{|Gd%uR(`^}sYLBa6rA+} zF{!te)n$hRtKXo&B6c#u$N9Haxg21*L*W?w8^v!hc$$_yBGkA`ciY&SMT~>Dy$09q z4p1K~9i5WNYZY?rouiG)`Yh41Ndbn;pNw z27^tfsvFXKKeLbwFGFMR-!d~0{fb7*7;fSjQ zCo;fpk5BfyE0b1!DnI;#QT9_jsW)g)V+=vdZK^VkEP)lx||<(MSF zY4lGZ_B}*+YcJRH)=sU2=HQRYq#6(zU z=MH&ecCs;w^gQXwHu~C>^%VBaO=iWM6Q66`egV8e()r4pjC6)i+38TM1C+nHFrUIJ z_?gnGdw}dprW=w_>bOggJCW4g zq1a^GeQ;o3KT$ZU_P%Y~Z?$-JHewAqn~~9kwu8b?*imnVeC;Sw#*8DYV%!~03$@ZZ zS_MESJ~+Po zCBYKxP0;zZjvNtLN|zqnm|$nN z@&$Bq3VQAh{c(tsh(?=gAeV0&rX0Q>x8}genhj$RjH5-6rr^zR`mlG!T35AMk{s8E zZ!IcqbVhsEhj@4W^y;YI%v`0}UiOcHpWy_^N3bQ+7rzhinPD&!ZYNQRH5Pmf$(4z0 zSst(K2xCY5@S%5*4`%mcCa`jR`R}A7fA%Gy!nvhGvdY_?)>4Zob8xlegSPc{zGi6T zUvIl~lK?c0RVE1|IP@g-kjx)Sx?y(1C0Q(p_`@uDUCLL6Jb)$H|U)=_i#D=nZT9k^7lxLz}Uw*+PtHD4c(5@X6)Hw`(Ui zY&ej~09fdO(P!~)0avB=iP*c*x^&-fh>hxjIyi@K=0AE16N-szJyXa%CN zzhW0IF^UMc0}c<9XFIPcwi8!y71HCSPTrFDo=6FX*S)nY^$TN~3-aV*39^@Av6Nz<1-f-0oJLL=1|{}w$Ur0pJ0HBftYX80XX*Z(Sn?5u{hMz=ZFN}?woFEidV{~) zg}ml`%YAeE7K1I{%3#L1nm+#07r`MOa5h?0`L=-E-EPGSTBzOI!shH9yl+tf$@WlW3+Kj?jM7HxY zE9zHPZ=T`<^b8{Sk0`C?*l@MOPVIlvH{n{mf5fc?mnDtUy|#7ePCwlqRgV*=G0o zu{cOW4~+qjRl4}zSWUK!2xh`!G@%=q`buW_c!vu_{b*N>Jo%wUxdzho>j7$BT@pb? z>u>V!IiZL=G=$9pm^%fukFp|6En1l>29&5zE#q7apAx{m6%mDWu*-RlR_6@?11^a^iU0-hezfxKsuS*uJN}UG`@nHt1HO2qp9?Qm z&(R1pkcU(}6PavS+b8ORixA5t&oUb%umJ4L?PE@QwK+Wl4dh^_@w2+3+rR`L$n6>j zZ+KJ3_qv4Zed|BX!lDP^oDzxMC$BUSzufNNpIMJj)je6w??M_1A_^Jy~s27R9u&W2mL7`u_-@H+#pZ1^w)4*%8>Qq&%^BqnvqrVrvw;*O#ACc zT$0&}KfdE@!-ncbBg(CQMJJigGQ_=t8n+en)oIf5Spw9zVME84akO&xRi&D;FMN>&&8Ul*F+S z*yZuRh$DcfA~=0+W^#K}@(Qnc-ShsCT>sTQhU*Xoh+vCkL*(?`s-_=gdhMx8{_{MVS2uhx{X7c}( zAPvRBX)d6P+3`ymusu*JcK3Lgh)M~>Bf_~hcT9W@qQ1roOfU5L&JHgCwy!;GLnnV#QXi5r8;u#xK2}k2WMnCD!D#VY zsZ^A(@8<;R;=jmYFV55T;Ul`2GvHpeXwui@SUiIgL|S`80s8XM%_1fP&F%BCL0}Y9 zo+^F0LK@=Noo(GwR=j2#PhCeR>;7Lll>{TzV0b!?%~LwWP%I3$dbAWnMC`j+Y+#9S z#H7=y#M&UV0?HYVtry_MSx@$*N-q_X;~{@Pr66Mul0%f*u_*M?jc*%9X8#SvbpHOC z9{NqUplKqnq5k4Zs9IJ6Ys8PFzv^b#3ssK&Sr$Rkk^PYRYAr?Hog4V{)!D7$lTDI_ zn3LKwZ6w^S@Uu3Bo^lY~DjH9K8AiZb>n9vEK~B}CY;6RiGhVcK9DZm}p+K|7=t%PR zU309}_`1}qLxG;_4wA9Fy~xl}d!t~fn9V&vQxhNhxU_)CmdYml4KjNk7p4R^Q#8ad z0~iR;k%R0lC@`12wmc4GT;-}#{efQH8u~4z0-{G}9zv8!QaiXQLd(kJ%Ycu>V(J2= zdgIwK%dT=9SXh1P7wD}?+X`?Cv#ee=j9@Rjv7P?$l1a*@M_mS?a#KbsKiSr@IMTL^Ure0Qld+$A2NaHnAJ|6vp{%>n4p+-3QX|6ip{IaPPu+hc z3bYMttR}4JwLU&Lko=v(LxRuO$&`gYfX?J#uN7xJtp1VOm+kW!ZDI>B=P$2A4^=C) zDukOGy8WZGl5j}9eHz@_;na;afoE@uo&TM0m8y@bfF??$#_t*qqlQWe9k!L*x-f2@tMe^^^1F*K z25~ThPg;r13_Ug=7Tq7Xs-Opr#&=*jvsUv?_Eq}2SOiS`EIh - - - - - - - - - - - - - - - - - - - AssepontoApp - - - - - - - diff --git a/example/web/manifest.json b/example/web/manifest.json deleted file mode 100644 index 22c050b..0000000 --- a/example/web/manifest.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "assepontomobile", - "short_name": "assepontomobile", - "start_url": ".", - "display": "standalone", - "background_color": "#0175C2", - "theme_color": "#0175C2", - "description": "A new Flutter project.", - "orientation": "portrait-primary", - "prefer_related_applications": false, - "icons": [ - { - "src": "icons/Icon-192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "icons/Icon-512.png", - "sizes": "512x512", - "type": "image/png" - }, - { - "src": "icons/Icon-maskable-192.png", - "sizes": "192x192", - "type": "image/png", - "purpose": "maskable" - }, - { - "src": "icons/Icon-maskable-512.png", - "sizes": "512x512", - "type": "image/png", - "purpose": "maskable" - } - ] -} diff --git a/example/web/sqflite_sw.js b/example/web/sqflite_sw.js deleted file mode 100644 index 44587cf..0000000 --- a/example/web/sqflite_sw.js +++ /dev/null @@ -1,11559 +0,0 @@ -(function dartProgram(){function copyProperties(a,b){var s=Object.keys(a) -for(var r=0;r=0)return true -if(typeof version=="function"&&version.length==0){var q=version() -if(/^\d+\.\d+\.\d+\.\d+$/.test(q))return true}}catch(p){}return false}() -function inherit(a,b){a.prototype.constructor=a -a.prototype["$i"+a.name]=a -if(b!=null){if(z){Object.setPrototypeOf(a.prototype,b.prototype) -return}var s=Object.create(b.prototype) -copyProperties(a.prototype,s) -a.prototype=s}}function inheritMany(a,b){for(var s=0;s").b(a))return new A.ej(a,b.h("@<0>").t(c).h("ej<1,2>")) -return new A.c6(a,b.h("@<0>").t(c).h("c6<1,2>"))}, -rZ(a){return new A.cf("Field '"+a+"' has not been initialized.")}, -nq(a){var s,r=a^48 -if(r<=9)return r -s=a|32 -if(97<=s&&s<=102)return s-87 -return-1}, -bV(a,b){a=a+b&536870911 -a=a+((a&524287)<<10)&536870911 -return a^a>>>6}, -o6(a){a=a+((a&67108863)<<3)&536870911 -a^=a>>>11 -return a+((a&16383)<<15)&536870911}, -cx(a,b,c){return a}, -oE(a){var s,r -for(s=$.aU.length,r=0;rc)A.Q(A.au(b,0,c,"start",null))}return new A.ci(a,b,c,d.h("ci<0>"))}, -pg(a,b,c,d){if(t.Q.b(a))return new A.c8(a,b,c.h("@<0>").t(d).h("c8<1,2>")) -return new A.bs(a,b,c.h("@<0>").t(d).h("bs<1,2>"))}, -pp(a,b,c){var s="count" -if(t.Q.b(a)){A.jg(b,s,t.S) -A.aP(b,s) -return new A.cE(a,b,c.h("cE<0>"))}A.jg(b,s,t.S) -A.aP(b,s) -return new A.bv(a,b,c.h("bv<0>"))}, -bq(){return new A.bx("No element")}, -p8(){return new A.bx("Too few elements")}, -t1(a,b){return new A.dJ(a,b.h("dJ<0>"))}, -tn(a,b,c){A.h8(a,0,J.Z(a)-1,b,c)}, -h8(a,b,c,d,e){if(c-b<=32)A.tm(a,b,c,d,e) -else A.tl(a,b,c,d,e)}, -tm(a,b,c,d,e){var s,r,q,p,o,n -for(s=b+1,r=J.V(a);s<=c;++s){q=r.i(a,s) -p=s -while(!0){if(p>b){o=d.$2(r.i(a,p-1),q) -if(typeof o!=="number")return o.a2() -o=o>0}else o=!1 -if(!o)break -n=p-1 -r.j(a,p,r.i(a,n)) -p=n}r.j(a,p,q)}}, -tl(a3,a4,a5,a6,a7){var s,r,q,p,o,n,m,l,k,j=B.c.G(a5-a4+1,6),i=a4+j,h=a5-j,g=B.c.G(a4+a5,2),f=g-j,e=g+j,d=J.V(a3),c=d.i(a3,i),b=d.i(a3,f),a=d.i(a3,g),a0=d.i(a3,e),a1=d.i(a3,h),a2=a6.$2(c,b) -if(typeof a2!=="number")return a2.a2() -if(a2>0){s=b -b=c -c=s}a2=a6.$2(a0,a1) -if(typeof a2!=="number")return a2.a2() -if(a2>0){s=a1 -a1=a0 -a0=s}a2=a6.$2(c,a) -if(typeof a2!=="number")return a2.a2() -if(a2>0){s=a -a=c -c=s}a2=a6.$2(b,a) -if(typeof a2!=="number")return a2.a2() -if(a2>0){s=a -a=b -b=s}a2=a6.$2(c,a0) -if(typeof a2!=="number")return a2.a2() -if(a2>0){s=a0 -a0=c -c=s}a2=a6.$2(a,a0) -if(typeof a2!=="number")return a2.a2() -if(a2>0){s=a0 -a0=a -a=s}a2=a6.$2(b,a1) -if(typeof a2!=="number")return a2.a2() -if(a2>0){s=a1 -a1=b -b=s}a2=a6.$2(b,a) -if(typeof a2!=="number")return a2.a2() -if(a2>0){s=a -a=b -b=s}a2=a6.$2(a0,a1) -if(typeof a2!=="number")return a2.a2() -if(a2>0){s=a1 -a1=a0 -a0=s}d.j(a3,i,c) -d.j(a3,g,a) -d.j(a3,h,a1) -d.j(a3,f,d.i(a3,a4)) -d.j(a3,e,d.i(a3,a5)) -r=a4+1 -q=a5-1 -if(J.a4(a6.$2(b,a0),0)){for(p=r;p<=q;++p){o=d.i(a3,p) -n=a6.$2(o,b) -if(n===0)continue -if(n<0){if(p!==r){d.j(a3,p,d.i(a3,r)) -d.j(a3,r,o)}++r}else for(;!0;){n=a6.$2(d.i(a3,q),b) -if(n>0){--q -continue}else{m=q-1 -if(n<0){d.j(a3,p,d.i(a3,r)) -l=r+1 -d.j(a3,r,d.i(a3,q)) -d.j(a3,q,o) -q=m -r=l -break}else{d.j(a3,p,d.i(a3,q)) -d.j(a3,q,o) -q=m -break}}}}k=!0}else{for(p=r;p<=q;++p){o=d.i(a3,p) -if(a6.$2(o,b)<0){if(p!==r){d.j(a3,p,d.i(a3,r)) -d.j(a3,r,o)}++r}else if(a6.$2(o,a0)>0)for(;!0;)if(a6.$2(d.i(a3,q),a0)>0){--q -if(qh){for(;J.a4(a6.$2(d.i(a3,r),b),0);)++r -for(;J.a4(a6.$2(d.i(a3,q),a0),0);)--q -for(p=r;p<=q;++p){o=d.i(a3,p) -if(a6.$2(o,b)===0){if(p!==r){d.j(a3,p,d.i(a3,r)) -d.j(a3,r,o)}++r}else if(a6.$2(o,a0)===0)for(;!0;)if(a6.$2(d.i(a3,q),a0)===0){--q -if(q=m.length)return A.c(m,3) -s=m[3] -if(b==null){if(s!=null)return parseInt(a,10) -if(m[2]!=null)return parseInt(a,16) -return n}if(b<2||b>36)throw A.b(A.au(b,2,36,"radix",n)) -if(b===10&&s!=null)return parseInt(a,10) -if(b<10||s==null){r=b<=10?47+b:86+b -q=m[1] -for(p=q.length,o=0;or)return n}return parseInt(a,b)}, -k4(a){return A.t6(a)}, -t6(a){var s,r,q,p -if(a instanceof A.r)return A.aJ(A.a3(a),null) -s=J.bj(a) -if(s===B.Y||s===B.a_||t.cx.b(a)){r=B.u(a) -if(r!=="Object"&&r!=="")return r -q=a.constructor -if(typeof q=="function"){p=q.name -if(typeof p=="string"&&p!=="Object"&&p!=="")return p}}return A.aJ(A.a3(a),null)}, -pl(a){if(a==null||typeof a=="number"||A.c2(a))return J.bb(a) -if(typeof a=="string")return JSON.stringify(a) -if(a instanceof A.bN)return a.l(0) -if(a instanceof A.cu)return a.dz(!0) -return"Instance of '"+A.k4(a)+"'"}, -t8(){if(!!self.location)return self.location.href -return null}, -tg(a,b,c){var s,r,q,p -if(c<=500&&b===0&&c===a.length)return String.fromCharCode.apply(null,a) -for(s=b,r="";s>>0,s&1023|56320)}}throw A.b(A.au(a,0,1114111,null,null))}, -aO(a){if(a.date===void 0)a.date=new Date(a.a) -return a.date}, -tf(a){return a.b?A.aO(a).getUTCFullYear()+0:A.aO(a).getFullYear()+0}, -td(a){return a.b?A.aO(a).getUTCMonth()+1:A.aO(a).getMonth()+1}, -t9(a){return a.b?A.aO(a).getUTCDate()+0:A.aO(a).getDate()+0}, -ta(a){return a.b?A.aO(a).getUTCHours()+0:A.aO(a).getHours()+0}, -tc(a){return a.b?A.aO(a).getUTCMinutes()+0:A.aO(a).getMinutes()+0}, -te(a){return a.b?A.aO(a).getUTCSeconds()+0:A.aO(a).getSeconds()+0}, -tb(a){return a.b?A.aO(a).getUTCMilliseconds()+0:A.aO(a).getMilliseconds()+0}, -bT(a,b,c){var s,r,q={} -q.a=0 -s=[] -r=[] -q.a=b.length -B.a.aY(s,b) -q.b="" -if(c!=null&&c.a!==0)c.B(0,new A.k3(q,r,s)) -return J.rt(a,new A.fC(B.a3,0,s,r,0))}, -t7(a,b,c){var s,r,q -if(Array.isArray(b))s=c==null||c.a===0 -else s=!1 -if(s){r=b.length -if(r===0){if(!!a.$0)return a.$0()}else if(r===1){if(!!a.$1)return a.$1(b[0])}else if(r===2){if(!!a.$2)return a.$2(b[0],b[1])}else if(r===3){if(!!a.$3)return a.$3(b[0],b[1],b[2])}else if(r===4){if(!!a.$4)return a.$4(b[0],b[1],b[2],b[3])}else if(r===5)if(!!a.$5)return a.$5(b[0],b[1],b[2],b[3],b[4]) -q=a[""+"$"+r] -if(q!=null)return q.apply(a,b)}return A.t5(a,b,c)}, -t5(a,b,c){var s,r,q,p,o,n,m,l,k,j,i,h,g=Array.isArray(b)?b:A.fG(b,!0,t.z),f=g.length,e=a.$R -if(fn)return A.bT(a,g,null) -if(fe)return A.bT(a,g,c) -if(g===b)g=A.fG(g,!0,t.z) -l=Object.keys(q) -if(c==null)for(r=l.length,k=0;k=s)return A.W(b,s,a,null,r) -return A.pm(b,r)}, -vq(a,b,c){if(a>c)return A.au(a,0,c,"start",null) -if(b!=null)if(bc)return A.au(b,a,c,"end",null) -return new A.bc(!0,b,"end",null)}, -nj(a){return new A.bc(!0,a,null,null)}, -b(a){return A.qH(new Error(),a)}, -qH(a,b){var s -if(b==null)b=new A.by() -a.dartException=b -s=A.vO -if("defineProperty" in Object){Object.defineProperty(a,"message",{get:s}) -a.name=""}else a.toString=s -return a}, -vO(){return J.bb(this.dartException)}, -Q(a){throw A.b(a)}, -qR(a,b){throw A.qH(b,a)}, -aT(a){throw A.b(A.ar(a))}, -bz(a){var s,r,q,p,o,n -a=A.qO(a.replace(String({}),"$receiver$")) -s=a.match(/\\\$[a-zA-Z]+\\\$/g) -if(s==null)s=A.u([],t.s) -r=s.indexOf("\\$arguments\\$") -q=s.indexOf("\\$argumentsExpr\\$") -p=s.indexOf("\\$expr\\$") -o=s.indexOf("\\$method\\$") -n=s.indexOf("\\$receiver\\$") -return new A.la(a.replace(new RegExp("\\\\\\$arguments\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$argumentsExpr\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$expr\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$method\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$receiver\\\\\\$","g"),"((?:x|[^x])*)"),r,q,p,o,n)}, -lb(a){return function($expr$){var $argumentsExpr$="$arguments$" -try{$expr$.$method$($argumentsExpr$)}catch(s){return s.message}}(a)}, -pv(a){return function($expr$){try{$expr$.$method$}catch(s){return s.message}}(a)}, -nQ(a,b){var s=b==null,r=s?null:b.method -return new A.fE(a,r,s?null:b.receiver)}, -T(a){var s -if(a==null)return new A.k_(a) -if(a instanceof A.dB){s=a.a -return A.c5(a,s==null?t.K.a(s):s)}if(typeof a!=="object")return a -if("dartException" in a)return A.c5(a,a.dartException) -return A.ve(a)}, -c5(a,b){if(t.V.b(b))if(b.$thrownJsError==null)b.$thrownJsError=a -return b}, -ve(a){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=null -if(!("message" in a))return a -s=a.message -if("number" in a&&typeof a.number=="number"){r=a.number -q=r&65535 -if((B.c.R(r,16)&8191)===10)switch(q){case 438:return A.c5(a,A.nQ(A.t(s)+" (Error "+q+")",e)) -case 445:case 5007:p=A.t(s) -return A.c5(a,new A.dR(p+" (Error "+q+")",e))}}if(a instanceof TypeError){o=$.qW() -n=$.qX() -m=$.qY() -l=$.qZ() -k=$.r1() -j=$.r2() -i=$.r0() -$.r_() -h=$.r4() -g=$.r3() -f=o.a1(s) -if(f!=null)return A.c5(a,A.nQ(A.U(s),f)) -else{f=n.a1(s) -if(f!=null){f.method="call" -return A.c5(a,A.nQ(A.U(s),f))}else{f=m.a1(s) -if(f==null){f=l.a1(s) -if(f==null){f=k.a1(s) -if(f==null){f=j.a1(s) -if(f==null){f=i.a1(s) -if(f==null){f=l.a1(s) -if(f==null){f=h.a1(s) -if(f==null){f=g.a1(s) -p=f!=null}else p=!0}else p=!0}else p=!0}else p=!0}else p=!0}else p=!0}else p=!0 -if(p){A.U(s) -return A.c5(a,new A.dR(s,f==null?e:f.method))}}}return A.c5(a,new A.hr(typeof s=="string"?s:""))}if(a instanceof RangeError){if(typeof s=="string"&&s.indexOf("call stack")!==-1)return new A.e3() -s=function(b){try{return String(b)}catch(d){}return null}(a) -return A.c5(a,new A.bc(!1,e,e,typeof s=="string"?s.replace(/^RangeError:\s*/,""):s))}if(typeof InternalError=="function"&&a instanceof InternalError)if(typeof s=="string"&&s==="too much recursion")return new A.e3() -return a}, -a1(a){var s -if(a instanceof A.dB)return a.b -if(a==null)return new A.ez(a) -s=a.$cachedTrace -if(s!=null)return s -return a.$cachedTrace=new A.ez(a)}, -oG(a){if(a==null)return J.bm(a) -if(typeof a=="object")return A.dU(a) -return J.bm(a)}, -vt(a,b){var s,r,q,p=a.length -for(s=0;s=0 -else if(b instanceof A.cO){s=B.b.a_(a,c) -return b.b.test(s)}else{s=J.rk(b,B.b.a_(a,c)) -return!s.gY(s)}}, -vr(a){if(a.indexOf("$",0)>=0)return a.replace(/\$/g,"$$$$") -return a}, -qO(a){if(/[[\]{}()*+?.\\^$|]/.test(a))return a.replace(/[[\]{}()*+?.\\^$|]/g,"\\$&") -return a}, -vL(a,b,c){var s=A.vM(a,b,c) -return s}, -vM(a,b,c){var s,r,q -if(b===""){if(a==="")return c -s=a.length -r=""+c -for(q=0;q=0)return a.split(b).join(c) -return a.replace(new RegExp(A.qO(b),"g"),A.vr(c))}, -dd:function dd(a,b){this.a=a -this.b=b}, -dx:function dx(a,b){this.a=a -this.$ti=b}, -dw:function dw(){}, -c7:function c7(a,b,c){this.a=a -this.b=b -this.$ti=c}, -cs:function cs(a,b){this.a=a -this.$ti=b}, -el:function el(a,b,c){var _=this -_.a=a -_.b=b -_.c=0 -_.d=null -_.$ti=c}, -fC:function fC(a,b,c,d,e){var _=this -_.a=a -_.c=b -_.d=c -_.e=d -_.f=e}, -k3:function k3(a,b,c){this.a=a -this.b=b -this.c=c}, -la:function la(a,b,c,d,e,f){var _=this -_.a=a -_.b=b -_.c=c -_.d=d -_.e=e -_.f=f}, -dR:function dR(a,b){this.a=a -this.b=b}, -fE:function fE(a,b,c){this.a=a -this.b=b -this.c=c}, -hr:function hr(a){this.a=a}, -k_:function k_(a){this.a=a}, -dB:function dB(a,b){this.a=a -this.b=b}, -ez:function ez(a){this.a=a -this.b=null}, -bN:function bN(){}, -f9:function f9(){}, -fa:function fa(){}, -hi:function hi(){}, -hf:function hf(){}, -cB:function cB(a,b){this.a=a -this.b=b}, -hR:function hR(a){this.a=a}, -h6:function h6(a){this.a=a}, -hL:function hL(a){this.a=a}, -mM:function mM(){}, -b3:function b3(a){var _=this -_.a=0 -_.f=_.e=_.d=_.c=_.b=null -_.r=0 -_.$ti=a}, -jN:function jN(a){this.a=a}, -jM:function jM(a){this.a=a}, -jO:function jO(a,b){var _=this -_.a=a -_.b=b -_.d=_.c=null}, -b4:function b4(a,b){this.a=a -this.$ti=b}, -dI:function dI(a,b,c){var _=this -_.a=a -_.b=b -_.d=_.c=null -_.$ti=c}, -nr:function nr(a){this.a=a}, -ns:function ns(a){this.a=a}, -nt:function nt(a){this.a=a}, -cu:function cu(){}, -dc:function dc(){}, -cO:function cO(a,b){var _=this -_.a=a -_.b=b -_.d=_.c=null}, -eq:function eq(a){this.b=a}, -hJ:function hJ(a,b,c){this.a=a -this.b=b -this.c=c}, -hK:function hK(a,b,c){var _=this -_.a=a -_.b=b -_.c=c -_.d=null}, -e4:function e4(a,b){this.a=a -this.c=b}, -iF:function iF(a,b,c){this.a=a -this.b=b -this.c=c}, -iG:function iG(a,b,c){var _=this -_.a=a -_.b=b -_.c=c -_.d=null}, -bk(a){A.qR(new A.cf("Field '"+a+"' has not been initialized."),new Error())}, -ja(a){A.qR(new A.cf("Field '"+a+"' has been assigned during initialization."),new Error())}, -eg(a){var s=new A.lF(a) -return s.b=s}, -lF:function lF(a){this.a=a -this.b=null}, -uI(a){return a}, -or(a,b,c){}, -uM(a){return a}, -ph(a,b,c){A.or(a,b,c) -c=B.c.G(a.byteLength-b,4) -return new Int32Array(a,b,c)}, -b6(a,b,c){A.or(a,b,c) -return c==null?new Uint8Array(a,b):new Uint8Array(a,b,c)}, -bG(a,b,c){if(a>>>0!==a||a>=c)throw A.b(A.eT(b,a))}, -uJ(a,b,c){var s -if(!(a>>>0!==a))s=b>>>0!==b||a>b||b>c -else s=!0 -if(s)throw A.b(A.vq(a,b,c)) -return b}, -cT:function cT(){}, -a7:function a7(){}, -dN:function dN(){}, -ah:function ah(){}, -bS:function bS(){}, -aM:function aM(){}, -fN:function fN(){}, -fO:function fO(){}, -fP:function fP(){}, -fQ:function fQ(){}, -fR:function fR(){}, -fS:function fS(){}, -fT:function fT(){}, -dO:function dO(){}, -dP:function dP(){}, -es:function es(){}, -et:function et(){}, -eu:function eu(){}, -ev:function ev(){}, -pn(a,b){var s=b.c -return s==null?b.c=A.on(a,b.y,!0):s}, -nW(a,b){var s=b.c -return s==null?b.c=A.eH(a,"I",[b.y]):s}, -po(a){var s=a.x -if(s===6||s===7||s===8)return A.po(a.y) -return s===12||s===13}, -tk(a){return a.at}, -aw(a){return A.iS(v.typeUniverse,a,!1)}, -c3(a,b,a0,a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c=b.x -switch(c){case 5:case 1:case 2:case 3:case 4:return b -case 6:s=b.y -r=A.c3(a,s,a0,a1) -if(r===s)return b -return A.pV(a,r,!0) -case 7:s=b.y -r=A.c3(a,s,a0,a1) -if(r===s)return b -return A.on(a,r,!0) -case 8:s=b.y -r=A.c3(a,s,a0,a1) -if(r===s)return b -return A.pU(a,r,!0) -case 9:q=b.z -p=A.eS(a,q,a0,a1) -if(p===q)return b -return A.eH(a,b.y,p) -case 10:o=b.y -n=A.c3(a,o,a0,a1) -m=b.z -l=A.eS(a,m,a0,a1) -if(n===o&&l===m)return b -return A.ol(a,n,l) -case 12:k=b.y -j=A.c3(a,k,a0,a1) -i=b.z -h=A.vb(a,i,a0,a1) -if(j===k&&h===i)return b -return A.pT(a,j,h) -case 13:g=b.z -a1+=g.length -f=A.eS(a,g,a0,a1) -o=b.y -n=A.c3(a,o,a0,a1) -if(f===g&&n===o)return b -return A.om(a,n,f,!0) -case 14:e=b.y -if(e=p)return A.c(q,0) -s=A.eJ(v.typeUniverse,A.ox(q[0]),"@<0>") -for(r=1;r=0)p+=" "+r[q];++q}return p+"})"}, -qk(a4,a5,a6){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3=", " -if(a6!=null){s=a6.length -if(a5==null){a5=A.u([],t.s) -r=null}else r=a5.length -q=a5.length -for(p=s;p>0;--p)B.a.m(a5,"T"+(q+p)) -for(o=t.X,n=t._,m="<",l="",p=0;p=0))return A.c(a5,j) -m=B.b.b7(m+l,a5[j]) -i=a6[p] -h=i.x -if(!(h===2||h===3||h===4||h===5||i===o))if(!(i===n))k=!1 -else k=!0 -else k=!0 -if(!k)m+=" extends "+A.aJ(i,a5)}m+=">"}else{m="" -r=null}o=a4.y -g=a4.z -f=g.a -e=f.length -d=g.b -c=d.length -b=g.c -a=b.length -a0=A.aJ(o,a5) -for(a1="",a2="",p=0;p0){a1+=a2+"[" -for(a2="",p=0;p0){a1+=a2+"{" -for(a2="",p=0;p "+a0}, -aJ(a,b){var s,r,q,p,o,n,m,l=a.x -if(l===5)return"erased" -if(l===2)return"dynamic" -if(l===3)return"void" -if(l===1)return"Never" -if(l===4)return"any" -if(l===6){s=A.aJ(a.y,b) -return s}if(l===7){r=a.y -s=A.aJ(r,b) -q=r.x -return(q===12||q===13?"("+s+")":s)+"?"}if(l===8)return"FutureOr<"+A.aJ(a.y,b)+">" -if(l===9){p=A.vd(a.y) -o=a.z -return o.length>0?p+("<"+A.qu(o,b)+">"):p}if(l===11)return A.v7(a,b) -if(l===12)return A.qk(a,b,null) -if(l===13)return A.qk(a.y,b,a.z) -if(l===14){n=a.y -m=b.length -n=m-1-n -if(!(n>=0&&n0)p+="<"+A.eG(c)+">" -s=a.eC.get(p) -if(s!=null)return s -r=new A.aW(null,null) -r.x=9 -r.y=b -r.z=c -if(c.length>0)r.c=c[0] -r.at=p -q=A.bF(a,r) -a.eC.set(p,q) -return q}, -ol(a,b,c){var s,r,q,p,o,n -if(b.x===10){s=b.y -r=b.z.concat(c)}else{r=c -s=b}q=s.at+(";<"+A.eG(r)+">") -p=a.eC.get(q) -if(p!=null)return p -o=new A.aW(null,null) -o.x=10 -o.y=s -o.z=r -o.at=q -n=A.bF(a,o) -a.eC.set(q,n) -return n}, -uj(a,b,c){var s,r,q="+"+(b+"("+A.eG(c)+")"),p=a.eC.get(q) -if(p!=null)return p -s=new A.aW(null,null) -s.x=11 -s.y=b -s.z=c -s.at=q -r=A.bF(a,s) -a.eC.set(q,r) -return r}, -pT(a,b,c){var s,r,q,p,o,n=b.at,m=c.a,l=m.length,k=c.b,j=k.length,i=c.c,h=i.length,g="("+A.eG(m) -if(j>0){s=l>0?",":"" -g+=s+"["+A.eG(k)+"]"}if(h>0){s=l>0?",":"" -g+=s+"{"+A.ud(i)+"}"}r=n+(g+")") -q=a.eC.get(r) -if(q!=null)return q -p=new A.aW(null,null) -p.x=12 -p.y=b -p.z=c -p.at=r -o=A.bF(a,p) -a.eC.set(r,o) -return o}, -om(a,b,c,d){var s,r=b.at+("<"+A.eG(c)+">"),q=a.eC.get(r) -if(q!=null)return q -s=A.uf(a,b,c,r,d) -a.eC.set(r,s) -return s}, -uf(a,b,c,d,e){var s,r,q,p,o,n,m,l -if(e){s=c.length -r=A.n_(s) -for(q=0,p=0;p0){n=A.c3(a,b,r,0) -m=A.eS(a,c,r,0) -return A.om(a,n,m,c!==m)}}l=new A.aW(null,null) -l.x=13 -l.y=b -l.z=c -l.at=d -return A.bF(a,l)}, -pN(a,b,c,d){return{u:a,e:b,r:c,s:[],p:0,n:d}}, -pP(a){var s,r,q,p,o,n,m,l=a.r,k=a.s -for(s=l.length,r=0;r=48&&q<=57)r=A.u6(r+1,q,l,k) -else if((((q|32)>>>0)-97&65535)<26||q===95||q===36||q===124)r=A.pO(a,r,l,k,!1) -else if(q===46)r=A.pO(a,r,l,k,!0) -else{++r -switch(q){case 44:break -case 58:k.push(!1) -break -case 33:k.push(!0) -break -case 59:k.push(A.c0(a.u,a.e,k.pop())) -break -case 94:k.push(A.ui(a.u,k.pop())) -break -case 35:k.push(A.eI(a.u,5,"#")) -break -case 64:k.push(A.eI(a.u,2,"@")) -break -case 126:k.push(A.eI(a.u,3,"~")) -break -case 60:k.push(a.p) -a.p=k.length -break -case 62:A.u8(a,k) -break -case 38:A.u7(a,k) -break -case 42:p=a.u -k.push(A.pV(p,A.c0(p,a.e,k.pop()),a.n)) -break -case 63:p=a.u -k.push(A.on(p,A.c0(p,a.e,k.pop()),a.n)) -break -case 47:p=a.u -k.push(A.pU(p,A.c0(p,a.e,k.pop()),a.n)) -break -case 40:k.push(-3) -k.push(a.p) -a.p=k.length -break -case 41:A.u5(a,k) -break -case 91:k.push(a.p) -a.p=k.length -break -case 93:o=k.splice(a.p) -A.pQ(a.u,a.e,o) -a.p=k.pop() -k.push(o) -k.push(-1) -break -case 123:k.push(a.p) -a.p=k.length -break -case 125:o=k.splice(a.p) -A.ua(a.u,a.e,o) -a.p=k.pop() -k.push(o) -k.push(-2) -break -case 43:n=l.indexOf("(",r) -k.push(l.substring(r,n)) -k.push(-4) -k.push(a.p) -a.p=k.length -r=n+1 -break -default:throw"Bad character "+q}}}m=k.pop() -return A.c0(a.u,a.e,m)}, -u6(a,b,c,d){var s,r,q=b-48 -for(s=c.length;a=48&&r<=57))break -q=q*10+(r-48)}d.push(q) -return a}, -pO(a,b,c,d,e){var s,r,q,p,o,n,m=b+1 -for(s=c.length;m>>0)-97&65535)<26||r===95||r===36||r===124))q=r>=48&&r<=57 -else q=!0 -if(!q)break}}p=c.substring(b,m) -if(e){s=a.u -o=a.e -if(o.x===10)o=o.y -n=A.un(s,o.y)[p] -if(n==null)A.Q('No "'+p+'" in "'+A.tk(o)+'"') -d.push(A.eJ(s,o,n))}else d.push(p) -return m}, -u8(a,b){var s,r=a.u,q=A.pM(a,b),p=b.pop() -if(typeof p=="string")b.push(A.eH(r,p,q)) -else{s=A.c0(r,a.e,p) -switch(s.x){case 12:b.push(A.om(r,s,q,a.n)) -break -default:b.push(A.ol(r,s,q)) -break}}}, -u5(a,b){var s,r,q,p,o,n=null,m=a.u,l=b.pop() -if(typeof l=="number")switch(l){case-1:s=b.pop() -r=n -break -case-2:r=b.pop() -s=n -break -default:b.push(l) -r=n -s=r -break}else{b.push(l) -r=n -s=r}q=A.pM(a,b) -l=b.pop() -switch(l){case-3:l=b.pop() -if(s==null)s=m.sEA -if(r==null)r=m.sEA -p=A.c0(m,a.e,l) -o=new A.i1() -o.a=q -o.b=s -o.c=r -b.push(A.pT(m,p,o)) -return -case-4:b.push(A.uj(m,b.pop(),q)) -return -default:throw A.b(A.f_("Unexpected state under `()`: "+A.t(l)))}}, -u7(a,b){var s=b.pop() -if(0===s){b.push(A.eI(a.u,1,"0&")) -return}if(1===s){b.push(A.eI(a.u,4,"1&")) -return}throw A.b(A.f_("Unexpected extended operation "+A.t(s)))}, -pM(a,b){var s=b.splice(a.p) -A.pQ(a.u,a.e,s) -a.p=b.pop() -return s}, -c0(a,b,c){if(typeof c=="string")return A.eH(a,c,a.sEA) -else if(typeof c=="number"){b.toString -return A.u9(a,b,c)}else return c}, -pQ(a,b,c){var s,r=c.length -for(s=0;sn)return!1 -m=n-o -l=s.b -k=r.b -j=l.length -i=k.length -if(o+j=d)return!1 -a1=f[b] -b+=3 -if(a00?new Array(q):v.typeUniverse.sEA -for(o=0;o0?new Array(a):v.typeUniverse.sEA}, -aW:function aW(a,b){var _=this -_.a=a -_.b=b -_.w=_.r=_.c=null -_.x=0 -_.at=_.as=_.Q=_.z=_.y=null}, -i1:function i1(){this.c=this.b=this.a=null}, -mX:function mX(a){this.a=a}, -hY:function hY(){}, -eF:function eF(a){this.a=a}, -tS(){var s,r,q={} -if(self.scheduleImmediate!=null)return A.vi() -if(self.MutationObserver!=null&&self.document!=null){s=self.document.createElement("div") -r=self.document.createElement("span") -q.a=null -new self.MutationObserver(A.c4(new A.lw(q),1)).observe(s,{childList:true}) -return new A.lv(q,s,r)}else if(self.setImmediate!=null)return A.vj() -return A.vk()}, -tT(a){self.scheduleImmediate(A.c4(new A.lx(t.M.a(a)),0))}, -tU(a){self.setImmediate(A.c4(new A.ly(t.M.a(a)),0))}, -tV(a){A.pu(B.y,t.M.a(a))}, -pu(a,b){var s=B.c.G(a.a,1000) -return A.ub(s<0?0:s,b)}, -ub(a,b){var s=new A.mV(!0) -s.ex(a,b) -return s}, -y(a){return new A.ec(new A.C($.E,a.h("C<0>")),a.h("ec<0>"))}, -x(a,b){a.$2(0,null) -b.b=!0 -return b.a}, -o(a,b){A.uF(a,b)}, -w(a,b){b.W(0,a)}, -v(a,b){b.bs(A.T(a),A.a1(a))}, -uF(a,b){var s,r,q=new A.n2(b),p=new A.n3(b) -if(a instanceof A.C)a.dw(q,p,t.z) -else{s=t.z -if(a instanceof A.C)a.bH(q,p,s) -else{r=new A.C($.E,t.c) -r.a=8 -r.c=a -r.dw(q,p,s)}}}, -z(a){var s=function(b,c){return function(d,e){while(true)try{b(d,e) -break}catch(r){e=r -d=c}}}(a,1) -return $.E.cJ(new A.ni(s),t.H,t.S,t.z)}, -pS(a,b,c){return 0}, -jh(a,b){var s=A.cx(a,"error",t.K) -return new A.ds(s,b==null?A.f0(a):b)}, -f0(a){var s -if(t.V.b(a)){s=a.gaO() -if(s!=null)return s}return B.W}, -rO(a,b){var s=new A.C($.E,b.h("C<0>")) -A.tL(B.y,new A.jF(s,a)) -return s}, -p4(a,b){var s,r,q,p,o,n,m,l -try{s=a.$0() -if(b.h("I<0>").b(s))return s -else{n=new A.C($.E,b.h("C<0>")) -m=b.a(s) -n.a=8 -n.c=m -return n}}catch(l){r=A.T(l) -q=A.a1(l) -n=$.E -p=new A.C(n,b.h("C<0>")) -o=n.b_(r,q) -if(o!=null)p.ap(o.a,o.b) -else p.ap(r,q) -return p}}, -p5(a,b){var s -b.a(a) -s=new A.C($.E,b.h("C<0>")) -s.bb(a) -return s}, -dD(a,b,c){var s,r -A.cx(a,"error",t.K) -s=$.E -if(s!==B.d){r=s.b_(a,b) -if(r!=null){a=r.a -b=r.b}}if(b==null)b=A.f0(a) -s=new A.C($.E,c.h("C<0>")) -s.ap(a,b) -return s}, -nM(a,b){var s,r,q,p,o,n,m,l,k,j,i={},h=null,g=!1,f=new A.C($.E,b.h("C>")) -i.a=null -i.b=0 -s=A.eg("error") -r=A.eg("stackTrace") -q=new A.jH(i,h,g,f,s,r) -try{for(l=J.aq(a),k=t.P;l.n();){p=l.gq(l) -o=i.b -p.bH(new A.jG(i,o,f,h,g,s,r,b),q,k);++i.b}l=i.b -if(l===0){l=f -l.aU(A.u([],b.h("M<0>"))) -return l}i.a=A.dK(l,null,!1,b.h("0?"))}catch(j){n=A.T(j) -m=A.a1(j) -if(i.b===0||A.dp(g))return A.dD(n,m,b.h("n<0>")) -else{s.b=n -r.b=m}}return f}, -qf(a,b,c){var s=$.E.b_(b,c) -if(s!=null){b=s.a -c=s.b}else if(c==null)c=A.f0(b) -a.P(b,c)}, -oj(a,b){var s,r,q -for(s=t.c;r=a.a,(r&4)!==0;)a=s.a(a.c) -if((r&24)!==0){q=b.bk() -b.bd(a) -A.db(b,q)}else{q=t.d.a(b.c) -b.dq(a) -a.cf(q)}}, -u3(a,b){var s,r,q,p={},o=p.a=a -for(s=t.c;r=o.a,(r&4)!==0;o=a){a=s.a(o.c) -p.a=a}if((r&24)===0){q=t.d.a(b.c) -b.dq(o) -p.a.cf(q) -return}if((r&16)===0&&b.c==null){b.bd(o) -return}b.a^=2 -b.b.ao(new A.lS(p,b))}, -db(a,a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c={},b=c.a=a -for(s=t.n,r=t.d,q=t.g7;!0;){p={} -o=b.a -n=(o&16)===0 -m=!n -if(a0==null){if(m&&(o&1)===0){l=s.a(b.c) -b.b.dP(l.a,l.b)}return}p.a=a0 -k=a0.a -for(b=a0;k!=null;b=k,k=j){b.a=null -A.db(c.a,b) -p.a=k -j=k.a}o=c.a -i=o.c -p.b=m -p.c=i -if(n){h=b.c -h=(h&1)!==0||(h&15)===8}else h=!0 -if(h){g=b.b.b -if(m){b=o.b -b=!(b===g||b.gaA()===g.gaA())}else b=!1 -if(b){b=c.a -l=s.a(b.c) -b.b.dP(l.a,l.b) -return}f=$.E -if(f!==g)$.E=g -else f=null -b=p.a.c -if((b&15)===8)new A.lZ(p,c,m).$0() -else if(n){if((b&1)!==0)new A.lY(p,i).$0()}else if((b&2)!==0)new A.lX(c,p).$0() -if(f!=null)$.E=f -b=p.c -if(b instanceof A.C){o=p.a.$ti -o=o.h("I<2>").b(b)||!o.z[1].b(b)}else o=!1 -if(o){q.a(b) -e=p.a.b -if((b.a&24)!==0){d=r.a(e.c) -e.c=null -a0=e.bl(d) -e.a=b.a&30|e.a&1 -e.c=b.c -c.a=b -continue}else A.oj(b,e) -return}}e=p.a.b -d=r.a(e.c) -e.c=null -a0=e.bl(d) -b=p.b -o=p.c -if(!b){e.$ti.c.a(o) -e.a=8 -e.c=o}else{s.a(o) -e.a=e.a&1|16 -e.c=o}c.a=e -b=e}}, -v8(a,b){if(t.R.b(a))return b.cJ(a,t.z,t.K,t.l) -if(t.v.b(a))return b.bF(a,t.z,t.K) -throw A.b(A.bn(a,"onError",u.c))}, -v5(){var s,r -for(s=$.dm;s!=null;s=$.dm){$.eQ=null -r=s.b -$.dm=r -if(r==null)$.eP=null -s.a.$0()}}, -va(){$.ov=!0 -try{A.v5()}finally{$.eQ=null -$.ov=!1 -if($.dm!=null)$.oK().$1(A.qC())}}, -qw(a){var s=new A.hM(a),r=$.eP -if(r==null){$.dm=$.eP=s -if(!$.ov)$.oK().$1(A.qC())}else $.eP=r.b=s}, -v9(a){var s,r,q,p=$.dm -if(p==null){A.qw(a) -$.eQ=$.eP -return}s=new A.hM(a) -r=$.eQ -if(r==null){s.b=p -$.dm=$.eQ=s}else{q=r.b -s.b=q -$.eQ=r.b=s -if(q==null)$.eP=s}}, -qP(a){var s,r=null,q=$.E -if(B.d===q){A.ng(r,r,B.d,a) -return}if(B.d===q.gfk().a)s=B.d.gaA()===q.gaA() -else s=!1 -if(s){A.ng(r,r,q,q.cK(a,t.H)) -return}s=$.E -s.ao(s.co(a))}, -wl(a,b){return new A.iE(A.cx(a,"stream",t.K),b.h("iE<0>"))}, -ow(a){return}, -pJ(a,b,c){var s=b==null?A.vl():b -return a.bF(s,t.H,c)}, -u2(a,b){if(t.k.b(b))return a.cJ(b,t.z,t.K,t.l) -if(t.i6.b(b))return a.bF(b,t.z,t.K) -throw A.b(A.ak("handleError callback must take either an Object (the error), or both an Object (the error) and a StackTrace.",null))}, -v6(a){}, -uH(a,b,c){var s=a.S(0),r=$.eV() -if(s!==r)s.aJ(new A.n4(b,c)) -else b.aT(c)}, -tL(a,b){var s=$.E -if(s===B.d)return s.dK(a,b) -return s.dK(a,s.co(b))}, -ne(a,b){A.v9(new A.nf(a,b))}, -qr(a,b,c,d,e){var s,r -t.U.a(a) -t.r.a(b) -t.x.a(c) -e.h("0()").a(d) -r=$.E -if(r===c)return d.$0() -$.E=c -s=r -try{r=d.$0() -return r}finally{$.E=s}}, -qt(a,b,c,d,e,f,g){var s,r -t.U.a(a) -t.r.a(b) -t.x.a(c) -f.h("@<0>").t(g).h("1(2)").a(d) -g.a(e) -r=$.E -if(r===c)return d.$1(e) -$.E=c -s=r -try{r=d.$1(e) -return r}finally{$.E=s}}, -qs(a,b,c,d,e,f,g,h,i){var s,r -t.U.a(a) -t.r.a(b) -t.x.a(c) -g.h("@<0>").t(h).t(i).h("1(2,3)").a(d) -h.a(e) -i.a(f) -r=$.E -if(r===c)return d.$2(e,f) -$.E=c -s=r -try{r=d.$2(e,f) -return r}finally{$.E=s}}, -ng(a,b,c,d){var s,r -t.M.a(d) -if(B.d!==c){s=B.d.gaA() -r=c.gaA() -d=s!==r?c.co(d):c.fD(d,t.H)}A.qw(d)}, -lw:function lw(a){this.a=a}, -lv:function lv(a,b,c){this.a=a -this.b=b -this.c=c}, -lx:function lx(a){this.a=a}, -ly:function ly(a){this.a=a}, -mV:function mV(a){this.a=a -this.b=null -this.c=0}, -mW:function mW(a,b){this.a=a -this.b=b}, -ec:function ec(a,b){this.a=a -this.b=!1 -this.$ti=b}, -n2:function n2(a){this.a=a}, -n3:function n3(a){this.a=a}, -ni:function ni(a){this.a=a}, -eC:function eC(a,b){var _=this -_.a=a -_.e=_.d=_.c=_.b=null -_.$ti=b}, -dg:function dg(a,b){this.a=a -this.$ti=b}, -ds:function ds(a,b){this.a=a -this.b=b}, -jF:function jF(a,b){this.a=a -this.b=b}, -jH:function jH(a,b,c,d,e,f){var _=this -_.a=a -_.b=b -_.c=c -_.d=d -_.e=e -_.f=f}, -jG:function jG(a,b,c,d,e,f,g,h){var _=this -_.a=a -_.b=b -_.c=c -_.d=d -_.e=e -_.f=f -_.r=g -_.w=h}, -co:function co(){}, -cn:function cn(a,b){this.a=a -this.$ti=b}, -aa:function aa(a,b){this.a=a -this.$ti=b}, -bE:function bE(a,b,c,d,e){var _=this -_.a=null -_.b=a -_.c=b -_.d=c -_.e=d -_.$ti=e}, -C:function C(a,b){var _=this -_.a=0 -_.b=a -_.c=null -_.$ti=b}, -lP:function lP(a,b){this.a=a -this.b=b}, -lW:function lW(a,b){this.a=a -this.b=b}, -lT:function lT(a){this.a=a}, -lU:function lU(a){this.a=a}, -lV:function lV(a,b,c){this.a=a -this.b=b -this.c=c}, -lS:function lS(a,b){this.a=a -this.b=b}, -lR:function lR(a,b){this.a=a -this.b=b}, -lQ:function lQ(a,b,c){this.a=a -this.b=b -this.c=c}, -lZ:function lZ(a,b,c){this.a=a -this.b=b -this.c=c}, -m_:function m_(a){this.a=a}, -lY:function lY(a,b){this.a=a -this.b=b}, -lX:function lX(a,b){this.a=a -this.b=b}, -hM:function hM(a){this.a=a -this.b=null}, -d_:function d_(){}, -l6:function l6(a,b){this.a=a -this.b=b}, -l7:function l7(a,b){this.a=a -this.b=b}, -l4:function l4(a){this.a=a}, -l5:function l5(a,b,c){this.a=a -this.b=b -this.c=c}, -df:function df(){}, -mR:function mR(a){this.a=a}, -mQ:function mQ(a){this.a=a}, -iL:function iL(){}, -dh:function dh(a,b,c,d,e){var _=this -_.a=null -_.b=0 -_.c=null -_.d=a -_.e=b -_.f=c -_.r=d -_.$ti=e}, -d6:function d6(a,b){this.a=a -this.$ti=b}, -d7:function d7(a,b,c,d,e,f,g){var _=this -_.w=a -_.a=b -_.b=c -_.c=d -_.d=e -_.e=f -_.r=_.f=null -_.$ti=g}, -ee:function ee(){}, -lE:function lE(a,b,c){this.a=a -this.b=b -this.c=c}, -lD:function lD(a){this.a=a}, -eB:function eB(){}, -bD:function bD(){}, -cq:function cq(a,b){this.b=a -this.a=null -this.$ti=b}, -eh:function eh(a,b){this.b=a -this.c=b -this.a=null}, -hT:function hT(){}, -aY:function aY(a){var _=this -_.a=0 -_.c=_.b=null -_.$ti=a}, -mJ:function mJ(a,b){this.a=a -this.b=b}, -iE:function iE(a,b){var _=this -_.a=null -_.b=a -_.c=!1 -_.$ti=b}, -n4:function n4(a,b){this.a=a -this.b=b}, -iT:function iT(a,b,c){this.a=a -this.b=b -this.$ti=c}, -eM:function eM(){}, -nf:function nf(a,b){this.a=a -this.b=b}, -it:function it(){}, -mO:function mO(a,b,c){this.a=a -this.b=b -this.c=c}, -mN:function mN(a,b){this.a=a -this.b=b}, -mP:function mP(a,b,c){this.a=a -this.b=b -this.c=c}, -t_(a,b){return new A.b3(a.h("@<0>").t(b).h("b3<1,2>"))}, -aA(a,b,c){return b.h("@<0>").t(c).h("pe<1,2>").a(A.vt(a,new A.b3(b.h("@<0>").t(c).h("b3<1,2>"))))}, -X(a,b){return new A.b3(a.h("@<0>").t(b).h("b3<1,2>"))}, -t0(a){return new A.em(a.h("em<0>"))}, -ok(){var s=Object.create(null) -s[""]=s -delete s[""] -return s}, -pL(a,b,c){var s=new A.ct(a,b,c.h("ct<0>")) -s.c=a.e -return s}, -nR(a,b,c){var s=A.t_(b,c) -J.bl(a,new A.jP(s,b,c)) -return s}, -fI(a){var s,r={} -if(A.oE(a))return"{...}" -s=new A.aj("") -try{B.a.m($.aU,a) -s.a+="{" -r.a=!0 -J.bl(a,new A.jS(r,s)) -s.a+="}"}finally{if(0>=$.aU.length)return A.c($.aU,-1) -$.aU.pop()}r=s.a -return r.charCodeAt(0)==0?r:r}, -em:function em(a){var _=this -_.a=0 -_.f=_.e=_.d=_.c=_.b=null -_.r=0 -_.$ti=a}, -ia:function ia(a){this.a=a -this.c=this.b=null}, -ct:function ct(a,b,c){var _=this -_.a=a -_.b=b -_.d=_.c=null -_.$ti=c}, -jP:function jP(a,b,c){this.a=a -this.b=b -this.c=c}, -cP:function cP(a){var _=this -_.b=_.a=0 -_.c=null -_.$ti=a}, -en:function en(a,b,c,d){var _=this -_.a=a -_.b=b -_.c=null -_.d=c -_.e=!1 -_.$ti=d}, -af:function af(){}, -i:function i(){}, -D:function D(){}, -jR:function jR(a){this.a=a}, -jS:function jS(a,b){this.a=a -this.b=b}, -d4:function d4(){}, -eo:function eo(a,b){this.a=a -this.$ti=b}, -ep:function ep(a,b,c){var _=this -_.a=a -_.b=b -_.c=null -_.$ti=c}, -c1:function c1(){}, -cQ:function cQ(){}, -e7:function e7(){}, -cV:function cV(){}, -ew:function ew(){}, -dj:function dj(){}, -tQ(a,b,c,d){var s,r -if(b instanceof Uint8Array){s=b -if(d==null)d=s.length -if(d-c<15)return null -r=A.tR(a,s,c,d) -if(r!=null&&a)if(r.indexOf("\ufffd")>=0)return null -return r}return null}, -tR(a,b,c,d){var s=a?$.r6():$.r5() -if(s==null)return null -if(0===c&&d===b.length)return A.pB(s,b) -return A.pB(s,b.subarray(c,A.bt(c,d,b.length)))}, -pB(a,b){var s,r -try{s=a.decode(b) -return s}catch(r){}return null}, -oV(a,b,c,d,e,f){if(B.c.a7(f,4)!==0)throw A.b(A.ae("Invalid base64 padding, padded length must be multiple of four, is "+f,a,c)) -if(d+e!==f)throw A.b(A.ae("Invalid base64 padding, '=' not at the end",a,b)) -if(e>2)throw A.b(A.ae("Invalid base64 padding, more than two '=' characters",a,b))}, -uz(a){switch(a){case 65:return"Missing extension byte" -case 67:return"Unexpected extension byte" -case 69:return"Invalid UTF-8 byte" -case 71:return"Overlong encoding" -case 73:return"Out of unicode range" -case 75:return"Encoded surrogate" -case 77:return"Unfinished UTF-8 octet sequence" -default:return""}}, -uy(a,b,c){var s,r,q,p=c-b,o=new Uint8Array(p) -for(s=J.V(a),r=0;r>>0!==0)q=255 -if(!(r=16)return null -r=r*16+o}n=h-1 -if(!(h>=0&&h=0&&s=16)return null -r=r*16+o}m=n-1 -if(!(n>=0&&n=j)return A.c(i,0) -l=i[0]===0}else l=!1 -if(l)return $.bJ() -l=A.aX(j,i) -return new A.a8(l===0?!1:c,i,l)}, -oi(a,b){var s,r,q,p,o,n -if(a==="")return null -s=$.r8().fR(a) -if(s==null)return null -r=s.b -q=r.length -if(1>=q)return A.c(r,1) -p=r[1]==="-" -if(4>=q)return A.c(r,4) -o=r[4] -n=r[3] -if(5>=q)return A.c(r,5) -if(o!=null)return A.tZ(o,p) -if(n!=null)return A.u_(n,2,p) -return null}, -aX(a,b){var s,r=b.length -while(!0){if(a>0){s=a-1 -if(!(s=0&&q=0;--s){p=s+c -if(!(s=0&&p=0;--s){if(!(s=0;--s){if(!(s=0&&n>>0 -p=B.c.aM((o&i)>>>0,k)}if(!(l>=0&&l=0;){if(!(q=0&&p=0&&m>>0,k) -if(!(p>>0 -s=B.c.aN(n,l)}if(!(r>=0&&r=0;--s){if(!(s=0&&o=0&&b=0&&o=0;e=m,c=p){p=c+1 -if(!(c=0&&e=0&&e=0&&c=0&&r>>0,a) -if(q>65535)return 65535 -return q}, -nu(a,b){var s=A.nU(a,b) -if(s!=null)return s -throw A.b(A.ae(a,null,null))}, -rJ(a,b){a=A.b(a) -if(a==null)a=t.K.a(a) -a.stack=b.l(0) -throw a -throw A.b("unreachable")}, -dK(a,b,c,d){var s,r=c?J.rU(a,d):J.pa(a,d) -if(a!==0&&b!=null)for(s=0;s")) -for(s=J.aq(a);s.n();)B.a.m(r,c.a(s.gq(s))) -if(b)return r -return J.jK(r,c)}, -fG(a,b,c){var s -if(b)return A.pf(a,c) -s=J.jK(A.pf(a,c),c) -return s}, -pf(a,b){var s,r -if(Array.isArray(a))return A.u(a.slice(0),b.h("M<0>")) -s=A.u([],b.h("M<0>")) -for(r=J.aq(a);r.n();)B.a.m(s,r.gq(r)) -return s}, -dL(a,b){return J.pb(A.jQ(a,!1,b))}, -pt(a,b,c){var s=A.tg(a,b,A.bt(b,c,a.length)) -return s}, -tJ(a){return A.bf(a)}, -aV(a,b){return new A.cO(a,A.pd(a,!1,b,!1,!1,!1))}, -l8(a,b,c){var s=J.aq(b) -if(!s.n())return a -if(c.length===0){do a+=A.t(s.gq(s)) -while(s.n())}else{a+=A.t(s.gq(s)) -for(;s.n();)a=a+c+A.t(s.gq(s))}return a}, -pi(a,b){return new A.fU(a,b.ghg(),b.ghq(),b.ghh())}, -o8(){var s,r,q=A.t8() -if(q==null)throw A.b(A.F("'Uri.base' is not supported")) -s=$.py -if(s!=null&&q===$.px)return s -r=A.pz(q) -$.py=r -$.px=q -return r}, -rH(a){var s=Math.abs(a),r=a<0?"-":"" -if(s>=1000)return""+a -if(s>=100)return r+"0"+s -if(s>=10)return r+"00"+s -return r+"000"+s}, -rI(a){if(a>=100)return""+a -if(a>=10)return"0"+a -return"00"+a}, -fm(a){if(a>=10)return""+a -return"0"+a}, -ca(a){if(typeof a=="number"||A.c2(a)||a==null)return J.bb(a) -if(typeof a=="string")return JSON.stringify(a) -return A.pl(a)}, -rK(a,b){A.cx(a,"error",t.K) -A.cx(b,"stackTrace",t.l) -A.rJ(a,b)}, -f_(a){return new A.dr(a)}, -ak(a,b){return new A.bc(!1,null,b,a)}, -bn(a,b,c){return new A.bc(!0,a,b,c)}, -jg(a,b,c){return a}, -pm(a,b){return new A.cU(null,null,!0,a,b,"Value not in range")}, -au(a,b,c,d,e){return new A.cU(b,c,!0,a,d,"Invalid value")}, -ti(a,b,c,d){if(ac)throw A.b(A.au(a,b,c,d,null)) -return a}, -bt(a,b,c){if(0>a||a>c)throw A.b(A.au(a,0,c,"start",null)) -if(b!=null){if(a>b||b>c)throw A.b(A.au(b,a,c,"end",null)) -return b}return c}, -aP(a,b){if(a<0)throw A.b(A.au(a,0,null,b,null)) -return a}, -W(a,b,c,d,e){return new A.fy(b,!0,a,e,"Index out of range")}, -F(a){return new A.ht(a)}, -hq(a){return new A.hp(a)}, -K(a){return new A.bx(a)}, -ar(a){return new A.fd(a)}, -p3(a){return new A.lM(a)}, -ae(a,b,c){return new A.jE(a,b,c)}, -rT(a,b,c){var s,r -if(A.oE(a)){if(b==="("&&c===")")return"(...)" -return b+"..."+c}s=A.u([],t.s) -B.a.m($.aU,a) -try{A.v4(a,s)}finally{if(0>=$.aU.length)return A.c($.aU,-1) -$.aU.pop()}r=A.l8(b,t.e7.a(s),", ")+c -return r.charCodeAt(0)==0?r:r}, -nN(a,b,c){var s,r -if(A.oE(a))return b+"..."+c -s=new A.aj(b) -B.a.m($.aU,a) -try{r=s -r.a=A.l8(r.a,a,", ")}finally{if(0>=$.aU.length)return A.c($.aU,-1) -$.aU.pop()}s.a+=c -r=s.a -return r.charCodeAt(0)==0?r:r}, -v4(a,b){var s,r,q,p,o,n,m,l=a.gC(a),k=0,j=0 -while(!0){if(!(k<80||j<3))break -if(!l.n())return -s=A.t(l.gq(l)) -B.a.m(b,s) -k+=s.length+2;++j}if(!l.n()){if(j<=5)return -if(0>=b.length)return A.c(b,-1) -r=b.pop() -if(0>=b.length)return A.c(b,-1) -q=b.pop()}else{p=l.gq(l);++j -if(!l.n()){if(j<=4){B.a.m(b,A.t(p)) -return}r=A.t(p) -if(0>=b.length)return A.c(b,-1) -q=b.pop() -k+=r.length+2}else{o=l.gq(l);++j -for(;l.n();p=o,o=n){n=l.gq(l);++j -if(j>100){while(!0){if(!(k>75&&j>3))break -if(0>=b.length)return A.c(b,-1) -k-=b.pop().length+2;--j}B.a.m(b,"...") -return}}q=A.t(p) -r=A.t(o) -k+=r.length+q.length+4}}if(j>b.length+2){k+=5 -m="..."}else m=null -while(!0){if(!(k>80&&b.length>3))break -if(0>=b.length)return A.c(b,-1) -k-=b.pop().length+2 -if(m==null){k+=5 -m="..."}}if(m!=null)B.a.m(b,m) -B.a.m(b,q) -B.a.m(b,r)}, -nT(a,b,c,d){var s -if(B.p===c){s=B.j.gA(a) -b=J.bm(b) -return A.o6(A.bV(A.bV($.nF(),s),b))}if(B.p===d){s=B.j.gA(a) -b=J.bm(b) -c=J.bm(c) -return A.o6(A.bV(A.bV(A.bV($.nF(),s),b),c))}s=B.j.gA(a) -b=J.bm(b) -c=J.bm(c) -d=J.bm(d) -d=A.o6(A.bV(A.bV(A.bV(A.bV($.nF(),s),b),c),d)) -return d}, -b_(a){var s=$.qM -if(s==null)A.qL(a) -else s.$1(a)}, -pz(a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3=null,a4=a5.length -if(a4>=5){if(4>=a4)return A.c(a5,4) -s=((a5.charCodeAt(4)^58)*3|a5.charCodeAt(0)^100|a5.charCodeAt(1)^97|a5.charCodeAt(2)^116|a5.charCodeAt(3)^97)>>>0 -if(s===0)return A.pw(a4=14)B.a.j(r,7,a4) -q=r[1] -if(q>=0)if(A.qv(a5,0,q,20,r)===20)r[7]=q -p=r[2]+1 -o=r[3] -n=r[4] -m=r[5] -l=r[6] -if(lq+3){j=a3 -k=!1}else{i=o>0 -if(i&&o+1===n){j=a3 -k=!1}else{if(!B.b.I(a5,"\\",n))if(p>0)h=B.b.I(a5,"\\",p-1)||B.b.I(a5,"\\",p-2) -else h=!1 -else h=!0 -if(h){j=a3 -k=!1}else{if(!(mn+2&&B.b.I(a5,"/..",m-3) -else h=!0 -if(h){j=a3 -k=!1}else{if(q===4)if(B.b.I(a5,"file",0)){if(p<=0){if(!B.b.I(a5,"/",n)){g="file:///" -s=3}else{g="file://" -s=2}a5=g+B.b.p(a5,n,a4) -q-=0 -i=s-0 -m+=i -l+=i -a4=a5.length -p=7 -o=7 -n=7}else if(n===m){++l -f=m+1 -a5=B.b.aG(a5,n,m,"/");++a4 -m=f}j="file"}else if(B.b.I(a5,"http",0)){if(i&&o+3===n&&B.b.I(a5,"80",o+1)){l-=3 -e=n-3 -m-=3 -a5=B.b.aG(a5,o,n,"") -a4-=3 -n=e}j="http"}else j=a3 -else if(q===5&&B.b.I(a5,"https",0)){if(i&&o+4===n&&B.b.I(a5,"443",o+1)){l-=4 -e=n-4 -m-=4 -a5=B.b.aG(a5,o,n,"") -a4-=3 -n=e}j="https"}else j=a3 -k=!0}}}}else j=a3 -if(k){if(a40)j=A.ut(a5,0,q) -else{if(q===0)A.dk(a5,0,"Invalid empty scheme") -j=""}if(p>0){d=q+3 -c=d=0&&r9)j.$2("invalid character",r)}else{if(p===3)j.$2(l,r) -n=A.nu(B.b.p(a,q,r),null) -if(n>255)j.$2(k,q) -m=p+1 -if(!(p<4))return A.c(i,p) -i[p]=n -q=r+1 -p=m}}if(p!==3)j.$2(l,c) -n=A.nu(B.b.p(a,q,c),null) -if(n>255)j.$2(k,q) -if(!(p<4))return A.c(i,p) -i[p]=n -return i}, -pA(a,a0,a1){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=null,d=new A.le(a),c=new A.lf(d,a),b=a.length -if(b<2)d.$2("address is too short",e) -s=A.u([],t.t) -for(r=a0,q=r,p=!1,o=!1;r=0&&r>>0) -B.a.m(s,(l[2]<<8|l[3])>>>0)}if(p){if(s.length>7)d.$2("an address with a wildcard must have less than 7 parts",e)}else if(s.length!==8)d.$2("an address without a wildcard must contain exactly 8 parts",e) -k=new Uint8Array(16) -for(b=s.length,j=9-b,r=0,i=0;r=0&&i<16))return A.c(k,i) -k[i]=0 -f=i+1 -if(!(f<16))return A.c(k,f) -k[f]=0 -i+=2}else{f=B.c.R(h,8) -if(!(i>=0&&i<16))return A.c(k,i) -k[i]=f -f=i+1 -if(!(f<16))return A.c(k,f) -k[f]=h&255 -i+=2}}return k}, -pX(a,b,c,d,e,f,g){return new A.eK(a,b,c,d,e,f,g)}, -pZ(a){if(a==="http")return 80 -if(a==="https")return 443 -return 0}, -dk(a,b,c){throw A.b(A.ae(c,a,b))}, -up(a,b){var s,r,q -for(s=a.length,r=0;r")),r=r.h("a5.E");s.n();){q=s.d -if(q==null)q=r.a(q) -if(B.b.N(q,A.aV('["*/:<>?\\\\|]',!0))){s=A.F("Illegal character in path: "+q) -throw A.b(s)}}}, -uq(a,b){var s -if(!(65<=a&&a<=90))s=97<=a&&a<=122 -else s=!0 -if(s)return -s=A.F("Illegal drive letter "+A.tJ(a)) -throw A.b(s)}, -q4(a,b){if(a!=null&&a===A.pZ(b))return null -return a}, -q2(a,b,c,d){var s,r,q,p,o,n -if(a==null)return null -if(b===c)return"" -s=a.length -if(!(b>=0&&b=0&&r=b&&q=b&&s=0&&r>>4 -if(!(m<8))return A.c(B.k,m) -m=(B.k[m]&1<<(o&15))!==0}else m=!1 -if(m){if(p&&65<=o&&90>=o){if(h==null)h=new A.aj("") -if(q=0&&r>>4 -if(!(l<8))return A.c(B.A,l) -l=(B.A[l]&1<<(n&15))!==0}else l=!1 -if(l){if(o&&65<=n&&90>=n){if(p==null)p=new A.aj("") -if(q>>4 -if(!(l<8))return A.c(B.m,l) -l=(B.m[l]&1<<(n&15))!==0}else l=!1 -if(l)A.dk(a,r,"Invalid character") -else{if((n&64512)===55296&&r+1>>4 -if(!(o<8))return A.c(B.l,o) -o=(B.l[o]&1<<(p&15))!==0}else o=!1 -if(!o)A.dk(a,r,"Illegal scheme character") -if(65<=p&&p<=90)q=!0}a=B.b.p(a,b,c) -return A.uo(q?a.toLowerCase():a)}, -uo(a){if(a==="http")return"http" -if(a==="file")return"file" -if(a==="https")return"https" -if(a==="package")return"package" -return a}, -q6(a,b,c){if(a==null)return"" -return A.eL(a,b,c,B.a0,!1,!1)}, -q3(a,b,c,d,e,f){var s=e==="file",r=s||f,q=A.eL(a,b,c,B.z,!0,!0) -if(q.length===0){if(s)return"/"}else if(r&&!B.b.M(q,"/"))q="/"+q -return A.uu(q,e,f)}, -uu(a,b,c){var s=b.length===0 -if(s&&!c&&!B.b.M(a,"/")&&!B.b.M(a,"\\"))return A.q9(a,!s||c) -return A.qb(a)}, -q5(a,b,c,d){if(a!=null)return A.eL(a,b,c,B.o,!0,!1) -return null}, -q1(a,b,c){if(a==null)return null -return A.eL(a,b,c,B.o,!0,!1)}, -op(a,b,c){var s,r,q,p,o,n,m=b+2,l=a.length -if(m>=l)return"%" -s=b+1 -if(!(s>=0&&s=0))return A.c(a,m) -q=a.charCodeAt(m) -p=A.nq(r) -o=A.nq(q) -if(p<0||o<0)return"%" -n=p*16+o -if(n<127){m=B.c.R(n,4) -if(!(m<8))return A.c(B.k,m) -m=(B.k[m]&1<<(n&15))!==0}else m=!1 -if(m)return A.bf(c&&65<=n&&90>=n?(n|32)>>>0:n) -if(r>=97||q>=97)return B.b.p(a,b,b+3).toUpperCase() -return null}, -oo(a){var s,r,q,p,o,n,m,l,k="0123456789ABCDEF" -if(a<128){s=new Uint8Array(3) -s[0]=37 -r=a>>>4 -if(!(r<16))return A.c(k,r) -s[1]=k.charCodeAt(r) -s[2]=k.charCodeAt(a&15)}else{if(a>2047)if(a>65535){q=240 -p=4}else{q=224 -p=3}else{q=192 -p=2}r=3*p -s=new Uint8Array(r) -for(o=0;--p,p>=0;q=128){n=B.c.fp(a,6*p)&63|q -if(!(o>>4 -if(!(l<16))return A.c(k,l) -if(!(m=0&&q>>4 -if(!(m<8))return A.c(d,m) -m=(d[m]&1<<(n&15))!==0}else m=!1 -if(m)++q -else{if(n===37){l=A.op(a,q,!1) -if(l==null){q+=3 -continue}if("%"===l){l="%25" -k=1}else k=3}else if(n===92&&f){l="/" -k=1}else{if(s)if(n<=93){m=n>>>4 -if(!(m<8))return A.c(B.m,m) -m=(B.m[m]&1<<(n&15))!==0}else m=!1 -else m=!1 -if(m){A.dk(a,q,"Invalid character") -k=h -l=k}else{if((n&64512)===55296){m=q+1 -if(m=m)return A.c(s,-1) -s.pop() -if(s.length===0)B.a.m(s,"")}p=!0}else if("."===n)p=!0 -else{B.a.m(s,n) -p=!1}}if(p)B.a.m(s,"") -return B.a.al(s,"/")}, -q9(a,b){var s,r,q,p,o,n -if(!A.q7(a))return!b?A.q_(a):a -s=A.u([],t.s) -for(r=a.split("/"),q=r.length,p=!1,o=0;o=s.length)return A.c(s,-1) -s.pop() -p=!0}else{B.a.m(s,"..") -p=!1}else if("."===n)p=!0 -else{B.a.m(s,n) -p=!1}}r=s.length -if(r!==0)if(r===1){if(0>=r)return A.c(s,0) -r=s[0].length===0}else r=!1 -else r=!0 -if(r)return"./" -if(p||B.a.ga6(s)==="..")B.a.m(s,"") -if(!b){if(0>=s.length)return A.c(s,0) -B.a.j(s,0,A.q_(s[0]))}return B.a.al(s,"/")}, -q_(a){var s,r,q,p=a.length -if(p>=2&&A.q0(a.charCodeAt(0)))for(s=1;s>>4 -if(!(q<8))return A.c(B.l,q) -q=(B.l[q]&1<<(r&15))===0}else q=!0 -if(q)break}return a}, -uw(a){var s,r,q,p=a.gcF(),o=p.length -if(o>0&&J.Z(p[0])===2&&J.oQ(p[0],1)===58){if(0>=o)return A.c(p,0) -A.uq(J.oQ(p[0],0),!1) -A.pY(p,!1,1) -s=!0}else{A.pY(p,!1,0) -s=!1}r=a.gdQ()&&!s?""+"\\":"" -if(a.gcu()){q=a.gb1(a) -if(q.length!==0)r=r+"\\"+q+"\\"}r=A.l8(r,p,"\\") -o=s&&o===1?r+"\\":r -return o.charCodeAt(0)==0?o:o}, -us(a,b){var s,r,q,p,o -for(s=a.length,r=0,q=0;q<2;++q){p=b+q -if(!(p127)throw A.b(A.ak("Illegal percent encoding in URI",null)) -if(r===37){if(n+3>o)throw A.b(A.ak("Truncated URI",null)) -B.a.m(p,A.us(a,n+1)) -n+=2}else B.a.m(p,r)}}return d.aZ(0,p)}, -q0(a){var s=a|32 -return 97<=s&&s<=122}, -pw(a,b,c){var s,r,q,p,o,n,m,l,k="Invalid MIME type",j=A.u([b-1],t.t) -for(s=a.length,r=b,q=-1,p=null;rb)throw A.b(A.ae(k,a,r)) -for(;p!==44;){B.a.m(j,r);++r -for(o=-1;r=0))return A.c(a,r) -p=a.charCodeAt(r) -if(p===61){if(o<0)o=r}else if(p===59||p===44)break}if(o>=0)B.a.m(j,o) -else{n=B.a.ga6(j) -if(p!==44||r!==n+7||!B.b.I(a,"base64",n+1))throw A.b(A.ae("Expecting '='",a,r)) -break}}B.a.m(j,r) -m=r+1 -if((j.length&1)===1)a=B.L.hl(0,a,m,s) -else{l=A.q8(a,m,s,B.o,!0,!1) -if(l!=null)a=B.b.aG(a,m,s,l)}return new A.lc(a,j,c)}, -uL(){var s,r,q,p,o,n="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-._~!$&'()*+,;=",m=".",l=":",k="/",j="\\",i="?",h="#",g="/\\",f=t.p,e=J.p9(22,f) -for(s=0;s<22;++s)e[s]=new Uint8Array(96) -r=new A.n7(e) -q=new A.n8() -p=new A.n9() -o=f.a(r.$2(0,225)) -q.$3(o,n,1) -q.$3(o,m,14) -q.$3(o,l,34) -q.$3(o,k,3) -q.$3(o,j,227) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(14,225)) -q.$3(o,n,1) -q.$3(o,m,15) -q.$3(o,l,34) -q.$3(o,g,234) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(15,225)) -q.$3(o,n,1) -q.$3(o,"%",225) -q.$3(o,l,34) -q.$3(o,k,9) -q.$3(o,j,233) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(1,225)) -q.$3(o,n,1) -q.$3(o,l,34) -q.$3(o,k,10) -q.$3(o,j,234) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(2,235)) -q.$3(o,n,139) -q.$3(o,k,131) -q.$3(o,j,131) -q.$3(o,m,146) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(3,235)) -q.$3(o,n,11) -q.$3(o,k,68) -q.$3(o,j,68) -q.$3(o,m,18) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(4,229)) -q.$3(o,n,5) -p.$3(o,"AZ",229) -q.$3(o,l,102) -q.$3(o,"@",68) -q.$3(o,"[",232) -q.$3(o,k,138) -q.$3(o,j,138) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(5,229)) -q.$3(o,n,5) -p.$3(o,"AZ",229) -q.$3(o,l,102) -q.$3(o,"@",68) -q.$3(o,k,138) -q.$3(o,j,138) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(6,231)) -p.$3(o,"19",7) -q.$3(o,"@",68) -q.$3(o,k,138) -q.$3(o,j,138) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(7,231)) -p.$3(o,"09",7) -q.$3(o,"@",68) -q.$3(o,k,138) -q.$3(o,j,138) -q.$3(o,i,172) -q.$3(o,h,205) -q.$3(f.a(r.$2(8,8)),"]",5) -o=f.a(r.$2(9,235)) -q.$3(o,n,11) -q.$3(o,m,16) -q.$3(o,g,234) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(16,235)) -q.$3(o,n,11) -q.$3(o,m,17) -q.$3(o,g,234) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(17,235)) -q.$3(o,n,11) -q.$3(o,k,9) -q.$3(o,j,233) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(10,235)) -q.$3(o,n,11) -q.$3(o,m,18) -q.$3(o,k,10) -q.$3(o,j,234) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(18,235)) -q.$3(o,n,11) -q.$3(o,m,19) -q.$3(o,g,234) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(19,235)) -q.$3(o,n,11) -q.$3(o,g,234) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(11,235)) -q.$3(o,n,11) -q.$3(o,k,10) -q.$3(o,j,234) -q.$3(o,i,172) -q.$3(o,h,205) -o=f.a(r.$2(12,236)) -q.$3(o,n,12) -q.$3(o,i,12) -q.$3(o,h,205) -o=f.a(r.$2(13,237)) -q.$3(o,n,13) -q.$3(o,i,13) -p.$3(f.a(r.$2(20,245)),"az",21) -r=f.a(r.$2(21,245)) -p.$3(r,"az",21) -p.$3(r,"09",21) -q.$3(r,"+-.",21) -return e}, -qv(a,b,c,d,e){var s,r,q,p,o,n=$.rd() -for(s=a.length,r=b;r=0&&d95?31:p] -d=o&31 -B.a.j(e,o>>>5,r)}return d}, -a8:function a8(a,b,c){this.a=a -this.b=b -this.c=c}, -lB:function lB(){}, -lC:function lC(){}, -i0:function i0(a,b){this.a=a -this.$ti=b}, -jY:function jY(a,b){this.a=a -this.b=b}, -bP:function bP(a,b){this.a=a -this.b=b}, -bQ:function bQ(a){this.a=a}, -lI:function lI(){}, -R:function R(){}, -dr:function dr(a){this.a=a}, -by:function by(){}, -bc:function bc(a,b,c,d){var _=this -_.a=a -_.b=b -_.c=c -_.d=d}, -cU:function cU(a,b,c,d,e,f){var _=this -_.e=a -_.f=b -_.a=c -_.b=d -_.c=e -_.d=f}, -fy:function fy(a,b,c,d,e){var _=this -_.f=a -_.a=b -_.b=c -_.c=d -_.d=e}, -fU:function fU(a,b,c,d){var _=this -_.a=a -_.b=b -_.c=c -_.d=d}, -ht:function ht(a){this.a=a}, -hp:function hp(a){this.a=a}, -bx:function bx(a){this.a=a}, -fd:function fd(a){this.a=a}, -fY:function fY(){}, -e3:function e3(){}, -lM:function lM(a){this.a=a}, -jE:function jE(a,b,c){this.a=a -this.b=b -this.c=c}, -fA:function fA(){}, -e:function e(){}, -a6:function a6(a,b,c){this.a=a -this.b=b -this.$ti=c}, -P:function P(){}, -r:function r(){}, -iJ:function iJ(){}, -aj:function aj(a){this.a=a}, -ld:function ld(a){this.a=a}, -le:function le(a){this.a=a}, -lf:function lf(a,b){this.a=a -this.b=b}, -eK:function eK(a,b,c,d,e,f,g){var _=this -_.a=a -_.b=b -_.c=c -_.d=d -_.e=e -_.f=f -_.r=g -_.y=_.x=_.w=$}, -lc:function lc(a,b,c){this.a=a -this.b=b -this.c=c}, -n7:function n7(a){this.a=a}, -n8:function n8(){}, -n9:function n9(){}, -ix:function ix(a,b,c,d,e,f,g,h){var _=this -_.a=a -_.b=b -_.c=c -_.d=d -_.e=e -_.f=f -_.r=g -_.w=h -_.x=null}, -hS:function hS(a,b,c,d,e,f,g){var _=this -_.a=a -_.b=b -_.c=c -_.d=d -_.e=e -_.f=f -_.r=g -_.y=_.x=_.w=$}, -fr:function fr(a,b){this.a=a -this.$ti=b}, -rz(a){var s=new self.Blob(a) -return s}, -b8(a,b,c,d,e){var s=c==null?null:A.qz(new A.lK(c),t.A) -s=new A.ek(a,b,s,!1,e.h("ek<0>")) -s.dA() -return s}, -qz(a,b){var s=$.E -if(s===B.d)return a -return s.dG(a,b)}, -q:function q(){}, -eX:function eX(){}, -eY:function eY(){}, -eZ:function eZ(){}, -bM:function bM(){}, -bd:function bd(){}, -fg:function fg(){}, -O:function O(){}, -cC:function cC(){}, -jx:function jx(){}, -as:function as(){}, -b2:function b2(){}, -fh:function fh(){}, -fi:function fi(){}, -fj:function fj(){}, -fn:function fn(){}, -dy:function dy(){}, -dz:function dz(){}, -fo:function fo(){}, -fp:function fp(){}, -p:function p(){}, -m:function m(){}, -f:function f(){}, -ay:function ay(){}, -cG:function cG(){}, -ft:function ft(){}, -fv:function fv(){}, -az:function az(){}, -fw:function fw(){}, -cc:function cc(){}, -cK:function cK(){}, -fH:function fH(){}, -fJ:function fJ(){}, -cS:function cS(){}, -cg:function cg(){}, -fK:function fK(){}, -jU:function jU(a){this.a=a}, -jV:function jV(a){this.a=a}, -fL:function fL(){}, -jW:function jW(a){this.a=a}, -jX:function jX(a){this.a=a}, -aB:function aB(){}, -fM:function fM(){}, -H:function H(){}, -dQ:function dQ(){}, -aC:function aC(){}, -h_:function h_(){}, -h5:function h5(){}, -ke:function ke(a){this.a=a}, -kf:function kf(a){this.a=a}, -h7:function h7(){}, -cW:function cW(){}, -cX:function cX(){}, -aD:function aD(){}, -h9:function h9(){}, -aE:function aE(){}, -ha:function ha(){}, -aF:function aF(){}, -hg:function hg(){}, -l2:function l2(a){this.a=a}, -l3:function l3(a){this.a=a}, -an:function an(){}, -aH:function aH(){}, -ao:function ao(){}, -hj:function hj(){}, -hk:function hk(){}, -hl:function hl(){}, -aI:function aI(){}, -hm:function hm(){}, -hn:function hn(){}, -hv:function hv(){}, -hy:function hy(){}, -bY:function bY(){}, -hP:function hP(){}, -ei:function ei(){}, -i2:function i2(){}, -er:function er(){}, -iA:function iA(){}, -iK:function iK(){}, -nL:function nL(a,b){this.a=a -this.$ti=b}, -lJ:function lJ(a,b,c,d){var _=this -_.a=a -_.b=b -_.c=c -_.$ti=d}, -ek:function ek(a,b,c,d,e){var _=this -_.a=0 -_.b=a -_.c=b -_.d=c -_.e=d -_.$ti=e}, -lK:function lK(a){this.a=a}, -lL:function lL(a){this.a=a}, -A:function A(){}, -dC:function dC(a,b,c){var _=this -_.a=a -_.b=b -_.c=-1 -_.d=null -_.$ti=c}, -hQ:function hQ(){}, -hU:function hU(){}, -hV:function hV(){}, -hW:function hW(){}, -hX:function hX(){}, -hZ:function hZ(){}, -i_:function i_(){}, -i3:function i3(){}, -i4:function i4(){}, -ic:function ic(){}, -id:function id(){}, -ie:function ie(){}, -ig:function ig(){}, -ih:function ih(){}, -ii:function ii(){}, -im:function im(){}, -io:function io(){}, -iw:function iw(){}, -ex:function ex(){}, -ey:function ey(){}, -iy:function iy(){}, -iz:function iz(){}, -iD:function iD(){}, -iM:function iM(){}, -iN:function iN(){}, -eD:function eD(){}, -eE:function eE(){}, -iO:function iO(){}, -iP:function iP(){}, -iU:function iU(){}, -iV:function iV(){}, -iW:function iW(){}, -iX:function iX(){}, -iY:function iY(){}, -iZ:function iZ(){}, -j_:function j_(){}, -j0:function j0(){}, -j1:function j1(){}, -j2:function j2(){}, -qh(a){var s,r,q -if(a==null)return a -if(typeof a=="string"||typeof a=="number"||A.c2(a))return a -if(A.qJ(a))return A.aZ(a) -s=Array.isArray(a) -s.toString -if(s){r=[] -q=0 -while(!0){s=a.length -s.toString -if(!(q")),r=new A.aa(s,b.h("aa<0>")),q=t.Y,p=t.A -A.b8(a,"success",q.a(new A.n5(a,r,b)),!1,p) -A.b8(a,"error",q.a(r.gfH()),!1,p) -return s}, -t4(a,b,c){var s=null,r=c.h("dh<0>"),q=new A.dh(s,s,s,s,r),p=t.Y,o=t.A -A.b8(a,"error",p.a(q.gfz()),!1,o) -A.b8(a,"success",p.a(new A.k0(a,q,b,c)),!1,o) -return new A.d6(q,r.h("d6<1>"))}, -bO:function bO(){}, -bo:function bo(){}, -be:function be(){}, -cJ:function cJ(){}, -n5:function n5(a,b,c){this.a=a -this.b=b -this.c=c}, -dE:function dE(){}, -dS:function dS(){}, -k0:function k0(a,b,c,d){var _=this -_.a=a -_.b=b -_.c=c -_.d=d}, -bu:function bu(){}, -e6:function e6(){}, -bA:function bA(){}, -uK(a){var s,r=a.$dart_jsFunction -if(r!=null)return r -s=function(b,c){return function(){return b(c,Array.prototype.slice.apply(arguments))}}(A.uG,a) -s[$.oI()]=a -a.$dart_jsFunction=s -return s}, -uG(a,b){t.j.a(b) -t.Z.a(a) -return A.t7(a,b,null)}, -Y(a,b){if(typeof a=="function")return a -else return b.a(A.uK(a))}, -qD(a,b,c,d){return d.a(a[b].apply(a,c))}, -nA(a,b){var s=new A.C($.E,b.h("C<0>")),r=new A.cn(s,b.h("cn<0>")) -a.then(A.c4(new A.nB(r,b),1),A.c4(new A.nC(r),1)) -return s}, -nB:function nB(a,b){this.a=a -this.b=b}, -nC:function nC(a){this.a=a}, -jZ:function jZ(a){this.a=a}, -i7:function i7(a){this.a=a}, -aL:function aL(){}, -fF:function fF(){}, -aN:function aN(){}, -fW:function fW(){}, -h0:function h0(){}, -hh:function hh(){}, -aR:function aR(){}, -ho:function ho(){}, -i8:function i8(){}, -i9:function i9(){}, -ij:function ij(){}, -ik:function ik(){}, -iH:function iH(){}, -iI:function iI(){}, -iQ:function iQ(){}, -iR:function iR(){}, -f1:function f1(){}, -f2:function f2(){}, -jq:function jq(a){this.a=a}, -jr:function jr(a){this.a=a}, -f3:function f3(){}, -bL:function bL(){}, -fX:function fX(){}, -hN:function hN(){}, -fV:function fV(){}, -hs:function hs(){}, -vf(a,b){var s,r,q,p,o,n,m,l -for(s=b.length,r=1;r=1;s=q){q=s-1 -if(b[q]!=null)break}p=new A.aj("") -o=""+(a+"(") -p.a=o -n=A.ab(b) -m=n.h("ci<1>") -l=new A.ci(b,0,s,m) -l.es(b,0,s,n.c) -m=o+new A.ag(l,m.h("j(a5.E)").a(new A.nh()),m.h("ag")).al(0,", ") -p.a=m -p.a=m+("): part "+(r-1)+" was null, but part "+r+" was not.") -throw A.b(A.ak(p.l(0),null))}}, -fe:function fe(a){this.a=a}, -jw:function jw(){}, -nh:function nh(){}, -cM:function cM(){}, -pj(a,b){var s,r,q,p,o,n,m=b.eg(a) -b.aD(a) -if(m!=null)a=B.b.a_(a,m.length) -s=t.s -r=A.u([],s) -q=A.u([],s) -s=a.length -if(s!==0){if(0>=s)return A.c(a,0) -p=b.a5(a.charCodeAt(0))}else p=!1 -if(p){if(0>=s)return A.c(a,0) -B.a.m(q,a[0]) -o=1}else{B.a.m(q,"") -o=0}for(n=o;n50)return B.b.p(s,0,50)+"..." -return s}, -vg(a){if(t.p.b(a))return"Blob("+a.length+")" -return A.uA(a)}, -qB(a){var s=a.$ti -return"["+new A.ag(a,s.h("j?(i.E)").a(new A.nk()),s.h("ag")).al(0,", ")+"]"}, -nk:function nk(){}, -fk:function fk(){}, -hb:function hb(){}, -kh:function kh(a){this.a=a}, -ki:function ki(a){this.a=a}, -jB:function jB(){}, -rL(a){var s=J.V(a),r=s.i(a,"method"),q=s.i(a,"arguments") -if(r!=null)return new A.fs(A.U(r),q) -return null}, -fs:function fs(a,b){this.a=a -this.b=b}, -cF:function cF(a,b){this.a=a -this.b=b}, -hc(a,b,c,d){var s=new A.bw(a,b,b,c) -s.b=d -return s}, -bw:function bw(a,b,c,d){var _=this -_.r=_.f=_.e=null -_.w=a -_.x=b -_.b=null -_.c=c -_.a=d}, -kw:function kw(){}, -kx:function kx(){}, -nc(a,b,c,d){var s,r,q,p -if(a instanceof A.bw){s=a.e -if(s==null)s=a.e=b -r=a.f -if(r==null)r=a.f=c -q=a.r -if(q==null)q=a.r=d -p=s==null -if(!p||r!=null||q!=null)if(a.x==null){r=A.X(t.N,t.X) -if(!p)r.j(0,"database",s.e3()) -s=a.f -if(s!=null)r.j(0,"sql",s) -s=a.r -if(s!=null)r.j(0,"arguments",s) -a.sfO(0,r)}return a}else if(a instanceof A.e2){s=a.l(0) -return A.nc(A.hc("sqlite_error",null,s,a.c),b,c,d)}else return A.nc(A.hc("error",null,J.bb(a),null),b,c,d)}, -kV(a){return A.tE(a)}, -tE(a){var s=0,r=A.y(t.z),q,p=2,o,n,m,l,k,j,i,h -var $async$kV=A.z(function(b,c){if(b===1){o=c -s=p}while(true)switch(s){case 0:p=4 -s=7 -return A.o(A.ai(a),$async$kV) -case 7:n=c -q=n -s=1 -break -p=2 -s=6 -break -case 4:p=3 -h=o -m=A.T(h) -A.a1(h) -j=A.pq(a) -i=A.bU(a,"sql",t.N) -l=A.nc(m,j,i,A.hd(a)) -throw A.b(l) -s=6 -break -case 3:s=2 -break -case 6:case 1:return A.w(q,r) -case 2:return A.v(o,r)}}) -return A.x($async$kV,r)}, -dZ(a,b){var s=A.kC(a) -return s.b0(A.dl(J.ad(t.f.a(a.b),"transactionId")),new A.kB(b,s))}, -ch(a,b){return $.rc().a3(new A.kA(b),t.z)}, -ai(a){var s=0,r=A.y(t.z),q,p -var $async$ai=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:p=a.a -case 3:switch(p){case"openDatabase":s=5 -break -case"closeDatabase":s=6 -break -case"query":s=7 -break -case"queryCursorNext":s=8 -break -case"execute":s=9 -break -case"insert":s=10 -break -case"update":s=11 -break -case"batch":s=12 -break -case"getDatabasesPath":s=13 -break -case"deleteDatabase":s=14 -break -case"databaseExists":s=15 -break -case"options":s=16 -break -case"writeDatabaseBytes":s=17 -break -case"readDatabaseBytes":s=18 -break -case"debugMode":s=19 -break -default:s=20 -break}break -case 5:s=21 -return A.o(A.ch(a,A.tw(a)),$async$ai) -case 21:q=c -s=1 -break -case 6:s=22 -return A.o(A.ch(a,A.tq(a)),$async$ai) -case 22:q=c -s=1 -break -case 7:s=23 -return A.o(A.dZ(a,A.ty(a)),$async$ai) -case 23:q=c -s=1 -break -case 8:s=24 -return A.o(A.dZ(a,A.tz(a)),$async$ai) -case 24:q=c -s=1 -break -case 9:s=25 -return A.o(A.dZ(a,A.tt(a)),$async$ai) -case 25:q=c -s=1 -break -case 10:s=26 -return A.o(A.dZ(a,A.tv(a)),$async$ai) -case 26:q=c -s=1 -break -case 11:s=27 -return A.o(A.dZ(a,A.tB(a)),$async$ai) -case 27:q=c -s=1 -break -case 12:s=28 -return A.o(A.dZ(a,A.tp(a)),$async$ai) -case 28:q=c -s=1 -break -case 13:s=29 -return A.o(A.ch(a,A.tu(a)),$async$ai) -case 29:q=c -s=1 -break -case 14:s=30 -return A.o(A.ch(a,A.ts(a)),$async$ai) -case 30:q=c -s=1 -break -case 15:s=31 -return A.o(A.ch(a,A.tr(a)),$async$ai) -case 31:q=c -s=1 -break -case 16:s=32 -return A.o(A.ch(a,A.tx(a)),$async$ai) -case 32:q=c -s=1 -break -case 17:s=33 -return A.o(A.ch(a,A.tC(a)),$async$ai) -case 33:q=c -s=1 -break -case 18:s=34 -return A.o(A.ch(a,A.tA(a)),$async$ai) -case 34:q=c -s=1 -break -case 19:s=35 -return A.o(A.o_(a),$async$ai) -case 35:q=c -s=1 -break -case 20:throw A.b(A.ak("Invalid method "+p+" "+a.l(0),null)) -case 4:case 1:return A.w(q,r)}}) -return A.x($async$ai,r)}, -tw(a){return new A.kM(a)}, -kW(a){return A.tF(a)}, -tF(a){var s=0,r=A.y(t.f),q,p=2,o,n,m,l,k,j,i,h,g,f,e,d,c -var $async$kW=A.z(function(b,a0){if(b===1){o=a0 -s=p}while(true)switch(s){case 0:i=t.f.a(a.b) -h=J.V(i) -g=A.U(h.i(i,"path")) -f=new A.kX() -e=A.eO(h.i(i,"singleInstance")) -d=e===!0 -h=A.eO(h.i(i,"readOnly")) -if(d){l=$.j7.i(0,g) -if(l!=null){if($.nw>=2)l.am("Reopening existing single database "+l.l(0)) -q=f.$1(l.e) -s=1 -break}}n=null -p=4 -e=$.ap -s=7 -return A.o((e==null?$.ap=A.cy():e).bC(i),$async$kW) -case 7:n=a0 -p=2 -s=6 -break -case 4:p=3 -c=o -i=A.T(c) -if(i instanceof A.e2){m=i -i=m -h=i.l(0) -throw A.b(A.hc("sqlite_error",null,"open_failed: "+h,i.c))}else throw c -s=6 -break -case 3:s=2 -break -case 6:j=$.qp=$.qp+1 -i=n -e=$.nw -l=new A.aQ(A.u([],t.it),A.nS(),j,d,g,h===!0,i,e,A.X(t.S,t.lz),A.nS()) -$.qE.j(0,j,l) -l.am("Opening database "+l.l(0)) -if(d)$.j7.j(0,g,l) -q=f.$1(j) -s=1 -break -case 1:return A.w(q,r) -case 2:return A.v(o,r)}}) -return A.x($async$kW,r)}, -tq(a){return new A.kG(a)}, -nY(a){var s=0,r=A.y(t.z),q -var $async$nY=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:q=A.kC(a) -if(q.f){$.j7.J(0,q.r) -if($.qy==null)$.qy=new A.jB()}q.ad(0) -return A.w(null,r)}}) -return A.x($async$nY,r)}, -kC(a){var s=A.pq(a) -if(s==null)throw A.b(A.K("Database "+A.t(A.pr(a))+" not found")) -return s}, -pq(a){var s=A.pr(a) -if(s!=null)return $.qE.i(0,s) -return null}, -pr(a){var s=a.b -if(t.f.b(s))return A.dl(J.ad(s,"id")) -return null}, -bU(a,b,c){var s=a.b -if(t.f.b(s))return c.h("0?").a(J.ad(s,b)) -return null}, -tG(a){var s,r="transactionId",q=a.b -if(t.f.b(q)){s=J.ac(q) -return s.D(q,r)&&s.i(q,r)==null}return!1}, -kE(a){var s,r,q=A.bU(a,"path",t.N) -if(q!=null&&q!==":memory:"&&$.oO().a.ag(q)<=0){if($.ap==null)$.ap=A.cy() -s=$.oO() -r=A.u(["/",q,null,null,null,null,null,null,null,null,null,null,null,null,null,null],t.mf) -A.vf("join",r) -q=s.hc(new A.ea(r,t.lS))}return q}, -hd(a){var s,r,q,p=A.bU(a,"arguments",t.j) -if(p!=null)for(s=J.aq(p),r=t.p;s.n();){q=s.gq(s) -if(q!=null)if(typeof q!="number")if(typeof q!="string")if(!r.b(q))if(!(q instanceof A.a8))throw A.b(A.ak("Invalid sql argument type '"+J.eW(q).l(0)+"': "+A.t(q),null))}return p==null?null:J.je(p,t.X)}, -to(a){var s=A.u([],t.bw),r=t.f -r=J.je(t.j.a(J.ad(r.a(a.b),"operations")),r) -r.B(r,new A.kD(s)) -return s}, -ty(a){return new A.kP(a)}, -o2(a,b){var s=0,r=A.y(t.z),q,p,o -var $async$o2=A.z(function(c,d){if(c===1)return A.v(d,r) -while(true)switch(s){case 0:o=A.bU(a,"sql",t.N) -o.toString -p=A.hd(a) -q=b.fZ(A.dl(J.ad(t.f.a(a.b),"cursorPageSize")),o,p) -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$o2,r)}, -tz(a){return new A.kO(a)}, -o3(a,b){var s=0,r=A.y(t.z),q,p,o,n -var $async$o3=A.z(function(c,d){if(c===1)return A.v(d,r) -while(true)switch(s){case 0:b=A.kC(a) -p=t.f.a(a.b) -o=J.V(p) -n=A.h(o.i(p,"cursorId")) -q=b.h_(A.eO(o.i(p,"cancel")),n) -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$o3,r)}, -kz(a,b){var s=0,r=A.y(t.X),q,p -var $async$kz=A.z(function(c,d){if(c===1)return A.v(d,r) -while(true)switch(s){case 0:b=A.kC(a) -p=A.bU(a,"sql",t.N) -p.toString -s=3 -return A.o(b.fX(p,A.hd(a)),$async$kz) -case 3:q=null -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$kz,r)}, -tt(a){return new A.kJ(a)}, -kU(a,b){return A.tD(a,b)}, -tD(a,b){var s=0,r=A.y(t.X),q,p=2,o,n,m,l,k -var $async$kU=A.z(function(c,d){if(c===1){o=d -s=p}while(true)switch(s){case 0:m=A.bU(a,"inTransaction",t.y) -l=m===!0&&A.tG(a) -if(A.dp(l))b.b=++b.a -p=4 -s=7 -return A.o(A.kz(a,b),$async$kU) -case 7:p=2 -s=6 -break -case 4:p=3 -k=o -if(A.dp(l))b.b=null -throw k -s=6 -break -case 3:s=2 -break -case 6:if(A.dp(l)){q=A.aA(["transactionId",b.b],t.N,t.X) -s=1 -break}else if(m===!1)b.b=null -q=null -s=1 -break -case 1:return A.w(q,r) -case 2:return A.v(o,r)}}) -return A.x($async$kU,r)}, -tx(a){return new A.kN(a)}, -kY(a){var s=0,r=A.y(t.z),q,p,o -var $async$kY=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:o=a.b -s=t.f.b(o)?3:4 -break -case 3:p=J.ac(o) -if(p.D(o,"logLevel")){p=A.dl(p.i(o,"logLevel")) -$.nw=p==null?0:p}p=$.ap -s=5 -return A.o((p==null?$.ap=A.cy():p).ct(o),$async$kY) -case 5:case 4:q=null -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$kY,r)}, -o_(a){var s=0,r=A.y(t.z),q -var $async$o_=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:if(J.a4(a.b,!0))$.nw=2 -q=null -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$o_,r)}, -tv(a){return new A.kL(a)}, -o1(a,b){var s=0,r=A.y(t.I),q,p -var $async$o1=A.z(function(c,d){if(c===1)return A.v(d,r) -while(true)switch(s){case 0:p=A.bU(a,"sql",t.N) -p.toString -q=b.fY(p,A.hd(a)) -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$o1,r)}, -tB(a){return new A.kR(a)}, -o4(a,b){var s=0,r=A.y(t.S),q,p -var $async$o4=A.z(function(c,d){if(c===1)return A.v(d,r) -while(true)switch(s){case 0:p=A.bU(a,"sql",t.N) -p.toString -q=b.h1(p,A.hd(a)) -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$o4,r)}, -tp(a){return new A.kF(a)}, -tu(a){return new A.kK(a)}, -o0(a){var s=0,r=A.y(t.z),q -var $async$o0=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:if($.ap==null)$.ap=A.cy() -q="/" -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$o0,r)}, -ts(a){return new A.kI(a)}, -kT(a){var s=0,r=A.y(t.H),q=1,p,o,n,m,l,k,j -var $async$kT=A.z(function(b,c){if(b===1){p=c -s=q}while(true)switch(s){case 0:l=A.kE(a) -k=$.j7.i(0,l) -if(k!=null){k.ad(0) -$.j7.J(0,l)}q=3 -o=$.ap -if(o==null)o=$.ap=A.cy() -n=l -n.toString -s=6 -return A.o(o.bu(n),$async$kT) -case 6:q=1 -s=5 -break -case 3:q=2 -j=p -s=5 -break -case 2:s=1 -break -case 5:return A.w(null,r) -case 1:return A.v(p,r)}}) -return A.x($async$kT,r)}, -tr(a){return new A.kH(a)}, -nZ(a){var s=0,r=A.y(t.y),q,p,o -var $async$nZ=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:p=A.kE(a) -o=$.ap -if(o==null)o=$.ap=A.cy() -p.toString -q=o.bx(p) -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$nZ,r)}, -tA(a){return new A.kQ(a)}, -kZ(a){var s=0,r=A.y(t.f),q,p,o,n -var $async$kZ=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:p=A.kE(a) -o=$.ap -if(o==null)o=$.ap=A.cy() -p.toString -n=A -s=3 -return A.o(o.bE(p),$async$kZ) -case 3:q=n.aA(["bytes",c],t.N,t.X) -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$kZ,r)}, -tC(a){return new A.kS(a)}, -o5(a){var s=0,r=A.y(t.H),q,p,o,n -var $async$o5=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:p=A.kE(a) -o=A.bU(a,"bytes",t.p) -n=$.ap -if(n==null)n=$.ap=A.cy() -p.toString -o.toString -q=n.bJ(p,o) -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$o5,r)}, -e_:function e_(){this.c=this.b=this.a=null}, -iB:function iB(a,b,c,d){var _=this -_.a=a -_.b=b -_.c=c -_.d=d -_.e=!1}, -ip:function ip(a,b){this.a=a -this.b=b}, -aQ:function aQ(a,b,c,d,e,f,g,h,i,j){var _=this -_.a=0 -_.b=null -_.c=a -_.d=b -_.e=c -_.f=d -_.r=e -_.w=f -_.x=g -_.y=h -_.z=i -_.Q=0 -_.as=j}, -kr:function kr(a,b,c){this.a=a -this.b=b -this.c=c}, -kp:function kp(a){this.a=a}, -kk:function kk(a){this.a=a}, -ks:function ks(a,b,c){this.a=a -this.b=b -this.c=c}, -kv:function kv(a,b,c){this.a=a -this.b=b -this.c=c}, -ku:function ku(a,b,c,d){var _=this -_.a=a -_.b=b -_.c=c -_.d=d}, -kt:function kt(a,b,c){this.a=a -this.b=b -this.c=c}, -kq:function kq(a,b,c,d){var _=this -_.a=a -_.b=b -_.c=c -_.d=d}, -ko:function ko(){}, -kn:function kn(a,b){this.a=a -this.b=b}, -kl:function kl(a,b,c,d,e,f){var _=this -_.a=a -_.b=b -_.c=c -_.d=d -_.e=e -_.f=f}, -km:function km(a,b){this.a=a -this.b=b}, -kB:function kB(a,b){this.a=a -this.b=b}, -kA:function kA(a){this.a=a}, -kM:function kM(a){this.a=a}, -kX:function kX(){}, -kG:function kG(a){this.a=a}, -kD:function kD(a){this.a=a}, -kP:function kP(a){this.a=a}, -kO:function kO(a){this.a=a}, -kJ:function kJ(a){this.a=a}, -kN:function kN(a){this.a=a}, -kL:function kL(a){this.a=a}, -kR:function kR(a){this.a=a}, -kF:function kF(a){this.a=a}, -kK:function kK(a){this.a=a}, -kI:function kI(a){this.a=a}, -kH:function kH(a){this.a=a}, -kQ:function kQ(a){this.a=a}, -kS:function kS(a){this.a=a}, -kj:function kj(a){this.a=a}, -ky:function ky(a){var _=this -_.a=a -_.b=$ -_.d=_.c=null}, -iC:function iC(){}, -j4(a){return A.uR(t.A.a(a))}, -uR(a8){var s=0,r=A.y(t.H),q=1,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7 -var $async$j4=A.z(function(a9,b0){if(a9===1){p=b0 -s=q}while(true)switch(s){case 0:t.hy.a(a8) -o=new A.bZ([],[]).av(a8.data,!0) -a1=a8.ports -a1.toString -n=J.bK(a1) -q=3 -s=typeof o=="string"?6:8 -break -case 6:J.cz(n,o) -s=7 -break -case 8:s=t.j.b(o)?9:11 -break -case 9:m=J.ad(o,0) -if(J.a4(m,"varSet")){l=t.f.a(J.ad(o,1)) -k=A.U(J.ad(l,"key")) -j=J.ad(l,"value") -A.b_($.eR+" "+A.t(m)+" "+A.t(k)+": "+A.t(j)) -$.qQ.j(0,k,j) -J.cz(n,null)}else if(J.a4(m,"varGet")){i=t.f.a(J.ad(o,1)) -h=A.U(J.ad(i,"key")) -g=$.qQ.i(0,h) -A.b_($.eR+" "+A.t(m)+" "+A.t(h)+": "+A.t(g)) -a1=t.N -J.cz(n,A.aA(["result",A.aA(["key",h,"value",g],a1,t.X)],a1,t.lb))}else{A.b_($.eR+" "+A.t(m)+" unknown") -J.cz(n,null)}s=10 -break -case 11:s=t.f.b(o)?12:14 -break -case 12:f=A.rL(o) -s=f!=null?15:17 -break -case 15:f=new A.fs(f.a,A.os(f.b)) -s=$.qx==null?18:19 -break -case 18:s=20 -return A.o(A.j8(new A.l_(),!0),$async$j4) -case 20:a1=b0 -$.qx=a1 -a1.toString -$.ap=new A.ky(a1) -case 19:e=new A.nd(n) -q=22 -s=25 -return A.o(A.kV(f),$async$j4) -case 25:d=b0 -d=A.ot(d) -e.$1(new A.cF(d,null)) -q=3 -s=24 -break -case 22:q=21 -a6=p -c=A.T(a6) -b=A.a1(a6) -a1=c -a3=b -a4=new A.cF($,$) -a5=A.X(t.N,t.X) -if(a1 instanceof A.bw){a5.j(0,"code",a1.w) -a5.j(0,"details",a1.x) -a5.j(0,"message",a1.a) -a5.j(0,"resultCode",a1.bP())}else a5.j(0,"message",J.bb(a1)) -a1=$.qo -if(!(a1==null?$.qo=!0:a1)&&a3!=null)a5.j(0,"stackTrace",a3.l(0)) -a4.b=a5 -a4.a=null -e.$1(a4) -s=24 -break -case 21:s=3 -break -case 24:s=16 -break -case 17:A.b_($.eR+" "+A.t(o)+" unknown") -J.cz(n,null) -case 16:s=13 -break -case 14:A.b_($.eR+" "+A.t(o)+" map unknown") -J.cz(n,null) -case 13:case 10:case 7:q=1 -s=5 -break -case 3:q=2 -a7=p -a=A.T(a7) -a0=A.a1(a7) -A.b_($.eR+" error caught "+A.t(a)+" "+A.t(a0)) -J.cz(n,null) -s=5 -break -case 2:s=1 -break -case 5:return A.w(null,r) -case 1:return A.v(p,r)}}) -return A.x($async$j4,r)}, -vI(a){var s,r -try{s=self -s.toString -A.b8(t.aD.a(s),"connect",t.Y.a(new A.nx()),!1,t.A)}catch(r){try{s=self -s.toString -J.ri(s,"message",A.oH())}catch(r){}}}, -nd:function nd(a){this.a=a}, -nx:function nx(){}, -ql(a){if(a==null)return!0 -else if(typeof a=="number"||typeof a=="string"||A.c2(a))return!0 -return!1}, -qq(a){var s,r=J.V(a) -if(r.gk(a)===1){s=J.bK(r.gH(a)) -if(typeof s=="string")return B.b.M(s,"@") -throw A.b(A.bn(s,null,null))}return!1}, -ot(a){var s,r,q,p,o,n,m,l,k={} -if(A.ql(a))return a -a.toString -for(s=$.oN(),r=0;r<1;++r){q=s[r] -p=A.B(q).h("di.T") -if(p.b(a))return A.aA(["@"+q.a,t.dz.a(p.a(a)).l(0)],t.N,t.X)}if(t.f.b(a)){if(A.qq(a))return A.aA(["@",a],t.N,t.X) -k.a=null -J.bl(a,new A.nb(k,a)) -s=k.a -if(s==null)s=a -return s}else if(t.j.b(a)){for(s=J.V(a),p=t.z,o=null,n=0;n")),n=new A.aa(o,c.h("aa<0>")) -p.a=p.b=null -s=new A.ka(p) -r=t.Y -q=t.A -p.b=A.b8(a,"success",r.a(new A.kb(s,n,b,a,c)),!1,q) -p.a=A.b8(a,"error",r.a(new A.kc(p,s,n)),!1,q) -return o}, -ka:function ka(a){this.a=a}, -kb:function kb(a,b,c,d,e){var _=this -_.a=a -_.b=b -_.c=c -_.d=d -_.e=e}, -k9:function k9(a,b,c){this.a=a -this.b=b -this.c=c}, -kc:function kc(a,b,c){this.a=a -this.b=b -this.c=c}, -d8:function d8(a,b){var _=this -_.c=_.b=_.a=null -_.d=a -_.$ti=b}, -lG:function lG(a,b){this.a=a -this.b=b}, -lH:function lH(a,b){this.a=a -this.b=b}, -jA:function jA(){}, -ll(a,b){var s=0,r=A.y(t.ax),q,p,o,n,m -var $async$ll=A.z(function(c,d){if(c===1)return A.v(d,r) -while(true)switch(s){case 0:o={} -b.B(0,new A.ln(o)) -p=t.N -p=new A.hC(A.X(p,t.Z),A.X(p,t.ng)) -n=p -m=J -s=3 -return A.o(A.nA(self.WebAssembly.instantiateStreaming(a,o),t.ot),$async$ll) -case 3:n.eu(m.rp(d)) -q=p -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$ll,r)}, -n0:function n0(){}, -de:function de(){}, -hC:function hC(a,b){this.a=a -this.b=b}, -ln:function ln(a){this.a=a}, -lm:function lm(a){this.a=a}, -jT:function jT(){}, -cI:function cI(){}, -lp(a){var s=0,r=A.y(t.es),q,p,o -var $async$lp=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:p=t.d9 -o=A -s=3 -return A.o(A.nA(self.fetch(a.gdT()?p.a(new globalThis.URL(a.l(0))):p.a(new globalThis.URL(a.l(0),A.o8().l(0))),null),p),$async$lp) -case 3:q=o.lo(c) -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$lp,r)}, -lo(a){var s=0,r=A.y(t.es),q,p,o -var $async$lo=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:p=A -o=A -s=3 -return A.o(A.lk(a),$async$lo) -case 3:q=new p.hD(new o.hE(c)) -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$lo,r)}, -hD:function hD(a){this.a=a}, -ls:function ls(){}, -fz(a){var s=0,r=A.y(t.cF),q,p,o,n,m,l -var $async$fz=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:p=t.N -o=new A.ji(a) -n=A.rP() -m=$.oJ() -l=new A.cd(o,n,new A.cP(t.h),A.t0(p),A.X(p,t.S),m,"indexeddb") -s=3 -return A.o(o.bB(0),$async$fz) -case 3:s=4 -return A.o(l.aW(),$async$fz) -case 4:q=l -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$fz,r)}, -ji:function ji(a){this.a=null -this.b=a}, -jn:function jn(){}, -jm:function jm(a){this.a=a}, -jj:function jj(a){this.a=a}, -jo:function jo(a,b,c,d){var _=this -_.a=a -_.b=b -_.c=c -_.d=d}, -jl:function jl(a,b){this.a=a -this.b=b}, -jk:function jk(a,b){this.a=a -this.b=b}, -b9:function b9(){}, -lN:function lN(a,b,c){this.a=a -this.b=b -this.c=c}, -lO:function lO(a,b){this.a=a -this.b=b}, -il:function il(a,b){this.a=a -this.b=b}, -cd:function cd(a,b,c,d,e,f,g){var _=this -_.d=a -_.f=null -_.r=b -_.w=c -_.x=d -_.y=e -_.b=f -_.a=g}, -jI:function jI(a){this.a=a}, -jJ:function jJ(){}, -i6:function i6(a,b,c){this.a=a -this.b=b -this.c=c}, -m1:function m1(a,b){this.a=a -this.b=b}, -a9:function a9(){}, -da:function da(a,b){var _=this -_.w=a -_.d=b -_.c=_.b=_.a=null}, -d9:function d9(a,b,c){var _=this -_.w=a -_.x=b -_.d=c -_.c=_.b=_.a=null}, -cp:function cp(a,b,c){var _=this -_.w=a -_.x=b -_.d=c -_.c=_.b=_.a=null}, -cw:function cw(a,b,c,d,e){var _=this -_.w=a -_.x=b -_.y=c -_.z=d -_.d=e -_.c=_.b=_.a=null}, -rP(){var s=$.oJ() -return new A.fx(A.X(t.N,t.nh),s,"dart-memory")}, -fx:function fx(a,b,c){this.d=a -this.b=b -this.a=c}, -i5:function i5(a,b,c){var _=this -_.a=a -_.b=b -_.c=c -_.d=0}, -lk(c1){var s=0,r=A.y(t.n0),q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,c0 -var $async$lk=A.z(function(c2,c3){if(c2===1)return A.v(c3,r) -while(true)switch(s){case 0:b9=A.u4() -c0=b9.b -c0===$&&A.bk("injectedValues") -s=3 -return A.o(A.ll(c1,c0),$async$lk) -case 3:p=c3 -c0=b9.c -c0===$&&A.bk("memory") -o=p.a -n=o.i(0,"dart_sqlite3_malloc") -n.toString -m=o.i(0,"dart_sqlite3_free") -m.toString -o.i(0,"dart_sqlite3_create_scalar_function").toString -o.i(0,"dart_sqlite3_create_aggregate_function").toString -o.i(0,"dart_sqlite3_create_window_function").toString -o.i(0,"dart_sqlite3_create_collation").toString -l=o.i(0,"dart_sqlite3_register_vfs") -l.toString -o.i(0,"sqlite3_vfs_unregister").toString -k=o.i(0,"dart_sqlite3_updates") -k.toString -o.i(0,"sqlite3_libversion").toString -o.i(0,"sqlite3_sourceid").toString -o.i(0,"sqlite3_libversion_number").toString -j=o.i(0,"sqlite3_open_v2") -j.toString -i=o.i(0,"sqlite3_close_v2") -i.toString -h=o.i(0,"sqlite3_extended_errcode") -h.toString -g=o.i(0,"sqlite3_errmsg") -g.toString -f=o.i(0,"sqlite3_errstr") -f.toString -e=o.i(0,"sqlite3_extended_result_codes") -e.toString -d=o.i(0,"sqlite3_exec") -d.toString -o.i(0,"sqlite3_free").toString -c=o.i(0,"sqlite3_prepare_v3") -c.toString -b=o.i(0,"sqlite3_bind_parameter_count") -b.toString -a=o.i(0,"sqlite3_column_count") -a.toString -a0=o.i(0,"sqlite3_column_name") -a0.toString -a1=o.i(0,"sqlite3_reset") -a1.toString -a2=o.i(0,"sqlite3_step") -a2.toString -a3=o.i(0,"sqlite3_finalize") -a3.toString -a4=o.i(0,"sqlite3_column_type") -a4.toString -a5=o.i(0,"sqlite3_column_int64") -a5.toString -a6=o.i(0,"sqlite3_column_double") -a6.toString -a7=o.i(0,"sqlite3_column_bytes") -a7.toString -a8=o.i(0,"sqlite3_column_blob") -a8.toString -a9=o.i(0,"sqlite3_column_text") -a9.toString -b0=o.i(0,"sqlite3_bind_null") -b0.toString -b1=o.i(0,"sqlite3_bind_int64") -b1.toString -b2=o.i(0,"sqlite3_bind_double") -b2.toString -b3=o.i(0,"sqlite3_bind_text") -b3.toString -b4=o.i(0,"sqlite3_bind_blob64") -b4.toString -b5=o.i(0,"sqlite3_bind_parameter_index") -b5.toString -b6=o.i(0,"sqlite3_changes") -b6.toString -b7=o.i(0,"sqlite3_last_insert_rowid") -b7.toString -b8=o.i(0,"sqlite3_user_data") -b8.toString -o.i(0,"sqlite3_result_null").toString -o.i(0,"sqlite3_result_int64").toString -o.i(0,"sqlite3_result_double").toString -o.i(0,"sqlite3_result_text").toString -o.i(0,"sqlite3_result_blob64").toString -o.i(0,"sqlite3_result_error").toString -o.i(0,"sqlite3_value_type").toString -o.i(0,"sqlite3_value_int64").toString -o.i(0,"sqlite3_value_double").toString -o.i(0,"sqlite3_value_bytes").toString -o.i(0,"sqlite3_value_text").toString -o.i(0,"sqlite3_value_blob").toString -o.i(0,"sqlite3_aggregate_context").toString -o.i(0,"dart_sqlite3_db_config_int") -p.b.i(0,"sqlite3_temp_directory").toString -q=b9.a=new A.hA(c0,b9.d,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a4,a5,a6,a7,a9,a8,b0,b1,b2,b3,b4,b5,a3,b6,b7,b8) -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$lk,r)}, -aK(a){var s,r,q -try{a.$0() -return 0}catch(r){q=A.T(r) -if(q instanceof A.e9){s=q -return s.a}else return 1}}, -ob(a,b){var s=A.b6(t.J.a(a.buffer),b,null),r=s.length,q=0 -while(!0){if(!(q=65&&a<=90))s=a>=97&&a<=122 -else s=!0 -return s}, -vD(a,b){var s,r=a.length,q=b+2 -if(r=0&&b=0&&q4294967295)throw A.b(A.au(a,0,4294967295,"length",null)) -return J.rV(new Array(a),b)}, -rU(a,b){if(a<0)throw A.b(A.ak("Length must be a non-negative integer: "+a,null)) -return A.u(new Array(a),b.h("M<0>"))}, -p9(a,b){if(a<0)throw A.b(A.ak("Length must be a non-negative integer: "+a,null)) -return A.u(new Array(a),b.h("M<0>"))}, -rV(a,b){return J.jK(A.u(a,b.h("M<0>")),b)}, -jK(a,b){a.fixed$length=Array -return a}, -pb(a){a.fixed$length=Array -a.immutable$list=Array -return a}, -rW(a,b){var s=t.bP -return J.rl(s.a(a),s.a(b))}, -pc(a){if(a<256)switch(a){case 9:case 10:case 11:case 12:case 13:case 32:case 133:case 160:return!0 -default:return!1}switch(a){case 5760:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8232:case 8233:case 8239:case 8287:case 12288:case 65279:return!0 -default:return!1}}, -rX(a,b){var s,r -for(s=a.length;b0;b=r){r=b-1 -if(!(r>>0===b&&b").t(b).h("b1<1,2>"))}, -m(a,b){A.ab(a).c.a(b) -if(!!a.fixed$length)A.Q(A.F("add")) -a.push(b)}, -hu(a,b){var s -if(!!a.fixed$length)A.Q(A.F("removeAt")) -s=a.length -if(b>=s)throw A.b(A.pm(b,null)) -return a.splice(b,1)[0]}, -h3(a,b,c){var s,r -A.ab(a).h("e<1>").a(c) -if(!!a.fixed$length)A.Q(A.F("insertAll")) -A.ti(b,0,a.length,"index") -if(!t.Q.b(c))c=J.rx(c) -s=J.Z(c) -a.length=a.length+s -r=b+s -this.L(a,r,a.length,a,b) -this.U(a,b,r,c)}, -J(a,b){var s -if(!!a.fixed$length)A.Q(A.F("remove")) -for(s=0;s").a(b) -if(!!a.fixed$length)A.Q(A.F("addAll")) -if(Array.isArray(b)){this.eB(a,b) -return}for(s=J.aq(b);s.n();)a.push(s.gq(s))}, -eB(a,b){var s,r -t.b.a(b) -s=b.length -if(s===0)return -if(a===b)throw A.b(A.ar(a)) -for(r=0;r").t(c).h("ag<1,2>"))}, -al(a,b){var s,r=A.dK(a.length,"",!1,t.N) -for(s=0;s=0&&b0)return a[0] -throw A.b(A.bq())}, -ga6(a){var s=a.length -if(s>0)return a[s-1] -throw A.b(A.bq())}, -L(a,b,c,d,e){var s,r,q,p,o -A.ab(a).h("e<1>").a(d) -if(!!a.immutable$list)A.Q(A.F("setRange")) -A.bt(b,c,a.length) -s=c-b -if(s===0)return -A.aP(e,"skipCount") -if(t.j.b(d)){r=d -q=e}else{r=J.nJ(d,e).aI(0,!1) -q=0}p=J.V(r) -if(q+s>p.gk(r))throw A.b(A.p8()) -if(q=0;--o)a[b+o]=p.i(r,q+o) -else for(o=0;o=r -for(s=q;s>=0;--s){if(!(s"))}, -gA(a){return A.dU(a)}, -gk(a){return a.length}, -i(a,b){if(!(b>=0&&b=0&&b=p){r.scW(null) -return!1}r.scW(q[s]);++r.c -return!0}, -scW(a){this.d=this.$ti.h("1?").a(a)}, -$iL:1} -J.cN.prototype={ -a0(a,b){var s -A.uB(b) -if(ab)return 1 -else if(a===b){if(a===0){s=this.gcB(b) -if(this.gcB(a)===s)return 0 -if(this.gcB(a))return-1 -return 1}return 0}else if(isNaN(a)){if(isNaN(b))return 0 -return 1}else return-1}, -gcB(a){return a===0?1/a<0:a<0}, -fE(a){var s,r -if(a>=0){if(a<=2147483647){s=a|0 -return a===s?s:s+1}}else if(a>=-2147483648)return a|0 -r=Math.ceil(a) -if(isFinite(r))return r -throw A.b(A.F(""+a+".ceil()"))}, -l(a){if(a===0&&1/a<0)return"-0.0" -else return""+a}, -gA(a){var s,r,q,p,o=a|0 -if(a===o)return o&536870911 -s=Math.abs(a) -r=Math.log(s)/0.6931471805599453|0 -q=Math.pow(2,r) -p=s<1?s/q:q/s -return((p*9007199254740992|0)+(p*3542243181176521|0))*599197+r*1259&536870911}, -a7(a,b){var s=a%b -if(s===0)return 0 -if(s>0)return s -return s+b}, -er(a,b){if((a|0)===a)if(b>=1||b<-1)return a/b|0 -return this.du(a,b)}, -G(a,b){return(a|0)===a?a/b|0:this.du(a,b)}, -du(a,b){var s=a/b -if(s>=-2147483648&&s<=2147483647)return s|0 -if(s>0){if(s!==1/0)return Math.floor(s)}else if(s>-1/0)return Math.ceil(s) -throw A.b(A.F("Result of truncating division is "+A.t(s)+": "+A.t(a)+" ~/ "+b))}, -aM(a,b){if(b<0)throw A.b(A.nj(b)) -return b>31?0:a<>>0}, -aN(a,b){var s -if(b<0)throw A.b(A.nj(b)) -if(a>0)s=this.ci(a,b) -else{s=b>31?31:b -s=a>>s>>>0}return s}, -R(a,b){var s -if(a>0)s=this.ci(a,b) -else{s=b>31?31:b -s=a>>s>>>0}return s}, -fp(a,b){if(0>b)throw A.b(A.nj(b)) -return this.ci(a,b)}, -ci(a,b){return b>31?0:a>>>b}, -gF(a){return A.bi(t.cZ)}, -$ial:1, -$iN:1, -$ia_:1} -J.dG.prototype={ -gdH(a){var s,r=a<0?-a-1:a,q=r -for(s=32;q>=4294967296;){q=this.G(q,4294967296) -s+=32}return s-Math.clz32(q)}, -gF(a){return A.bi(t.S)}, -$iS:1, -$id:1} -J.fD.prototype={ -gF(a){return A.bi(t.i)}, -$iS:1} -J.bR.prototype={ -fF(a,b){if(b<0)throw A.b(A.eT(a,b)) -if(b>=a.length)A.Q(A.eT(a,b)) -return a.charCodeAt(b)}, -dF(a,b){return new A.iF(b,a,0)}, -b7(a,b){return a+b}, -dL(a,b){var s=b.length,r=a.length -if(s>r)return!1 -return b===this.a_(a,r-s)}, -aG(a,b,c,d){var s=A.bt(b,c,a.length) -return a.substring(0,b)+d+a.substring(s)}, -I(a,b,c){var s -if(c<0||c>a.length)throw A.b(A.au(c,0,a.length,null,null)) -s=c+b.length -if(s>a.length)return!1 -return b===a.substring(c,s)}, -M(a,b){return this.I(a,b,0)}, -p(a,b,c){return a.substring(b,A.bt(b,c,a.length))}, -a_(a,b){return this.p(a,b,null)}, -hA(a){var s,r,q,p=a.trim(),o=p.length -if(o===0)return p -if(0>=o)return A.c(p,0) -if(p.charCodeAt(0)===133){s=J.rX(p,1) -if(s===o)return""}else s=0 -r=o-1 -if(!(r>=0))return A.c(p,r) -q=p.charCodeAt(r)===133?J.rY(p,r):o -if(s===0&&q===o)return p -return p.substring(s,q)}, -b8(a,b){var s,r -if(0>=b)return"" -if(b===1||a.length===0)return a -if(b!==b>>>0)throw A.b(B.U) -for(s=a,r="";!0;){if((b&1)===1)r=s+r -b=b>>>1 -if(b===0)break -s+=s}return r}, -ho(a,b,c){var s=b-a.length -if(s<=0)return a -return this.b8(c,s)+a}, -ak(a,b,c){var s -if(c<0||c>a.length)throw A.b(A.au(c,0,a.length,null,null)) -s=a.indexOf(b,c) -return s}, -cv(a,b){return this.ak(a,b,0)}, -N(a,b){return A.vK(a,b,0)}, -a0(a,b){var s -A.U(b) -if(a===b)s=0 -else s=a>6}r=r+((r&67108863)<<3)&536870911 -r^=r>>11 -return r+((r&16383)<<15)&536870911}, -gF(a){return A.bi(t.N)}, -gk(a){return a.length}, -$iS:1, -$ial:1, -$ik2:1, -$ij:1} -A.c_.prototype={ -gC(a){var s=A.B(this) -return new A.dt(J.aq(this.gac()),s.h("@<1>").t(s.z[1]).h("dt<1,2>"))}, -gk(a){return J.Z(this.gac())}, -Z(a,b){var s=A.B(this) -return A.f8(J.nJ(this.gac(),b),s.c,s.z[1])}, -u(a,b){return A.B(this).z[1].a(J.jf(this.gac(),b))}, -gv(a){return A.B(this).z[1].a(J.bK(this.gac()))}, -N(a,b){return J.nI(this.gac(),b)}, -l(a){return J.bb(this.gac())}} -A.dt.prototype={ -n(){return this.a.n()}, -gq(a){var s=this.a -return this.$ti.z[1].a(s.gq(s))}, -$iL:1} -A.c6.prototype={ -gac(){return this.a}} -A.ej.prototype={$il:1} -A.ef.prototype={ -i(a,b){return this.$ti.z[1].a(J.ad(this.a,b))}, -j(a,b,c){var s=this.$ti -J.nH(this.a,b,s.c.a(s.z[1].a(c)))}, -L(a,b,c,d,e){var s=this.$ti -J.rv(this.a,b,c,A.f8(s.h("e<2>").a(d),s.z[1],s.c),e)}, -U(a,b,c,d){return this.L(a,b,c,d,0)}, -$il:1, -$in:1} -A.b1.prototype={ -br(a,b){return new A.b1(this.a,this.$ti.h("@<1>").t(b).h("b1<1,2>"))}, -gac(){return this.a}} -A.du.prototype={ -D(a,b){return J.rm(this.a,b)}, -i(a,b){return this.$ti.h("4?").a(J.ad(this.a,b))}, -B(a,b){J.bl(this.a,new A.jv(this,this.$ti.h("~(3,4)").a(b)))}, -gH(a){var s=this.$ti -return A.f8(J.oT(this.a),s.c,s.z[2])}, -gO(a){var s=this.$ti -return A.f8(J.rq(this.a),s.z[1],s.z[3])}, -gk(a){return J.Z(this.a)}, -gaz(a){return J.oS(this.a).af(0,new A.ju(this),this.$ti.h("a6<3,4>"))}} -A.jv.prototype={ -$2(a,b){var s=this.a.$ti -s.c.a(a) -s.z[1].a(b) -this.b.$2(s.z[2].a(a),s.z[3].a(b))}, -$S(){return this.a.$ti.h("~(1,2)")}} -A.ju.prototype={ -$1(a){var s,r=this.a.$ti -r.h("a6<1,2>").a(a) -s=r.z[3] -return new A.a6(r.z[2].a(a.a),s.a(a.b),r.h("@<3>").t(s).h("a6<1,2>"))}, -$S(){return this.a.$ti.h("a6<3,4>(a6<1,2>)")}} -A.cf.prototype={ -l(a){return"LateInitializationError: "+this.a}} -A.dv.prototype={ -gk(a){return this.a.length}, -i(a,b){var s=this.a -if(!(b>=0&&b"))}, -gv(a){if(this.gk(this)===0)throw A.b(A.bq()) -return this.u(0,0)}, -N(a,b){var s,r=this,q=r.gk(r) -for(s=0;s").t(c).h("ag<1,2>"))}, -Z(a,b){return A.e5(this,b,null,A.B(this).h("a5.E"))}} -A.ci.prototype={ -es(a,b,c,d){var s,r=this.b -A.aP(r,"start") -s=this.c -if(s!=null){A.aP(s,"end") -if(r>s)throw A.b(A.au(r,0,s,"start",null))}}, -geV(){var s=J.Z(this.a),r=this.c -if(r==null||r>s)return s -return r}, -gfs(){var s=J.Z(this.a),r=this.b -if(r>s)return s -return r}, -gk(a){var s,r=J.Z(this.a),q=this.b -if(q>=r)return 0 -s=this.c -if(s==null||s>=r)return r-q -if(typeof s!=="number")return s.aP() -return s-q}, -u(a,b){var s=this,r=s.gfs()+b -if(b<0||r>=s.geV())throw A.b(A.W(b,s.gk(s),s,null,"index")) -return J.jf(s.a,r)}, -Z(a,b){var s,r,q=this -A.aP(b,"count") -s=q.b+b -r=q.c -if(r!=null&&s>=r)return new A.c9(q.$ti.h("c9<1>")) -return A.e5(q.a,s,r,q.$ti.c)}, -aI(a,b){var s,r,q,p=this,o=p.b,n=p.a,m=J.V(n),l=m.gk(n),k=p.c -if(k!=null&&k=o){r.saR(null) -return!1}r.saR(p.u(q,s));++r.c -return!0}, -saR(a){this.d=this.$ti.h("1?").a(a)}, -$iL:1} -A.bs.prototype={ -gC(a){var s=A.B(this) -return new A.dM(J.aq(this.a),this.b,s.h("@<1>").t(s.z[1]).h("dM<1,2>"))}, -gk(a){return J.Z(this.a)}, -gv(a){return this.b.$1(J.bK(this.a))}, -u(a,b){return this.b.$1(J.jf(this.a,b))}} -A.c8.prototype={$il:1} -A.dM.prototype={ -n(){var s=this,r=s.b -if(r.n()){s.saR(s.c.$1(r.gq(r))) -return!0}s.saR(null) -return!1}, -gq(a){var s=this.a -return s==null?this.$ti.z[1].a(s):s}, -saR(a){this.a=this.$ti.h("2?").a(a)}, -$iL:1} -A.ag.prototype={ -gk(a){return J.Z(this.a)}, -u(a,b){return this.b.$1(J.jf(this.a,b))}} -A.lr.prototype={ -gC(a){return new A.cl(J.aq(this.a),this.b,this.$ti.h("cl<1>"))}, -af(a,b,c){var s=this.$ti -return new A.bs(this,s.t(c).h("1(2)").a(b),s.h("@<1>").t(c).h("bs<1,2>"))}} -A.cl.prototype={ -n(){var s,r -for(s=this.a,r=this.b;s.n();)if(A.dp(r.$1(s.gq(s))))return!0 -return!1}, -gq(a){var s=this.a -return s.gq(s)}, -$iL:1} -A.bv.prototype={ -Z(a,b){A.jg(b,"count",t.S) -A.aP(b,"count") -return new A.bv(this.a,this.b+b,A.B(this).h("bv<1>"))}, -gC(a){return new A.dY(J.aq(this.a),this.b,A.B(this).h("dY<1>"))}} -A.cE.prototype={ -gk(a){var s=J.Z(this.a)-this.b -if(s>=0)return s -return 0}, -Z(a,b){A.jg(b,"count",t.S) -A.aP(b,"count") -return new A.cE(this.a,this.b+b,this.$ti)}, -$il:1} -A.dY.prototype={ -n(){var s,r -for(s=this.a,r=0;r"))}, -Z(a,b){A.aP(b,"count") -return this}} -A.dA.prototype={ -n(){return!1}, -gq(a){throw A.b(A.bq())}, -$iL:1} -A.ea.prototype={ -gC(a){return new A.eb(J.aq(this.a),this.$ti.h("eb<1>"))}} -A.eb.prototype={ -n(){var s,r -for(s=this.a,r=this.$ti.c;s.n();)if(r.b(s.gq(s)))return!0 -return!1}, -gq(a){var s=this.a -return this.$ti.c.a(s.gq(s))}, -$iL:1} -A.at.prototype={} -A.bX.prototype={ -j(a,b,c){A.B(this).h("bX.E").a(c) -throw A.b(A.F("Cannot modify an unmodifiable list"))}, -L(a,b,c,d,e){A.B(this).h("e").a(d) -throw A.b(A.F("Cannot modify an unmodifiable list"))}, -U(a,b,c,d){return this.L(a,b,c,d,0)}} -A.d3.prototype={} -A.ib.prototype={ -gk(a){return J.Z(this.a)}, -u(a,b){var s=J.Z(this.a) -if(0>b||b>=s)A.Q(A.W(b,s,this,null,"index")) -return b}} -A.dJ.prototype={ -i(a,b){return this.D(0,b)?J.ad(this.a,A.h(b)):null}, -gk(a){return J.Z(this.a)}, -gO(a){return A.e5(this.a,0,null,this.$ti.c)}, -gH(a){return new A.ib(this.a)}, -D(a,b){return A.j5(b)&&b>=0&&b>"))}, -fP(a){var s=this -return function(){var r=a -var q=0,p=1,o,n,m,l,k,j -return function $async$gaz(b,c,d){if(c===1){o=d -q=p}while(true)switch(q){case 0:n=s.gH(s),n=n.gC(n),m=A.B(s),l=m.z[1],m=m.h("@<1>").t(l).h("a6<1,2>") -case 2:if(!n.n()){q=3 -break}k=n.gq(n) -j=s.i(0,k) -q=4 -return b.b=new A.a6(k,j==null?l.a(j):j,m),1 -case 4:q=2 -break -case 3:return 0 -case 1:return b.c=o,3}}}}, -$iJ:1} -A.c7.prototype={ -gk(a){return this.b.length}, -gde(){var s=this.$keys -if(s==null){s=Object.keys(this.a) -this.$keys=s}return s}, -D(a,b){if(typeof b!="string")return!1 -if("__proto__"===b)return!1 -return this.a.hasOwnProperty(b)}, -i(a,b){if(!this.D(0,b))return null -return this.b[this.a[b]]}, -B(a,b){var s,r,q,p -this.$ti.h("~(1,2)").a(b) -s=this.gde() -r=this.b -for(q=s.length,p=0;p"))}, -gO(a){return new A.cs(this.b,this.$ti.h("cs<2>"))}} -A.cs.prototype={ -gk(a){return this.a.length}, -gC(a){var s=this.a -return new A.el(s,s.length,this.$ti.h("el<1>"))}} -A.el.prototype={ -gq(a){var s=this.d -return s==null?this.$ti.c.a(s):s}, -n(){var s=this,r=s.c -if(r>=s.b){s.saS(null) -return!1}s.saS(s.a[r]);++s.c -return!0}, -saS(a){this.d=this.$ti.h("1?").a(a)}, -$iL:1} -A.fC.prototype={ -ghg(){var s=this.a -return s}, -ghq(){var s,r,q,p,o=this -if(o.c===1)return B.D -s=o.d -r=s.length-o.e.length-o.f -if(r===0)return B.D -q=[] -for(p=0;p=0&&l>>0}, -l(a){return"Closure '"+this.$_name+"' of "+("Instance of '"+A.k4(this.a)+"'")}} -A.hR.prototype={ -l(a){return"Reading static variable '"+this.a+"' during its initialization"}} -A.h6.prototype={ -l(a){return"RuntimeError: "+this.a}} -A.hL.prototype={ -l(a){return"Assertion failed: "+A.ca(this.a)}} -A.mM.prototype={} -A.b3.prototype={ -gk(a){return this.a}, -gha(a){return this.a!==0}, -gH(a){return new A.b4(this,A.B(this).h("b4<1>"))}, -gO(a){var s=A.B(this) -return A.pg(new A.b4(this,s.h("b4<1>")),new A.jN(this),s.c,s.z[1])}, -D(a,b){var s,r -if(typeof b=="string"){s=this.b -if(s==null)return!1 -return s[b]!=null}else if(typeof b=="number"&&(b&0x3fffffff)===b){r=this.c -if(r==null)return!1 -return r[b]!=null}else return this.h6(b)}, -h6(a){var s=this.d -if(s==null)return!1 -return this.bz(s[this.by(a)],a)>=0}, -aY(a,b){J.bl(A.B(this).h("J<1,2>").a(b),new A.jM(this))}, -i(a,b){var s,r,q,p,o=null -if(typeof b=="string"){s=this.b -if(s==null)return o -r=s[b] -q=r==null?o:r.b -return q}else if(typeof b=="number"&&(b&0x3fffffff)===b){p=this.c -if(p==null)return o -r=p[b] -q=r==null?o:r.b -return q}else return this.h7(b)}, -h7(a){var s,r,q=this.d -if(q==null)return null -s=q[this.by(a)] -r=this.bz(s,a) -if(r<0)return null -return s[r].b}, -j(a,b,c){var s,r,q=this,p=A.B(q) -p.c.a(b) -p.z[1].a(c) -if(typeof b=="string"){s=q.b -q.cX(s==null?q.b=q.cd():s,b,c)}else if(typeof b=="number"&&(b&0x3fffffff)===b){r=q.c -q.cX(r==null?q.c=q.cd():r,b,c)}else q.h9(b,c)}, -h9(a,b){var s,r,q,p,o=this,n=A.B(o) -n.c.a(a) -n.z[1].a(b) -s=o.d -if(s==null)s=o.d=o.cd() -r=o.by(a) -q=s[r] -if(q==null)s[r]=[o.ce(a,b)] -else{p=o.bz(q,a) -if(p>=0)q[p].b=b -else q.push(o.ce(a,b))}}, -hs(a,b,c){var s,r,q=this,p=A.B(q) -p.c.a(b) -p.h("2()").a(c) -if(q.D(0,b)){s=q.i(0,b) -return s==null?p.z[1].a(s):s}r=c.$0() -q.j(0,b,r) -return r}, -J(a,b){var s=this -if(typeof b=="string")return s.dm(s.b,b) -else if(typeof b=="number"&&(b&0x3fffffff)===b)return s.dm(s.c,b) -else return s.h8(b)}, -h8(a){var s,r,q,p,o=this,n=o.d -if(n==null)return null -s=o.by(a) -r=n[s] -q=o.bz(r,a) -if(q<0)return null -p=r.splice(q,1)[0] -o.dB(p) -if(r.length===0)delete n[s] -return p.b}, -B(a,b){var s,r,q=this -A.B(q).h("~(1,2)").a(b) -s=q.e -r=q.r -for(;s!=null;){b.$2(s.a,s.b) -if(r!==q.r)throw A.b(A.ar(q)) -s=s.c}}, -cX(a,b,c){var s,r=A.B(this) -r.c.a(b) -r.z[1].a(c) -s=a[b] -if(s==null)a[b]=this.ce(b,c) -else s.b=c}, -dm(a,b){var s -if(a==null)return null -s=a[b] -if(s==null)return null -this.dB(s) -delete a[b] -return s.b}, -dg(){this.r=this.r+1&1073741823}, -ce(a,b){var s=this,r=A.B(s),q=new A.jO(r.c.a(a),r.z[1].a(b)) -if(s.e==null)s.e=s.f=q -else{r=s.f -r.toString -q.d=r -s.f=r.c=q}++s.a -s.dg() -return q}, -dB(a){var s=this,r=a.d,q=a.c -if(r==null)s.e=q -else r.c=q -if(q==null)s.f=r -else q.d=r;--s.a -s.dg()}, -by(a){return J.bm(a)&1073741823}, -bz(a,b){var s,r -if(a==null)return-1 -s=a.length -for(r=0;r"]=s -delete s[""] -return s}, -$ipe:1} -A.jN.prototype={ -$1(a){var s=this.a,r=A.B(s) -s=s.i(0,r.c.a(a)) -return s==null?r.z[1].a(s):s}, -$S(){return A.B(this.a).h("2(1)")}} -A.jM.prototype={ -$2(a,b){var s=this.a,r=A.B(s) -s.j(0,r.c.a(a),r.z[1].a(b))}, -$S(){return A.B(this.a).h("~(1,2)")}} -A.jO.prototype={} -A.b4.prototype={ -gk(a){return this.a.a}, -gC(a){var s=this.a,r=new A.dI(s,s.r,this.$ti.h("dI<1>")) -r.c=s.e -return r}, -N(a,b){return this.a.D(0,b)}} -A.dI.prototype={ -gq(a){return this.d}, -n(){var s,r=this,q=r.a -if(r.b!==q.r)throw A.b(A.ar(q)) -s=r.c -if(s==null){r.saS(null) -return!1}else{r.saS(s.a) -r.c=s.c -return!0}}, -saS(a){this.d=this.$ti.h("1?").a(a)}, -$iL:1} -A.nr.prototype={ -$1(a){return this.a(a)}, -$S:64} -A.ns.prototype={ -$2(a,b){return this.a(a,b)}, -$S:37} -A.nt.prototype={ -$1(a){return this.a(A.U(a))}, -$S:74} -A.cu.prototype={ -gF(a){return A.bi(this.da())}, -da(){return A.vs(this.$r,this.d8())}, -l(a){return this.dz(!1)}, -dz(a){var s,r,q,p,o,n=this.eZ(),m=this.d8(),l=(a?""+"Record ":"")+"(" -for(s=n.length,r="",q=0;q0;){--q;--s -B.a.j(j,q,r[s])}}return A.dL(j,k)}} -A.dc.prototype={ -d8(){return[this.a,this.b]}, -K(a,b){if(b==null)return!1 -return b instanceof A.dc&&this.$s===b.$s&&J.a4(this.a,b.a)&&J.a4(this.b,b.b)}, -gA(a){return A.nT(this.$s,this.a,this.b,B.p)}} -A.cO.prototype={ -l(a){return"RegExp/"+this.a+"/"+this.b.flags}, -gf6(){var s=this,r=s.c -if(r!=null)return r -r=s.b -return s.c=A.pd(s.a,r.multiline,!r.ignoreCase,r.unicode,r.dotAll,!0)}, -fR(a){var s=this.b.exec(a) -if(s==null)return null -return new A.eq(s)}, -dF(a,b){return new A.hJ(this,b,0)}, -eX(a,b){var s,r=this.gf6() -if(r==null)r=t.K.a(r) -r.lastIndex=b -s=r.exec(a) -if(s==null)return null -return new A.eq(s)}, -$ik2:1, -$itj:1} -A.eq.prototype={$icR:1,$idW:1} -A.hJ.prototype={ -gC(a){return new A.hK(this.a,this.b,this.c)}} -A.hK.prototype={ -gq(a){var s=this.d -return s==null?t.lu.a(s):s}, -n(){var s,r,q,p,o,n,m=this,l=m.b -if(l==null)return!1 -s=m.c -r=l.length -if(s<=r){q=m.a -p=q.eX(l,s) -if(p!=null){m.d=p -s=p.b -o=s.index -n=o+s[0].length -if(o===n){if(q.b.unicode){s=m.c -q=s+1 -if(q=0&&s=55296&&s<=56319){if(!(q>=0))return A.c(l,q) -s=l.charCodeAt(q) -s=s>=56320&&s<=57343}else s=!1}else s=!1}else s=!1 -n=(s?n+1:n)+1}m.c=n -return!0}}m.b=m.d=null -return!1}, -$iL:1} -A.e4.prototype={$icR:1} -A.iF.prototype={ -gC(a){return new A.iG(this.a,this.b,this.c)}, -gv(a){var s=this.b,r=this.a.indexOf(s,this.c) -if(r>=0)return new A.e4(r,s) -throw A.b(A.bq())}} -A.iG.prototype={ -n(){var s,r,q=this,p=q.c,o=q.b,n=o.length,m=q.a,l=m.length -if(p+n>l){q.d=null -return!1}s=m.indexOf(o,p) -if(s<0){q.c=l+1 -q.d=null -return!1}r=s+n -q.d=new A.e4(s,o) -q.c=r===q.c?r+1:r -return!0}, -gq(a){var s=this.d -s.toString -return s}, -$iL:1} -A.lF.prototype={ -bj(){var s=this.b -if(s===this)throw A.b(new A.cf("Local '"+this.a+"' has not been initialized.")) -return s}, -V(){var s=this.b -if(s===this)throw A.b(A.rZ(this.a)) -return s}} -A.cT.prototype={ -gF(a){return B.a4}, -$iS:1, -$icT:1, -$inK:1} -A.a7.prototype={ -f5(a,b,c,d){var s=A.au(b,0,c,d,null) -throw A.b(s)}, -d_(a,b,c,d){if(b>>>0!==b||b>c)this.f5(a,b,c,d)}, -$ia7:1} -A.dN.prototype={ -gF(a){return B.a5}, -f0(a,b,c){return a.getUint32(b,c)}, -fo(a,b,c,d){return a.setUint32(b,c,d)}, -$iS:1, -$ip0:1} -A.ah.prototype={ -gk(a){return a.length}, -dr(a,b,c,d,e){var s,r,q=a.length -this.d_(a,b,q,"start") -this.d_(a,c,q,"end") -if(b>c)throw A.b(A.au(b,0,c,null,null)) -s=c-b -if(e<0)throw A.b(A.ak(e,null)) -r=d.length -if(r-e").b(b))s.cZ(b) -else s.aU(b)}}, -bs(a,b){var s=this.a -if(this.b)s.P(a,b) -else s.ap(a,b)}, -$ifc:1} -A.n2.prototype={ -$1(a){return this.a.$2(0,a)}, -$S:5} -A.n3.prototype={ -$2(a,b){this.a.$2(1,new A.dB(a,t.l.a(b)))}, -$S:66} -A.ni.prototype={ -$2(a,b){this.a(A.h(a),b)}, -$S:35} -A.eC.prototype={ -gq(a){var s=this.b -return s==null?this.$ti.c.a(s):s}, -fj(a,b){var s,r,q -a=A.h(a) -b=b -s=this.a -for(;!0;)try{r=s(this,a,b) -return r}catch(q){b=q -a=1}}, -n(){var s,r,q,p,o=this,n=null,m=null,l=0 -for(;!0;){s=o.d -if(s!=null)try{if(s.n()){o.sbU(J.ro(s)) -return!0}else o.scc(n)}catch(r){m=r -l=1 -o.scc(n)}q=o.fj(l,m) -if(1===q)return!0 -if(0===q){o.sbU(n) -p=o.e -if(p==null||p.length===0){o.a=A.pS -return!1}if(0>=p.length)return A.c(p,-1) -o.a=p.pop() -l=0 -m=null -continue}if(2===q){l=0 -m=null -continue}if(3===q){m=o.c -o.c=null -p=o.e -if(p==null||p.length===0){o.sbU(n) -o.a=A.pS -throw m -return!1}if(0>=p.length)return A.c(p,-1) -o.a=p.pop() -l=1 -continue}throw A.b(A.K("sync*"))}return!1}, -hG(a){var s,r,q=this -if(a instanceof A.dg){s=a.a() -r=q.e -if(r==null)r=q.e=[] -B.a.m(r,q.a) -q.a=s -return 2}else{q.scc(J.aq(a)) -return 2}}, -sbU(a){this.b=this.$ti.h("1?").a(a)}, -scc(a){this.d=this.$ti.h("L<1>?").a(a)}, -$iL:1} -A.dg.prototype={ -gC(a){return new A.eC(this.a(),this.$ti.h("eC<1>"))}} -A.ds.prototype={ -l(a){return A.t(this.a)}, -$iR:1, -gaO(){return this.b}} -A.jF.prototype={ -$0(){var s,r,q -try{this.a.aT(this.b.$0())}catch(q){s=A.T(q) -r=A.a1(q) -A.qf(this.a,s,r)}}, -$S:0} -A.jH.prototype={ -$2(a,b){var s,r,q=this -t.K.a(a) -t.l.a(b) -s=q.a -r=--s.b -if(s.a!=null){s.a=null -if(s.b===0||q.c)q.d.P(a,b) -else{q.e.b=a -q.f.b=b}}else if(r===0&&!q.c)q.d.P(q.e.bj(),q.f.bj())}, -$S:20} -A.jG.prototype={ -$1(a){var s,r,q=this,p=q.w -p.a(a) -r=q.a;--r.b -s=r.a -if(s!=null){J.nH(s,q.b,a) -if(r.b===0)q.c.aU(A.jQ(s,!0,p))}else if(r.b===0&&!q.e)q.c.P(q.f.bj(),q.r.bj())}, -$S(){return this.w.h("P(0)")}} -A.co.prototype={ -bs(a,b){var s -A.cx(a,"error",t.K) -if((this.a.a&30)!==0)throw A.b(A.K("Future already completed")) -s=$.E.b_(a,b) -if(s!=null){a=s.a -b=s.b}else if(b==null)b=A.f0(a) -this.P(a,b)}, -ae(a){return this.bs(a,null)}, -$ifc:1} -A.cn.prototype={ -W(a,b){var s,r=this.$ti -r.h("1/?").a(b) -s=this.a -if((s.a&30)!==0)throw A.b(A.K("Future already completed")) -s.bb(r.h("1/").a(b))}, -P(a,b){this.a.ap(a,b)}} -A.aa.prototype={ -W(a,b){var s,r=this.$ti -r.h("1/?").a(b) -s=this.a -if((s.a&30)!==0)throw A.b(A.K("Future already completed")) -s.aT(r.h("1/").a(b))}, -fG(a){return this.W(a,null)}, -P(a,b){this.a.P(a,b)}} -A.bE.prototype={ -hf(a){if((this.c&15)!==6)return!0 -return this.b.b.cM(t.iW.a(this.d),a.a,t.y,t.K)}, -fW(a){var s,r=this,q=r.e,p=null,o=t.z,n=t.K,m=a.a,l=r.b.b -if(t.R.b(q))p=l.hx(q,m,a.b,o,n,t.l) -else p=l.cM(t.v.a(q),m,o,n) -try{o=r.$ti.h("2/").a(p) -return o}catch(s){if(t.do.b(A.T(s))){if((r.c&1)!==0)throw A.b(A.ak("The error handler of Future.then must return a value of the returned future's type","onError")) -throw A.b(A.ak("The error handler of Future.catchError must return a value of the future's type","onError"))}else throw s}}} -A.C.prototype={ -dq(a){this.a=this.a&1|4 -this.c=a}, -bH(a,b,c){var s,r,q,p=this.$ti -p.t(c).h("1/(2)").a(a) -s=$.E -if(s===B.d){if(b!=null&&!t.R.b(b)&&!t.v.b(b))throw A.b(A.bn(b,"onError",u.c))}else{a=s.bF(a,c.h("0/"),p.c) -if(b!=null)b=A.v8(b,s)}r=new A.C($.E,c.h("C<0>")) -q=b==null?1:3 -this.ba(new A.bE(r,q,a,b,p.h("@<1>").t(c).h("bE<1,2>"))) -return r}, -e2(a,b){return this.bH(a,null,b)}, -dw(a,b,c){var s,r=this.$ti -r.t(c).h("1/(2)").a(a) -s=new A.C($.E,c.h("C<0>")) -this.ba(new A.bE(s,3,a,b,r.h("@<1>").t(c).h("bE<1,2>"))) -return s}, -aJ(a){var s,r,q -t.mY.a(a) -s=this.$ti -r=$.E -q=new A.C(r,s) -if(r!==B.d)a=r.cK(a,t.z) -this.ba(new A.bE(q,8,a,null,s.h("@<1>").t(s.c).h("bE<1,2>"))) -return q}, -fm(a){this.a=this.a&1|16 -this.c=a}, -bd(a){this.a=a.a&30|this.a&1 -this.c=a.c}, -ba(a){var s,r=this,q=r.a -if(q<=3){a.a=t.d.a(r.c) -r.c=a}else{if((q&4)!==0){s=t.c.a(r.c) -if((s.a&24)===0){s.ba(a) -return}r.bd(s)}r.b.ao(new A.lP(r,a))}}, -cf(a){var s,r,q,p,o,n,m=this,l={} -l.a=a -if(a==null)return -s=m.a -if(s<=3){r=t.d.a(m.c) -m.c=a -if(r!=null){q=a.a -for(p=a;q!=null;p=q,q=o)o=q.a -p.a=r}}else{if((s&4)!==0){n=t.c.a(m.c) -if((n.a&24)===0){n.cf(a) -return}m.bd(n)}l.a=m.bl(a) -m.b.ao(new A.lW(l,m))}}, -bk(){var s=t.d.a(this.c) -this.c=null -return this.bl(s)}, -bl(a){var s,r,q -for(s=a,r=null;s!=null;r=s,s=q){q=s.a -s.a=r}return r}, -cY(a){var s,r,q,p=this -p.a^=2 -try{a.bH(new A.lT(p),new A.lU(p),t.P)}catch(q){s=A.T(q) -r=A.a1(q) -A.qP(new A.lV(p,s,r))}}, -aT(a){var s,r=this,q=r.$ti -q.h("1/").a(a) -if(q.h("I<1>").b(a))if(q.b(a))A.oj(a,r) -else r.cY(a) -else{s=r.bk() -q.c.a(a) -r.a=8 -r.c=a -A.db(r,s)}}, -aU(a){var s,r=this -r.$ti.c.a(a) -s=r.bk() -r.a=8 -r.c=a -A.db(r,s)}, -P(a,b){var s -t.K.a(a) -t.l.a(b) -s=this.bk() -this.fm(A.jh(a,b)) -A.db(this,s)}, -bb(a){var s=this.$ti -s.h("1/").a(a) -if(s.h("I<1>").b(a)){this.cZ(a) -return}this.eF(a)}, -eF(a){var s=this -s.$ti.c.a(a) -s.a^=2 -s.b.ao(new A.lR(s,a))}, -cZ(a){var s=this.$ti -s.h("I<1>").a(a) -if(s.b(a)){A.u3(a,this) -return}this.cY(a)}, -ap(a,b){t.l.a(b) -this.a^=2 -this.b.ao(new A.lQ(this,a,b))}, -$iI:1} -A.lP.prototype={ -$0(){A.db(this.a,this.b)}, -$S:0} -A.lW.prototype={ -$0(){A.db(this.b,this.a.a)}, -$S:0} -A.lT.prototype={ -$1(a){var s,r,q,p=this.a -p.a^=2 -try{p.aU(p.$ti.c.a(a))}catch(q){s=A.T(q) -r=A.a1(q) -p.P(s,r)}}, -$S:22} -A.lU.prototype={ -$2(a,b){this.a.P(t.K.a(a),t.l.a(b))}, -$S:70} -A.lV.prototype={ -$0(){this.a.P(this.b,this.c)}, -$S:0} -A.lS.prototype={ -$0(){A.oj(this.a.a,this.b)}, -$S:0} -A.lR.prototype={ -$0(){this.a.aU(this.b)}, -$S:0} -A.lQ.prototype={ -$0(){this.a.P(this.b,this.c)}, -$S:0} -A.lZ.prototype={ -$0(){var s,r,q,p,o,n,m=this,l=null -try{q=m.a.a -l=q.b.b.cL(t.mY.a(q.d),t.z)}catch(p){s=A.T(p) -r=A.a1(p) -q=m.c&&t.n.a(m.b.a.c).a===s -o=m.a -if(q)o.c=t.n.a(m.b.a.c) -else o.c=A.jh(s,r) -o.b=!0 -return}if(l instanceof A.C&&(l.a&24)!==0){if((l.a&16)!==0){q=m.a -q.c=t.n.a(l.c) -q.b=!0}return}if(l instanceof A.C){n=m.b.a -q=m.a -q.c=l.e2(new A.m_(n),t.z) -q.b=!1}}, -$S:0} -A.m_.prototype={ -$1(a){return this.a}, -$S:73} -A.lY.prototype={ -$0(){var s,r,q,p,o,n,m,l -try{q=this.a -p=q.a -o=p.$ti -n=o.c -m=n.a(this.b) -q.c=p.b.b.cM(o.h("2/(1)").a(p.d),m,o.h("2/"),n)}catch(l){s=A.T(l) -r=A.a1(l) -q=this.a -q.c=A.jh(s,r) -q.b=!0}}, -$S:0} -A.lX.prototype={ -$0(){var s,r,q,p,o,n,m=this -try{s=t.n.a(m.a.a.c) -p=m.b -if(p.a.hf(s)&&p.a.e!=null){p.c=p.a.fW(s) -p.b=!1}}catch(o){r=A.T(o) -q=A.a1(o) -p=t.n.a(m.a.a.c) -n=m.b -if(p.a===r)n.c=p -else n.c=A.jh(r,q) -n.b=!0}}, -$S:0} -A.hM.prototype={} -A.d_.prototype={ -gk(a){var s={},r=new A.C($.E,t.g_) -s.a=0 -this.cC(new A.l6(s,this),!0,new A.l7(s,r),r.gd3()) -return r}, -gv(a){var s=new A.C($.E,A.B(this).h("C<1>")),r=this.cC(null,!0,new A.l4(s),s.gd3()) -r.dX(new A.l5(this,r,s)) -return s}} -A.l6.prototype={ -$1(a){A.B(this.b).c.a(a);++this.a.a}, -$S(){return A.B(this.b).h("~(1)")}} -A.l7.prototype={ -$0(){this.b.aT(this.a.a)}, -$S:0} -A.l4.prototype={ -$0(){var s,r,q,p -try{q=A.bq() -throw A.b(q)}catch(p){s=A.T(p) -r=A.a1(p) -A.qf(this.a,s,r)}}, -$S:0} -A.l5.prototype={ -$1(a){A.uH(this.b,this.c,A.B(this.a).c.a(a))}, -$S(){return A.B(this.a).h("~(1)")}} -A.df.prototype={ -gfa(){var s,r=this -if((r.b&8)===0)return A.B(r).h("aY<1>?").a(r.a) -s=A.B(r) -return s.h("aY<1>?").a(s.h("eA<1>").a(r.a).gcQ())}, -c3(){var s,r,q=this -if((q.b&8)===0){s=q.a -if(s==null)s=q.a=new A.aY(A.B(q).h("aY<1>")) -return A.B(q).h("aY<1>").a(s)}r=A.B(q) -s=r.h("eA<1>").a(q.a).gcQ() -return r.h("aY<1>").a(s)}, -gcj(){var s=this.a -if((this.b&8)!==0)s=t.gL.a(s).gcQ() -return A.B(this).h("d7<1>").a(s)}, -bV(){if((this.b&4)!==0)return new A.bx("Cannot add event after closing") -return new A.bx("Cannot add event while adding a stream")}, -d7(){var s=this.c -if(s==null)s=this.c=(this.b&2)!==0?$.eV():new A.C($.E,t.D) -return s}, -dE(a,b){var s,r,q=this -A.cx(a,"error",t.K) -if(q.b>=4)throw A.b(q.bV()) -s=$.E.b_(a,b) -if(s!=null){a=s.a -b=s.b}else b=A.f0(a) -r=q.b -if((r&1)!==0)q.bp(a,b) -else if((r&3)===0)q.c3().m(0,new A.eh(a,b))}, -fA(a){return this.dE(a,null)}, -ad(a){var s=this,r=s.b -if((r&4)!==0)return s.d7() -if(r>=4)throw A.b(s.bV()) -r=s.b=r|4 -if((r&1)!==0)s.bo() -else if((r&3)===0)s.c3().m(0,B.w) -return s.d7()}, -ft(a,b,c,d){var s,r,q,p,o,n,m,l=this,k=A.B(l) -k.h("~(1)?").a(a) -t.e.a(c) -if((l.b&3)!==0)throw A.b(A.K("Stream has already been listened to.")) -s=$.E -r=d?1:0 -q=A.pJ(s,a,k.c) -p=A.u2(s,b) -o=new A.d7(l,q,p,s.cK(c,t.H),s,r,k.h("d7<1>")) -n=l.gfa() -s=l.b|=1 -if((s&8)!==0){m=k.h("eA<1>").a(l.a) -m.scQ(o) -m.hw(0)}else l.a=o -o.fn(n) -o.f1(new A.mR(l)) -return o}, -fd(a){var s,r,q,p,o,n,m,l=this,k=A.B(l) -k.h("d0<1>").a(a) -s=null -if((l.b&8)!==0)s=k.h("eA<1>").a(l.a).S(0) -l.a=null -l.b=l.b&4294967286|2 -r=l.r -if(r!=null)if(s==null)try{q=r.$0() -if(q instanceof A.C)s=q}catch(n){p=A.T(n) -o=A.a1(n) -m=new A.C($.E,t.D) -m.ap(p,o) -s=m}else s=s.aJ(r) -k=new A.mQ(l) -if(s!=null)s=s.aJ(k) -else k.$0() -return s}, -$ipR:1, -$icr:1} -A.mR.prototype={ -$0(){A.ow(this.a.d)}, -$S:0} -A.mQ.prototype={ -$0(){var s=this.a.c -if(s!=null&&(s.a&30)===0)s.bb(null)}, -$S:0} -A.iL.prototype={ -bn(a){this.$ti.c.a(a) -this.gcj().eA(0,a)}, -bp(a,b){this.gcj().eC(a,b)}, -bo(){this.gcj().eJ()}} -A.dh.prototype={} -A.d6.prototype={ -gA(a){return(A.dU(this.a)^892482866)>>>0}, -K(a,b){if(b==null)return!1 -if(this===b)return!0 -return b instanceof A.d6&&b.a===this.a}} -A.d7.prototype={ -dh(){return this.w.fd(this)}, -dj(){var s=this.w,r=A.B(s) -r.h("d0<1>").a(this) -if((s.b&8)!==0)r.h("eA<1>").a(s.a).hI(0) -A.ow(s.e)}, -dk(){var s=this.w,r=A.B(s) -r.h("d0<1>").a(this) -if((s.b&8)!==0)r.h("eA<1>").a(s.a).hw(0) -A.ow(s.f)}} -A.ee.prototype={ -fn(a){var s=this -A.B(s).h("aY<1>?").a(a) -if(a==null)return -s.sbi(a) -if(a.c!=null){s.e=(s.e|64)>>>0 -a.bQ(s)}}, -dX(a){var s=A.B(this) -this.seE(A.pJ(this.d,s.h("~(1)?").a(a),s.c))}, -S(a){var s=this,r=(s.e&4294967279)>>>0 -s.e=r -if((r&8)===0)s.bY() -r=s.f -return r==null?$.eV():r}, -bY(){var s,r=this,q=r.e=(r.e|8)>>>0 -if((q&64)!==0){s=r.r -if(s.a===1)s.a=3}if((q&32)===0)r.sbi(null) -r.f=r.dh()}, -eA(a,b){var s,r=this,q=A.B(r) -q.c.a(b) -s=r.e -if((s&8)!==0)return -if(s<32)r.bn(b) -else r.bT(new A.cq(b,q.h("cq<1>")))}, -eC(a,b){var s=this.e -if((s&8)!==0)return -if(s<32)this.bp(a,b) -else this.bT(new A.eh(a,b))}, -eJ(){var s=this,r=s.e -if((r&8)!==0)return -r=(r|2)>>>0 -s.e=r -if(r<32)s.bo() -else s.bT(B.w)}, -dj(){}, -dk(){}, -dh(){return null}, -bT(a){var s,r=this,q=r.r -if(q==null){q=new A.aY(A.B(r).h("aY<1>")) -r.sbi(q)}q.m(0,a) -s=r.e -if((s&64)===0){s=(s|64)>>>0 -r.e=s -if(s<128)q.bQ(r)}}, -bn(a){var s,r=this,q=A.B(r).c -q.a(a) -s=r.e -r.e=(s|32)>>>0 -r.d.cN(r.a,a,q) -r.e=(r.e&4294967263)>>>0 -r.bZ((s&4)!==0)}, -bp(a,b){var s,r=this,q=r.e,p=new A.lE(r,a,b) -if((q&1)!==0){r.e=(q|16)>>>0 -r.bY() -s=r.f -if(s!=null&&s!==$.eV())s.aJ(p) -else p.$0()}else{p.$0() -r.bZ((q&4)!==0)}}, -bo(){var s,r=this,q=new A.lD(r) -r.bY() -r.e=(r.e|16)>>>0 -s=r.f -if(s!=null&&s!==$.eV())s.aJ(q) -else q.$0()}, -f1(a){var s,r=this -t.M.a(a) -s=r.e -r.e=(s|32)>>>0 -a.$0() -r.e=(r.e&4294967263)>>>0 -r.bZ((s&4)!==0)}, -bZ(a){var s,r,q=this,p=q.e -if((p&64)!==0&&q.r.c==null){p=q.e=(p&4294967231)>>>0 -if((p&4)!==0)if(p<128){s=q.r -s=s==null?null:s.c==null -s=s!==!1}else s=!1 -else s=!1 -if(s){p=(p&4294967291)>>>0 -q.e=p}}for(;!0;a=r){if((p&8)!==0){q.sbi(null) -return}r=(p&4)!==0 -if(a===r)break -q.e=(p^32)>>>0 -if(r)q.dj() -else q.dk() -p=(q.e&4294967263)>>>0 -q.e=p}if((p&64)!==0&&p<128)q.r.bQ(q)}, -seE(a){this.a=A.B(this).h("~(1)").a(a)}, -sbi(a){this.r=A.B(this).h("aY<1>?").a(a)}, -$id0:1, -$icr:1} -A.lE.prototype={ -$0(){var s,r,q,p=this.a,o=p.e -if((o&8)!==0&&(o&16)===0)return -p.e=(o|32)>>>0 -s=p.b -o=this.b -r=t.K -q=p.d -if(t.k.b(s))q.hy(s,o,this.c,r,t.l) -else q.cN(t.i6.a(s),o,r) -p.e=(p.e&4294967263)>>>0}, -$S:0} -A.lD.prototype={ -$0(){var s=this.a,r=s.e -if((r&16)===0)return -s.e=(r|42)>>>0 -s.d.e1(s.c) -s.e=(s.e&4294967263)>>>0}, -$S:0} -A.eB.prototype={ -cC(a,b,c,d){var s=this.$ti -s.h("~(1)?").a(a) -t.e.a(c) -return this.a.ft(s.h("~(1)?").a(a),d,c,!0)}} -A.bD.prototype={ -sb3(a,b){this.a=t.lT.a(b)}, -gb3(a){return this.a}} -A.cq.prototype={ -cG(a){this.$ti.h("cr<1>").a(a).bn(this.b)}} -A.eh.prototype={ -cG(a){a.bp(this.b,this.c)}} -A.hT.prototype={ -cG(a){a.bo()}, -gb3(a){return null}, -sb3(a,b){throw A.b(A.K("No events after a done."))}, -$ibD:1} -A.aY.prototype={ -bQ(a){var s,r=this -r.$ti.h("cr<1>").a(a) -s=r.a -if(s===1)return -if(s>=1){r.a=1 -return}A.qP(new A.mJ(r,a)) -r.a=1}, -m(a,b){var s=this,r=s.c -if(r==null)s.b=s.c=b -else{r.sb3(0,b) -s.c=b}}} -A.mJ.prototype={ -$0(){var s,r,q,p=this.a,o=p.a -p.a=0 -if(o===3)return -s=p.$ti.h("cr<1>").a(this.b) -r=p.b -q=r.gb3(r) -p.b=q -if(q==null)p.c=null -r.cG(s)}, -$S:0} -A.iE.prototype={} -A.n4.prototype={ -$0(){return this.a.aT(this.b)}, -$S:0} -A.iT.prototype={} -A.eM.prototype={$ibC:1} -A.nf.prototype={ -$0(){A.rK(this.a,this.b)}, -$S:0} -A.it.prototype={ -gfk(){return B.ai}, -gaA(){return this}, -e1(a){var s,r,q -t.M.a(a) -try{if(B.d===$.E){a.$0() -return}A.qr(null,null,this,a,t.H)}catch(q){s=A.T(q) -r=A.a1(q) -A.ne(t.K.a(s),t.l.a(r))}}, -cN(a,b,c){var s,r,q -c.h("~(0)").a(a) -c.a(b) -try{if(B.d===$.E){a.$1(b) -return}A.qt(null,null,this,a,b,t.H,c)}catch(q){s=A.T(q) -r=A.a1(q) -A.ne(t.K.a(s),t.l.a(r))}}, -hy(a,b,c,d,e){var s,r,q -d.h("@<0>").t(e).h("~(1,2)").a(a) -d.a(b) -e.a(c) -try{if(B.d===$.E){a.$2(b,c) -return}A.qs(null,null,this,a,b,c,t.H,d,e)}catch(q){s=A.T(q) -r=A.a1(q) -A.ne(t.K.a(s),t.l.a(r))}}, -fD(a,b){return new A.mO(this,b.h("0()").a(a),b)}, -co(a){return new A.mN(this,t.M.a(a))}, -dG(a,b){return new A.mP(this,b.h("~(0)").a(a),b)}, -dP(a,b){A.ne(a,t.l.a(b))}, -cL(a,b){b.h("0()").a(a) -if($.E===B.d)return a.$0() -return A.qr(null,null,this,a,b)}, -cM(a,b,c,d){c.h("@<0>").t(d).h("1(2)").a(a) -d.a(b) -if($.E===B.d)return a.$1(b) -return A.qt(null,null,this,a,b,c,d)}, -hx(a,b,c,d,e,f){d.h("@<0>").t(e).t(f).h("1(2,3)").a(a) -e.a(b) -f.a(c) -if($.E===B.d)return a.$2(b,c) -return A.qs(null,null,this,a,b,c,d,e,f)}, -cK(a,b){return b.h("0()").a(a)}, -bF(a,b,c){return b.h("@<0>").t(c).h("1(2)").a(a)}, -cJ(a,b,c,d){return b.h("@<0>").t(c).t(d).h("1(2,3)").a(a)}, -b_(a,b){t.fw.a(b) -return null}, -ao(a){A.ng(null,null,this,t.M.a(a))}, -dK(a,b){return A.pu(a,t.M.a(b))}} -A.mO.prototype={ -$0(){return this.a.cL(this.b,this.c)}, -$S(){return this.c.h("0()")}} -A.mN.prototype={ -$0(){return this.a.e1(this.b)}, -$S:0} -A.mP.prototype={ -$1(a){var s=this.c -return this.a.cN(this.b,s.a(a),s)}, -$S(){return this.c.h("~(0)")}} -A.em.prototype={ -gC(a){var s=this,r=new A.ct(s,s.r,s.$ti.h("ct<1>")) -r.c=s.e -return r}, -gk(a){return this.a}, -N(a,b){var s,r -if(b!=="__proto__"){s=this.b -if(s==null)return!1 -return t.g.a(s[b])!=null}else{r=this.eO(b) -return r}}, -eO(a){var s=this.d -if(s==null)return!1 -return this.c7(s[B.b.gA(a)&1073741823],a)>=0}, -gv(a){var s=this.e -if(s==null)throw A.b(A.K("No elements")) -return this.$ti.c.a(s.a)}, -m(a,b){var s,r,q=this -q.$ti.c.a(b) -if(typeof b=="string"&&b!=="__proto__"){s=q.b -return q.d0(s==null?q.b=A.ok():s,b)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c -return q.d0(r==null?q.c=A.ok():r,b)}else return q.eK(0,b)}, -eK(a,b){var s,r,q,p=this -p.$ti.c.a(b) -s=p.d -if(s==null)s=p.d=A.ok() -r=J.bm(b)&1073741823 -q=s[r] -if(q==null)s[r]=[p.c0(b)] -else{if(p.c7(q,b)>=0)return!1 -q.push(p.c0(b))}return!0}, -J(a,b){var s -if(b!=="__proto__")return this.eL(this.b,b) -else{s=this.ff(0,b) -return s}}, -ff(a,b){var s,r,q,p,o=this.d -if(o==null)return!1 -s=B.b.gA(b)&1073741823 -r=o[s] -q=this.c7(r,b) -if(q<0)return!1 -p=r.splice(q,1)[0] -if(0===r.length)delete o[s] -this.d2(p) -return!0}, -d0(a,b){this.$ti.c.a(b) -if(t.g.a(a[b])!=null)return!1 -a[b]=this.c0(b) -return!0}, -eL(a,b){var s -if(a==null)return!1 -s=t.g.a(a[b]) -if(s==null)return!1 -this.d2(s) -delete a[b] -return!0}, -d1(){this.r=this.r+1&1073741823}, -c0(a){var s,r=this,q=new A.ia(r.$ti.c.a(a)) -if(r.e==null)r.e=r.f=q -else{s=r.f -s.toString -q.c=s -r.f=s.b=q}++r.a -r.d1() -return q}, -d2(a){var s=this,r=a.c,q=a.b -if(r==null)s.e=q -else r.b=q -if(q==null)s.f=r -else q.c=r;--s.a -s.d1()}, -c7(a,b){var s,r -if(a==null)return-1 -s=a.length -for(r=0;r"))}, -gk(a){return this.b}, -gv(a){var s -if(this.b===0)throw A.b(A.K("No such element")) -s=this.c -s.toString -return s}, -ga6(a){var s -if(this.b===0)throw A.b(A.K("No such element")) -s=this.c.c -s.toString -return s}, -gY(a){return this.b===0}, -cb(a,b,c){var s=this,r=s.$ti -r.h("1?").a(a) -r.c.a(b) -if(b.a!=null)throw A.b(A.K("LinkedListEntry is already in a LinkedList"));++s.a -b.sdf(s) -if(s.b===0){b.sai(b) -b.saV(b) -s.sc8(b);++s.b -return}r=a.c -r.toString -b.saV(r) -b.sai(a) -r.sai(b) -a.saV(b);++s.b}, -ck(a){var s,r,q=this,p=null -q.$ti.c.a(a);++q.a -a.b.saV(a.c) -s=a.c -r=a.b -s.sai(r);--q.b -a.saV(p) -a.sai(p) -a.sdf(p) -if(q.b===0)q.sc8(p) -else if(a===q.c)q.sc8(r)}, -sc8(a){this.c=this.$ti.h("1?").a(a)}} -A.en.prototype={ -gq(a){var s=this.c -return s==null?this.$ti.c.a(s):s}, -n(){var s=this,r=s.a -if(s.b!==r.a)throw A.b(A.ar(s)) -if(r.b!==0)r=s.e&&s.d===r.gv(r) -else r=!0 -if(r){s.saa(null) -return!1}s.e=!0 -s.saa(s.d) -s.sai(s.d.b) -return!0}, -saa(a){this.c=this.$ti.h("1?").a(a)}, -sai(a){this.d=this.$ti.h("1?").a(a)}, -$iL:1} -A.af.prototype={ -gb4(){var s=this.a -if(s==null||this===s.gv(s))return null -return this.c}, -sdf(a){this.a=A.B(this).h("cP?").a(a)}, -sai(a){this.b=A.B(this).h("af.E?").a(a)}, -saV(a){this.c=A.B(this).h("af.E?").a(a)}} -A.i.prototype={ -gC(a){return new A.b5(a,this.gk(a),A.a3(a).h("b5"))}, -u(a,b){return this.i(a,b)}, -B(a,b){var s,r -A.a3(a).h("~(i.E)").a(b) -s=this.gk(a) -for(r=0;r").t(c).h("ag<1,2>"))}, -Z(a,b){return A.e5(a,b,null,A.a3(a).h("i.E"))}, -br(a,b){return new A.b1(a,A.a3(a).h("@").t(b).h("b1<1,2>"))}, -cs(a,b,c,d){var s -A.a3(a).h("i.E?").a(d) -A.bt(b,c,this.gk(a)) -for(s=b;s").a(d) -A.bt(b,c,this.gk(a)) -s=c-b -if(s===0)return -A.aP(e,"skipCount") -if(o.h("n").b(d)){r=e -q=d}else{q=J.nJ(d,e).aI(0,!1) -r=0}o=J.V(q) -if(r+s>o.gk(q))throw A.b(A.p8()) -if(r=0;--p)this.j(a,b+p,o.i(q,r+p)) -else for(p=0;p").a(c) -if(t.j.b(c))this.U(a,b,b+c.length,c) -else for(s=J.aq(c);s.n();b=r){r=b+1 -this.j(a,b,s.gq(s))}}, -l(a){return A.nN(a,"[","]")}, -$il:1, -$ie:1, -$in:1} -A.D.prototype={ -B(a,b){var s,r,q,p=A.a3(a) -p.h("~(D.K,D.V)").a(b) -for(s=J.aq(this.gH(a)),p=p.h("D.V");s.n();){r=s.gq(s) -q=this.i(a,r) -b.$2(r,q==null?p.a(q):q)}}, -gaz(a){return J.oU(this.gH(a),new A.jR(a),A.a3(a).h("a6"))}, -he(a,b,c,d){var s,r,q,p,o,n=A.a3(a) -n.t(c).t(d).h("a6<1,2>(D.K,D.V)").a(b) -s=A.X(c,d) -for(r=J.aq(this.gH(a)),n=n.h("D.V");r.n();){q=r.gq(r) -p=this.i(a,q) -o=b.$2(q,p==null?n.a(p):p) -s.j(0,o.a,o.b)}return s}, -D(a,b){return J.nI(this.gH(a),b)}, -gk(a){return J.Z(this.gH(a))}, -gO(a){var s=A.a3(a) -return new A.eo(a,s.h("@").t(s.h("D.V")).h("eo<1,2>"))}, -l(a){return A.fI(a)}, -$iJ:1} -A.jR.prototype={ -$1(a){var s=this.a,r=A.a3(s) -r.h("D.K").a(a) -s=J.ad(s,a) -if(s==null)s=r.h("D.V").a(s) -return new A.a6(a,s,r.h("@").t(r.h("D.V")).h("a6<1,2>"))}, -$S(){return A.a3(this.a).h("a6(D.K)")}} -A.jS.prototype={ -$2(a,b){var s,r=this.a -if(!r.a)this.b.a+=", " -r.a=!1 -r=this.b -s=r.a+=A.t(a) -r.a=s+": " -r.a+=A.t(b)}, -$S:52} -A.d4.prototype={} -A.eo.prototype={ -gk(a){return J.Z(this.a)}, -gv(a){var s=this.a,r=J.ac(s) -s=r.i(s,J.bK(r.gH(s))) -return s==null?this.$ti.z[1].a(s):s}, -gC(a){var s=this.a,r=this.$ti -return new A.ep(J.aq(J.oT(s)),s,r.h("@<1>").t(r.z[1]).h("ep<1,2>"))}} -A.ep.prototype={ -n(){var s=this,r=s.a -if(r.n()){s.saa(J.ad(s.b,r.gq(r))) -return!0}s.saa(null) -return!1}, -gq(a){var s=this.c -return s==null?this.$ti.z[1].a(s):s}, -saa(a){this.c=this.$ti.h("2?").a(a)}, -$iL:1} -A.c1.prototype={} -A.cQ.prototype={ -i(a,b){return this.a.i(0,b)}, -D(a,b){return this.a.D(0,b)}, -B(a,b){this.a.B(0,this.$ti.h("~(1,2)").a(b))}, -gk(a){return this.a.a}, -gH(a){var s=this.a -return new A.b4(s,s.$ti.h("b4<1>"))}, -l(a){return A.fI(this.a)}, -gO(a){var s=this.a -return s.gO(s)}, -gaz(a){var s=this.a -return s.gaz(s)}, -$iJ:1} -A.e7.prototype={} -A.cV.prototype={ -af(a,b,c){var s=this.$ti -return new A.c8(this,s.t(c).h("1(2)").a(b),s.h("@<1>").t(c).h("c8<1,2>"))}, -l(a){return A.nN(this,"{","}")}, -Z(a,b){return A.pp(this,b,this.$ti.c)}, -gv(a){var s,r=A.pL(this,this.r,this.$ti.c) -if(!r.n())throw A.b(A.bq()) -s=r.d -return s==null?r.$ti.c.a(s):s}, -u(a,b){var s,r,q,p=this -A.aP(b,"index") -s=A.pL(p,p.r,p.$ti.c) -for(r=b;s.n();){if(r===0){q=s.d -return q==null?s.$ti.c.a(q):q}--r}throw A.b(A.W(b,b-r,p,null,"index"))}, -$il:1, -$ie:1, -$inX:1} -A.ew.prototype={} -A.dj.prototype={} -A.li.prototype={ -$0(){var s,r -try{s=new TextDecoder("utf-8",{fatal:true}) -return s}catch(r){}return null}, -$S:17} -A.lh.prototype={ -$0(){var s,r -try{s=new TextDecoder("utf-8",{fatal:false}) -return s}catch(r){}return null}, -$S:17} -A.f4.prototype={ -hl(a2,a3,a4,a5){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a0="Invalid base64 encoding length ",a1=a3.length -a5=A.bt(a4,a5,a1) -s=$.r7() -for(r=s.length,q=a4,p=q,o=null,n=-1,m=-1,l=0;q=0&&e=0){if(!(d<64))return A.c(a,d) -e=a.charCodeAt(d) -if(e===j)continue -j=e}else{if(d===-1){if(n<0){g=o==null?null:o.a.length -if(g==null)g=0 -n=g+(q-p) -m=q}++l -if(j===61)continue}j=e}if(d!==-2){if(o==null){o=new A.aj("") -g=o}else g=o -g.a+=B.b.p(a3,p,q) -g.a+=A.bf(j) -p=k -continue}}throw A.b(A.ae("Invalid base64 data",a3,q))}if(o!=null){a1=o.a+=B.b.p(a3,p,a5) -r=a1.length -if(n>=0)A.oV(a3,m,a5,n,l,r) -else{c=B.c.a7(r-1,4)+1 -if(c===1)throw A.b(A.ae(a0,a3,a5)) -for(;c<4;){a1+="=" -o.a=a1;++c}}a1=o.a -return B.b.aG(a3,a4,a5,a1.charCodeAt(0)==0?a1:a1)}b=a5-a4 -if(n>=0)A.oV(a3,m,a5,n,l,b) -else{c=B.c.a7(b,4) -if(c===1)throw A.b(A.ae(a0,a3,a5)) -if(c>1)a3=B.b.aG(a3,a5,a5,c===2?"==":"=")}return a3}} -A.js.prototype={} -A.ax.prototype={} -A.ff.prototype={} -A.fq.prototype={} -A.e8.prototype={ -aZ(a,b){t.L.a(b) -return B.t.a4(b)}, -gaw(){return B.V}} -A.lj.prototype={ -a4(a){var s,r,q,p,o=a.length,n=A.bt(0,null,o),m=n-0 -if(m===0)return new Uint8Array(0) -s=m*3 -r=new Uint8Array(s) -q=new A.mZ(r) -if(q.f_(a,0,n)!==n){p=n-1 -if(!(p>=0&&p>>18|240 -q=n.b=p+1 -if(!(p>>12&63|128 -p=n.b=q+1 -if(!(q>>6&63|128 -n.b=p+1 -if(!(p=0&&s=r)break -l.b=n+1 -s[n]=o}else{n=o&64512 -if(n===55296){if(l.b+4>r)break -n=p+1 -if(!(nr)break -l.cl()}else if(o<=2047){n=l.b -m=n+1 -if(m>=r)break -l.b=m -if(!(n>>6|192 -l.b=m+1 -s[m]=o&63|128}else{n=l.b -if(n+2>=r)break -m=l.b=n+1 -if(!(n>>12|224 -n=l.b=m+1 -if(!(m>>6&63|128 -l.b=n+1 -if(!(n1000){s=B.c.G(b+c,2) -r=q.c2(a,b,s,!1) -if((q.b&1)!==0)return r -return r+q.c2(a,s,c,d)}return q.fM(a,b,c,d)}, -fM(a,b,a0,a1){var s,r,q,p,o,n,m,l,k=this,j="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHIHHHJEEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBKCCCCCCCCCCCCDCLONNNMEEEEEEEEEEE",i=" \x000:XECCCCCN:lDb \x000:XECCCCCNvlDb \x000:XECCCCCN:lDb AAAAA\x00\x00\x00\x00\x00AAAAA00000AAAAA:::::AAAAAGG000AAAAA00KKKAAAAAG::::AAAAA:IIIIAAAAA000\x800AAAAA\x00\x00\x00\x00 AAAAA",h=65533,g=k.b,f=k.c,e=new A.aj(""),d=b+1,c=a.length -if(!(b>=0&&b=0&&s<256))return A.c(j,s) -q=j.charCodeAt(s)&31 -f=g<=32?s&61694>>>q:(s&63|f<<6)>>>0 -p=g+q -if(!(p>=0&&p<144))return A.c(i,p) -g=i.charCodeAt(p) -if(g===0){e.a+=A.bf(f) -if(d===a0)break $label0$0 -break}else if((g&1)!==0){if(r)switch(g){case 69:case 67:e.a+=A.bf(h) -break -case 65:e.a+=A.bf(h);--d -break -default:p=e.a+=A.bf(h) -e.a=p+A.bf(h) -break}else{k.b=g -k.c=d-1 -return""}g=0}if(d===a0)break $label0$0 -o=d+1 -if(!(d>=0&&d=0&&d=0&&o=128){n=m-1 -o=m -break}o=m}if(n-d<20)for(l=d;l32)if(r)e.a+=A.bf(h) -else{k.b=77 -k.c=a0 -return""}k.b=g -k.c=f -c=e.a -return c.charCodeAt(0)==0?c:c}} -A.a8.prototype={ -a8(a){var s,r,q=this,p=q.c -if(p===0)return q -s=!q.a -r=q.b -p=A.aX(p,r) -return new A.a8(p===0?!1:s,r,p)}, -eU(a){var s,r,q,p,o,n,m,l,k=this,j=k.c -if(j===0)return $.bJ() -s=j-a -if(s<=0)return k.a?$.oM():$.bJ() -r=k.b -q=new Uint16Array(s) -for(p=r.length,o=a;o=0&&o=0&&r>>0!==0)return l.aP(0,$.jc()) -for(k=0;k=0)return q.b9(b,r) -return b.b9(q,!r)}, -aP(a,b){var s,r,q=this,p=q.c -if(p===0)return b.a8(0) -s=b.c -if(s===0)return q -r=q.a -if(r!==b.a)return q.bS(b,r) -if(A.lA(q.b,p,b.b,s)>=0)return q.b9(b,r) -return b.b9(q,!r)}, -b8(a,b){var s,r,q,p,o,n,m,l=this.c,k=b.c -if(l===0||k===0)return $.bJ() -s=l+k -r=this.b -q=b.b -p=new Uint16Array(s) -for(o=q.length,n=0;n0?p.a8(0):p}, -fe(a){var s,r,q,p=this -if(p.c0)q=q.aN(0,$.of.V()) -return p.a&&q.c>0?q.a8(0):q}, -d6(a0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b=this,a=b.c -if(a===$.pF&&a0.c===$.pH&&b.b===$.pE&&a0.b===$.pG)return -s=a0.b -r=a0.c -q=r-1 -if(!(q>=0&&q0){o=new Uint16Array(r+5) -n=A.pD(s,r,p,o) -m=new Uint16Array(a+5) -l=A.pD(b.b,a,p,m)}else{m=A.og(b.b,0,a,a+2) -n=r -o=s -l=a}q=n-1 -if(!(q>=0&&q=0){if(!(l>=0&&l=0&&l=0&&n0;){c=A.tX(k,m,d);--j -A.pI(c,e,0,m,j,n) -if(!(d>=0&&d=m.length)return A.c(m,0) -return B.c.l(-m[0])}m=n.b -if(0>=m.length)return A.c(m,0) -return B.c.l(m[0])}s=A.u([],t.s) -m=n.a -r=m?n.a8(0):n -for(;r.c>1;){q=$.oL() -if(q.c===0)A.Q(B.N) -p=r.fe(q).l(0) -B.a.m(s,p) -o=p.length -if(o===1)B.a.m(s,"000") -if(o===2)B.a.m(s,"00") -if(o===3)B.a.m(s,"0") -r=r.eT(q)}q=r.b -if(0>=q.length)return A.c(q,0) -B.a.m(s,B.c.l(q[0])) -if(m)B.a.m(s,"-") -return new A.dX(s,t.hF).hb(0)}, -$icA:1, -$ial:1} -A.lB.prototype={ -$2(a,b){a=a+b&536870911 -a=a+((a&524287)<<10)&536870911 -return a^a>>>6}, -$S:3} -A.lC.prototype={ -$1(a){a=a+((a&67108863)<<3)&536870911 -a^=a>>>11 -return a+((a&16383)<<15)&536870911}, -$S:11} -A.i0.prototype={} -A.jY.prototype={ -$2(a,b){var s,r,q -t.bR.a(a) -s=this.b -r=this.a -q=s.a+=r.a -q+=a.a -s.a=q -s.a=q+": " -s.a+=A.ca(b) -r.a=", "}, -$S:38} -A.bP.prototype={ -K(a,b){if(b==null)return!1 -return b instanceof A.bP&&this.a===b.a&&this.b===b.b}, -a0(a,b){return B.c.a0(this.a,t.cs.a(b).a)}, -gA(a){var s=this.a -return(s^B.c.R(s,30))&1073741823}, -l(a){var s=this,r=A.rH(A.tf(s)),q=A.fm(A.td(s)),p=A.fm(A.t9(s)),o=A.fm(A.ta(s)),n=A.fm(A.tc(s)),m=A.fm(A.te(s)),l=A.rI(A.tb(s)),k=r+"-"+q -if(s.b)return k+"-"+p+" "+o+":"+n+":"+m+"."+l+"Z" -else return k+"-"+p+" "+o+":"+n+":"+m+"."+l}, -$ial:1} -A.bQ.prototype={ -K(a,b){if(b==null)return!1 -return b instanceof A.bQ&&this.a===b.a}, -gA(a){return B.c.gA(this.a)}, -a0(a,b){return B.c.a0(this.a,t.jS.a(b).a)}, -l(a){var s,r,q,p,o,n=this.a,m=B.c.G(n,36e8),l=n%36e8 -if(n<0){m=0-m -n=0-l -s="-"}else{n=l -s=""}r=B.c.G(n,6e7) -n%=6e7 -q=r<10?"0":"" -p=B.c.G(n,1e6) -o=p<10?"0":"" -return s+m+":"+q+r+":"+o+p+"."+B.b.ho(B.c.l(n%1e6),6,"0")}, -$ial:1} -A.lI.prototype={ -l(a){return this.eW()}} -A.R.prototype={ -gaO(){return A.a1(this.$thrownJsError)}} -A.dr.prototype={ -l(a){var s=this.a -if(s!=null)return"Assertion failed: "+A.ca(s) -return"Assertion failed"}} -A.by.prototype={} -A.bc.prototype={ -gc5(){return"Invalid argument"+(!this.a?"(s)":"")}, -gc4(){return""}, -l(a){var s=this,r=s.c,q=r==null?"":" ("+r+")",p=s.d,o=p==null?"":": "+A.t(p),n=s.gc5()+q+o -if(!s.a)return n -return n+s.gc4()+": "+A.ca(s.gcA())}, -gcA(){return this.b}} -A.cU.prototype={ -gcA(){return A.uC(this.b)}, -gc5(){return"RangeError"}, -gc4(){var s,r=this.e,q=this.f -if(r==null)s=q!=null?": Not less than or equal to "+A.t(q):"" -else if(q==null)s=": Not greater than or equal to "+A.t(r) -else if(q>r)s=": Not in inclusive range "+A.t(r)+".."+A.t(q) -else s=qe.length -else s=!1 -if(s)f=null -if(f==null){if(e.length>78)e=B.b.p(e,0,75)+"..." -return g+"\n"+e}for(r=e.length,q=1,p=0,o=!1,n=0;n1?g+(" (at line "+q+", character "+(f-p+1)+")\n"):g+(" (at character "+(f+1)+")\n") -for(n=f;n=0))return A.c(e,n) -m=e.charCodeAt(n) -if(m===10||m===13){r=n -break}}if(r-p>78)if(f-p<75){l=p+75 -k=p -j="" -i="..."}else{if(r-f<75){k=r-75 -l=r -i=""}else{k=f-36 -l=f+36 -i="..."}j="..."}else{l=r -k=p -j="" -i=""}return g+j+B.b.p(e,k,l)+i+"\n"+B.b.b8(" ",f-k+j.length)+"^\n"}else return f!=null?g+(" (at offset "+A.t(f)+")"):g}} -A.fA.prototype={ -gaO(){return null}, -l(a){return"IntegerDivisionByZeroException"}, -$iR:1} -A.e.prototype={ -br(a,b){return A.f8(this,A.B(this).h("e.E"),b)}, -af(a,b,c){var s=A.B(this) -return A.pg(this,s.t(c).h("1(e.E)").a(b),s.h("e.E"),c)}, -N(a,b){var s -for(s=this.gC(this);s.n();)if(J.a4(s.gq(s),b))return!0 -return!1}, -B(a,b){var s -A.B(this).h("~(e.E)").a(b) -for(s=this.gC(this);s.n();)b.$1(s.gq(s))}, -aI(a,b){return A.fG(this,b,A.B(this).h("e.E"))}, -e4(a){return this.aI(a,!0)}, -gk(a){var s,r=this.gC(this) -for(s=0;r.n();)++s -return s}, -gY(a){return!this.gC(this).n()}, -Z(a,b){return A.pp(this,b,A.B(this).h("e.E"))}, -gv(a){var s=this.gC(this) -if(!s.n())throw A.b(A.bq()) -return s.gq(s)}, -u(a,b){var s,r -A.aP(b,"index") -s=this.gC(this) -for(r=b;s.n();){if(r===0)return s.gq(s);--r}throw A.b(A.W(b,b-r,this,null,"index"))}, -l(a){return A.rT(this,"(",")")}} -A.a6.prototype={ -l(a){return"MapEntry("+A.t(this.a)+": "+A.t(this.b)+")"}} -A.P.prototype={ -gA(a){return A.r.prototype.gA.call(this,this)}, -l(a){return"null"}} -A.r.prototype={$ir:1, -K(a,b){return this===b}, -gA(a){return A.dU(this)}, -l(a){return"Instance of '"+A.k4(this)+"'"}, -dV(a,b){throw A.b(A.pi(this,t.bg.a(b)))}, -gF(a){return A.qF(this)}, -toString(){return this.l(this)}} -A.iJ.prototype={ -l(a){return""}, -$iaG:1} -A.aj.prototype={ -gk(a){return this.a.length}, -l(a){var s=this.a -return s.charCodeAt(0)==0?s:s}, -$itI:1} -A.ld.prototype={ -$2(a,b){throw A.b(A.ae("Illegal IPv4 address, "+a,this.a,b))}, -$S:39} -A.le.prototype={ -$2(a,b){throw A.b(A.ae("Illegal IPv6 address, "+a,this.a,b))}, -$S:43} -A.lf.prototype={ -$2(a,b){var s -if(b-a>4)this.a.$2("an IPv6 part can only contain a maximum of 4 hex digits",a) -s=A.nu(B.b.p(this.b,a,b),16) -if(s<0||s>65535)this.a.$2("each part must be in the range of `0x0..0xFFFF`",a) -return s}, -$S:3} -A.eK.prototype={ -gdv(){var s,r,q,p,o=this,n=o.w -if(n===$){s=o.a -r=s.length!==0?""+s+":":"" -q=o.c -p=q==null -if(!p||s==="file"){s=r+"//" -r=o.b -if(r.length!==0)s=s+r+"@" -if(!p)s+=q -r=o.d -if(r!=null)s=s+":"+A.t(r)}else s=r -s+=o.e -r=o.f -if(r!=null)s=s+"?"+r -r=o.r -if(r!=null)s=s+"#"+r -n!==$&&A.ja("_text") -n=o.w=s.charCodeAt(0)==0?s:s}return n}, -gcF(){var s,r,q,p=this,o=p.x -if(o===$){s=p.e -r=s.length -if(r!==0){if(0>=r)return A.c(s,0) -r=s.charCodeAt(0)===47}else r=!1 -if(r)s=B.b.a_(s,1) -q=s.length===0?B.B:A.dL(new A.ag(A.u(s.split("/"),t.s),t.ha.a(A.vo()),t.iZ),t.N) -p.x!==$&&A.ja("pathSegments") -p.sez(q) -o=q}return o}, -gA(a){var s,r=this,q=r.y -if(q===$){s=B.b.gA(r.gdv()) -r.y!==$&&A.ja("hashCode") -r.y=s -q=s}return q}, -ge6(){return this.b}, -gb1(a){var s=this.c -if(s==null)return"" -if(B.b.M(s,"["))return B.b.p(s,1,s.length-1) -return s}, -gcH(a){var s=this.d -return s==null?A.pZ(this.a):s}, -ge0(a){var s=this.f -return s==null?"":s}, -gdO(){var s=this.r -return s==null?"":s}, -gdT(){if(this.a!==""){var s=this.r -s=(s==null?"":s)===""}else s=!1 -return s}, -gcu(){return this.c!=null}, -gdS(){return this.f!=null}, -gdR(){return this.r!=null}, -gdQ(){return B.b.M(this.e,"/")}, -hz(){var s,r=this,q=r.a -if(q!==""&&q!=="file")throw A.b(A.F("Cannot extract a file path from a "+q+" URI")) -q=r.f -if((q==null?"":q)!=="")throw A.b(A.F("Cannot extract a file path from a URI with a query component")) -q=r.r -if((q==null?"":q)!=="")throw A.b(A.F("Cannot extract a file path from a URI with a fragment component")) -q=$.r9() -if(q)q=A.uw(r) -else{if(r.c!=null&&r.gb1(r)!=="")A.Q(A.F("Cannot extract a non-Windows file path from a file URI with an authority")) -s=r.gcF() -A.up(s,!1) -q=A.l8(B.b.M(r.e,"/")?""+"/":"",s,"/") -q=q.charCodeAt(0)==0?q:q}return q}, -l(a){return this.gdv()}, -K(a,b){var s,r,q=this -if(b==null)return!1 -if(q===b)return!0 -if(t.jJ.b(b))if(q.a===b.gbR())if(q.c!=null===b.gcu())if(q.b===b.ge6())if(q.gb1(q)===b.gb1(b))if(q.gcH(q)===b.gcH(b))if(q.e===b.gcE(b)){s=q.f -r=s==null -if(!r===b.gdS()){if(r)s="" -if(s===b.ge0(b)){s=q.r -r=s==null -if(!r===b.gdR()){if(r)s="" -s=s===b.gdO()}else s=!1}else s=!1}else s=!1}else s=!1 -else s=!1 -else s=!1 -else s=!1 -else s=!1 -else s=!1 -else s=!1 -return s}, -sez(a){this.x=t.a.a(a)}, -$ihu:1, -gbR(){return this.a}, -gcE(a){return this.e}} -A.lc.prototype={ -ge5(){var s,r,q,p,o=this,n=null,m=o.c -if(m==null){m=o.b -if(0>=m.length)return A.c(m,0) -s=o.a -m=m[0]+1 -r=B.b.ak(s,"?",m) -q=s.length -if(r>=0){p=A.eL(s,r+1,q,B.o,!1,!1) -q=r}else p=n -m=o.c=new A.hS("data","",n,n,A.eL(s,m,q,B.z,!1,!1),p,n)}return m}, -l(a){var s,r=this.b -if(0>=r.length)return A.c(r,0) -s=this.a -return r[0]===-1?"data:"+s:s}} -A.n7.prototype={ -$2(a,b){var s=this.a -if(!(a=q)return A.c(b,0) -s=b.charCodeAt(0) -if(1>=q)return A.c(b,1) -r=b.charCodeAt(1) -for(;s<=r;++s){q=(s^96)>>>0 -if(!(q<96))return A.c(a,q) -a[q]=c}}, -$S:15} -A.ix.prototype={ -gcu(){return this.c>0}, -gh2(){return this.c>0&&this.d+10&&this.r>=this.a.length}, -gbR(){var s=this.w -return s==null?this.w=this.eN():s}, -eN(){var s,r=this,q=r.b -if(q<=0)return"" -s=q===4 -if(s&&B.b.M(r.a,"http"))return"http" -if(q===5&&B.b.M(r.a,"https"))return"https" -if(s&&B.b.M(r.a,"file"))return"file" -if(q===7&&B.b.M(r.a,"package"))return"package" -return B.b.p(r.a,0,q)}, -ge6(){var s=this.c,r=this.b+3 -return s>r?B.b.p(this.a,r,s-1):""}, -gb1(a){var s=this.c -return s>0?B.b.p(this.a,s,this.d):""}, -gcH(a){var s,r=this -if(r.gh2())return A.nu(B.b.p(r.a,r.d+1,r.e),null) -s=r.b -if(s===4&&B.b.M(r.a,"http"))return 80 -if(s===5&&B.b.M(r.a,"https"))return 443 -return 0}, -gcE(a){return B.b.p(this.a,this.e,this.f)}, -ge0(a){var s=this.f,r=this.r -return s=0&&q>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){t.q.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){A.U(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){t.W.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){t.G.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){t.ib.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){t.G.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){t.d8.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){t.ls.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){t.cA.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){t.gJ.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){t.dR.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){t.ki.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){t.d5.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -return a[b]}, -j(a,b,c){t.ef.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){if(a.length>0)return a[0] -throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){t.G.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){t.hI.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b>>0!==b||b>=s -r.toString -if(r)throw A.b(A.W(b,s,a,null,null)) -s=a[b] -s.toString -return s}, -j(a,b,c){t.lv.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s -if(a.length>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){if(!(b>=0&&b"))}, -L(a,b,c,d,e){A.a3(a).h("e").a(d) -throw A.b(A.F("Cannot setRange on immutable List."))}, -U(a,b,c,d){return this.L(a,b,c,d,0)}} -A.dC.prototype={ -n(){var s=this,r=s.c+1,q=s.b -if(r=4)A.Q(p.bV()) -if((r&1)!==0)p.bn(q) -else if((r&3)===0)p.c3().m(0,new A.cq(q,s.h("cq<1>")))}}, -$S:2} -A.bu.prototype={$ibu:1} -A.e6.prototype={$ie6:1} -A.bA.prototype={$ibA:1} -A.nB.prototype={ -$1(a){return this.a.W(0,this.b.h("0/?").a(a))}, -$S:5} -A.nC.prototype={ -$1(a){if(a==null)return this.a.ae(new A.jZ(a===undefined)) -return this.a.ae(a)}, -$S:5} -A.jZ.prototype={ -l(a){return"Promise was rejected with a value of `"+(this.a?"undefined":"null")+"`."}} -A.i7.prototype={ -ew(){var s=self.crypto -if(s!=null)if(s.getRandomValues!=null)return -throw A.b(A.F("No source of cryptographically secure random numbers available."))}, -dU(a){var s,r,q,p,o,n,m,l,k,j=null -if(a<=0||a>4294967296)throw A.b(new A.cU(j,j,!1,j,j,"max must be in range 0 < max \u2264 2^32, was "+a)) -if(a>255)if(a>65535)s=a>16777215?4:3 -else s=2 -else s=1 -r=this.a -B.G.fo(r,0,0,!1) -q=4-s -p=A.h(Math.pow(256,s)) -for(o=a-1,n=(a&o)===0;!0;){m=r.buffer -m=new Uint8Array(m,q,s) -crypto.getRandomValues(m) -l=B.G.f0(r,0,!1) -if(n)return(l&o)>>>0 -k=l%a -if(l-k+a>>0!==b||b>=s -s.toString -if(s)throw A.b(A.W(b,this.gk(a),a,null,null)) -s=a.getItem(b) -s.toString -return s}, -j(a,b,c){t.kT.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s=a.length -s.toString -if(s>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){return this.i(a,b)}, -$il:1, -$ie:1, -$in:1} -A.aN.prototype={$iaN:1} -A.fW.prototype={ -gk(a){var s=a.length -s.toString -return s}, -i(a,b){var s=a.length -s.toString -s=b>>>0!==b||b>=s -s.toString -if(s)throw A.b(A.W(b,this.gk(a),a,null,null)) -s=a.getItem(b) -s.toString -return s}, -j(a,b,c){t.ai.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s=a.length -s.toString -if(s>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){return this.i(a,b)}, -$il:1, -$ie:1, -$in:1} -A.h0.prototype={ -gk(a){return a.length}} -A.hh.prototype={ -gk(a){var s=a.length -s.toString -return s}, -i(a,b){var s=a.length -s.toString -s=b>>>0!==b||b>=s -s.toString -if(s)throw A.b(A.W(b,this.gk(a),a,null,null)) -s=a.getItem(b) -s.toString -return s}, -j(a,b,c){A.U(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s=a.length -s.toString -if(s>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){return this.i(a,b)}, -$il:1, -$ie:1, -$in:1} -A.aR.prototype={$iaR:1} -A.ho.prototype={ -gk(a){var s=a.length -s.toString -return s}, -i(a,b){var s=a.length -s.toString -s=b>>>0!==b||b>=s -s.toString -if(s)throw A.b(A.W(b,this.gk(a),a,null,null)) -s=a.getItem(b) -s.toString -return s}, -j(a,b,c){t.hk.a(c) -throw A.b(A.F("Cannot assign element of immutable List."))}, -gv(a){var s=a.length -s.toString -if(s>0){s=a[0] -s.toString -return s}throw A.b(A.K("No elements"))}, -u(a,b){return this.i(a,b)}, -$il:1, -$ie:1, -$in:1} -A.i8.prototype={} -A.i9.prototype={} -A.ij.prototype={} -A.ik.prototype={} -A.iH.prototype={} -A.iI.prototype={} -A.iQ.prototype={} -A.iR.prototype={} -A.f1.prototype={ -gk(a){return a.length}} -A.f2.prototype={ -D(a,b){return A.aZ(a.get(b))!=null}, -i(a,b){return A.aZ(a.get(A.U(b)))}, -B(a,b){var s,r,q -t.u.a(b) -s=a.entries() -for(;!0;){r=s.next() -q=r.done -q.toString -if(q)return -q=r.value[0] -q.toString -b.$2(q,A.aZ(r.value[1]))}}, -gH(a){var s=A.u([],t.s) -this.B(a,new A.jq(s)) -return s}, -gO(a){var s=A.u([],t.C) -this.B(a,new A.jr(s)) -return s}, -gk(a){var s=a.size -s.toString -return s}, -$iJ:1} -A.jq.prototype={ -$2(a,b){return B.a.m(this.a,a)}, -$S:1} -A.jr.prototype={ -$2(a,b){return B.a.m(this.a,t.f.a(b))}, -$S:1} -A.f3.prototype={ -gk(a){return a.length}} -A.bL.prototype={} -A.fX.prototype={ -gk(a){return a.length}} -A.hN.prototype={} -A.fV.prototype={} -A.hs.prototype={} -A.fe.prototype={ -hc(a){var s,r,q,p,o,n,m,l,k,j -t.bq.a(a) -for(s=a.$ti,r=s.h("bh(e.E)").a(new A.jw()),q=a.gC(a),s=new A.cl(q,r,s.h("cl")),r=this.a,p=!1,o=!1,n="";s.n();){m=q.gq(q) -if(r.aD(m)&&o){l=A.pj(m,r) -k=n.charCodeAt(0)==0?n:n -n=B.b.p(k,0,r.aH(k,!0)) -l.b=n -if(r.b2(n))B.a.j(l.e,0,r.gaL()) -n=""+l.l(0)}else if(r.ag(m)>0){o=!r.aD(m) -n=""+m}else{j=m.length -if(j!==0){if(0>=j)return A.c(m,0) -j=r.cp(m[0])}else j=!1 -if(!j)if(p)n+=r.gaL() -n+=m}p=r.b2(m)}return n.charCodeAt(0)==0?n:n}, -dW(a,b){var s -if(!this.f7(b))return b -s=A.pj(b,this.a) -s.hk(0) -return s.l(0)}, -f7(a){var s,r,q,p,o,n,m,l,k=this.a,j=k.ag(a) -if(j!==0){if(k===$.jb())for(s=a.length,r=0;r=0))return A.c(s,r) -m=s.charCodeAt(r) -if(k.a5(m)){if(k===$.jb()&&m===47)return!0 -if(p!=null&&k.a5(p))return!0 -if(p===46)l=n==null||n===46||k.a5(n) -else l=!1 -if(l)return!0}}if(p==null)return!0 -if(k.a5(p))return!0 -if(p===46)k=n==null||k.a5(n)||n===46 -else k=!1 -if(k)return!0 -return!1}} -A.jw.prototype={ -$1(a){return A.U(a)!==""}, -$S:30} -A.nh.prototype={ -$1(a){A.oq(a) -return a==null?"null":'"'+a+'"'}, -$S:31} -A.cM.prototype={ -eg(a){var s,r=this.ag(a) -if(r>0)return B.b.p(a,0,r) -if(this.aD(a)){if(0>=a.length)return A.c(a,0) -s=a[0]}else s=null -return s}} -A.k1.prototype={ -hv(){var s,r,q=this -while(!0){s=q.d -if(!(s.length!==0&&J.a4(B.a.ga6(s),"")))break -s=q.d -if(0>=s.length)return A.c(s,-1) -s.pop() -s=q.e -if(0>=s.length)return A.c(s,-1) -s.pop()}s=q.e -r=s.length -if(r!==0)B.a.j(s,r-1,"")}, -hk(a){var s,r,q,p,o,n,m=this,l=A.u([],t.s) -for(s=m.d,r=s.length,q=0,p=0;p=n)return A.c(l,-1) -l.pop()}else ++q}else B.a.m(l,o)}if(m.b==null)B.a.h3(l,0,A.dK(q,"..",!1,t.N)) -if(l.length===0&&m.b==null)B.a.m(l,".") -m.shp(l) -s=m.a -m.seh(A.dK(l.length+1,s.gaL(),!0,t.N)) -r=m.b -if(r==null||l.length===0||!s.b2(r))B.a.j(m.e,0,"") -r=m.b -if(r!=null&&s===$.jb()){r.toString -m.b=A.vL(r,"/","\\")}m.hv()}, -l(a){var s,r,q,p=this,o=p.b -o=o!=null?""+o:"" -for(s=0;r=p.d,s=0))return A.c(a,s) -s=a.charCodeAt(s)!==47 -r=s}else r=!1 -return r}, -aH(a,b){var s=a.length -if(s!==0){if(0>=s)return A.c(a,0) -s=a.charCodeAt(0)===47}else s=!1 -if(s)return 1 -return 0}, -ag(a){return this.aH(a,!1)}, -aD(a){return!1}, -gaE(){return"posix"}, -gaL(){return"/"}} -A.hw.prototype={ -cp(a){return B.b.N(a,"/")}, -a5(a){return a===47}, -b2(a){var s,r=a.length -if(r===0)return!1 -s=r-1 -if(!(s>=0))return A.c(a,s) -if(a.charCodeAt(s)!==47)return!0 -return B.b.dL(a,"://")&&this.ag(a)===r}, -aH(a,b){var s,r,q,p,o=a.length -if(o===0)return 0 -if(0>=o)return A.c(a,0) -if(a.charCodeAt(0)===47)return 1 -for(s=0;s=s)return A.c(a,0) -s=a.charCodeAt(0)===47}else s=!1 -return s}, -gaE(){return"url"}, -gaL(){return"/"}} -A.hG.prototype={ -cp(a){return B.b.N(a,"/")}, -a5(a){return a===47||a===92}, -b2(a){var s,r=a.length -if(r===0)return!1 -s=r-1 -if(!(s>=0))return A.c(a,s) -s=a.charCodeAt(s) -return!(s===47||s===92)}, -aH(a,b){var s,r,q=a.length -if(q===0)return 0 -if(0>=q)return A.c(a,0) -if(a.charCodeAt(0)===47)return 1 -if(a.charCodeAt(0)===92){if(q>=2){if(1>=q)return A.c(a,1) -s=a.charCodeAt(1)!==92}else s=!0 -if(s)return 1 -r=B.b.ak(a,"\\",2) -if(r>0){r=B.b.ak(a,"\\",r+1) -if(r>0)return r}return q}if(q<3)return 0 -if(!A.qI(a.charCodeAt(0)))return 0 -if(a.charCodeAt(1)!==58)return 0 -q=a.charCodeAt(2) -if(!(q===47||q===92))return 0 -return 3}, -ag(a){return this.aH(a,!1)}, -aD(a){return this.ag(a)===1}, -gaE(){return"windows"}, -gaL(){return"\\"}} -A.nk.prototype={ -$1(a){return A.vg(a)}, -$S:32} -A.fk.prototype={ -l(a){return"DatabaseException("+this.a+")"}} -A.hb.prototype={ -l(a){return this.el(0)}, -bP(){var s=this.b -if(s==null){s=new A.kh(this).$0() -this.sfh(s)}return s}, -sfh(a){this.b=A.dl(a)}} -A.kh.prototype={ -$0(){var s=new A.ki(this.a.a.toLowerCase()),r=s.$1("(sqlite code ") -if(r!=null)return r -r=s.$1("(code ") -if(r!=null)return r -r=s.$1("code=") -if(r!=null)return r -return null}, -$S:33} -A.ki.prototype={ -$1(a){var s,r,q,p,o,n=this.a,m=B.b.cv(n,a) -if(!J.a4(m,-1))try{p=m -if(typeof p!=="number")return p.b7() -p=B.b.hA(B.b.a_(n,p+a.length)).split(" ") -if(0>=p.length)return A.c(p,0) -s=p[0] -r=J.rr(s,")") -if(!J.a4(r,-1))s=J.rw(s,0,r) -q=A.nU(s,null) -if(q!=null)return q}catch(o){}return null}, -$S:34} -A.jB.prototype={} -A.fs.prototype={ -l(a){return A.qF(this).l(0)+"("+this.a+", "+A.t(this.b)+")"}} -A.cF.prototype={} -A.bw.prototype={ -l(a){var s=this,r=t.N,q=t.X,p=A.X(r,q),o=s.x -if(o!=null){r=A.nR(o,r,q) -q=A.B(r) -q=q.h("@").t(q.h("D.V")) -o=q.h("r?") -o.a(r.J(0,"arguments")) -o.a(r.J(0,"sql")) -if(r.gha(r))p.j(0,"details",new A.du(r,q.h("du<1,2,j,r?>")))}r=s.bP()==null?"":": "+A.t(s.bP())+", " -r=""+("SqfliteFfiException("+s.w+r+", "+s.a+"})") -q=s.f -if(q!=null){r+=" sql "+q -q=s.r -q=q==null?null:!q.gY(q) -if(q===!0){q=s.r -q.toString -q=r+(" args "+A.qB(q)) -r=q}}else r+=" "+s.ep(0) -if(p.a!==0)r+=" "+p.l(0) -return r.charCodeAt(0)==0?r:r}, -sfO(a,b){this.x=t.h9.a(b)}} -A.kw.prototype={} -A.kx.prototype={} -A.e_.prototype={ -l(a){var s=this.a,r=this.b,q=this.c,p=q==null?null:!q.gY(q) -if(p===!0){q.toString -q=" "+A.qB(q)}else q="" -return A.t(s)+" "+(A.t(r)+q)}, -sek(a){this.c=t.kR.a(a)}} -A.iB.prototype={} -A.ip.prototype={ -E(){var s=0,r=A.y(t.H),q=1,p,o=this,n,m,l,k -var $async$E=A.z(function(a,b){if(a===1){p=b -s=q}while(true)switch(s){case 0:q=3 -s=6 -return A.o(o.a.$0(),$async$E) -case 6:n=b -o.b.W(0,n) -q=1 -s=5 -break -case 3:q=2 -k=p -m=A.T(k) -o.b.ae(m) -s=5 -break -case 2:s=1 -break -case 5:return A.w(null,r) -case 1:return A.v(p,r)}}) -return A.x($async$E,r)}} -A.aQ.prototype={ -e3(){var s=this -return A.aA(["path",s.r,"id",s.e,"readOnly",s.w,"singleInstance",s.f],t.N,t.X)}, -d9(){var s,r=this -if(r.dc()===0)return null -s=r.x.b -s=s.a.x2.$1(s.b) -s=self.Number(s==null?t.K.a(s):s) -if(r.y>=1)A.b_("[sqflite-"+r.e+"] Inserted "+A.t(s)) -return s}, -l(a){return A.fI(this.e3())}, -ad(a){var s=this -s.bc() -s.am("Closing database "+s.l(0)) -s.x.X()}, -c6(a){var s=a==null?null:new A.b1(a.a,a.$ti.h("b1<1,r?>")) -return s==null?B.C:s}, -fX(a,b){return this.d.a3(new A.kr(this,a,b),t.H)}, -ab(a,b){return this.f3(a,b)}, -f3(a,b){var s=0,r=A.y(t.H),q,p=[],o=this,n,m,l -var $async$ab=A.z(function(c,d){if(c===1)return A.v(d,r) -while(true)switch(s){case 0:o.cD(a,b) -m=b==null?null:!b.gY(b) -l=o.x -if(m===!0){n=l.cI(a) -try{n.dM(new A.ce(o.c6(b))) -s=1 -break}finally{n.X()}}else l.fQ(a) -case 1:return A.w(q,r)}}) -return A.x($async$ab,r)}, -am(a){if(a!=null&&this.y>=1)A.b_("[sqflite-"+this.e+"] "+A.t(a))}, -cD(a,b){var s -if(this.y>=1){s=b==null?null:!b.gY(b) -s=s===!0?" "+A.t(b):"" -A.b_("[sqflite-"+this.e+"] "+a+s) -this.am(null)}}, -bm(){var s=0,r=A.y(t.H),q=this -var $async$bm=A.z(function(a,b){if(a===1)return A.v(b,r) -while(true)switch(s){case 0:s=q.c.length!==0?2:3 -break -case 2:s=4 -return A.o(q.as.a3(new A.kp(q),t.P),$async$bm) -case 4:case 3:return A.w(null,r)}}) -return A.x($async$bm,r)}, -bc(){var s=0,r=A.y(t.H),q=this -var $async$bc=A.z(function(a,b){if(a===1)return A.v(b,r) -while(true)switch(s){case 0:s=q.c.length!==0?2:3 -break -case 2:s=4 -return A.o(q.as.a3(new A.kk(q),t.P),$async$bc) -case 4:case 3:return A.w(null,r)}}) -return A.x($async$bc,r)}, -b0(a,b){return this.h0(a,t.gq.a(b))}, -h0(a,b){var s=0,r=A.y(t.z),q,p=2,o,n=[],m=this,l -var $async$b0=A.z(function(c,d){if(c===1){o=d -s=p}while(true)switch(s){case 0:l=m.b -s=l==null?3:5 -break -case 3:s=6 -return A.o(b.$0(),$async$b0) -case 6:q=d -s=1 -break -s=4 -break -case 5:s=a===l||a===-1?7:9 -break -case 7:p=10 -s=13 -return A.o(b.$0(),$async$b0) -case 13:l=d -q=l -n=[1] -s=11 -break -n.push(12) -s=11 -break -case 10:n=[2] -case 11:p=2 -if(m.b==null)m.bm() -s=n.pop() -break -case 12:s=8 -break -case 9:l=new A.C($.E,t.D) -B.a.m(m.c,new A.ip(b,new A.cn(l,t.ou))) -q=l -s=1 -break -case 8:case 4:case 1:return A.w(q,r) -case 2:return A.v(o,r)}}) -return A.x($async$b0,r)}, -fY(a,b){return this.d.a3(new A.ks(this,a,b),t.I)}, -bf(a,b){var s=0,r=A.y(t.I),q,p=this,o -var $async$bf=A.z(function(c,d){if(c===1)return A.v(d,r) -while(true)switch(s){case 0:if(p.w)A.Q(A.hc("sqlite_error",null,"Database readonly",null)) -s=3 -return A.o(p.ab(a,b),$async$bf) -case 3:o=p.d9() -if(p.y>=1)A.b_("[sqflite-"+p.e+"] Inserted id "+A.t(o)) -q=o -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$bf,r)}, -h1(a,b){return this.d.a3(new A.kv(this,a,b),t.S)}, -bh(a,b){var s=0,r=A.y(t.S),q,p=this -var $async$bh=A.z(function(c,d){if(c===1)return A.v(d,r) -while(true)switch(s){case 0:if(p.w)A.Q(A.hc("sqlite_error",null,"Database readonly",null)) -s=3 -return A.o(p.ab(a,b),$async$bh) -case 3:q=p.dc() -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$bh,r)}, -fZ(a,b,c){return this.d.a3(new A.ku(this,a,c,b),t.z)}, -bg(a,b){return this.f4(a,b)}, -f4(a,b){var s=0,r=A.y(t.z),q,p=[],o=this,n,m,l,k -var $async$bg=A.z(function(c,d){if(c===1)return A.v(d,r) -while(true)switch(s){case 0:k=o.x.cI(a) -try{o.cD(a,b) -m=k -l=o.c6(b) -if(m.c.e)A.Q(A.K(u.f)) -m.au() -m.bW(new A.ce(l)) -n=m.fl() -o.am("Found "+n.d.length+" rows") -m=n -m=A.aA(["columns",m.a,"rows",m.d],t.N,t.X) -q=m -s=1 -break}finally{k.X()}case 1:return A.w(q,r)}}) -return A.x($async$bg,r)}, -dn(a){var s,r,q,p,o,n,m,l,k=a.a,j=k -try{s=a.d -r=s.a -q=A.u([],t.dO) -for(n=a.c;!0;){if(s.n()){m=s.x -m===$&&A.bk("current") -p=m -J.rh(q,p.b)}else{a.e=!0 -break}if(J.Z(q)>=n)break}o=A.aA(["columns",r,"rows",q],t.N,t.X) -if(!a.e)J.nH(o,"cursorId",k) -return o}catch(l){this.c_(j) -throw l}finally{if(a.e)this.c_(j)}}, -c9(a,b,c){var s=0,r=A.y(t.X),q,p=this,o,n,m,l,k -var $async$c9=A.z(function(d,e){if(d===1)return A.v(e,r) -while(true)switch(s){case 0:k=p.x.cI(b) -p.cD(b,c) -o=p.c6(c) -n=k.c -if(n.e)A.Q(A.K(u.f)) -k.au() -k.bW(new A.ce(o)) -o=k.gc1() -k.gdt() -m=new A.hI(k,o,B.E) -m.bX() -n.c=!1 -k.f=m -n=++p.Q -l=new A.iB(n,k,a,m) -p.z.j(0,n,l) -q=p.dn(l) -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$c9,r)}, -h_(a,b){return this.d.a3(new A.kt(this,b,a),t.z)}, -ca(a,b){var s=0,r=A.y(t.X),q,p=this,o,n -var $async$ca=A.z(function(c,d){if(c===1)return A.v(d,r) -while(true)switch(s){case 0:if(p.y>=2){o=a===!0?" (cancel)":"" -p.am("queryCursorNext "+b+o)}n=p.z.i(0,b) -if(a===!0){p.c_(b) -q=null -s=1 -break}if(n==null)throw A.b(A.K("Cursor "+b+" not found")) -q=p.dn(n) -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$ca,r)}, -c_(a){var s=this.z.J(0,a) -if(s!=null){if(this.y>=2)this.am("Closing cursor "+a) -s.b.X()}}, -dc(){var s=this.x.b,r=A.h(s.a.x1.$1(s.b)) -if(this.y>=1)A.b_("[sqflite-"+this.e+"] Modified "+r+" rows") -return r}, -fV(a,b,c){return this.d.a3(new A.kq(this,t.fr.a(c),b,a),t.z)}, -ah(a,b,c){return this.f2(a,b,t.fr.a(c))}, -f2(b3,b4,b5){var s=0,r=A.y(t.z),q,p=2,o,n=this,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2 -var $async$ah=A.z(function(b6,b7){if(b6===1){o=b7 -s=p}while(true)switch(s){case 0:a8={} -a8.a=null -d=!b4 -if(d)a8.a=A.u([],t.ke) -c=b5.length,b=n.y>=1,a=n.x.b,a0=a.b,a=a.a.x1,a1="[sqflite-"+n.e+"] Modified ",a2=0 -case 3:if(!(a20)A.Q(A.p3("BigInt value exceeds the range of 64 bits")) -A.h(s.c.p4.$3(s.b,b,self.BigInt(a.l(0)))) -break $label0$0}if(A.c2(a)){s=o.a -r=a?1:0 -s.c.cT(s.b,b,r) -break $label0$0}if(typeof a=="number"){s=o.a -A.h(s.c.R8.$3(s.b,b,a)) -break $label0$0}if(typeof a=="string"){s=o.a -t.O.h("ax.S").a(a) -q=B.f.gaw().a4(a) -r=s.c -p=r.cn(q) -B.a.m(s.d,p) -A.h(r.RG.$5(s.b,b,p,q.length,0)) -break $label0$0}s=t.L -if(s.b(a)){r=o.a -s.a(a) -s=r.c -p=s.cn(a) -B.a.m(r.d,p) -A.h(s.rx.$5(r.b,b,p,self.BigInt(J.Z(a)),0)) -break $label0$0}throw A.b(A.bn(a,"params["+b+"]","Allowed parameters must either be null or bool, int, num, String or List."))}}, -bW(a){$label0$0:{this.eG(a.a) -break $label0$0}}, -X(){var s,r=this.c -if(!r.e){$.jd().a.unregister(this) -r.X() -s=this.b -if(!s.e)B.a.J(s.c.d,r)}}, -dM(a){var s=this -if(s.c.e)A.Q(A.K(u.f)) -s.au() -s.bW(a) -s.eY()}} -A.hI.prototype={ -gq(a){var s=this.x -s===$&&A.bk("current") -return s}, -n(){var s,r,q,p,o=this,n=o.r -if(n.c.e||n.f!==o)return!1 -s=n.a -r=s.c -s=s.b -q=A.h(r.k1.$1(s)) -if(q===100){if(!o.y){o.w=A.h(r.fy.$1(s)) -o.sfi(t.a.a(n.gc1())) -o.bX() -o.y=!0}s=[] -for(p=0;p=0&&b>>0!==b||b>=s.length)return A.c(s,b) -return s[b]}return null}r=this.a.c.i(0,b) -if(r==null)return null -s=this.b -if(r>>>0!==r||r>=s.length)return A.c(s,r) -return s[r]}, -gH(a){return this.a.a}, -gO(a){return this.b}, -$iJ:1} -A.iq.prototype={ -gq(a){var s=this.a,r=s.d,q=this.b -if(!(q>=0&&q")),p=t.ng,o=t.Z,n=t.K,q=q.h("i.E"),m=this.b,l=this.a;r.n();){k=r.d -if(k==null)k=q.a(k) -j=n.a(s.gdN(a)[k]) -if(o.b(j))l.j(0,k,j) -else if(p.b(j))m.j(0,k,j)}}} -A.ln.prototype={ -$2(a,b){var s -A.U(a) -t.lK.a(b) -s={} -this.a[a]=s -J.bl(b,new A.lm(s))}, -$S:56} -A.lm.prototype={ -$2(a,b){this.a[A.U(a)]=t.K.a(b)}, -$S:57} -A.jT.prototype={} -A.cI.prototype={} -A.hD.prototype={} -A.ls.prototype={} -A.ji.prototype={ -bB(a){var s=0,r=A.y(t.H),q=this,p,o,n -var $async$bB=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:p=new A.C($.E,t.go) -o=new A.aa(p,t.my) -n=t.kq.a(self.self.indexedDB) -n.toString -o.W(0,J.ru(n,q.b,new A.jm(o),new A.jn(),1)) -s=2 -return A.o(p,$async$bB) -case 2:q.seS(c) -return A.w(null,r)}}) -return A.x($async$bB,r)}, -bA(){var s=0,r=A.y(t.dV),q,p=this,o,n,m,l,k -var $async$bA=A.z(function(a,b){if(a===1)return A.v(b,r) -while(true)switch(s){case 0:l=p.a -l.toString -o=A.X(t.N,t.S) -n=new A.d8(t.B.a(B.h.cO(l,"files","readonly").objectStore("files").index("fileName").openKeyCursor()),t.oz) -case 3:k=A -s=5 -return A.o(n.n(),$async$bA) -case 5:if(!k.dp(b)){s=4 -break}m=n.a -if(m==null)m=A.Q(A.K("Await moveNext() first")) -o.j(0,A.U(m.key),A.h(m.primaryKey)) -s=3 -break -case 4:q=o -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$bA,r)}, -bw(a){var s=0,r=A.y(t.I),q,p=this,o,n -var $async$bw=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:o=p.a -o.toString -o=B.h.cO(o,"files","readonly").objectStore("files").index("fileName") -o.toString -n=A -s=3 -return A.o(B.X.ef(o,a),$async$bw) -case 3:q=n.dl(c) -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$bw,r)}, -cg(a,b){return A.nV(t.B.a(a.objectStore("files").get(b)),!1,t.jV).e2(new A.jj(b),t.bc)}, -aF(a){var s=0,r=A.y(t.p),q,p=this,o,n,m,l,k,j,i,h,g,f,e,d -var $async$aF=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:e=p.a -e.toString -o=B.h.bI(e,B.n,"readonly") -e=o.objectStore("blocks") -e.toString -s=3 -return A.o(p.cg(o,a),$async$aF) -case 3:n=c -m=J.V(n) -l=m.gk(n) -k=new Uint8Array(l) -j=A.u([],t.iw) -l=t.t -i=new A.d8(t.B.a(e.openCursor(self.IDBKeyRange.bound(A.u([a,0],l),A.u([a,9007199254740992],l)))),t.c6) -e=t.j,l=t.H -case 4:d=A -s=6 -return A.o(i.n(),$async$aF) -case 6:if(!d.dp(c)){s=5 -break}h=i.a -if(h==null)h=A.Q(A.K("Await moveNext() first")) -g=A.h(J.ad(e.a(h.key),1)) -f=m.gk(n) -if(typeof f!=="number"){q=f.aP() -s=1 -break}B.a.m(j,A.p4(new A.jo(h,k,g,Math.min(4096,f-g)),l)) -s=4 -break -case 5:s=7 -return A.o(A.nM(j,l),$async$aF) -case 7:q=k -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$aF,r)}, -aj(a,b){return this.fv(A.h(a),b)}, -fv(a,b){var s=0,r=A.y(t.H),q=this,p,o,n,m,l,k,j -var $async$aj=A.z(function(c,d){if(c===1)return A.v(d,r) -while(true)switch(s){case 0:k=q.a -k.toString -p=B.h.bI(k,B.n,"readwrite") -k=p.objectStore("blocks") -k.toString -s=2 -return A.o(q.cg(p,a),$async$aj) -case 2:o=d -n=b.b -m=A.B(n).h("b4<1>") -l=A.fG(new A.b4(n,m),!0,m.h("e.E")) -B.a.ei(l) -m=A.ab(l) -s=3 -return A.o(A.nM(new A.ag(l,m.h("I<~>(1)").a(new A.jk(new A.jl(k,a),b)),m.h("ag<1,I<~>>")),t.H),$async$aj) -case 3:k=J.V(o) -s=b.c!==k.gk(o)?4:5 -break -case 4:n=p.objectStore("files") -n.toString -n=B.i.dY(n,a) -j=B.q -s=7 -return A.o(n.gv(n),$async$aj) -case 7:s=6 -return A.o(j.cP(d,{name:k.gaE(o),length:b.c}),$async$aj) -case 6:case 5:return A.w(null,r)}}) -return A.x($async$aj,r)}, -an(a,b,c){return this.hB(0,A.h(b),c)}, -hB(a,b,c){var s=0,r=A.y(t.H),q=this,p,o,n,m,l,k,j -var $async$an=A.z(function(d,e){if(d===1)return A.v(e,r) -while(true)switch(s){case 0:k=q.a -k.toString -p=B.h.bI(k,B.n,"readwrite") -k=p.objectStore("files") -k.toString -o=p.objectStore("blocks") -o.toString -s=2 -return A.o(q.cg(p,b),$async$an) -case 2:n=e -m=J.V(n) -s=m.gk(n)>c?3:4 -break -case 3:l=t.t -s=5 -return A.o(B.i.cr(o,self.IDBKeyRange.bound(A.u([b,B.c.G(c,4096)*4096+1],l),A.u([b,9007199254740992],l))),$async$an) -case 5:case 4:k=B.i.dY(k,b) -j=B.q -s=7 -return A.o(k.gv(k),$async$an) -case 7:s=6 -return A.o(j.cP(e,{name:m.gaE(n),length:c}),$async$an) -case 6:return A.w(null,r)}}) -return A.x($async$an,r)}, -bv(a){var s=0,r=A.y(t.H),q=this,p,o,n,m -var $async$bv=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:m=q.a -m.toString -p=B.h.bI(m,B.n,"readwrite") -m=t.t -o=self.IDBKeyRange.bound(A.u([a,0],m),A.u([a,9007199254740992],m)) -m=p.objectStore("blocks") -m.toString -m=B.i.cr(m,o) -n=p.objectStore("files") -n.toString -s=2 -return A.o(A.nM(A.u([m,B.i.cr(n,a)],t.iw),t.H),$async$bv) -case 2:return A.w(null,r)}}) -return A.x($async$bv,r)}, -seS(a){this.a=t.k5.a(a)}} -A.jn.prototype={ -$1(a){var s,r,q,p -t.bo.a(a) -s=t.E.a(new A.bZ([],[]).av(a.target.result,!1)) -r=a.oldVersion -if(r==null||r===0){q=B.h.dJ(s,"files",!0) -r=t.z -p=A.X(r,r) -p.j(0,"unique",!0) -B.i.eP(q,"fileName","name",p) -B.h.fK(s,"blocks")}}, -$S:58} -A.jm.prototype={ -$1(a){return this.a.ae("Opening database blocked: "+A.t(a))}, -$S:2} -A.jj.prototype={ -$1(a){t.jV.a(a) -if(a==null)throw A.b(A.bn(this.a,"fileId","File not found in database")) -else return a}, -$S:59} -A.jo.prototype={ -$0(){var s=0,r=A.y(t.H),q=this,p,o,n,m -var $async$$0=A.z(function(a,b){if(a===1)return A.v(b,r) -while(true)switch(s){case 0:p=B.e -o=q.b -n=q.c -m=A -s=2 -return A.o(A.k8(t.w.a(new A.bZ([],[]).av(q.a.value,!1))),$async$$0) -case 2:p.a9(o,n,m.b6(b.buffer,0,q.d)) -return A.w(null,r)}}) -return A.x($async$$0,r)}, -$S:4} -A.jl.prototype={ -$2(a,b){var s=0,r=A.y(t.H),q=this,p,o,n,m,l -var $async$$2=A.z(function(c,d){if(c===1)return A.v(d,r) -while(true)switch(s){case 0:p=q.a -o=q.b -n=t.t -s=2 -return A.o(A.nV(t.B.a(p.openCursor(self.IDBKeyRange.only(A.u([o,a],n)))),!0,t.g9),$async$$2) -case 2:m=d -l=A.rz(A.u([b],t.bs)) -s=m==null?3:5 -break -case 3:s=6 -return A.o(B.i.hr(p,l,A.u([o,a],n)),$async$$2) -case 6:s=4 -break -case 5:s=7 -return A.o(B.q.cP(m,l),$async$$2) -case 7:case 4:return A.w(null,r)}}) -return A.x($async$$2,r)}, -$S:60} -A.jk.prototype={ -$1(a){var s -A.h(a) -s=this.b.b.i(0,a) -s.toString -return this.a.$2(a,s)}, -$S:61} -A.b9.prototype={} -A.lN.prototype={ -fu(a,b,c){B.e.a9(this.b.hs(0,a,new A.lO(this,a)),b,c)}, -fC(a,b){var s,r,q,p,o,n,m,l,k -for(s=b.length,r=0;rp)B.e.a9(s,0,A.b6(r.buffer,r.byteOffset+p,A.dl(Math.min(4096,q-p)))) -return s}, -$S:62} -A.il.prototype={} -A.cd.prototype={ -aX(a){var s=this.d.a -if(s==null)A.Q(A.hx(10)) -if(a.cz(this.w)){this.ds() -return a.d.a}else return A.p5(null,t.H)}, -ds(){var s,r,q=this -if(q.f==null){s=q.w -s=!s.gY(s)}else s=!1 -if(s){s=q.w -r=q.f=s.gv(s) -s.J(0,r) -r.d.W(0,A.rO(r.gbG(),t.H).aJ(new A.jI(q)))}}, -aq(a){var s=0,r=A.y(t.S),q,p=this,o,n -var $async$aq=A.z(function(b,c){if(b===1)return A.v(c,r) -while(true)switch(s){case 0:n=p.y -s=n.D(0,a)?3:5 -break -case 3:n=n.i(0,a) -n.toString -q=n -s=1 -break -s=4 -break -case 5:s=6 -return A.o(p.d.bw(a),$async$aq) -case 6:o=c -o.toString -n.j(0,a,o) -q=o -s=1 -break -case 4:case 1:return A.w(q,r)}}) -return A.x($async$aq,r)}, -aW(){var s=0,r=A.y(t.H),q=this,p,o,n,m,l,k,j -var $async$aW=A.z(function(a,b){if(a===1)return A.v(b,r) -while(true)switch(s){case 0:m=q.d -s=2 -return A.o(m.bA(),$async$aW) -case 2:l=b -q.y.aY(0,l) -p=J.oS(l),p=p.gC(p),o=q.r.d -case 3:if(!p.n()){s=4 -break}n=p.gq(p) -k=o -j=n.a -s=5 -return A.o(m.aF(n.b),$async$aW) -case 5:k.j(0,j,b) -s=3 -break -case 4:return A.w(null,r)}}) -return A.x($async$aW,r)}, -fS(a){return this.aX(new A.da(t.M.a(new A.jJ()),new A.aa(new A.C($.E,t.D),t.F)))}, -cR(a,b){return this.r.d.D(0,a)?1:0}, -cS(a,b){var s=this -s.r.d.J(0,a) -if(!s.x.J(0,a))s.aX(new A.d9(s,a,new A.aa(new A.C($.E,t.D),t.F)))}, -e9(a){return $.oP().dW(0,"/"+a)}, -b6(a,b){var s,r,q,p=this,o=a.a -if(o==null)o=A.p6(p.b,"/") -s=p.r -r=s.d.D(0,o)?1:0 -q=s.b6(new A.cY(o),b) -if(r===0)if((b&8)!==0)p.x.m(0,o) -else p.aX(new A.cp(p,o,new A.aa(new A.C($.E,t.D),t.F))) -return new A.dd(new A.i6(p,q.a,o),0)}, -eb(a){}} -A.jI.prototype={ -$0(){var s=this.a -s.f=null -s.ds()}, -$S:8} -A.jJ.prototype={ -$0(){}, -$S:8} -A.i6.prototype={ -bM(a,b){this.b.bM(a,b)}, -ge8(){return 0}, -e7(){return this.b.d>=2?1:0}, -bK(){}, -bL(){return this.b.bL()}, -ea(a){this.b.d=a -return null}, -ec(a){}, -bN(a){var s=this,r=s.a,q=r.d.a -if(q==null)A.Q(A.hx(10)) -s.b.bN(a) -if(!r.x.N(0,s.c))r.aX(new A.da(t.M.a(new A.m1(s,a)),new A.aa(new A.C($.E,t.D),t.F)))}, -ed(a){this.b.d=a -return null}, -bO(a,b){var s,r,q,p,o=this.a,n=o.d.a -if(n==null)A.Q(A.hx(10)) -n=this.c -s=o.r.d.i(0,n) -if(s==null)s=new Uint8Array(0) -this.b.bO(a,b) -if(!o.x.N(0,n)){r=new Uint8Array(a.length) -B.e.a9(r,0,a) -q=A.u([],t.p8) -p=$.E -B.a.m(q,new A.il(b,r)) -o.aX(new A.cw(o,n,s,q,new A.aa(new A.C(p,t.D),t.F)))}}, -$ihz:1} -A.m1.prototype={ -$0(){var s=0,r=A.y(t.H),q,p=this,o,n,m -var $async$$0=A.z(function(a,b){if(a===1)return A.v(b,r) -while(true)switch(s){case 0:o=p.a -n=o.a -m=n.d -s=3 -return A.o(n.aq(o.c),$async$$0) -case 3:q=m.an(0,b,p.b) -s=1 -break -case 1:return A.w(q,r)}}) -return A.x($async$$0,r)}, -$S:4} -A.a9.prototype={ -cz(a){t.h.a(a) -a.$ti.c.a(this) -a.cb(a.c,this,!1) -return!0}} -A.da.prototype={ -E(){return this.w.$0()}} -A.d9.prototype={ -cz(a){var s,r,q,p -t.h.a(a) -if(!a.gY(a)){s=a.ga6(a) -for(r=this.x;s!=null;)if(s instanceof A.d9)if(s.x===r)return!1 -else s=s.gb4() -else if(s instanceof A.cw){q=s.gb4() -if(s.x===r){p=s.a -p.toString -p.ck(A.B(s).h("af.E").a(s))}s=q}else if(s instanceof A.cp){if(s.x===r){r=s.a -r.toString -r.ck(A.B(s).h("af.E").a(s)) -return!1}s=s.gb4()}else break}a.$ti.c.a(this) -a.cb(a.c,this,!1) -return!0}, -E(){var s=0,r=A.y(t.H),q=this,p,o,n -var $async$E=A.z(function(a,b){if(a===1)return A.v(b,r) -while(true)switch(s){case 0:p=q.w -o=q.x -s=2 -return A.o(p.aq(o),$async$E) -case 2:n=b -p.y.J(0,o) -s=3 -return A.o(p.d.bv(n),$async$E) -case 3:return A.w(null,r)}}) -return A.x($async$E,r)}} -A.cp.prototype={ -E(){var s=0,r=A.y(t.H),q=this,p,o,n,m,l -var $async$E=A.z(function(a,b){if(a===1)return A.v(b,r) -while(true)switch(s){case 0:p=q.w -o=q.x -n=p.d.a -n.toString -n=B.h.cO(n,"files","readwrite").objectStore("files") -n.toString -m=p.y -l=o -s=2 -return A.o(A.nV(A.t3(n,{name:o,length:0}),!0,t.S),$async$E) -case 2:m.j(0,l,b) -return A.w(null,r)}}) -return A.x($async$E,r)}} -A.cw.prototype={ -cz(a){var s,r -t.h.a(a) -s=a.b===0?null:a.ga6(a) -for(r=this.x;s!=null;)if(s instanceof A.cw)if(s.x===r){B.a.aY(s.z,this.z) -return!1}else s=s.gb4() -else if(s instanceof A.cp){if(s.x===r)break -s=s.gb4()}else break -a.$ti.c.a(this) -a.cb(a.c,this,!1) -return!0}, -E(){var s=0,r=A.y(t.H),q=this,p,o,n,m,l,k -var $async$E=A.z(function(a,b){if(a===1)return A.v(b,r) -while(true)switch(s){case 0:m=q.y -l=new A.lN(m,A.X(t.S,t.p),m.length) -for(m=q.z,p=m.length,o=0;o=2?1:0}, -bK(){if(this.c)this.a.d.J(0,this.b)}, -bL(){var s=this.a.d.i(0,this.b) -s.toString -return J.Z(s)}, -ea(a){this.d=a}, -ec(a){}, -bN(a){var s=this.a.d,r=this.b,q=s.i(0,r),p=new Uint8Array(a) -if(q!=null)B.e.U(p,0,Math.min(a,q.length),q) -s.j(0,r,p)}, -ed(a){this.d=a}, -bO(a,b){var s,r,q,p,o=this.a.d,n=this.b,m=o.i(0,n) -if(m==null)m=new Uint8Array(0) -s=b+a.length -r=m.length -q=s-r -if(q<=0)B.e.U(m,b,s,a) -else{p=new Uint8Array(r+q) -B.e.a9(p,0,m) -B.e.a9(p,b,a) -o.j(0,n,p)}}} -A.hA.prototype={ -bq(a,b){var s,r,q -t.L.a(a) -s=J.V(a) -r=A.h(this.d.$1(s.gk(a)+b)) -q=A.b6(t.J.a(this.b.buffer),0,null) -B.e.U(q,r,r+s.gk(a),a) -B.e.cs(q,r+s.gk(a),r+s.gk(a)+b,0) -return r}, -cn(a){return this.bq(a,0)}, -cT(a,b,c){return A.h(this.p4.$3(a,b,self.BigInt(c)))}} -A.m2.prototype={ -ev(){var s,r,q,p=this,o=t.d9.a(new globalThis.WebAssembly.Memory({initial:16})) -p.c=o -s=t.N -r=t.K -q=t.Z -p.sey(t.n2.a(A.aA(["env",A.aA(["memory",o],s,r),"dart",A.aA(["error_log",A.Y(new A.mi(o),q),"xOpen",A.Y(new A.mj(p,o),q),"xDelete",A.Y(new A.mk(p,o),q),"xAccess",A.Y(new A.mv(p,o),q),"xFullPathname",A.Y(new A.mB(p,o),q),"xRandomness",A.Y(new A.mC(p,o),q),"xSleep",A.Y(new A.mD(p),q),"xCurrentTimeInt64",A.Y(new A.mE(p,o),q),"xDeviceCharacteristics",A.Y(new A.mF(p),q),"xClose",A.Y(new A.mG(p),q),"xRead",A.Y(new A.mH(p,o),q),"xWrite",A.Y(new A.ml(p,o),q),"xTruncate",A.Y(new A.mm(p),q),"xSync",A.Y(new A.mn(p),q),"xFileSize",A.Y(new A.mo(p,o),q),"xLock",A.Y(new A.mp(p),q),"xUnlock",A.Y(new A.mq(p),q),"xCheckReservedLock",A.Y(new A.mr(p,o),q),"function_xFunc",A.Y(new A.ms(p),q),"function_xStep",A.Y(new A.mt(p),q),"function_xInverse",A.Y(new A.mu(p),q),"function_xFinal",A.Y(new A.mw(p),q),"function_xValue",A.Y(new A.mx(p),q),"function_forget",A.Y(new A.my(p),q),"function_compare",A.Y(new A.mz(p,o),q),"function_hook",A.Y(new A.mA(p,o),q)],s,r)],s,t.lK)))}, -sey(a){this.b=t.n2.a(a)}} -A.mi.prototype={ -$1(a){A.b_("[sqlite3] "+A.cm(this.a,A.h(a)))}, -$S:9} -A.mj.prototype={ -$5(a,b,c,d,e){var s,r,q -A.h(a) -A.h(b) -A.h(c) -A.h(d) -A.h(e) -s=this.a -r=s.d.e.i(0,a) -r.toString -q=this.b -return A.aK(new A.m9(s,r,new A.cY(A.oa(q,b,null)),d,q,c,e))}, -$C:"$5", -$R:5, -$S:26} -A.m9.prototype={ -$0(){var s=this,r=s.b.b6(s.c,s.d),q=t.a5.a(r.a),p=s.a.d.f,o=p.a -p.j(0,o,q) -q=s.e -A.hH(q,s.f,o) -p=s.r -if(p!==0)A.hH(q,p,r.b)}, -$S:0} -A.mk.prototype={ -$3(a,b,c){var s -A.h(a) -A.h(b) -A.h(c) -s=this.a.d.e.i(0,a) -s.toString -return A.aK(new A.m8(s,A.cm(this.b,b),c))}, -$C:"$3", -$R:3, -$S:18} -A.m8.prototype={ -$0(){return this.a.cS(this.b,this.c)}, -$S:0} -A.mv.prototype={ -$4(a,b,c,d){var s,r -A.h(a) -A.h(b) -A.h(c) -A.h(d) -s=this.a.d.e.i(0,a) -s.toString -r=this.b -return A.aK(new A.m7(s,A.cm(r,b),c,r,d))}, -$C:"$4", -$R:4, -$S:27} -A.m7.prototype={ -$0(){var s=this -A.hH(s.d,s.e,s.a.cR(s.b,s.c))}, -$S:0} -A.mB.prototype={ -$4(a,b,c,d){var s,r -A.h(a) -A.h(b) -A.h(c) -A.h(d) -s=this.a.d.e.i(0,a) -s.toString -r=this.b -return A.aK(new A.m6(s,A.cm(r,b),c,r,d))}, -$C:"$4", -$R:4, -$S:27} -A.m6.prototype={ -$0(){var s,r,q=this,p=t.O.h("ax.S").a(q.a.e9(q.b)),o=B.f.gaw().a4(p) -p=o.length -if(p>q.c)throw A.b(A.hx(14)) -s=A.b6(t.J.a(q.d.buffer),0,null) -r=q.e -B.e.a9(s,r,o) -p=r+p -if(!(p>=0&&p()","~(@)","I<@>()","~(@,@)","P()","P(d)","~(~())","d(d)","I

()","I<@>(aQ)","P(d,d,d)","~(aS,j,d)","d(d,d,d,r)","@()","d(d,d,d)","~(j,j)","~(r,aG)","I()","P(@)","I>()","~(r[aG?])","I<~>(m)","d(d,d,d,d,d)","d(d,d,d,d)","I()","@(@,@)","bh(j)","j(j?)","j?(r?)","d?()","d?(j)","~(d,@)","P(~())","@(@,j)","~(d2,@)","~(j,d)","J(bw)","~(@[@])","bw(@)","~(j,d?)","J<@,@>(d)","~(J<@,@>)","aS(@,@)","I(aQ)","I(aQ)","j(j)","I()","~(cF)","~(r?,r?)","a6(d,b7)","~(bC?,oc?,bC,~())","~(bp)","~(j,J)","~(j,r)","~(bA)","b9(b9?)","I<~>(d,aS)","I<~>(d)","aS()","I(aQ)","@(@)","j(r?)","P(@,aG)","P(d,d)","P(@,@)","d(d,r)","P(r,aG)","P(d,d,d,d,r)","d(@,@)","C<@>(@)","@(j)","I()"],interceptorsByTag:null,leafTags:null,arrayRti:Symbol("$ti"),rttc:{"2;file,outFlags":(a,b)=>c=>c instanceof A.dd&&a.b(c.a)&&b.b(c.b)}} -A.ul(v.typeUniverse,JSON.parse('{"fZ":"a2","bW":"a2","br":"a2","jp":"a2","jC":"a2","kd":"a2","m0":"a2","mL":"a2","jD":"a2","jA":"a2","de":"a2","cI":"a2","n0":"a2","jT":"a2","ls":"a2","b9":"a2","w9":"a","wa":"a","vS":"a","vQ":"m","w5":"m","vT":"bL","vR":"f","wf":"f","wj":"f","wb":"p","we":"bu","vU":"q","wc":"q","w7":"H","w4":"H","wD":"ao","w3":"bY","vV":"bd","wq":"bd","w8":"cc","vW":"O","vY":"b2","w_":"an","w0":"as","vX":"as","vZ":"as","a":{"k":[]},"fB":{"bh":[],"S":[]},"dH":{"P":[],"S":[]},"a2":{"a":[],"k":[],"de":[],"cI":[],"b9":[]},"M":{"n":["1"],"a":[],"l":["1"],"k":[],"e":["1"]},"jL":{"M":["1"],"n":["1"],"a":[],"l":["1"],"k":[],"e":["1"]},"dq":{"L":["1"]},"cN":{"N":[],"a_":[],"al":["a_"]},"dG":{"N":[],"d":[],"a_":[],"al":["a_"],"S":[]},"fD":{"N":[],"a_":[],"al":["a_"],"S":[]},"bR":{"j":[],"al":["j"],"k2":[],"S":[]},"c_":{"e":["2"]},"dt":{"L":["2"]},"c6":{"c_":["1","2"],"e":["2"],"e.E":"2"},"ej":{"c6":["1","2"],"c_":["1","2"],"l":["2"],"e":["2"],"e.E":"2"},"ef":{"i":["2"],"n":["2"],"c_":["1","2"],"l":["2"],"e":["2"]},"b1":{"ef":["1","2"],"i":["2"],"n":["2"],"c_":["1","2"],"l":["2"],"e":["2"],"i.E":"2","e.E":"2"},"du":{"D":["3","4"],"J":["3","4"],"D.K":"3","D.V":"4"},"cf":{"R":[]},"dv":{"i":["d"],"bX":["d"],"n":["d"],"l":["d"],"e":["d"],"i.E":"d","bX.E":"d"},"l":{"e":["1"]},"a5":{"l":["1"],"e":["1"]},"ci":{"a5":["1"],"l":["1"],"e":["1"],"a5.E":"1","e.E":"1"},"b5":{"L":["1"]},"bs":{"e":["2"],"e.E":"2"},"c8":{"bs":["1","2"],"l":["2"],"e":["2"],"e.E":"2"},"dM":{"L":["2"]},"ag":{"a5":["2"],"l":["2"],"e":["2"],"a5.E":"2","e.E":"2"},"lr":{"e":["1"],"e.E":"1"},"cl":{"L":["1"]},"bv":{"e":["1"],"e.E":"1"},"cE":{"bv":["1"],"l":["1"],"e":["1"],"e.E":"1"},"dY":{"L":["1"]},"c9":{"l":["1"],"e":["1"],"e.E":"1"},"dA":{"L":["1"]},"ea":{"e":["1"],"e.E":"1"},"eb":{"L":["1"]},"d3":{"i":["1"],"bX":["1"],"n":["1"],"l":["1"],"e":["1"]},"ib":{"a5":["d"],"l":["d"],"e":["d"],"a5.E":"d","e.E":"d"},"dJ":{"D":["d","1"],"c1":["d","1"],"J":["d","1"],"D.K":"d","D.V":"1"},"dX":{"a5":["1"],"l":["1"],"e":["1"],"a5.E":"1","e.E":"1"},"d1":{"d2":[]},"dd":{"dc":[],"cu":[]},"dx":{"e7":["1","2"],"dj":["1","2"],"cQ":["1","2"],"c1":["1","2"],"J":["1","2"]},"dw":{"J":["1","2"]},"c7":{"dw":["1","2"],"J":["1","2"]},"cs":{"e":["1"],"e.E":"1"},"el":{"L":["1"]},"fC":{"p7":[]},"dR":{"by":[],"R":[]},"fE":{"R":[]},"hr":{"R":[]},"ez":{"aG":[]},"bN":{"cb":[]},"f9":{"cb":[]},"fa":{"cb":[]},"hi":{"cb":[]},"hf":{"cb":[]},"cB":{"cb":[]},"hR":{"R":[]},"h6":{"R":[]},"hL":{"R":[]},"b3":{"D":["1","2"],"pe":["1","2"],"J":["1","2"],"D.K":"1","D.V":"2"},"b4":{"l":["1"],"e":["1"],"e.E":"1"},"dI":{"L":["1"]},"dc":{"cu":[]},"cO":{"tj":[],"k2":[]},"eq":{"dW":[],"cR":[]},"hJ":{"e":["dW"],"e.E":"dW"},"hK":{"L":["dW"]},"e4":{"cR":[]},"iF":{"e":["cR"],"e.E":"cR"},"iG":{"L":["cR"]},"cT":{"a":[],"k":[],"nK":[],"S":[]},"a7":{"a":[],"k":[]},"dN":{"a7":[],"a":[],"p0":[],"k":[],"S":[]},"ah":{"a7":[],"G":["1"],"a":[],"k":[]},"bS":{"ah":["N"],"i":["N"],"a7":[],"G":["N"],"n":["N"],"a":[],"l":["N"],"k":[],"e":["N"],"at":["N"]},"aM":{"ah":["d"],"i":["d"],"a7":[],"G":["d"],"n":["d"],"a":[],"l":["d"],"k":[],"e":["d"],"at":["d"]},"fN":{"bS":[],"ah":["N"],"i":["N"],"a7":[],"G":["N"],"n":["N"],"a":[],"l":["N"],"k":[],"e":["N"],"at":["N"],"S":[],"i.E":"N"},"fO":{"bS":[],"ah":["N"],"i":["N"],"a7":[],"G":["N"],"n":["N"],"a":[],"l":["N"],"k":[],"e":["N"],"at":["N"],"S":[],"i.E":"N"},"fP":{"aM":[],"ah":["d"],"i":["d"],"a7":[],"G":["d"],"n":["d"],"a":[],"l":["d"],"k":[],"e":["d"],"at":["d"],"S":[],"i.E":"d"},"fQ":{"aM":[],"ah":["d"],"i":["d"],"a7":[],"G":["d"],"n":["d"],"a":[],"l":["d"],"k":[],"e":["d"],"at":["d"],"S":[],"i.E":"d"},"fR":{"aM":[],"ah":["d"],"i":["d"],"a7":[],"G":["d"],"n":["d"],"a":[],"l":["d"],"k":[],"e":["d"],"at":["d"],"S":[],"i.E":"d"},"fS":{"aM":[],"ah":["d"],"i":["d"],"o7":[],"a7":[],"G":["d"],"n":["d"],"a":[],"l":["d"],"k":[],"e":["d"],"at":["d"],"S":[],"i.E":"d"},"fT":{"aM":[],"ah":["d"],"i":["d"],"a7":[],"G":["d"],"n":["d"],"a":[],"l":["d"],"k":[],"e":["d"],"at":["d"],"S":[],"i.E":"d"},"dO":{"aM":[],"ah":["d"],"i":["d"],"a7":[],"G":["d"],"n":["d"],"a":[],"l":["d"],"k":[],"e":["d"],"at":["d"],"S":[],"i.E":"d"},"dP":{"aM":[],"ah":["d"],"i":["d"],"aS":[],"a7":[],"G":["d"],"n":["d"],"a":[],"l":["d"],"k":[],"e":["d"],"at":["d"],"S":[],"i.E":"d"},"hY":{"R":[]},"eF":{"by":[],"R":[]},"C":{"I":["1"]},"ec":{"fc":["1"]},"eC":{"L":["1"]},"dg":{"e":["1"],"e.E":"1"},"ds":{"R":[]},"co":{"fc":["1"]},"cn":{"co":["1"],"fc":["1"]},"aa":{"co":["1"],"fc":["1"]},"df":{"pR":["1"],"cr":["1"]},"dh":{"iL":["1"],"df":["1"],"pR":["1"],"cr":["1"]},"d6":{"eB":["1"],"d_":["1"]},"d7":{"ee":["1"],"d0":["1"],"cr":["1"]},"ee":{"d0":["1"],"cr":["1"]},"eB":{"d_":["1"]},"cq":{"bD":["1"]},"eh":{"bD":["@"]},"hT":{"bD":["@"]},"eM":{"bC":[]},"it":{"eM":[],"bC":[]},"em":{"cV":["1"],"nX":["1"],"l":["1"],"e":["1"]},"ct":{"L":["1"]},"cP":{"e":["1"],"e.E":"1"},"en":{"L":["1"]},"i":{"n":["1"],"l":["1"],"e":["1"]},"D":{"J":["1","2"]},"d4":{"D":["1","2"],"c1":["1","2"],"J":["1","2"]},"eo":{"l":["2"],"e":["2"],"e.E":"2"},"ep":{"L":["2"]},"cQ":{"J":["1","2"]},"e7":{"dj":["1","2"],"cQ":["1","2"],"c1":["1","2"],"J":["1","2"]},"cV":{"nX":["1"],"l":["1"],"e":["1"]},"ew":{"cV":["1"],"nX":["1"],"l":["1"],"e":["1"]},"f4":{"ax":["n","j"],"ax.S":"n"},"fq":{"ax":["j","n"]},"e8":{"ax":["j","n"],"ax.S":"j"},"cA":{"al":["cA"]},"bP":{"al":["bP"]},"N":{"a_":[],"al":["a_"]},"bQ":{"al":["bQ"]},"d":{"a_":[],"al":["a_"]},"n":{"l":["1"],"e":["1"]},"a_":{"al":["a_"]},"dW":{"cR":[]},"j":{"al":["j"],"k2":[]},"a8":{"cA":[],"al":["cA"]},"dr":{"R":[]},"by":{"R":[]},"bc":{"R":[]},"cU":{"R":[]},"fy":{"R":[]},"fU":{"R":[]},"ht":{"R":[]},"hp":{"R":[]},"bx":{"R":[]},"fd":{"R":[]},"fY":{"R":[]},"e3":{"R":[]},"fA":{"R":[]},"iJ":{"aG":[]},"aj":{"tI":[]},"eK":{"hu":[]},"ix":{"hu":[]},"hS":{"hu":[]},"O":{"a":[],"k":[]},"m":{"a":[],"k":[]},"ay":{"bM":[],"a":[],"k":[]},"az":{"a":[],"k":[]},"aB":{"a":[],"k":[]},"H":{"f":[],"a":[],"k":[]},"aC":{"a":[],"k":[]},"aD":{"f":[],"a":[],"k":[]},"aE":{"a":[],"k":[]},"aF":{"a":[],"k":[]},"an":{"a":[],"k":[]},"aH":{"f":[],"a":[],"k":[]},"ao":{"f":[],"a":[],"k":[]},"aI":{"a":[],"k":[]},"q":{"H":[],"f":[],"a":[],"k":[]},"eX":{"a":[],"k":[]},"eY":{"H":[],"f":[],"a":[],"k":[]},"eZ":{"H":[],"f":[],"a":[],"k":[]},"bM":{"a":[],"k":[]},"bd":{"H":[],"f":[],"a":[],"k":[]},"fg":{"a":[],"k":[]},"cC":{"a":[],"k":[]},"as":{"a":[],"k":[]},"b2":{"a":[],"k":[]},"fh":{"a":[],"k":[]},"fi":{"a":[],"k":[]},"fj":{"a":[],"k":[]},"fn":{"a":[],"k":[]},"dy":{"i":["bg"],"A":["bg"],"n":["bg"],"G":["bg"],"a":[],"l":["bg"],"k":[],"e":["bg"],"A.E":"bg","i.E":"bg"},"dz":{"a":[],"bg":["a_"],"k":[]},"fo":{"i":["j"],"A":["j"],"n":["j"],"G":["j"],"a":[],"l":["j"],"k":[],"e":["j"],"A.E":"j","i.E":"j"},"fp":{"a":[],"k":[]},"p":{"H":[],"f":[],"a":[],"k":[]},"f":{"a":[],"k":[]},"cG":{"i":["ay"],"A":["ay"],"n":["ay"],"G":["ay"],"a":[],"l":["ay"],"k":[],"e":["ay"],"A.E":"ay","i.E":"ay"},"ft":{"f":[],"a":[],"k":[]},"fv":{"H":[],"f":[],"a":[],"k":[]},"fw":{"a":[],"k":[]},"cc":{"i":["H"],"A":["H"],"n":["H"],"G":["H"],"a":[],"l":["H"],"k":[],"e":["H"],"A.E":"H","i.E":"H"},"cK":{"a":[],"k":[]},"fH":{"a":[],"k":[]},"fJ":{"a":[],"k":[]},"cS":{"m":[],"a":[],"k":[]},"cg":{"f":[],"a":[],"k":[]},"fK":{"a":[],"D":["j","@"],"k":[],"J":["j","@"],"D.K":"j","D.V":"@"},"fL":{"a":[],"D":["j","@"],"k":[],"J":["j","@"],"D.K":"j","D.V":"@"},"fM":{"i":["aB"],"A":["aB"],"n":["aB"],"G":["aB"],"a":[],"l":["aB"],"k":[],"e":["aB"],"A.E":"aB","i.E":"aB"},"dQ":{"i":["H"],"A":["H"],"n":["H"],"G":["H"],"a":[],"l":["H"],"k":[],"e":["H"],"A.E":"H","i.E":"H"},"h_":{"i":["aC"],"A":["aC"],"n":["aC"],"G":["aC"],"a":[],"l":["aC"],"k":[],"e":["aC"],"A.E":"aC","i.E":"aC"},"h5":{"a":[],"D":["j","@"],"k":[],"J":["j","@"],"D.K":"j","D.V":"@"},"h7":{"H":[],"f":[],"a":[],"k":[]},"cW":{"a":[],"k":[]},"cX":{"f":[],"a":[],"k":[]},"h9":{"i":["aD"],"A":["aD"],"f":[],"n":["aD"],"G":["aD"],"a":[],"l":["aD"],"k":[],"e":["aD"],"A.E":"aD","i.E":"aD"},"ha":{"i":["aE"],"A":["aE"],"n":["aE"],"G":["aE"],"a":[],"l":["aE"],"k":[],"e":["aE"],"A.E":"aE","i.E":"aE"},"hg":{"a":[],"D":["j","j"],"k":[],"J":["j","j"],"D.K":"j","D.V":"j"},"hj":{"i":["ao"],"A":["ao"],"n":["ao"],"G":["ao"],"a":[],"l":["ao"],"k":[],"e":["ao"],"A.E":"ao","i.E":"ao"},"hk":{"i":["aH"],"A":["aH"],"f":[],"n":["aH"],"G":["aH"],"a":[],"l":["aH"],"k":[],"e":["aH"],"A.E":"aH","i.E":"aH"},"hl":{"a":[],"k":[]},"hm":{"i":["aI"],"A":["aI"],"n":["aI"],"G":["aI"],"a":[],"l":["aI"],"k":[],"e":["aI"],"A.E":"aI","i.E":"aI"},"hn":{"a":[],"k":[]},"hv":{"a":[],"k":[]},"hy":{"f":[],"a":[],"k":[]},"bY":{"f":[],"a":[],"k":[]},"hP":{"i":["O"],"A":["O"],"n":["O"],"G":["O"],"a":[],"l":["O"],"k":[],"e":["O"],"A.E":"O","i.E":"O"},"ei":{"a":[],"bg":["a_"],"k":[]},"i2":{"i":["az?"],"A":["az?"],"n":["az?"],"G":["az?"],"a":[],"l":["az?"],"k":[],"e":["az?"],"A.E":"az?","i.E":"az?"},"er":{"i":["H"],"A":["H"],"n":["H"],"G":["H"],"a":[],"l":["H"],"k":[],"e":["H"],"A.E":"H","i.E":"H"},"iA":{"i":["aF"],"A":["aF"],"n":["aF"],"G":["aF"],"a":[],"l":["aF"],"k":[],"e":["aF"],"A.E":"aF","i.E":"aF"},"iK":{"i":["an"],"A":["an"],"n":["an"],"G":["an"],"a":[],"l":["an"],"k":[],"e":["an"],"A.E":"an","i.E":"an"},"lJ":{"d_":["1"]},"ek":{"d0":["1"]},"dC":{"L":["1"]},"bO":{"a":[],"k":[]},"bo":{"bO":[],"a":[],"k":[]},"be":{"f":[],"a":[],"k":[]},"cJ":{"a":[],"k":[]},"bu":{"f":[],"a":[],"k":[]},"bA":{"m":[],"a":[],"k":[]},"dE":{"a":[],"k":[]},"dS":{"a":[],"k":[]},"e6":{"f":[],"a":[],"k":[]},"i7":{"th":[]},"aL":{"a":[],"k":[]},"aN":{"a":[],"k":[]},"aR":{"a":[],"k":[]},"fF":{"i":["aL"],"A":["aL"],"n":["aL"],"a":[],"l":["aL"],"k":[],"e":["aL"],"A.E":"aL","i.E":"aL"},"fW":{"i":["aN"],"A":["aN"],"n":["aN"],"a":[],"l":["aN"],"k":[],"e":["aN"],"A.E":"aN","i.E":"aN"},"h0":{"a":[],"k":[]},"hh":{"i":["j"],"A":["j"],"n":["j"],"a":[],"l":["j"],"k":[],"e":["j"],"A.E":"j","i.E":"j"},"ho":{"i":["aR"],"A":["aR"],"n":["aR"],"a":[],"l":["aR"],"k":[],"e":["aR"],"A.E":"aR","i.E":"aR"},"f1":{"a":[],"k":[]},"f2":{"a":[],"D":["j","@"],"k":[],"J":["j","@"],"D.K":"j","D.V":"@"},"f3":{"f":[],"a":[],"k":[]},"bL":{"f":[],"a":[],"k":[]},"fX":{"f":[],"a":[],"k":[]},"h1":{"cM":[]},"hw":{"cM":[]},"hG":{"cM":[]},"b7":{"di":["cA"],"di.T":"cA"},"e1":{"e0":[]},"fu":{"bp":[]},"fl":{"p2":[]},"cH":{"bp":[]},"cZ":{"fb":[]},"hI":{"dF":[],"cD":[],"L":["am"]},"am":{"hs":["j","@"],"D":["j","@"],"J":["j","@"],"D.K":"j","D.V":"@"},"dF":{"cD":[],"L":["am"]},"h4":{"i":["am"],"fV":["am"],"n":["am"],"l":["am"],"cD":[],"e":["am"],"i.E":"am"},"iq":{"L":["am"]},"ce":{"tH":[]},"f6":{"cj":[]},"f5":{"hz":[]},"hE":{"h2":[]},"hB":{"h3":[]},"hF":{"dV":[]},"d5":{"i":["bB"],"n":["bB"],"l":["bB"],"e":["bB"],"i.E":"bB"},"cd":{"cj":[]},"a9":{"af":["a9"]},"i6":{"hz":[]},"da":{"a9":[],"af":["a9"],"af.E":"a9"},"d9":{"a9":[],"af":["a9"],"af.E":"a9"},"cp":{"a9":[],"af":["a9"],"af.E":"a9"},"cw":{"a9":[],"af":["a9"],"af.E":"a9"},"fx":{"cj":[]},"i5":{"hz":[]},"f7":{"t2":[]},"rS":{"n":["d"],"l":["d"],"e":["d"]},"aS":{"n":["d"],"l":["d"],"e":["d"]},"tN":{"n":["d"],"l":["d"],"e":["d"]},"rQ":{"n":["d"],"l":["d"],"e":["d"]},"o7":{"n":["d"],"l":["d"],"e":["d"]},"rR":{"n":["d"],"l":["d"],"e":["d"]},"tM":{"n":["d"],"l":["d"],"e":["d"]},"rM":{"n":["N"],"l":["N"],"e":["N"]},"rN":{"n":["N"],"l":["N"],"e":["N"]}}')) -A.uk(v.typeUniverse,JSON.parse('{"d3":1,"eN":2,"ah":1,"bD":1,"d4":2,"ew":1,"ff":2,"ry":1}')) -var u={c:"Error handler must accept one Object or one Object and a StackTrace as arguments, and return a value of the returned future's type",f:"Tried to operate on a released prepared statement"} -var t=(function rtii(){var s=A.aw -return{ie:s("ry"),n:s("ds"),dz:s("cA"),w:s("bM"),J:s("nK"),bT:s("p2"),bP:s("al<@>"),i9:s("dx"),d5:s("O"),nT:s("bo"),E:s("be"),cs:s("bP"),jS:s("bQ"),Q:s("l<@>"),V:s("R"),A:s("m"),W:s("ay"),kL:s("cG"),m:s("bp"),Z:s("cb"),g7:s("I<@>"),gq:s("I<@>()"),ng:s("cI"),ad:s("cK"),cF:s("cd"),bg:s("p7"),bq:s("e"),id:s("e"),e7:s("e<@>"),fm:s("e"),eY:s("M"),iw:s("M>"),dO:s("M>"),C:s("M>"),ke:s("M>"),jP:s("M>"),bw:s("M"),lE:s("M"),s:s("M"),bs:s("M"),p8:s("M"),it:s("M"),b:s("M<@>"),t:s("M"),mf:s("M"),T:s("dH"),bp:s("k"),dY:s("br"),dX:s("G<@>"),d9:s("a"),bX:s("b3"),kT:s("aL"),h:s("cP"),fr:s("n"),a:s("n"),j:s("n<@>"),L:s("n"),kS:s("n"),ag:s("a6"),lK:s("J"),dV:s("J"),f:s("J<@,@>"),n2:s("J>"),lb:s("J"),iZ:s("ag"),hy:s("cS"),oA:s("cg"),ib:s("aB"),hH:s("cT"),dQ:s("bS"),aj:s("aM"),hK:s("a7"),G:s("H"),P:s("P"),ai:s("aN"),K:s("r"),d8:s("aC"),lZ:s("wh"),aK:s("+()"),q:s("bg"),lu:s("dW"),lq:s("wi"),B:s("bu"),hF:s("dX"),oy:s("am"),kI:s("cW"),aD:s("cX"),ls:s("aD"),cA:s("aE"),hI:s("aF"),cE:s("e0"),db:s("e1"),kY:s("he"),l:s("aG"),N:s("j"),lv:s("an"),bR:s("d2"),dR:s("aH"),gJ:s("ao"),ki:s("aI"),hk:s("aR"),aJ:s("S"),do:s("by"),p:s("aS"),cx:s("bW"),jJ:s("hu"),O:s("e8"),bo:s("bA"),e6:s("cj"),a5:s("hz"),n0:s("hA"),ax:s("hC"),es:s("hD"),cI:s("bB"),lS:s("ea"),x:s("bC"),ou:s("cn<~>"),ap:s("b7"),kg:s("a8"),oz:s("d8"),c6:s("d8"),bc:s("b9"),go:s("C"),g5:s("C"),c:s("C<@>"),g_:s("C"),D:s("C<~>"),ot:s("de"),lz:s("iB"),gL:s("eA"),my:s("aa"),ex:s("aa"),F:s("aa<~>"),y:s("bh"),iW:s("bh(r)"),i:s("N"),z:s("@"),mY:s("@()"),v:s("@(r)"),R:s("@(r,aG)"),ha:s("@(j)"),p1:s("@(@,@)"),S:s("d"),eK:s("0&*"),_:s("r*"),g9:s("bo?"),k5:s("be?"),iB:s("f?"),gK:s("I

?"),ef:s("az?"),kq:s("cJ?"),lH:s("n<@>?"),kR:s("n?"),h9:s("J?"),X:s("r?"),fw:s("aG?"),nh:s("aS?"),U:s("bC?"),r:s("oc?"),lT:s("bD<@>?"),jV:s("b9?"),d:s("bE<@,@>?"),g:s("ia?"),o:s("@(m)?"),I:s("d?"),e:s("~()?"),Y:s("~(m)?"),jM:s("~(bA)?"),hC:s("~(d,j,d)?"),cZ:s("a_"),H:s("~"),M:s("~()"),i6:s("~(r)"),k:s("~(r,aG)"),bm:s("~(j,j)"),u:s("~(j,@)")}})();(function constants(){var s=hunkHelpers.makeConstList -B.q=A.bo.prototype -B.h=A.be.prototype -B.X=A.dE.prototype -B.Y=J.cL.prototype -B.a=J.M.prototype -B.c=J.dG.prototype -B.j=J.cN.prototype -B.b=J.bR.prototype -B.Z=J.br.prototype -B.a_=J.a.prototype -B.a1=A.cg.prototype -B.G=A.dN.prototype -B.e=A.dP.prototype -B.i=A.dS.prototype -B.K=J.fZ.prototype -B.r=J.bW.prototype -B.aj=new A.js() -B.L=new A.f4() -B.M=new A.dA(A.aw("dA<0&>")) -B.N=new A.fA() -B.u=function getTagFallback(o) { - var s = Object.prototype.toString.call(o); - return s.substring(8, s.length - 1); -} -B.O=function() { - var toStringFunction = Object.prototype.toString; - function getTag(o) { - var s = toStringFunction.call(o); - return s.substring(8, s.length - 1); - } - function getUnknownTag(object, tag) { - if (/^HTML[A-Z].*Element$/.test(tag)) { - var name = toStringFunction.call(object); - if (name == "[object Object]") return null; - return "HTMLElement"; - } - } - function getUnknownTagGenericBrowser(object, tag) { - if (self.HTMLElement && object instanceof HTMLElement) return "HTMLElement"; - return getUnknownTag(object, tag); - } - function prototypeForTag(tag) { - if (typeof window == "undefined") return null; - if (typeof window[tag] == "undefined") return null; - var constructor = window[tag]; - if (typeof constructor != "function") return null; - return constructor.prototype; - } - function discriminator(tag) { return null; } - var isBrowser = typeof navigator == "object"; - return { - getTag: getTag, - getUnknownTag: isBrowser ? getUnknownTagGenericBrowser : getUnknownTag, - prototypeForTag: prototypeForTag, - discriminator: discriminator }; -} -B.T=function(getTagFallback) { - return function(hooks) { - if (typeof navigator != "object") return hooks; - var ua = navigator.userAgent; - if (ua.indexOf("DumpRenderTree") >= 0) return hooks; - if (ua.indexOf("Chrome") >= 0) { - function confirm(p) { - return typeof window == "object" && window[p] && window[p].name == p; - } - if (confirm("Window") && confirm("HTMLElement")) return hooks; - } - hooks.getTag = getTagFallback; - }; -} -B.P=function(hooks) { - if (typeof dartExperimentalFixupGetTag != "function") return hooks; - hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag); -} -B.Q=function(hooks) { - var getTag = hooks.getTag; - var prototypeForTag = hooks.prototypeForTag; - function getTagFixed(o) { - var tag = getTag(o); - if (tag == "Document") { - if (!!o.xmlVersion) return "!Document"; - return "!HTMLDocument"; - } - return tag; - } - function prototypeForTagFixed(tag) { - if (tag == "Document") return null; - return prototypeForTag(tag); - } - hooks.getTag = getTagFixed; - hooks.prototypeForTag = prototypeForTagFixed; -} -B.S=function(hooks) { - var userAgent = typeof navigator == "object" ? navigator.userAgent : ""; - if (userAgent.indexOf("Firefox") == -1) return hooks; - var getTag = hooks.getTag; - var quickMap = { - "BeforeUnloadEvent": "Event", - "DataTransfer": "Clipboard", - "GeoGeolocation": "Geolocation", - "Location": "!Location", - "WorkerMessageEvent": "MessageEvent", - "XMLDocument": "!Document"}; - function getTagFirefox(o) { - var tag = getTag(o); - return quickMap[tag] || tag; - } - hooks.getTag = getTagFirefox; -} -B.R=function(hooks) { - var userAgent = typeof navigator == "object" ? navigator.userAgent : ""; - if (userAgent.indexOf("Trident/") == -1) return hooks; - var getTag = hooks.getTag; - var quickMap = { - "BeforeUnloadEvent": "Event", - "DataTransfer": "Clipboard", - "HTMLDDElement": "HTMLElement", - "HTMLDTElement": "HTMLElement", - "HTMLPhraseElement": "HTMLElement", - "Position": "Geoposition" - }; - function getTagIE(o) { - var tag = getTag(o); - var newTag = quickMap[tag]; - if (newTag) return newTag; - if (tag == "Object") { - if (window.DataView && (o instanceof window.DataView)) return "DataView"; - } - return tag; - } - function prototypeForTagIE(tag) { - var constructor = window[tag]; - if (constructor == null) return null; - return constructor.prototype; - } - hooks.getTag = getTagIE; - hooks.prototypeForTag = prototypeForTagIE; -} -B.v=function(hooks) { return hooks; } - -B.U=new A.fY() -B.p=new A.kg() -B.f=new A.e8() -B.V=new A.lj() -B.w=new A.hT() -B.x=new A.mM() -B.d=new A.it() -B.W=new A.iJ() -B.y=new A.bQ(0) -B.k=A.u(s([0,0,24576,1023,65534,34815,65534,18431]),t.t) -B.l=A.u(s([0,0,26624,1023,65534,2047,65534,2047]),t.t) -B.a0=A.u(s([0,0,32722,12287,65534,34815,65534,18431]),t.t) -B.z=A.u(s([0,0,65490,12287,65535,34815,65534,18431]),t.t) -B.m=A.u(s([0,0,32776,33792,1,10240,0,0]),t.t) -B.A=A.u(s([0,0,32754,11263,65534,34815,65534,18431]),t.t) -B.B=A.u(s([]),t.s) -B.D=A.u(s([]),t.b) -B.C=A.u(s([]),A.aw("M")) -B.n=A.u(s(["files","blocks"]),t.s) -B.o=A.u(s([0,0,65490,45055,65535,34815,65534,18431]),t.t) -B.H={} -B.E=new A.c7(B.H,[],A.aw("c7")) -B.F=new A.c7(B.H,[],A.aw("c7")) -B.I=new A.dT("readOnly") -B.a2=new A.dT("readWrite") -B.J=new A.dT("readWriteCreate") -B.a3=new A.d1("call") -B.a4=A.b0("nK") -B.a5=A.b0("p0") -B.a6=A.b0("rM") -B.a7=A.b0("rN") -B.a8=A.b0("rQ") -B.a9=A.b0("rR") -B.aa=A.b0("rS") -B.ab=A.b0("k") -B.ac=A.b0("r") -B.ad=A.b0("o7") -B.ae=A.b0("tM") -B.af=A.b0("tN") -B.ag=A.b0("aS") -B.t=new A.lg(!1) -B.ah=new A.e9(522) -B.ai=new A.iT(B.d,A.vm(),A.aw("iT<~(bC,oc,bC,~())>"))})();(function staticFields(){$.mI=null -$.aU=A.u([],A.aw("M")) -$.qM=null -$.pk=null -$.oZ=null -$.oY=null -$.qG=null -$.qA=null -$.qN=null -$.nm=null -$.nv=null -$.oD=null -$.mK=A.u([],A.aw("M?>")) -$.dm=null -$.eP=null -$.eQ=null -$.ov=!1 -$.E=B.d -$.pE=null -$.pF=null -$.pG=null -$.pH=null -$.od=A.eg("_lastQuoRemDigits") -$.oe=A.eg("_lastQuoRemUsed") -$.ed=A.eg("_lastRemUsed") -$.of=A.eg("_lastRem_nsh") -$.px="" -$.py=null -$.qy=null -$.qo=null -$.qE=A.X(t.S,A.aw("aQ")) -$.j7=A.X(A.aw("j?"),A.aw("aQ")) -$.qp=0 -$.nw=0 -$.ap=null -$.qQ=A.X(t.N,t.X) -$.qx=null -$.eR="/shw2"})();(function lazyInitializers(){var s=hunkHelpers.lazyFinal,r=hunkHelpers.lazy -s($,"w1","oI",()=>A.vv("_$dart_dartClosure")) -s($,"x3","nG",()=>B.d.cL(new A.nz(),A.aw("I

"))) -s($,"wr","qW",()=>A.bz(A.lb({ -toString:function(){return"$receiver$"}}))) -s($,"ws","qX",()=>A.bz(A.lb({$method$:null, -toString:function(){return"$receiver$"}}))) -s($,"wt","qY",()=>A.bz(A.lb(null))) -s($,"wu","qZ",()=>A.bz(function(){var $argumentsExpr$="$arguments$" -try{null.$method$($argumentsExpr$)}catch(q){return q.message}}())) -s($,"wx","r1",()=>A.bz(A.lb(void 0))) -s($,"wy","r2",()=>A.bz(function(){var $argumentsExpr$="$arguments$" -try{(void 0).$method$($argumentsExpr$)}catch(q){return q.message}}())) -s($,"ww","r0",()=>A.bz(A.pv(null))) -s($,"wv","r_",()=>A.bz(function(){try{null.$method$}catch(q){return q.message}}())) -s($,"wA","r4",()=>A.bz(A.pv(void 0))) -s($,"wz","r3",()=>A.bz(function(){try{(void 0).$method$}catch(q){return q.message}}())) -s($,"wE","oK",()=>A.tS()) -s($,"w6","eV",()=>A.aw("C

").a($.nG())) -s($,"wB","r5",()=>new A.li().$0()) -s($,"wC","r6",()=>new A.lh().$0()) -s($,"wF","r7",()=>new Int8Array(A.uM(A.u([-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-2,-2,-2,-2,-2,62,-2,62,-2,63,52,53,54,55,56,57,58,59,60,61,-2,-2,-2,-1,-2,-2,-2,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-2,-2,-2,-2,63,-2,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-2,-2,-2,-2,-2],t.t)))) -s($,"wK","bJ",()=>A.lz(0)) -s($,"wJ","jc",()=>A.lz(1)) -s($,"wH","oM",()=>$.jc().a8(0)) -s($,"wG","oL",()=>A.lz(1e4)) -r($,"wI","r8",()=>A.aV("^\\s*([+-]?)((0x[a-f0-9]+)|(\\d+)|([a-z0-9]+))\\s*$",!1)) -s($,"wL","r9",()=>typeof process!="undefined"&&Object.prototype.toString.call(process)=="[object process]"&&process.platform=="win32") -s($,"wX","nF",()=>A.oG(B.ac)) -s($,"wY","rd",()=>A.uL()) -s($,"wg","oJ",()=>{var q=new A.i7(new DataView(new ArrayBuffer(A.uI(8)))) -q.ew() -return q}) -s($,"x4","oP",()=>{var q=$.nE() -return new A.fe(q)}) -s($,"x0","oO",()=>new A.fe($.qU())) -s($,"wn","qV",()=>new A.h1(A.aV("/",!0),A.aV("[^/]$",!0),A.aV("^/",!0))) -s($,"wp","jb",()=>new A.hG(A.aV("[/\\\\]",!0),A.aV("[^/\\\\]$",!0),A.aV("^(\\\\\\\\[^\\\\]+\\\\[^\\\\/]+|[a-zA-Z]:[/\\\\])",!0),A.aV("^[/\\\\](?![/\\\\])",!0))) -s($,"wo","nE",()=>new A.hw(A.aV("/",!0),A.aV("(^[a-zA-Z][-+.a-zA-Z\\d]*://|[^/])$",!0),A.aV("[a-zA-Z][-+.a-zA-Z\\d]*://[^/]*",!0),A.aV("^/",!0))) -s($,"wm","qU",()=>A.tK()) -s($,"wW","rc",()=>A.nS()) -r($,"wM","oN",()=>A.u([new A.b7("BigInt")],A.aw("M"))) -r($,"wN","ra",()=>{var q=$.oN() -q=A.t1(q,A.ab(q).c) -return q.he(q,new A.n1(),t.N,t.ap)}) -r($,"wV","rb",()=>A.pz("sqlite3.wasm")) -s($,"x_","rf",()=>A.oW("-9223372036854775808")) -s($,"wZ","re",()=>A.oW("9223372036854775807")) -s($,"x2","jd",()=>new A.i0(new FinalizationRegistry(A.c4(A.vP(new A.nn(),t.m),1)),A.aw("i0"))) -s($,"w2","qT",()=>new A.fr(new WeakMap(),A.aw("fr")))})();(function nativeSupport(){!function(){var s=function(a){var m={} -m[a]=1 -return Object.keys(hunkHelpers.convertToFastObject(m))[0]} -v.getIsolateTag=function(a){return s("___dart_"+a+v.isolateTag)} -var r="___dart_isolate_tags_" -var q=Object[r]||(Object[r]=Object.create(null)) -var p="_ZxYxX" -for(var o=0;;o++){var n=s(p+"_"+o+"_") -if(!(n in q)){q[n]=1 -v.isolateTag=n -break}}v.dispatchPropertyName=v.getIsolateTag("dispatch_record")}() -hunkHelpers.setOrUpdateInterceptorsByTag({WebGL:J.cL,AnimationEffectReadOnly:J.a,AnimationEffectTiming:J.a,AnimationEffectTimingReadOnly:J.a,AnimationTimeline:J.a,AnimationWorkletGlobalScope:J.a,AuthenticatorAssertionResponse:J.a,AuthenticatorAttestationResponse:J.a,AuthenticatorResponse:J.a,BackgroundFetchFetch:J.a,BackgroundFetchManager:J.a,BackgroundFetchSettledFetch:J.a,BarProp:J.a,BarcodeDetector:J.a,BluetoothRemoteGATTDescriptor:J.a,Body:J.a,BudgetState:J.a,CacheStorage:J.a,CanvasGradient:J.a,CanvasPattern:J.a,CanvasRenderingContext2D:J.a,Client:J.a,Clients:J.a,CookieStore:J.a,Coordinates:J.a,Credential:J.a,CredentialUserData:J.a,CredentialsContainer:J.a,Crypto:J.a,CryptoKey:J.a,CSS:J.a,CSSVariableReferenceValue:J.a,CustomElementRegistry:J.a,DataTransfer:J.a,DataTransferItem:J.a,DeprecatedStorageInfo:J.a,DeprecatedStorageQuota:J.a,DeprecationReport:J.a,DetectedBarcode:J.a,DetectedFace:J.a,DetectedText:J.a,DeviceAcceleration:J.a,DeviceRotationRate:J.a,DirectoryEntry:J.a,webkitFileSystemDirectoryEntry:J.a,FileSystemDirectoryEntry:J.a,DirectoryReader:J.a,WebKitDirectoryReader:J.a,webkitFileSystemDirectoryReader:J.a,FileSystemDirectoryReader:J.a,DocumentOrShadowRoot:J.a,DocumentTimeline:J.a,DOMError:J.a,DOMImplementation:J.a,Iterator:J.a,DOMMatrix:J.a,DOMMatrixReadOnly:J.a,DOMParser:J.a,DOMPoint:J.a,DOMPointReadOnly:J.a,DOMQuad:J.a,DOMStringMap:J.a,Entry:J.a,webkitFileSystemEntry:J.a,FileSystemEntry:J.a,External:J.a,FaceDetector:J.a,FederatedCredential:J.a,FileEntry:J.a,webkitFileSystemFileEntry:J.a,FileSystemFileEntry:J.a,DOMFileSystem:J.a,WebKitFileSystem:J.a,webkitFileSystem:J.a,FileSystem:J.a,FontFace:J.a,FontFaceSource:J.a,FormData:J.a,GamepadButton:J.a,GamepadPose:J.a,Geolocation:J.a,Position:J.a,GeolocationPosition:J.a,Headers:J.a,HTMLHyperlinkElementUtils:J.a,IdleDeadline:J.a,ImageBitmap:J.a,ImageBitmapRenderingContext:J.a,ImageCapture:J.a,InputDeviceCapabilities:J.a,IntersectionObserver:J.a,IntersectionObserverEntry:J.a,InterventionReport:J.a,KeyframeEffect:J.a,KeyframeEffectReadOnly:J.a,MediaCapabilities:J.a,MediaCapabilitiesInfo:J.a,MediaDeviceInfo:J.a,MediaError:J.a,MediaKeyStatusMap:J.a,MediaKeySystemAccess:J.a,MediaKeys:J.a,MediaKeysPolicy:J.a,MediaMetadata:J.a,MediaSession:J.a,MediaSettingsRange:J.a,MemoryInfo:J.a,MessageChannel:J.a,Metadata:J.a,MutationObserver:J.a,WebKitMutationObserver:J.a,MutationRecord:J.a,NavigationPreloadManager:J.a,Navigator:J.a,NavigatorAutomationInformation:J.a,NavigatorConcurrentHardware:J.a,NavigatorCookies:J.a,NavigatorUserMediaError:J.a,NodeFilter:J.a,NodeIterator:J.a,NonDocumentTypeChildNode:J.a,NonElementParentNode:J.a,NoncedElement:J.a,OffscreenCanvasRenderingContext2D:J.a,OverconstrainedError:J.a,PaintRenderingContext2D:J.a,PaintSize:J.a,PaintWorkletGlobalScope:J.a,PasswordCredential:J.a,Path2D:J.a,PaymentAddress:J.a,PaymentInstruments:J.a,PaymentManager:J.a,PaymentResponse:J.a,PerformanceEntry:J.a,PerformanceLongTaskTiming:J.a,PerformanceMark:J.a,PerformanceMeasure:J.a,PerformanceNavigation:J.a,PerformanceNavigationTiming:J.a,PerformanceObserver:J.a,PerformanceObserverEntryList:J.a,PerformancePaintTiming:J.a,PerformanceResourceTiming:J.a,PerformanceServerTiming:J.a,PerformanceTiming:J.a,Permissions:J.a,PhotoCapabilities:J.a,PositionError:J.a,GeolocationPositionError:J.a,Presentation:J.a,PresentationReceiver:J.a,PublicKeyCredential:J.a,PushManager:J.a,PushMessageData:J.a,PushSubscription:J.a,PushSubscriptionOptions:J.a,Range:J.a,RelatedApplication:J.a,ReportBody:J.a,ReportingObserver:J.a,ResizeObserver:J.a,ResizeObserverEntry:J.a,RTCCertificate:J.a,RTCIceCandidate:J.a,mozRTCIceCandidate:J.a,RTCLegacyStatsReport:J.a,RTCRtpContributingSource:J.a,RTCRtpReceiver:J.a,RTCRtpSender:J.a,RTCSessionDescription:J.a,mozRTCSessionDescription:J.a,RTCStatsResponse:J.a,Screen:J.a,ScrollState:J.a,ScrollTimeline:J.a,Selection:J.a,SpeechRecognitionAlternative:J.a,SpeechSynthesisVoice:J.a,StaticRange:J.a,StorageManager:J.a,StyleMedia:J.a,StylePropertyMap:J.a,StylePropertyMapReadonly:J.a,SyncManager:J.a,TaskAttributionTiming:J.a,TextDetector:J.a,TextMetrics:J.a,TrackDefault:J.a,TreeWalker:J.a,TrustedHTML:J.a,TrustedScriptURL:J.a,TrustedURL:J.a,UnderlyingSourceBase:J.a,URLSearchParams:J.a,VRCoordinateSystem:J.a,VRDisplayCapabilities:J.a,VREyeParameters:J.a,VRFrameData:J.a,VRFrameOfReference:J.a,VRPose:J.a,VRStageBounds:J.a,VRStageBoundsPoint:J.a,VRStageParameters:J.a,ValidityState:J.a,VideoPlaybackQuality:J.a,VideoTrack:J.a,VTTRegion:J.a,WindowClient:J.a,WorkletAnimation:J.a,WorkletGlobalScope:J.a,XPathEvaluator:J.a,XPathExpression:J.a,XPathNSResolver:J.a,XPathResult:J.a,XMLSerializer:J.a,XSLTProcessor:J.a,Bluetooth:J.a,BluetoothCharacteristicProperties:J.a,BluetoothRemoteGATTServer:J.a,BluetoothRemoteGATTService:J.a,BluetoothUUID:J.a,BudgetService:J.a,Cache:J.a,DOMFileSystemSync:J.a,DirectoryEntrySync:J.a,DirectoryReaderSync:J.a,EntrySync:J.a,FileEntrySync:J.a,FileReaderSync:J.a,FileWriterSync:J.a,HTMLAllCollection:J.a,Mojo:J.a,MojoHandle:J.a,MojoWatcher:J.a,NFC:J.a,PagePopupController:J.a,Report:J.a,Request:J.a,Response:J.a,SubtleCrypto:J.a,USBAlternateInterface:J.a,USBConfiguration:J.a,USBDevice:J.a,USBEndpoint:J.a,USBInTransferResult:J.a,USBInterface:J.a,USBIsochronousInTransferPacket:J.a,USBIsochronousInTransferResult:J.a,USBIsochronousOutTransferPacket:J.a,USBIsochronousOutTransferResult:J.a,USBOutTransferResult:J.a,WorkerLocation:J.a,WorkerNavigator:J.a,Worklet:J.a,IDBKeyRange:J.a,IDBObservation:J.a,IDBObserver:J.a,IDBObserverChanges:J.a,SVGAngle:J.a,SVGAnimatedAngle:J.a,SVGAnimatedBoolean:J.a,SVGAnimatedEnumeration:J.a,SVGAnimatedInteger:J.a,SVGAnimatedLength:J.a,SVGAnimatedLengthList:J.a,SVGAnimatedNumber:J.a,SVGAnimatedNumberList:J.a,SVGAnimatedPreserveAspectRatio:J.a,SVGAnimatedRect:J.a,SVGAnimatedString:J.a,SVGAnimatedTransformList:J.a,SVGMatrix:J.a,SVGPoint:J.a,SVGPreserveAspectRatio:J.a,SVGRect:J.a,SVGUnitTypes:J.a,AudioListener:J.a,AudioParam:J.a,AudioTrack:J.a,AudioWorkletGlobalScope:J.a,AudioWorkletProcessor:J.a,PeriodicWave:J.a,WebGLActiveInfo:J.a,ANGLEInstancedArrays:J.a,ANGLE_instanced_arrays:J.a,WebGLBuffer:J.a,WebGLCanvas:J.a,WebGLColorBufferFloat:J.a,WebGLCompressedTextureASTC:J.a,WebGLCompressedTextureATC:J.a,WEBGL_compressed_texture_atc:J.a,WebGLCompressedTextureETC1:J.a,WEBGL_compressed_texture_etc1:J.a,WebGLCompressedTextureETC:J.a,WebGLCompressedTexturePVRTC:J.a,WEBGL_compressed_texture_pvrtc:J.a,WebGLCompressedTextureS3TC:J.a,WEBGL_compressed_texture_s3tc:J.a,WebGLCompressedTextureS3TCsRGB:J.a,WebGLDebugRendererInfo:J.a,WEBGL_debug_renderer_info:J.a,WebGLDebugShaders:J.a,WEBGL_debug_shaders:J.a,WebGLDepthTexture:J.a,WEBGL_depth_texture:J.a,WebGLDrawBuffers:J.a,WEBGL_draw_buffers:J.a,EXTsRGB:J.a,EXT_sRGB:J.a,EXTBlendMinMax:J.a,EXT_blend_minmax:J.a,EXTColorBufferFloat:J.a,EXTColorBufferHalfFloat:J.a,EXTDisjointTimerQuery:J.a,EXTDisjointTimerQueryWebGL2:J.a,EXTFragDepth:J.a,EXT_frag_depth:J.a,EXTShaderTextureLOD:J.a,EXT_shader_texture_lod:J.a,EXTTextureFilterAnisotropic:J.a,EXT_texture_filter_anisotropic:J.a,WebGLFramebuffer:J.a,WebGLGetBufferSubDataAsync:J.a,WebGLLoseContext:J.a,WebGLExtensionLoseContext:J.a,WEBGL_lose_context:J.a,OESElementIndexUint:J.a,OES_element_index_uint:J.a,OESStandardDerivatives:J.a,OES_standard_derivatives:J.a,OESTextureFloat:J.a,OES_texture_float:J.a,OESTextureFloatLinear:J.a,OES_texture_float_linear:J.a,OESTextureHalfFloat:J.a,OES_texture_half_float:J.a,OESTextureHalfFloatLinear:J.a,OES_texture_half_float_linear:J.a,OESVertexArrayObject:J.a,OES_vertex_array_object:J.a,WebGLProgram:J.a,WebGLQuery:J.a,WebGLRenderbuffer:J.a,WebGLRenderingContext:J.a,WebGL2RenderingContext:J.a,WebGLSampler:J.a,WebGLShader:J.a,WebGLShaderPrecisionFormat:J.a,WebGLSync:J.a,WebGLTexture:J.a,WebGLTimerQueryEXT:J.a,WebGLTransformFeedback:J.a,WebGLUniformLocation:J.a,WebGLVertexArrayObject:J.a,WebGLVertexArrayObjectOES:J.a,WebGL2RenderingContextBase:J.a,ArrayBuffer:A.cT,ArrayBufferView:A.a7,DataView:A.dN,Float32Array:A.fN,Float64Array:A.fO,Int16Array:A.fP,Int32Array:A.fQ,Int8Array:A.fR,Uint16Array:A.fS,Uint32Array:A.fT,Uint8ClampedArray:A.dO,CanvasPixelArray:A.dO,Uint8Array:A.dP,HTMLAudioElement:A.q,HTMLBRElement:A.q,HTMLBaseElement:A.q,HTMLBodyElement:A.q,HTMLButtonElement:A.q,HTMLCanvasElement:A.q,HTMLContentElement:A.q,HTMLDListElement:A.q,HTMLDataElement:A.q,HTMLDataListElement:A.q,HTMLDetailsElement:A.q,HTMLDialogElement:A.q,HTMLDivElement:A.q,HTMLEmbedElement:A.q,HTMLFieldSetElement:A.q,HTMLHRElement:A.q,HTMLHeadElement:A.q,HTMLHeadingElement:A.q,HTMLHtmlElement:A.q,HTMLIFrameElement:A.q,HTMLImageElement:A.q,HTMLInputElement:A.q,HTMLLIElement:A.q,HTMLLabelElement:A.q,HTMLLegendElement:A.q,HTMLLinkElement:A.q,HTMLMapElement:A.q,HTMLMediaElement:A.q,HTMLMenuElement:A.q,HTMLMetaElement:A.q,HTMLMeterElement:A.q,HTMLModElement:A.q,HTMLOListElement:A.q,HTMLObjectElement:A.q,HTMLOptGroupElement:A.q,HTMLOptionElement:A.q,HTMLOutputElement:A.q,HTMLParagraphElement:A.q,HTMLParamElement:A.q,HTMLPictureElement:A.q,HTMLPreElement:A.q,HTMLProgressElement:A.q,HTMLQuoteElement:A.q,HTMLScriptElement:A.q,HTMLShadowElement:A.q,HTMLSlotElement:A.q,HTMLSourceElement:A.q,HTMLSpanElement:A.q,HTMLStyleElement:A.q,HTMLTableCaptionElement:A.q,HTMLTableCellElement:A.q,HTMLTableDataCellElement:A.q,HTMLTableHeaderCellElement:A.q,HTMLTableColElement:A.q,HTMLTableElement:A.q,HTMLTableRowElement:A.q,HTMLTableSectionElement:A.q,HTMLTemplateElement:A.q,HTMLTextAreaElement:A.q,HTMLTimeElement:A.q,HTMLTitleElement:A.q,HTMLTrackElement:A.q,HTMLUListElement:A.q,HTMLUnknownElement:A.q,HTMLVideoElement:A.q,HTMLDirectoryElement:A.q,HTMLFontElement:A.q,HTMLFrameElement:A.q,HTMLFrameSetElement:A.q,HTMLMarqueeElement:A.q,HTMLElement:A.q,AccessibleNodeList:A.eX,HTMLAnchorElement:A.eY,HTMLAreaElement:A.eZ,Blob:A.bM,CDATASection:A.bd,CharacterData:A.bd,Comment:A.bd,ProcessingInstruction:A.bd,Text:A.bd,CSSPerspective:A.fg,CSSCharsetRule:A.O,CSSConditionRule:A.O,CSSFontFaceRule:A.O,CSSGroupingRule:A.O,CSSImportRule:A.O,CSSKeyframeRule:A.O,MozCSSKeyframeRule:A.O,WebKitCSSKeyframeRule:A.O,CSSKeyframesRule:A.O,MozCSSKeyframesRule:A.O,WebKitCSSKeyframesRule:A.O,CSSMediaRule:A.O,CSSNamespaceRule:A.O,CSSPageRule:A.O,CSSRule:A.O,CSSStyleRule:A.O,CSSSupportsRule:A.O,CSSViewportRule:A.O,CSSStyleDeclaration:A.cC,MSStyleCSSProperties:A.cC,CSS2Properties:A.cC,CSSImageValue:A.as,CSSKeywordValue:A.as,CSSNumericValue:A.as,CSSPositionValue:A.as,CSSResourceValue:A.as,CSSUnitValue:A.as,CSSURLImageValue:A.as,CSSStyleValue:A.as,CSSMatrixComponent:A.b2,CSSRotation:A.b2,CSSScale:A.b2,CSSSkew:A.b2,CSSTranslation:A.b2,CSSTransformComponent:A.b2,CSSTransformValue:A.fh,CSSUnparsedValue:A.fi,DataTransferItemList:A.fj,DOMException:A.fn,ClientRectList:A.dy,DOMRectList:A.dy,DOMRectReadOnly:A.dz,DOMStringList:A.fo,DOMTokenList:A.fp,MathMLElement:A.p,SVGAElement:A.p,SVGAnimateElement:A.p,SVGAnimateMotionElement:A.p,SVGAnimateTransformElement:A.p,SVGAnimationElement:A.p,SVGCircleElement:A.p,SVGClipPathElement:A.p,SVGDefsElement:A.p,SVGDescElement:A.p,SVGDiscardElement:A.p,SVGEllipseElement:A.p,SVGFEBlendElement:A.p,SVGFEColorMatrixElement:A.p,SVGFEComponentTransferElement:A.p,SVGFECompositeElement:A.p,SVGFEConvolveMatrixElement:A.p,SVGFEDiffuseLightingElement:A.p,SVGFEDisplacementMapElement:A.p,SVGFEDistantLightElement:A.p,SVGFEFloodElement:A.p,SVGFEFuncAElement:A.p,SVGFEFuncBElement:A.p,SVGFEFuncGElement:A.p,SVGFEFuncRElement:A.p,SVGFEGaussianBlurElement:A.p,SVGFEImageElement:A.p,SVGFEMergeElement:A.p,SVGFEMergeNodeElement:A.p,SVGFEMorphologyElement:A.p,SVGFEOffsetElement:A.p,SVGFEPointLightElement:A.p,SVGFESpecularLightingElement:A.p,SVGFESpotLightElement:A.p,SVGFETileElement:A.p,SVGFETurbulenceElement:A.p,SVGFilterElement:A.p,SVGForeignObjectElement:A.p,SVGGElement:A.p,SVGGeometryElement:A.p,SVGGraphicsElement:A.p,SVGImageElement:A.p,SVGLineElement:A.p,SVGLinearGradientElement:A.p,SVGMarkerElement:A.p,SVGMaskElement:A.p,SVGMetadataElement:A.p,SVGPathElement:A.p,SVGPatternElement:A.p,SVGPolygonElement:A.p,SVGPolylineElement:A.p,SVGRadialGradientElement:A.p,SVGRectElement:A.p,SVGScriptElement:A.p,SVGSetElement:A.p,SVGStopElement:A.p,SVGStyleElement:A.p,SVGElement:A.p,SVGSVGElement:A.p,SVGSwitchElement:A.p,SVGSymbolElement:A.p,SVGTSpanElement:A.p,SVGTextContentElement:A.p,SVGTextElement:A.p,SVGTextPathElement:A.p,SVGTextPositioningElement:A.p,SVGTitleElement:A.p,SVGUseElement:A.p,SVGViewElement:A.p,SVGGradientElement:A.p,SVGComponentTransferFunctionElement:A.p,SVGFEDropShadowElement:A.p,SVGMPathElement:A.p,Element:A.p,AbortPaymentEvent:A.m,AnimationEvent:A.m,AnimationPlaybackEvent:A.m,ApplicationCacheErrorEvent:A.m,BackgroundFetchClickEvent:A.m,BackgroundFetchEvent:A.m,BackgroundFetchFailEvent:A.m,BackgroundFetchedEvent:A.m,BeforeInstallPromptEvent:A.m,BeforeUnloadEvent:A.m,BlobEvent:A.m,CanMakePaymentEvent:A.m,ClipboardEvent:A.m,CloseEvent:A.m,CompositionEvent:A.m,CustomEvent:A.m,DeviceMotionEvent:A.m,DeviceOrientationEvent:A.m,ErrorEvent:A.m,ExtendableEvent:A.m,ExtendableMessageEvent:A.m,FetchEvent:A.m,FocusEvent:A.m,FontFaceSetLoadEvent:A.m,ForeignFetchEvent:A.m,GamepadEvent:A.m,HashChangeEvent:A.m,InstallEvent:A.m,KeyboardEvent:A.m,MediaEncryptedEvent:A.m,MediaKeyMessageEvent:A.m,MediaQueryListEvent:A.m,MediaStreamEvent:A.m,MediaStreamTrackEvent:A.m,MIDIConnectionEvent:A.m,MIDIMessageEvent:A.m,MouseEvent:A.m,DragEvent:A.m,MutationEvent:A.m,NotificationEvent:A.m,PageTransitionEvent:A.m,PaymentRequestEvent:A.m,PaymentRequestUpdateEvent:A.m,PointerEvent:A.m,PopStateEvent:A.m,PresentationConnectionAvailableEvent:A.m,PresentationConnectionCloseEvent:A.m,ProgressEvent:A.m,PromiseRejectionEvent:A.m,PushEvent:A.m,RTCDataChannelEvent:A.m,RTCDTMFToneChangeEvent:A.m,RTCPeerConnectionIceEvent:A.m,RTCTrackEvent:A.m,SecurityPolicyViolationEvent:A.m,SensorErrorEvent:A.m,SpeechRecognitionError:A.m,SpeechRecognitionEvent:A.m,SpeechSynthesisEvent:A.m,StorageEvent:A.m,SyncEvent:A.m,TextEvent:A.m,TouchEvent:A.m,TrackEvent:A.m,TransitionEvent:A.m,WebKitTransitionEvent:A.m,UIEvent:A.m,VRDeviceEvent:A.m,VRDisplayEvent:A.m,VRSessionEvent:A.m,WheelEvent:A.m,MojoInterfaceRequestEvent:A.m,ResourceProgressEvent:A.m,USBConnectionEvent:A.m,AudioProcessingEvent:A.m,OfflineAudioCompletionEvent:A.m,WebGLContextEvent:A.m,Event:A.m,InputEvent:A.m,SubmitEvent:A.m,AbsoluteOrientationSensor:A.f,Accelerometer:A.f,AccessibleNode:A.f,AmbientLightSensor:A.f,Animation:A.f,ApplicationCache:A.f,DOMApplicationCache:A.f,OfflineResourceList:A.f,BackgroundFetchRegistration:A.f,BatteryManager:A.f,BroadcastChannel:A.f,CanvasCaptureMediaStreamTrack:A.f,EventSource:A.f,FileReader:A.f,FontFaceSet:A.f,Gyroscope:A.f,XMLHttpRequest:A.f,XMLHttpRequestEventTarget:A.f,XMLHttpRequestUpload:A.f,LinearAccelerationSensor:A.f,Magnetometer:A.f,MediaDevices:A.f,MediaKeySession:A.f,MediaQueryList:A.f,MediaRecorder:A.f,MediaSource:A.f,MediaStream:A.f,MediaStreamTrack:A.f,MIDIAccess:A.f,MIDIInput:A.f,MIDIOutput:A.f,MIDIPort:A.f,NetworkInformation:A.f,Notification:A.f,OffscreenCanvas:A.f,OrientationSensor:A.f,PaymentRequest:A.f,Performance:A.f,PermissionStatus:A.f,PresentationAvailability:A.f,PresentationConnection:A.f,PresentationConnectionList:A.f,PresentationRequest:A.f,RelativeOrientationSensor:A.f,RemotePlayback:A.f,RTCDataChannel:A.f,DataChannel:A.f,RTCDTMFSender:A.f,RTCPeerConnection:A.f,webkitRTCPeerConnection:A.f,mozRTCPeerConnection:A.f,ScreenOrientation:A.f,Sensor:A.f,ServiceWorker:A.f,ServiceWorkerContainer:A.f,ServiceWorkerRegistration:A.f,SharedWorker:A.f,SpeechRecognition:A.f,webkitSpeechRecognition:A.f,SpeechSynthesis:A.f,SpeechSynthesisUtterance:A.f,VR:A.f,VRDevice:A.f,VRDisplay:A.f,VRSession:A.f,VisualViewport:A.f,WebSocket:A.f,Window:A.f,DOMWindow:A.f,Worker:A.f,WorkerPerformance:A.f,BluetoothDevice:A.f,BluetoothRemoteGATTCharacteristic:A.f,Clipboard:A.f,MojoInterfaceInterceptor:A.f,USB:A.f,AnalyserNode:A.f,RealtimeAnalyserNode:A.f,AudioBufferSourceNode:A.f,AudioDestinationNode:A.f,AudioNode:A.f,AudioScheduledSourceNode:A.f,AudioWorkletNode:A.f,BiquadFilterNode:A.f,ChannelMergerNode:A.f,AudioChannelMerger:A.f,ChannelSplitterNode:A.f,AudioChannelSplitter:A.f,ConstantSourceNode:A.f,ConvolverNode:A.f,DelayNode:A.f,DynamicsCompressorNode:A.f,GainNode:A.f,AudioGainNode:A.f,IIRFilterNode:A.f,MediaElementAudioSourceNode:A.f,MediaStreamAudioDestinationNode:A.f,MediaStreamAudioSourceNode:A.f,OscillatorNode:A.f,Oscillator:A.f,PannerNode:A.f,AudioPannerNode:A.f,webkitAudioPannerNode:A.f,ScriptProcessorNode:A.f,JavaScriptAudioNode:A.f,StereoPannerNode:A.f,WaveShaperNode:A.f,EventTarget:A.f,File:A.ay,FileList:A.cG,FileWriter:A.ft,HTMLFormElement:A.fv,Gamepad:A.az,History:A.fw,HTMLCollection:A.cc,HTMLFormControlsCollection:A.cc,HTMLOptionsCollection:A.cc,ImageData:A.cK,Location:A.fH,MediaList:A.fJ,MessageEvent:A.cS,MessagePort:A.cg,MIDIInputMap:A.fK,MIDIOutputMap:A.fL,MimeType:A.aB,MimeTypeArray:A.fM,Document:A.H,DocumentFragment:A.H,HTMLDocument:A.H,ShadowRoot:A.H,XMLDocument:A.H,Attr:A.H,DocumentType:A.H,Node:A.H,NodeList:A.dQ,RadioNodeList:A.dQ,Plugin:A.aC,PluginArray:A.h_,RTCStatsReport:A.h5,HTMLSelectElement:A.h7,SharedArrayBuffer:A.cW,SharedWorkerGlobalScope:A.cX,SourceBuffer:A.aD,SourceBufferList:A.h9,SpeechGrammar:A.aE,SpeechGrammarList:A.ha,SpeechRecognitionResult:A.aF,Storage:A.hg,CSSStyleSheet:A.an,StyleSheet:A.an,TextTrack:A.aH,TextTrackCue:A.ao,VTTCue:A.ao,TextTrackCueList:A.hj,TextTrackList:A.hk,TimeRanges:A.hl,Touch:A.aI,TouchList:A.hm,TrackDefaultList:A.hn,URL:A.hv,VideoTrackList:A.hy,DedicatedWorkerGlobalScope:A.bY,ServiceWorkerGlobalScope:A.bY,WorkerGlobalScope:A.bY,CSSRuleList:A.hP,ClientRect:A.ei,DOMRect:A.ei,GamepadList:A.i2,NamedNodeMap:A.er,MozNamedAttrMap:A.er,SpeechRecognitionResultList:A.iA,StyleSheetList:A.iK,IDBCursor:A.bO,IDBCursorWithValue:A.bo,IDBDatabase:A.be,IDBFactory:A.cJ,IDBIndex:A.dE,IDBObjectStore:A.dS,IDBOpenDBRequest:A.bu,IDBVersionChangeRequest:A.bu,IDBRequest:A.bu,IDBTransaction:A.e6,IDBVersionChangeEvent:A.bA,SVGLength:A.aL,SVGLengthList:A.fF,SVGNumber:A.aN,SVGNumberList:A.fW,SVGPointList:A.h0,SVGStringList:A.hh,SVGTransform:A.aR,SVGTransformList:A.ho,AudioBuffer:A.f1,AudioParamMap:A.f2,AudioTrackList:A.f3,AudioContext:A.bL,webkitAudioContext:A.bL,BaseAudioContext:A.bL,OfflineAudioContext:A.fX}) -hunkHelpers.setOrUpdateLeafTags({WebGL:true,AnimationEffectReadOnly:true,AnimationEffectTiming:true,AnimationEffectTimingReadOnly:true,AnimationTimeline:true,AnimationWorkletGlobalScope:true,AuthenticatorAssertionResponse:true,AuthenticatorAttestationResponse:true,AuthenticatorResponse:true,BackgroundFetchFetch:true,BackgroundFetchManager:true,BackgroundFetchSettledFetch:true,BarProp:true,BarcodeDetector:true,BluetoothRemoteGATTDescriptor:true,Body:true,BudgetState:true,CacheStorage:true,CanvasGradient:true,CanvasPattern:true,CanvasRenderingContext2D:true,Client:true,Clients:true,CookieStore:true,Coordinates:true,Credential:true,CredentialUserData:true,CredentialsContainer:true,Crypto:true,CryptoKey:true,CSS:true,CSSVariableReferenceValue:true,CustomElementRegistry:true,DataTransfer:true,DataTransferItem:true,DeprecatedStorageInfo:true,DeprecatedStorageQuota:true,DeprecationReport:true,DetectedBarcode:true,DetectedFace:true,DetectedText:true,DeviceAcceleration:true,DeviceRotationRate:true,DirectoryEntry:true,webkitFileSystemDirectoryEntry:true,FileSystemDirectoryEntry:true,DirectoryReader:true,WebKitDirectoryReader:true,webkitFileSystemDirectoryReader:true,FileSystemDirectoryReader:true,DocumentOrShadowRoot:true,DocumentTimeline:true,DOMError:true,DOMImplementation:true,Iterator:true,DOMMatrix:true,DOMMatrixReadOnly:true,DOMParser:true,DOMPoint:true,DOMPointReadOnly:true,DOMQuad:true,DOMStringMap:true,Entry:true,webkitFileSystemEntry:true,FileSystemEntry:true,External:true,FaceDetector:true,FederatedCredential:true,FileEntry:true,webkitFileSystemFileEntry:true,FileSystemFileEntry:true,DOMFileSystem:true,WebKitFileSystem:true,webkitFileSystem:true,FileSystem:true,FontFace:true,FontFaceSource:true,FormData:true,GamepadButton:true,GamepadPose:true,Geolocation:true,Position:true,GeolocationPosition:true,Headers:true,HTMLHyperlinkElementUtils:true,IdleDeadline:true,ImageBitmap:true,ImageBitmapRenderingContext:true,ImageCapture:true,InputDeviceCapabilities:true,IntersectionObserver:true,IntersectionObserverEntry:true,InterventionReport:true,KeyframeEffect:true,KeyframeEffectReadOnly:true,MediaCapabilities:true,MediaCapabilitiesInfo:true,MediaDeviceInfo:true,MediaError:true,MediaKeyStatusMap:true,MediaKeySystemAccess:true,MediaKeys:true,MediaKeysPolicy:true,MediaMetadata:true,MediaSession:true,MediaSettingsRange:true,MemoryInfo:true,MessageChannel:true,Metadata:true,MutationObserver:true,WebKitMutationObserver:true,MutationRecord:true,NavigationPreloadManager:true,Navigator:true,NavigatorAutomationInformation:true,NavigatorConcurrentHardware:true,NavigatorCookies:true,NavigatorUserMediaError:true,NodeFilter:true,NodeIterator:true,NonDocumentTypeChildNode:true,NonElementParentNode:true,NoncedElement:true,OffscreenCanvasRenderingContext2D:true,OverconstrainedError:true,PaintRenderingContext2D:true,PaintSize:true,PaintWorkletGlobalScope:true,PasswordCredential:true,Path2D:true,PaymentAddress:true,PaymentInstruments:true,PaymentManager:true,PaymentResponse:true,PerformanceEntry:true,PerformanceLongTaskTiming:true,PerformanceMark:true,PerformanceMeasure:true,PerformanceNavigation:true,PerformanceNavigationTiming:true,PerformanceObserver:true,PerformanceObserverEntryList:true,PerformancePaintTiming:true,PerformanceResourceTiming:true,PerformanceServerTiming:true,PerformanceTiming:true,Permissions:true,PhotoCapabilities:true,PositionError:true,GeolocationPositionError:true,Presentation:true,PresentationReceiver:true,PublicKeyCredential:true,PushManager:true,PushMessageData:true,PushSubscription:true,PushSubscriptionOptions:true,Range:true,RelatedApplication:true,ReportBody:true,ReportingObserver:true,ResizeObserver:true,ResizeObserverEntry:true,RTCCertificate:true,RTCIceCandidate:true,mozRTCIceCandidate:true,RTCLegacyStatsReport:true,RTCRtpContributingSource:true,RTCRtpReceiver:true,RTCRtpSender:true,RTCSessionDescription:true,mozRTCSessionDescription:true,RTCStatsResponse:true,Screen:true,ScrollState:true,ScrollTimeline:true,Selection:true,SpeechRecognitionAlternative:true,SpeechSynthesisVoice:true,StaticRange:true,StorageManager:true,StyleMedia:true,StylePropertyMap:true,StylePropertyMapReadonly:true,SyncManager:true,TaskAttributionTiming:true,TextDetector:true,TextMetrics:true,TrackDefault:true,TreeWalker:true,TrustedHTML:true,TrustedScriptURL:true,TrustedURL:true,UnderlyingSourceBase:true,URLSearchParams:true,VRCoordinateSystem:true,VRDisplayCapabilities:true,VREyeParameters:true,VRFrameData:true,VRFrameOfReference:true,VRPose:true,VRStageBounds:true,VRStageBoundsPoint:true,VRStageParameters:true,ValidityState:true,VideoPlaybackQuality:true,VideoTrack:true,VTTRegion:true,WindowClient:true,WorkletAnimation:true,WorkletGlobalScope:true,XPathEvaluator:true,XPathExpression:true,XPathNSResolver:true,XPathResult:true,XMLSerializer:true,XSLTProcessor:true,Bluetooth:true,BluetoothCharacteristicProperties:true,BluetoothRemoteGATTServer:true,BluetoothRemoteGATTService:true,BluetoothUUID:true,BudgetService:true,Cache:true,DOMFileSystemSync:true,DirectoryEntrySync:true,DirectoryReaderSync:true,EntrySync:true,FileEntrySync:true,FileReaderSync:true,FileWriterSync:true,HTMLAllCollection:true,Mojo:true,MojoHandle:true,MojoWatcher:true,NFC:true,PagePopupController:true,Report:true,Request:true,Response:true,SubtleCrypto:true,USBAlternateInterface:true,USBConfiguration:true,USBDevice:true,USBEndpoint:true,USBInTransferResult:true,USBInterface:true,USBIsochronousInTransferPacket:true,USBIsochronousInTransferResult:true,USBIsochronousOutTransferPacket:true,USBIsochronousOutTransferResult:true,USBOutTransferResult:true,WorkerLocation:true,WorkerNavigator:true,Worklet:true,IDBKeyRange:true,IDBObservation:true,IDBObserver:true,IDBObserverChanges:true,SVGAngle:true,SVGAnimatedAngle:true,SVGAnimatedBoolean:true,SVGAnimatedEnumeration:true,SVGAnimatedInteger:true,SVGAnimatedLength:true,SVGAnimatedLengthList:true,SVGAnimatedNumber:true,SVGAnimatedNumberList:true,SVGAnimatedPreserveAspectRatio:true,SVGAnimatedRect:true,SVGAnimatedString:true,SVGAnimatedTransformList:true,SVGMatrix:true,SVGPoint:true,SVGPreserveAspectRatio:true,SVGRect:true,SVGUnitTypes:true,AudioListener:true,AudioParam:true,AudioTrack:true,AudioWorkletGlobalScope:true,AudioWorkletProcessor:true,PeriodicWave:true,WebGLActiveInfo:true,ANGLEInstancedArrays:true,ANGLE_instanced_arrays:true,WebGLBuffer:true,WebGLCanvas:true,WebGLColorBufferFloat:true,WebGLCompressedTextureASTC:true,WebGLCompressedTextureATC:true,WEBGL_compressed_texture_atc:true,WebGLCompressedTextureETC1:true,WEBGL_compressed_texture_etc1:true,WebGLCompressedTextureETC:true,WebGLCompressedTexturePVRTC:true,WEBGL_compressed_texture_pvrtc:true,WebGLCompressedTextureS3TC:true,WEBGL_compressed_texture_s3tc:true,WebGLCompressedTextureS3TCsRGB:true,WebGLDebugRendererInfo:true,WEBGL_debug_renderer_info:true,WebGLDebugShaders:true,WEBGL_debug_shaders:true,WebGLDepthTexture:true,WEBGL_depth_texture:true,WebGLDrawBuffers:true,WEBGL_draw_buffers:true,EXTsRGB:true,EXT_sRGB:true,EXTBlendMinMax:true,EXT_blend_minmax:true,EXTColorBufferFloat:true,EXTColorBufferHalfFloat:true,EXTDisjointTimerQuery:true,EXTDisjointTimerQueryWebGL2:true,EXTFragDepth:true,EXT_frag_depth:true,EXTShaderTextureLOD:true,EXT_shader_texture_lod:true,EXTTextureFilterAnisotropic:true,EXT_texture_filter_anisotropic:true,WebGLFramebuffer:true,WebGLGetBufferSubDataAsync:true,WebGLLoseContext:true,WebGLExtensionLoseContext:true,WEBGL_lose_context:true,OESElementIndexUint:true,OES_element_index_uint:true,OESStandardDerivatives:true,OES_standard_derivatives:true,OESTextureFloat:true,OES_texture_float:true,OESTextureFloatLinear:true,OES_texture_float_linear:true,OESTextureHalfFloat:true,OES_texture_half_float:true,OESTextureHalfFloatLinear:true,OES_texture_half_float_linear:true,OESVertexArrayObject:true,OES_vertex_array_object:true,WebGLProgram:true,WebGLQuery:true,WebGLRenderbuffer:true,WebGLRenderingContext:true,WebGL2RenderingContext:true,WebGLSampler:true,WebGLShader:true,WebGLShaderPrecisionFormat:true,WebGLSync:true,WebGLTexture:true,WebGLTimerQueryEXT:true,WebGLTransformFeedback:true,WebGLUniformLocation:true,WebGLVertexArrayObject:true,WebGLVertexArrayObjectOES:true,WebGL2RenderingContextBase:true,ArrayBuffer:true,ArrayBufferView:false,DataView:true,Float32Array:true,Float64Array:true,Int16Array:true,Int32Array:true,Int8Array:true,Uint16Array:true,Uint32Array:true,Uint8ClampedArray:true,CanvasPixelArray:true,Uint8Array:false,HTMLAudioElement:true,HTMLBRElement:true,HTMLBaseElement:true,HTMLBodyElement:true,HTMLButtonElement:true,HTMLCanvasElement:true,HTMLContentElement:true,HTMLDListElement:true,HTMLDataElement:true,HTMLDataListElement:true,HTMLDetailsElement:true,HTMLDialogElement:true,HTMLDivElement:true,HTMLEmbedElement:true,HTMLFieldSetElement:true,HTMLHRElement:true,HTMLHeadElement:true,HTMLHeadingElement:true,HTMLHtmlElement:true,HTMLIFrameElement:true,HTMLImageElement:true,HTMLInputElement:true,HTMLLIElement:true,HTMLLabelElement:true,HTMLLegendElement:true,HTMLLinkElement:true,HTMLMapElement:true,HTMLMediaElement:true,HTMLMenuElement:true,HTMLMetaElement:true,HTMLMeterElement:true,HTMLModElement:true,HTMLOListElement:true,HTMLObjectElement:true,HTMLOptGroupElement:true,HTMLOptionElement:true,HTMLOutputElement:true,HTMLParagraphElement:true,HTMLParamElement:true,HTMLPictureElement:true,HTMLPreElement:true,HTMLProgressElement:true,HTMLQuoteElement:true,HTMLScriptElement:true,HTMLShadowElement:true,HTMLSlotElement:true,HTMLSourceElement:true,HTMLSpanElement:true,HTMLStyleElement:true,HTMLTableCaptionElement:true,HTMLTableCellElement:true,HTMLTableDataCellElement:true,HTMLTableHeaderCellElement:true,HTMLTableColElement:true,HTMLTableElement:true,HTMLTableRowElement:true,HTMLTableSectionElement:true,HTMLTemplateElement:true,HTMLTextAreaElement:true,HTMLTimeElement:true,HTMLTitleElement:true,HTMLTrackElement:true,HTMLUListElement:true,HTMLUnknownElement:true,HTMLVideoElement:true,HTMLDirectoryElement:true,HTMLFontElement:true,HTMLFrameElement:true,HTMLFrameSetElement:true,HTMLMarqueeElement:true,HTMLElement:false,AccessibleNodeList:true,HTMLAnchorElement:true,HTMLAreaElement:true,Blob:false,CDATASection:true,CharacterData:true,Comment:true,ProcessingInstruction:true,Text:true,CSSPerspective:true,CSSCharsetRule:true,CSSConditionRule:true,CSSFontFaceRule:true,CSSGroupingRule:true,CSSImportRule:true,CSSKeyframeRule:true,MozCSSKeyframeRule:true,WebKitCSSKeyframeRule:true,CSSKeyframesRule:true,MozCSSKeyframesRule:true,WebKitCSSKeyframesRule:true,CSSMediaRule:true,CSSNamespaceRule:true,CSSPageRule:true,CSSRule:true,CSSStyleRule:true,CSSSupportsRule:true,CSSViewportRule:true,CSSStyleDeclaration:true,MSStyleCSSProperties:true,CSS2Properties:true,CSSImageValue:true,CSSKeywordValue:true,CSSNumericValue:true,CSSPositionValue:true,CSSResourceValue:true,CSSUnitValue:true,CSSURLImageValue:true,CSSStyleValue:false,CSSMatrixComponent:true,CSSRotation:true,CSSScale:true,CSSSkew:true,CSSTranslation:true,CSSTransformComponent:false,CSSTransformValue:true,CSSUnparsedValue:true,DataTransferItemList:true,DOMException:true,ClientRectList:true,DOMRectList:true,DOMRectReadOnly:false,DOMStringList:true,DOMTokenList:true,MathMLElement:true,SVGAElement:true,SVGAnimateElement:true,SVGAnimateMotionElement:true,SVGAnimateTransformElement:true,SVGAnimationElement:true,SVGCircleElement:true,SVGClipPathElement:true,SVGDefsElement:true,SVGDescElement:true,SVGDiscardElement:true,SVGEllipseElement:true,SVGFEBlendElement:true,SVGFEColorMatrixElement:true,SVGFEComponentTransferElement:true,SVGFECompositeElement:true,SVGFEConvolveMatrixElement:true,SVGFEDiffuseLightingElement:true,SVGFEDisplacementMapElement:true,SVGFEDistantLightElement:true,SVGFEFloodElement:true,SVGFEFuncAElement:true,SVGFEFuncBElement:true,SVGFEFuncGElement:true,SVGFEFuncRElement:true,SVGFEGaussianBlurElement:true,SVGFEImageElement:true,SVGFEMergeElement:true,SVGFEMergeNodeElement:true,SVGFEMorphologyElement:true,SVGFEOffsetElement:true,SVGFEPointLightElement:true,SVGFESpecularLightingElement:true,SVGFESpotLightElement:true,SVGFETileElement:true,SVGFETurbulenceElement:true,SVGFilterElement:true,SVGForeignObjectElement:true,SVGGElement:true,SVGGeometryElement:true,SVGGraphicsElement:true,SVGImageElement:true,SVGLineElement:true,SVGLinearGradientElement:true,SVGMarkerElement:true,SVGMaskElement:true,SVGMetadataElement:true,SVGPathElement:true,SVGPatternElement:true,SVGPolygonElement:true,SVGPolylineElement:true,SVGRadialGradientElement:true,SVGRectElement:true,SVGScriptElement:true,SVGSetElement:true,SVGStopElement:true,SVGStyleElement:true,SVGElement:true,SVGSVGElement:true,SVGSwitchElement:true,SVGSymbolElement:true,SVGTSpanElement:true,SVGTextContentElement:true,SVGTextElement:true,SVGTextPathElement:true,SVGTextPositioningElement:true,SVGTitleElement:true,SVGUseElement:true,SVGViewElement:true,SVGGradientElement:true,SVGComponentTransferFunctionElement:true,SVGFEDropShadowElement:true,SVGMPathElement:true,Element:false,AbortPaymentEvent:true,AnimationEvent:true,AnimationPlaybackEvent:true,ApplicationCacheErrorEvent:true,BackgroundFetchClickEvent:true,BackgroundFetchEvent:true,BackgroundFetchFailEvent:true,BackgroundFetchedEvent:true,BeforeInstallPromptEvent:true,BeforeUnloadEvent:true,BlobEvent:true,CanMakePaymentEvent:true,ClipboardEvent:true,CloseEvent:true,CompositionEvent:true,CustomEvent:true,DeviceMotionEvent:true,DeviceOrientationEvent:true,ErrorEvent:true,ExtendableEvent:true,ExtendableMessageEvent:true,FetchEvent:true,FocusEvent:true,FontFaceSetLoadEvent:true,ForeignFetchEvent:true,GamepadEvent:true,HashChangeEvent:true,InstallEvent:true,KeyboardEvent:true,MediaEncryptedEvent:true,MediaKeyMessageEvent:true,MediaQueryListEvent:true,MediaStreamEvent:true,MediaStreamTrackEvent:true,MIDIConnectionEvent:true,MIDIMessageEvent:true,MouseEvent:true,DragEvent:true,MutationEvent:true,NotificationEvent:true,PageTransitionEvent:true,PaymentRequestEvent:true,PaymentRequestUpdateEvent:true,PointerEvent:true,PopStateEvent:true,PresentationConnectionAvailableEvent:true,PresentationConnectionCloseEvent:true,ProgressEvent:true,PromiseRejectionEvent:true,PushEvent:true,RTCDataChannelEvent:true,RTCDTMFToneChangeEvent:true,RTCPeerConnectionIceEvent:true,RTCTrackEvent:true,SecurityPolicyViolationEvent:true,SensorErrorEvent:true,SpeechRecognitionError:true,SpeechRecognitionEvent:true,SpeechSynthesisEvent:true,StorageEvent:true,SyncEvent:true,TextEvent:true,TouchEvent:true,TrackEvent:true,TransitionEvent:true,WebKitTransitionEvent:true,UIEvent:true,VRDeviceEvent:true,VRDisplayEvent:true,VRSessionEvent:true,WheelEvent:true,MojoInterfaceRequestEvent:true,ResourceProgressEvent:true,USBConnectionEvent:true,AudioProcessingEvent:true,OfflineAudioCompletionEvent:true,WebGLContextEvent:true,Event:false,InputEvent:false,SubmitEvent:false,AbsoluteOrientationSensor:true,Accelerometer:true,AccessibleNode:true,AmbientLightSensor:true,Animation:true,ApplicationCache:true,DOMApplicationCache:true,OfflineResourceList:true,BackgroundFetchRegistration:true,BatteryManager:true,BroadcastChannel:true,CanvasCaptureMediaStreamTrack:true,EventSource:true,FileReader:true,FontFaceSet:true,Gyroscope:true,XMLHttpRequest:true,XMLHttpRequestEventTarget:true,XMLHttpRequestUpload:true,LinearAccelerationSensor:true,Magnetometer:true,MediaDevices:true,MediaKeySession:true,MediaQueryList:true,MediaRecorder:true,MediaSource:true,MediaStream:true,MediaStreamTrack:true,MIDIAccess:true,MIDIInput:true,MIDIOutput:true,MIDIPort:true,NetworkInformation:true,Notification:true,OffscreenCanvas:true,OrientationSensor:true,PaymentRequest:true,Performance:true,PermissionStatus:true,PresentationAvailability:true,PresentationConnection:true,PresentationConnectionList:true,PresentationRequest:true,RelativeOrientationSensor:true,RemotePlayback:true,RTCDataChannel:true,DataChannel:true,RTCDTMFSender:true,RTCPeerConnection:true,webkitRTCPeerConnection:true,mozRTCPeerConnection:true,ScreenOrientation:true,Sensor:true,ServiceWorker:true,ServiceWorkerContainer:true,ServiceWorkerRegistration:true,SharedWorker:true,SpeechRecognition:true,webkitSpeechRecognition:true,SpeechSynthesis:true,SpeechSynthesisUtterance:true,VR:true,VRDevice:true,VRDisplay:true,VRSession:true,VisualViewport:true,WebSocket:true,Window:true,DOMWindow:true,Worker:true,WorkerPerformance:true,BluetoothDevice:true,BluetoothRemoteGATTCharacteristic:true,Clipboard:true,MojoInterfaceInterceptor:true,USB:true,AnalyserNode:true,RealtimeAnalyserNode:true,AudioBufferSourceNode:true,AudioDestinationNode:true,AudioNode:true,AudioScheduledSourceNode:true,AudioWorkletNode:true,BiquadFilterNode:true,ChannelMergerNode:true,AudioChannelMerger:true,ChannelSplitterNode:true,AudioChannelSplitter:true,ConstantSourceNode:true,ConvolverNode:true,DelayNode:true,DynamicsCompressorNode:true,GainNode:true,AudioGainNode:true,IIRFilterNode:true,MediaElementAudioSourceNode:true,MediaStreamAudioDestinationNode:true,MediaStreamAudioSourceNode:true,OscillatorNode:true,Oscillator:true,PannerNode:true,AudioPannerNode:true,webkitAudioPannerNode:true,ScriptProcessorNode:true,JavaScriptAudioNode:true,StereoPannerNode:true,WaveShaperNode:true,EventTarget:false,File:true,FileList:true,FileWriter:true,HTMLFormElement:true,Gamepad:true,History:true,HTMLCollection:true,HTMLFormControlsCollection:true,HTMLOptionsCollection:true,ImageData:true,Location:true,MediaList:true,MessageEvent:true,MessagePort:true,MIDIInputMap:true,MIDIOutputMap:true,MimeType:true,MimeTypeArray:true,Document:true,DocumentFragment:true,HTMLDocument:true,ShadowRoot:true,XMLDocument:true,Attr:true,DocumentType:true,Node:false,NodeList:true,RadioNodeList:true,Plugin:true,PluginArray:true,RTCStatsReport:true,HTMLSelectElement:true,SharedArrayBuffer:true,SharedWorkerGlobalScope:true,SourceBuffer:true,SourceBufferList:true,SpeechGrammar:true,SpeechGrammarList:true,SpeechRecognitionResult:true,Storage:true,CSSStyleSheet:true,StyleSheet:true,TextTrack:true,TextTrackCue:true,VTTCue:true,TextTrackCueList:true,TextTrackList:true,TimeRanges:true,Touch:true,TouchList:true,TrackDefaultList:true,URL:true,VideoTrackList:true,DedicatedWorkerGlobalScope:true,ServiceWorkerGlobalScope:true,WorkerGlobalScope:false,CSSRuleList:true,ClientRect:true,DOMRect:true,GamepadList:true,NamedNodeMap:true,MozNamedAttrMap:true,SpeechRecognitionResultList:true,StyleSheetList:true,IDBCursor:false,IDBCursorWithValue:true,IDBDatabase:true,IDBFactory:true,IDBIndex:true,IDBObjectStore:true,IDBOpenDBRequest:true,IDBVersionChangeRequest:true,IDBRequest:true,IDBTransaction:true,IDBVersionChangeEvent:true,SVGLength:true,SVGLengthList:true,SVGNumber:true,SVGNumberList:true,SVGPointList:true,SVGStringList:true,SVGTransform:true,SVGTransformList:true,AudioBuffer:true,AudioParamMap:true,AudioTrackList:true,AudioContext:true,webkitAudioContext:true,BaseAudioContext:false,OfflineAudioContext:true}) -A.ah.$nativeSuperclassTag="ArrayBufferView" -A.es.$nativeSuperclassTag="ArrayBufferView" -A.et.$nativeSuperclassTag="ArrayBufferView" -A.bS.$nativeSuperclassTag="ArrayBufferView" -A.eu.$nativeSuperclassTag="ArrayBufferView" -A.ev.$nativeSuperclassTag="ArrayBufferView" -A.aM.$nativeSuperclassTag="ArrayBufferView" -A.ex.$nativeSuperclassTag="EventTarget" -A.ey.$nativeSuperclassTag="EventTarget" -A.eD.$nativeSuperclassTag="EventTarget" -A.eE.$nativeSuperclassTag="EventTarget"})() -Function.prototype.$2=function(a,b){return this(a,b)} -Function.prototype.$1=function(a){return this(a)} -Function.prototype.$0=function(){return this()} -Function.prototype.$3$3=function(a,b,c){return this(a,b,c)} -Function.prototype.$2$2=function(a,b){return this(a,b)} -Function.prototype.$1$1=function(a){return this(a)} -Function.prototype.$2$1=function(a){return this(a)} -Function.prototype.$3=function(a,b,c){return this(a,b,c)} -Function.prototype.$4=function(a,b,c,d){return this(a,b,c,d)} -Function.prototype.$3$1=function(a){return this(a)} -Function.prototype.$1$0=function(){return this()} -Function.prototype.$5=function(a,b,c,d,e){return this(a,b,c,d,e)} -Function.prototype.$6=function(a,b,c,d,e,f){return this(a,b,c,d,e,f)} -Function.prototype.$2$3=function(a,b,c){return this(a,b,c)} -Function.prototype.$1$2=function(a,b){return this(a,b)} -convertAllToFastObject(w) -convertToFastObject($);(function(a){if(typeof document==="undefined"){a(null) -return}if(typeof document.currentScript!="undefined"){a(document.currentScript) -return}var s=document.scripts -function onLoad(b){for(var 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

HIh61lwGHb-9Az3(D8*`7VrRg!+V7Yg2iR1m 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
PX-W)Ci35Bz_q#~?4_qE1}Od+RP;nL;> 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 z�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 B^RNH_ diff --git a/example/windows/.gitignore b/example/windows/.gitignore deleted file mode 100644 index d492d0d..0000000 --- a/example/windows/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -flutter/ephemeral/ - -# Visual Studio user-specific files. -*.suo -*.user -*.userosscache -*.sln.docstates - -# Visual Studio build-related files. -x64/ -x86/ - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ diff --git a/example/windows/CMakeLists.txt b/example/windows/CMakeLists.txt deleted file mode 100644 index 825870b..0000000 --- a/example/windows/CMakeLists.txt +++ /dev/null @@ -1,95 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(assecontservices_example LANGUAGES CXX) - -set(BINARY_NAME "assecontservices_example") - -cmake_policy(SET CMP0063 NEW) - -set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") - -# Configure build options. -get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) -if(IS_MULTICONFIG) - set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" - CACHE STRING "" FORCE) -else() - if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE "Debug" CACHE - STRING "Flutter build mode" FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS - "Debug" "Profile" "Release") - endif() -endif() - -set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") -set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") -set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") -set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") - -# Use Unicode for all projects. -add_definitions(-DUNICODE -D_UNICODE) - -# Compilation settings that should be applied to most targets. -function(APPLY_STANDARD_SETTINGS TARGET) - target_compile_features(${TARGET} PUBLIC cxx_std_17) - target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") - target_compile_options(${TARGET} PRIVATE /EHsc) - target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") - target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") -endfunction() - -set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") - -# Flutter library and tool build rules. -add_subdirectory(${FLUTTER_MANAGED_DIR}) - -# Application build -add_subdirectory("runner") - -# Generated plugin build rules, which manage building the plugins and adding -# them to the application. -include(flutter/generated_plugins.cmake) - - -# === Installation === -# Support files are copied into place next to the executable, so that it can -# run in place. This is done instead of making a separate bundle (as on Linux) -# so that building and running from within Visual Studio will work. -set(BUILD_BUNDLE_DIR "$") -# Make the "install" step default, as it's required to run. -set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) -if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) -endif() - -set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") -set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") - -install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" - COMPONENT Runtime) - -install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" - COMPONENT Runtime) - -install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) - -if(PLUGIN_BUNDLED_LIBRARIES) - install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" - DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) -endif() - -# Fully re-copy the assets directory on each build to avoid having stale files -# from a previous install. -set(FLUTTER_ASSET_DIR_NAME "flutter_assets") -install(CODE " - file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") - " COMPONENT Runtime) -install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" - DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) - -# Install the AOT library on non-Debug builds only. -install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" - CONFIGURATIONS Profile;Release - COMPONENT Runtime) diff --git a/example/windows/flutter/CMakeLists.txt b/example/windows/flutter/CMakeLists.txt deleted file mode 100644 index b2e4bd8..0000000 --- a/example/windows/flutter/CMakeLists.txt +++ /dev/null @@ -1,103 +0,0 @@ -cmake_minimum_required(VERSION 3.14) - -set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") - -# Configuration provided via flutter tool. -include(${EPHEMERAL_DIR}/generated_config.cmake) - -# TODO: Move the rest of this into files in ephemeral. See -# https://github.com/flutter/flutter/issues/57146. -set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") - -# === Flutter Library === -set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") - -# Published to parent scope for install step. -set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) -set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) -set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) -set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) - -list(APPEND FLUTTER_LIBRARY_HEADERS - "flutter_export.h" - "flutter_windows.h" - "flutter_messenger.h" - "flutter_plugin_registrar.h" - "flutter_texture_registrar.h" -) -list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") -add_library(flutter INTERFACE) -target_include_directories(flutter INTERFACE - "${EPHEMERAL_DIR}" -) -target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") -add_dependencies(flutter flutter_assemble) - -# === Wrapper === -list(APPEND CPP_WRAPPER_SOURCES_CORE - "core_implementations.cc" - "standard_codec.cc" -) -list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") -list(APPEND CPP_WRAPPER_SOURCES_PLUGIN - "plugin_registrar.cc" -) -list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") -list(APPEND CPP_WRAPPER_SOURCES_APP - "flutter_engine.cc" - "flutter_view_controller.cc" -) -list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") - -# Wrapper sources needed for a plugin. -add_library(flutter_wrapper_plugin STATIC - ${CPP_WRAPPER_SOURCES_CORE} - ${CPP_WRAPPER_SOURCES_PLUGIN} -) -apply_standard_settings(flutter_wrapper_plugin) -set_target_properties(flutter_wrapper_plugin PROPERTIES - POSITION_INDEPENDENT_CODE ON) -set_target_properties(flutter_wrapper_plugin PROPERTIES - CXX_VISIBILITY_PRESET hidden) -target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) -target_include_directories(flutter_wrapper_plugin PUBLIC - "${WRAPPER_ROOT}/include" -) -add_dependencies(flutter_wrapper_plugin flutter_assemble) - -# Wrapper sources needed for the runner. -add_library(flutter_wrapper_app STATIC - ${CPP_WRAPPER_SOURCES_CORE} - ${CPP_WRAPPER_SOURCES_APP} -) -apply_standard_settings(flutter_wrapper_app) -target_link_libraries(flutter_wrapper_app PUBLIC flutter) -target_include_directories(flutter_wrapper_app PUBLIC - "${WRAPPER_ROOT}/include" -) -add_dependencies(flutter_wrapper_app flutter_assemble) - -# === Flutter tool backend === -# _phony_ is a non-existent file to force this command to run every time, -# since currently there's no way to get a full input/output list from the -# flutter tool. -set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") -set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) -add_custom_command( - OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} - ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} - ${CPP_WRAPPER_SOURCES_APP} - ${PHONY_OUTPUT} - COMMAND ${CMAKE_COMMAND} -E env - ${FLUTTER_TOOL_ENVIRONMENT} - "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" - windows-x64 $ - VERBATIM -) -add_custom_target(flutter_assemble DEPENDS - "${FLUTTER_LIBRARY}" - ${FLUTTER_LIBRARY_HEADERS} - ${CPP_WRAPPER_SOURCES_CORE} - ${CPP_WRAPPER_SOURCES_PLUGIN} - ${CPP_WRAPPER_SOURCES_APP} -) diff --git a/example/windows/flutter/ephemeral/.plugin_symlinks/assecontservices b/example/windows/flutter/ephemeral/.plugin_symlinks/assecontservices deleted file mode 120000 index 1a6cc97..0000000 --- a/example/windows/flutter/ephemeral/.plugin_symlinks/assecontservices +++ /dev/null @@ -1 +0,0 @@ -C:/Users/gabri/StudioProjects/LibAppsFlutter/ \ No newline at end of file diff --git a/example/windows/flutter/ephemeral/.plugin_symlinks/path_provider_windows b/example/windows/flutter/ephemeral/.plugin_symlinks/path_provider_windows deleted file mode 120000 index bc05629..0000000 --- a/example/windows/flutter/ephemeral/.plugin_symlinks/path_provider_windows +++ /dev/null @@ -1 +0,0 @@ -C:/Users/gabri/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_windows-2.2.1/ \ No newline at end of file diff --git a/example/windows/flutter/ephemeral/.plugin_symlinks/shared_preferences_windows b/example/windows/flutter/ephemeral/.plugin_symlinks/shared_preferences_windows deleted file mode 120000 index cc6bbb7..0000000 --- a/example/windows/flutter/ephemeral/.plugin_symlinks/shared_preferences_windows +++ /dev/null @@ -1 +0,0 @@ -C:/Users/gabri/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_windows-2.3.2/ \ No newline at end of file diff --git a/example/windows/flutter/ephemeral/.plugin_symlinks/url_launcher_windows b/example/windows/flutter/ephemeral/.plugin_symlinks/url_launcher_windows deleted file mode 120000 index f75533e..0000000 --- a/example/windows/flutter/ephemeral/.plugin_symlinks/url_launcher_windows +++ /dev/null @@ -1 +0,0 @@ -C:/Users/gabri/AppData/Local/Pub/Cache/hosted/pub.dev/url_launcher_windows-3.1.0/ \ No newline at end of file diff --git a/example/windows/flutter/generated_plugin_registrant.cc b/example/windows/flutter/generated_plugin_registrant.cc deleted file mode 100644 index d5c9ee1..0000000 --- a/example/windows/flutter/generated_plugin_registrant.cc +++ /dev/null @@ -1,26 +0,0 @@ -// -// Generated file. Do not edit. -// - -// clang-format off - -#include "generated_plugin_registrant.h" - -#include -#include -#include -#include -#include - -void RegisterPlugins(flutter::PluginRegistry* registry) { - AssecontservicesPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("AssecontservicesPlugin")); - ConnectivityPlusWindowsPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin")); - FileSelectorWindowsRegisterWithRegistrar( - registry->GetRegistrarForPlugin("FileSelectorWindows")); - LocalAuthPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("LocalAuthPlugin")); - UrlLauncherWindowsRegisterWithRegistrar( - registry->GetRegistrarForPlugin("UrlLauncherWindows")); -} diff --git a/example/windows/flutter/generated_plugin_registrant.h b/example/windows/flutter/generated_plugin_registrant.h deleted file mode 100644 index dc139d8..0000000 --- a/example/windows/flutter/generated_plugin_registrant.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// Generated file. Do not edit. -// - -// clang-format off - -#ifndef GENERATED_PLUGIN_REGISTRANT_ -#define GENERATED_PLUGIN_REGISTRANT_ - -#include - -// Registers Flutter plugins. -void RegisterPlugins(flutter::PluginRegistry* registry); - -#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/example/windows/flutter/generated_plugins.cmake b/example/windows/flutter/generated_plugins.cmake deleted file mode 100644 index 47a51a8..0000000 --- a/example/windows/flutter/generated_plugins.cmake +++ /dev/null @@ -1,28 +0,0 @@ -# -# Generated file, do not edit. -# - -list(APPEND FLUTTER_PLUGIN_LIST - assecontservices - connectivity_plus - file_selector_windows - local_auth_windows - url_launcher_windows -) - -list(APPEND FLUTTER_FFI_PLUGIN_LIST -) - -set(PLUGIN_BUNDLED_LIBRARIES) - -foreach(plugin ${FLUTTER_PLUGIN_LIST}) - add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) - target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) - list(APPEND PLUGIN_BUNDLED_LIBRARIES $) - list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) -endforeach(plugin) - -foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) - add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) - list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) -endforeach(ffi_plugin) diff --git a/example/windows/runner/CMakeLists.txt b/example/windows/runner/CMakeLists.txt deleted file mode 100644 index de2d891..0000000 --- a/example/windows/runner/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(runner LANGUAGES CXX) - -add_executable(${BINARY_NAME} WIN32 - "flutter_window.cpp" - "main.cpp" - "utils.cpp" - "win32_window.cpp" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" - "Runner.rc" - "runner.exe.manifest" -) -apply_standard_settings(${BINARY_NAME}) -target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") -target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") -add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/example/windows/runner/Runner.rc b/example/windows/runner/Runner.rc deleted file mode 100644 index 91fa361..0000000 --- a/example/windows/runner/Runner.rc +++ /dev/null @@ -1,121 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#pragma code_page(65001) -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (United States) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""winres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_APP_ICON ICON "resources\\app_icon.ico" - - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -#ifdef FLUTTER_BUILD_NUMBER -#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER -#else -#define VERSION_AS_NUMBER 1,0,0 -#endif - -#ifdef FLUTTER_BUILD_NAME -#define VERSION_AS_STRING #FLUTTER_BUILD_NAME -#else -#define VERSION_AS_STRING "1.0.0" -#endif - -VS_VERSION_INFO VERSIONINFO - FILEVERSION VERSION_AS_NUMBER - PRODUCTVERSION VERSION_AS_NUMBER - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG -#else - FILEFLAGS 0x0L -#endif - FILEOS VOS__WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904e4" - BEGIN - VALUE "CompanyName", "com.assecont.servicos" "\0" - VALUE "FileDescription", "assecontservices_example" "\0" - VALUE "FileVersion", VERSION_AS_STRING "\0" - VALUE "InternalName", "assecontservices_example" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 com.assecont.servicos. All rights reserved." "\0" - VALUE "OriginalFilename", "assecontservices_example.exe" "\0" - VALUE "ProductName", "assecontservices_example" "\0" - VALUE "ProductVersion", VERSION_AS_STRING "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1252 - END -END - -#endif // English (United States) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED diff --git a/example/windows/runner/flutter_window.cpp b/example/windows/runner/flutter_window.cpp deleted file mode 100644 index b43b909..0000000 --- a/example/windows/runner/flutter_window.cpp +++ /dev/null @@ -1,61 +0,0 @@ -#include "flutter_window.h" - -#include - -#include "flutter/generated_plugin_registrant.h" - -FlutterWindow::FlutterWindow(const flutter::DartProject& project) - : project_(project) {} - -FlutterWindow::~FlutterWindow() {} - -bool FlutterWindow::OnCreate() { - if (!Win32Window::OnCreate()) { - return false; - } - - RECT frame = GetClientArea(); - - // The size here must match the window dimensions to avoid unnecessary surface - // creation / destruction in the startup path. - flutter_controller_ = std::make_unique( - frame.right - frame.left, frame.bottom - frame.top, project_); - // Ensure that basic setup of the controller was successful. - if (!flutter_controller_->engine() || !flutter_controller_->view()) { - return false; - } - RegisterPlugins(flutter_controller_->engine()); - SetChildContent(flutter_controller_->view()->GetNativeWindow()); - return true; -} - -void FlutterWindow::OnDestroy() { - if (flutter_controller_) { - flutter_controller_ = nullptr; - } - - Win32Window::OnDestroy(); -} - -LRESULT -FlutterWindow::MessageHandler(HWND hwnd, UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept { - // Give Flutter, including plugins, an opportunity to handle window messages. - if (flutter_controller_) { - std::optional result = - flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, - lparam); - if (result) { - return *result; - } - } - - switch (message) { - case WM_FONTCHANGE: - flutter_controller_->engine()->ReloadSystemFonts(); - break; - } - - return Win32Window::MessageHandler(hwnd, message, wparam, lparam); -} diff --git a/example/windows/runner/flutter_window.h b/example/windows/runner/flutter_window.h deleted file mode 100644 index 6da0652..0000000 --- a/example/windows/runner/flutter_window.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef RUNNER_FLUTTER_WINDOW_H_ -#define RUNNER_FLUTTER_WINDOW_H_ - -#include -#include - -#include - -#include "win32_window.h" - -// A window that does nothing but host a Flutter view. -class FlutterWindow : public Win32Window { - public: - // Creates a new FlutterWindow hosting a Flutter view running |project|. - explicit FlutterWindow(const flutter::DartProject& project); - virtual ~FlutterWindow(); - - protected: - // Win32Window: - bool OnCreate() override; - void OnDestroy() override; - LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, - LPARAM const lparam) noexcept override; - - private: - // The project to run. - flutter::DartProject project_; - - // The Flutter instance hosted by this window. - std::unique_ptr flutter_controller_; -}; - -#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/example/windows/runner/main.cpp b/example/windows/runner/main.cpp deleted file mode 100644 index 512193d..0000000 --- a/example/windows/runner/main.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include -#include - -#include "flutter_window.h" -#include "utils.h" - -int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, - _In_ wchar_t *command_line, _In_ int show_command) { - // Attach to console when present (e.g., 'flutter run') or create a - // new console when running with a debugger. - if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { - CreateAndAttachConsole(); - } - - // Initialize COM, so that it is available for use in the library and/or - // plugins. - ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); - - flutter::DartProject project(L"data"); - - std::vector command_line_arguments = - GetCommandLineArguments(); - - project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); - - FlutterWindow window(project); - Win32Window::Point origin(10, 10); - Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"assecontservices_example", origin, size)) { - return EXIT_FAILURE; - } - window.SetQuitOnClose(true); - - ::MSG msg; - while (::GetMessage(&msg, nullptr, 0, 0)) { - ::TranslateMessage(&msg); - ::DispatchMessage(&msg); - } - - ::CoUninitialize(); - return EXIT_SUCCESS; -} diff --git a/example/windows/runner/resource.h b/example/windows/runner/resource.h deleted file mode 100644 index 66a65d1..0000000 --- a/example/windows/runner/resource.h +++ /dev/null @@ -1,16 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by Runner.rc -// -#define IDI_APP_ICON 101 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 102 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/example/windows/runner/resources/app_icon.ico b/example/windows/runner/resources/app_icon.ico deleted file mode 100644 index c04e20caf6370ebb9253ad831cc31de4a9c965f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33772 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 diff --git a/example/windows/runner/runner.exe.manifest b/example/windows/runner/runner.exe.manifest deleted file mode 100644 index c977c4a..0000000 --- a/example/windows/runner/runner.exe.manifest +++ /dev/null @@ -1,20 +0,0 @@ - - - - - PerMonitorV2 - - - - - - - - - - - - - - - diff --git a/example/windows/runner/utils.cpp b/example/windows/runner/utils.cpp deleted file mode 100644 index d19bdbb..0000000 --- a/example/windows/runner/utils.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include "utils.h" - -#include -#include -#include -#include - -#include - -void CreateAndAttachConsole() { - if (::AllocConsole()) { - FILE *unused; - if (freopen_s(&unused, "CONOUT$", "w", stdout)) { - _dup2(_fileno(stdout), 1); - } - if (freopen_s(&unused, "CONOUT$", "w", stderr)) { - _dup2(_fileno(stdout), 2); - } - std::ios::sync_with_stdio(); - FlutterDesktopResyncOutputStreams(); - } -} - -std::vector GetCommandLineArguments() { - // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. - int argc; - wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); - if (argv == nullptr) { - return std::vector(); - } - - std::vector command_line_arguments; - - // Skip the first argument as it's the binary name. - for (int i = 1; i < argc; i++) { - command_line_arguments.push_back(Utf8FromUtf16(argv[i])); - } - - ::LocalFree(argv); - - return command_line_arguments; -} - -std::string Utf8FromUtf16(const wchar_t* utf16_string) { - if (utf16_string == nullptr) { - return std::string(); - } - int target_length = ::WideCharToMultiByte( - CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); - if (target_length == 0) { - return std::string(); - } - std::string utf8_string; - utf8_string.resize(target_length); - int converted_length = ::WideCharToMultiByte( - CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); - if (converted_length == 0) { - return std::string(); - } - return utf8_string; -} diff --git a/example/windows/runner/utils.h b/example/windows/runner/utils.h deleted file mode 100644 index 3879d54..0000000 --- a/example/windows/runner/utils.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef RUNNER_UTILS_H_ -#define RUNNER_UTILS_H_ - -#include -#include - -// Creates a console for the process, and redirects stdout and stderr to -// it for both the runner and the Flutter library. -void CreateAndAttachConsole(); - -// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string -// encoded in UTF-8. Returns an empty std::string on failure. -std::string Utf8FromUtf16(const wchar_t* utf16_string); - -// Gets the command line arguments passed in as a std::vector, -// encoded in UTF-8. Returns an empty std::vector on failure. -std::vector GetCommandLineArguments(); - -#endif // RUNNER_UTILS_H_ diff --git a/example/windows/runner/win32_window.cpp b/example/windows/runner/win32_window.cpp deleted file mode 100644 index c10f08d..0000000 --- a/example/windows/runner/win32_window.cpp +++ /dev/null @@ -1,245 +0,0 @@ -#include "win32_window.h" - -#include - -#include "resource.h" - -namespace { - -constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; - -// The number of Win32Window objects that currently exist. -static int g_active_window_count = 0; - -using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); - -// Scale helper to convert logical scaler values to physical using passed in -// scale factor -int Scale(int source, double scale_factor) { - return static_cast(source * scale_factor); -} - -// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. -// This API is only needed for PerMonitor V1 awareness mode. -void EnableFullDpiSupportIfAvailable(HWND hwnd) { - HMODULE user32_module = LoadLibraryA("User32.dll"); - if (!user32_module) { - return; - } - auto enable_non_client_dpi_scaling = - reinterpret_cast( - GetProcAddress(user32_module, "EnableNonClientDpiScaling")); - if (enable_non_client_dpi_scaling != nullptr) { - enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); - } -} - -} // namespace - -// Manages the Win32Window's window class registration. -class WindowClassRegistrar { - public: - ~WindowClassRegistrar() = default; - - // Returns the singleton registar instance. - static WindowClassRegistrar* GetInstance() { - if (!instance_) { - instance_ = new WindowClassRegistrar(); - } - return instance_; - } - - // Returns the name of the window class, registering the class if it hasn't - // previously been registered. - const wchar_t* GetWindowClass(); - - // Unregisters the window class. Should only be called if there are no - // instances of the window. - void UnregisterWindowClass(); - - private: - WindowClassRegistrar() = default; - - static WindowClassRegistrar* instance_; - - bool class_registered_ = false; -}; - -WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; - -const wchar_t* WindowClassRegistrar::GetWindowClass() { - if (!class_registered_) { - WNDCLASS window_class{}; - window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); - window_class.lpszClassName = kWindowClassName; - window_class.style = CS_HREDRAW | CS_VREDRAW; - window_class.cbClsExtra = 0; - window_class.cbWndExtra = 0; - window_class.hInstance = GetModuleHandle(nullptr); - window_class.hIcon = - LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); - window_class.hbrBackground = 0; - window_class.lpszMenuName = nullptr; - window_class.lpfnWndProc = Win32Window::WndProc; - RegisterClass(&window_class); - class_registered_ = true; - } - return kWindowClassName; -} - -void WindowClassRegistrar::UnregisterWindowClass() { - UnregisterClass(kWindowClassName, nullptr); - class_registered_ = false; -} - -Win32Window::Win32Window() { - ++g_active_window_count; -} - -Win32Window::~Win32Window() { - --g_active_window_count; - Destroy(); -} - -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { - Destroy(); - - const wchar_t* window_class = - WindowClassRegistrar::GetInstance()->GetWindowClass(); - - const POINT target_point = {static_cast(origin.x), - static_cast(origin.y)}; - HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); - UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); - double scale_factor = dpi / 96.0; - - HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, - Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), - Scale(size.width, scale_factor), Scale(size.height, scale_factor), - nullptr, nullptr, GetModuleHandle(nullptr), this); - - if (!window) { - return false; - } - - return OnCreate(); -} - -// static -LRESULT CALLBACK Win32Window::WndProc(HWND const window, - UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept { - if (message == WM_NCCREATE) { - auto window_struct = reinterpret_cast(lparam); - SetWindowLongPtr(window, GWLP_USERDATA, - reinterpret_cast(window_struct->lpCreateParams)); - - auto that = static_cast(window_struct->lpCreateParams); - EnableFullDpiSupportIfAvailable(window); - that->window_handle_ = window; - } else if (Win32Window* that = GetThisFromHandle(window)) { - return that->MessageHandler(window, message, wparam, lparam); - } - - return DefWindowProc(window, message, wparam, lparam); -} - -LRESULT -Win32Window::MessageHandler(HWND hwnd, - UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept { - switch (message) { - case WM_DESTROY: - window_handle_ = nullptr; - Destroy(); - if (quit_on_close_) { - PostQuitMessage(0); - } - return 0; - - case WM_DPICHANGED: { - auto newRectSize = reinterpret_cast(lparam); - LONG newWidth = newRectSize->right - newRectSize->left; - LONG newHeight = newRectSize->bottom - newRectSize->top; - - SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, - newHeight, SWP_NOZORDER | SWP_NOACTIVATE); - - return 0; - } - case WM_SIZE: { - RECT rect = GetClientArea(); - if (child_content_ != nullptr) { - // Size and position the child window. - MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, - rect.bottom - rect.top, TRUE); - } - return 0; - } - - case WM_ACTIVATE: - if (child_content_ != nullptr) { - SetFocus(child_content_); - } - return 0; - } - - return DefWindowProc(window_handle_, message, wparam, lparam); -} - -void Win32Window::Destroy() { - OnDestroy(); - - if (window_handle_) { - DestroyWindow(window_handle_); - window_handle_ = nullptr; - } - if (g_active_window_count == 0) { - WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); - } -} - -Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { - return reinterpret_cast( - GetWindowLongPtr(window, GWLP_USERDATA)); -} - -void Win32Window::SetChildContent(HWND content) { - child_content_ = content; - SetParent(content, window_handle_); - RECT frame = GetClientArea(); - - MoveWindow(content, frame.left, frame.top, frame.right - frame.left, - frame.bottom - frame.top, true); - - SetFocus(child_content_); -} - -RECT Win32Window::GetClientArea() { - RECT frame; - GetClientRect(window_handle_, &frame); - return frame; -} - -HWND Win32Window::GetHandle() { - return window_handle_; -} - -void Win32Window::SetQuitOnClose(bool quit_on_close) { - quit_on_close_ = quit_on_close; -} - -bool Win32Window::OnCreate() { - // No-op; provided for subclasses. - return true; -} - -void Win32Window::OnDestroy() { - // No-op; provided for subclasses. -} diff --git a/example/windows/runner/win32_window.h b/example/windows/runner/win32_window.h deleted file mode 100644 index 17ba431..0000000 --- a/example/windows/runner/win32_window.h +++ /dev/null @@ -1,98 +0,0 @@ -#ifndef RUNNER_WIN32_WINDOW_H_ -#define RUNNER_WIN32_WINDOW_H_ - -#include - -#include -#include -#include - -// A class abstraction for a high DPI-aware Win32 Window. Intended to be -// inherited from by classes that wish to specialize with custom -// rendering and input handling -class Win32Window { - public: - struct Point { - unsigned int x; - unsigned int y; - Point(unsigned int x, unsigned int y) : x(x), y(y) {} - }; - - struct Size { - unsigned int width; - unsigned int height; - Size(unsigned int width, unsigned int height) - : width(width), height(height) {} - }; - - Win32Window(); - virtual ~Win32Window(); - - // Creates and shows a win32 window with |title| and position and size using - // |origin| and |size|. New windows are created on the default monitor. Window - // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); - - // Release OS resources associated with window. - void Destroy(); - - // Inserts |content| into the window tree. - void SetChildContent(HWND content); - - // Returns the backing Window handle to enable clients to set icon and other - // window properties. Returns nullptr if the window has been destroyed. - HWND GetHandle(); - - // If true, closing this window will quit the application. - void SetQuitOnClose(bool quit_on_close); - - // Return a RECT representing the bounds of the current client area. - RECT GetClientArea(); - - protected: - // Processes and route salient window messages for mouse handling, - // size change and DPI. Delegates handling of these to member overloads that - // inheriting classes can handle. - virtual LRESULT MessageHandler(HWND window, - UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept; - - // Called when CreateAndShow is called, allowing subclass window-related - // setup. Subclasses should return false if setup fails. - virtual bool OnCreate(); - - // Called when Destroy is called. - virtual void OnDestroy(); - - private: - friend class WindowClassRegistrar; - - // OS callback called by message pump. Handles the WM_NCCREATE message which - // is passed when the non-client area is being created and enables automatic - // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by - // MessageHandler. - static LRESULT CALLBACK WndProc(HWND const window, - UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept; - - // Retrieves a class instance pointer for |window| - static Win32Window* GetThisFromHandle(HWND const window) noexcept; - - bool quit_on_close_ = false; - - // window handle for top level window. - HWND window_handle_ = nullptr; - - // window handle for hosted content. - HWND child_content_ = nullptr; -}; - -#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/lib/common/alterar_senha.dart b/lib/common/alterar_senha.dart index cd41a4d..8618a4a 100644 --- a/lib/common/alterar_senha.dart +++ b/lib/common/alterar_senha.dart @@ -123,7 +123,7 @@ class _AlertSenhaState extends State { padding: const EdgeInsets.symmetric(horizontal: 10,), child: TextButton( style: TextButton.styleFrom( - primary: Colors.white, + foregroundColor: Colors.white, backgroundColor: Config.corPri, ), child: Center( diff --git a/pubspec.yaml b/pubspec.yaml index dbfc561..d501737 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -22,7 +22,7 @@ dependencies: sqflite_common_ffi: ^2.3.0+4 sqflite_common_ffi_web: ^0.4.0 - responsive_framework: ^1.1.1 + responsive_framework: 1.1.1 ###^0.2.0 http: ^1.1.0 @@ -32,7 +32,7 @@ dependencies: image_picker: ^1.0.4 filesystem_picker: ^4.0.0 #^2.0.2 - local_auth: ^2.1.7 + local_auth: 2.1.7 photo_view: ^0.14.0 @@ -84,7 +84,7 @@ dependencies: universal_io: ^2.2.2 universal_html: ^2.2.4 - connectivity_plus: any + connectivity_plus: 5.0.2 package_info_plus: any #^3.0.2 #^1.4.2 #device_info_plus: ^9.0.0 From 4d63ef3ec780761c06555bfeeae01dbe67a33556 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 24 May 2024 23:10:29 -0300 Subject: [PATCH 03/73] ajuste implementacao api novas holerite --- lib/assecontservices.dart | 20 +- lib/common/actions/actions.dart | 9 +- lib/common/actions/func_alter_user.dart | 25 +- lib/common/column_or_row.dart | 41 ++ lib/common/common.dart | 8 +- lib/common/custom_filter.dart | 81 +++ lib/common/custom_list_tile.dart | 23 + lib/common/custom_livelist.dart | 154 ++++++ lib/controllers/controllers.dart | 1 - .../holerite/holerite_manager.dart | 93 ++-- lib/controllers/holerite/informe_manager.dart | 46 -- lib/controllers/holerite/senha_manager.dart | 15 +- lib/controllers/holerite/user_manager.dart | 43 +- lib/controllers/ponto/users_manager.dart | 2 +- lib/model/holerite/holerite/holerite.dart | 510 ++++++++++++------ lib/model/holerite/informe/informe.dart | 230 -------- lib/model/holerite/usuario/funcionarios.dart | 242 +++++++++ lib/model/holerite/usuario/usuario.dart | 213 ++++++-- lib/model/model.dart | 1 - lib/services/holerite/funcionarios.dart | 106 ++++ lib/services/holerite/holerite.dart | 70 ++- lib/services/holerite/informe.dart | 76 --- lib/services/holerite/senha.dart | 32 +- lib/services/holerite/usuario.dart | 24 +- lib/services/http/http_cliente.dart | 5 +- lib/services/services.dart | 3 +- .../holerite/detelhes_holerite.dart | 241 +++------ .../holerite/detelhes_holerite_pdf.dart | 113 ---- .../smartphone/holerite/holerite_screen.dart | 212 ++------ .../smartphone/tela_base/custom_scaffold.dart | 36 +- lib/ui/smartphone/tela_base/drawer_web.dart | 21 +- lib/ui/ui.dart | 1 - lib/utils/extensions.dart | 25 + lib/utils/utils.dart | 3 +- pubspec.yaml | 33 +- 35 files changed, 1550 insertions(+), 1208 deletions(-) create mode 100644 lib/common/column_or_row.dart create mode 100644 lib/common/custom_filter.dart create mode 100644 lib/common/custom_list_tile.dart create mode 100644 lib/common/custom_livelist.dart delete mode 100644 lib/controllers/holerite/informe_manager.dart delete mode 100644 lib/model/holerite/informe/informe.dart create mode 100644 lib/model/holerite/usuario/funcionarios.dart create mode 100644 lib/services/holerite/funcionarios.dart delete mode 100644 lib/services/holerite/informe.dart delete mode 100644 lib/ui/smartphone/holerite/detelhes_holerite_pdf.dart create mode 100644 lib/utils/extensions.dart diff --git a/lib/assecontservices.dart b/lib/assecontservices.dart index c906ee2..922354e 100644 --- a/lib/assecontservices.dart +++ b/lib/assecontservices.dart @@ -106,12 +106,6 @@ class Assecontservices { create: (_)=> UserHoleriteManager(), ), - if(Config.conf.nomeApp == VersaoApp.HoleriteApp) - ChangeNotifierProvider( - lazy: true, - create: (_)=> InformeManager(), - ), - if(Config.conf.nomeApp == VersaoApp.HoleriteApp) ChangeNotifierProvider( lazy: true, @@ -255,14 +249,14 @@ class _MyAppState extends State { foregroundColor: Colors.white, backgroundColor: Config.corPri, ), - appBarTheme: AppBarTheme( + appBarTheme: const AppBarTheme( centerTitle: true, elevation: 0, scrolledUnderElevation: 0, - backgroundColor: ThemeData.dark().primaryColor, - titleTextStyle: const TextStyle(color: Config.corPri,), - toolbarTextStyle: const TextStyle(color: Config.corPri,fontSize: 18), - iconTheme: const IconThemeData(color: Colors.white), - actionsIconTheme: const IconThemeData(color: Colors.white), + backgroundColor: Colors.black87, + titleTextStyle: TextStyle(color: Config.corPri,), + toolbarTextStyle: TextStyle(color: Config.corPri,fontSize: 18), + iconTheme: IconThemeData(color: Colors.white), + actionsIconTheme: IconThemeData(color: Colors.white), ), visualDensity: VisualDensity.adaptivePlatformDensity, ) : ThemeData.light(useMaterial3: true).copyWith( @@ -286,7 +280,7 @@ class _MyAppState extends State { builder: (context, child) { final MediaQueryData data = MediaQuery.of(context); return MediaQuery( - data: data.copyWith(textScaleFactor: 1.0), + data: data.copyWith(textScaler: const TextScaler.linear(1.0)), child: ResponsiveBreakpoints.builder( child: child ?? Container(), breakpoints: const [ diff --git a/lib/common/actions/actions.dart b/lib/common/actions/actions.dart index 2b50e56..381aa59 100644 --- a/lib/common/actions/actions.dart +++ b/lib/common/actions/actions.dart @@ -6,16 +6,15 @@ import '../../controllers/controllers.dart'; import '../../config.dart'; import '../../common/common.dart'; import '../../enums/enums.dart'; -import 'func_alter_empresa.dart'; -import 'func_alter_user.dart'; import 'func_aponta.dart'; import 'func_config.dart'; import 'func_sair.dart'; import 'func_review.dart'; -actions(BuildContext context, {bool aponta = false, bool registro = false, bool config = false, - GlobalKey? keyMenu, GlobalKey? key1, GlobalKey? key2, GlobalKey? key3, GlobalKey? key4, GlobalKey? key5}){ +actions(BuildContext context, {bool aponta = false, bool registro = false, + bool config = false, Function()? onAlter, GlobalKey? keyMenu, GlobalKey? key1, + GlobalKey? key2, GlobalKey? key3, GlobalKey? key4, GlobalKey? key5}){ return Padding( padding: const EdgeInsets.only(right: 5), child: PopupMenuButton( @@ -77,7 +76,7 @@ actions(BuildContext context, {bool aponta = false, bool registro = false, bool switch( value ){ case 0 : if(Config.conf.nomeApp == VersaoApp.HoleriteApp) { - alterUser(context); + alterUser(context, onAlter); } else if(Config.conf.nomeApp == VersaoApp.AssewebApp) { alterEmpresa(context); } diff --git a/lib/common/actions/func_alter_user.dart b/lib/common/actions/func_alter_user.dart index 20f9757..de64e77 100644 --- a/lib/common/actions/func_alter_user.dart +++ b/lib/common/actions/func_alter_user.dart @@ -6,7 +6,7 @@ import '../../config.dart'; import '../../controllers/controllers.dart'; -alterUser(BuildContext context){ +alterUser(BuildContext context, Function()? onAlterFunc){ Widget child = Consumer( builder: (_,user,__){ return Container( @@ -36,25 +36,30 @@ alterUser(BuildContext context){ Container( height: 200, child: ListView.builder( - itemCount: user.listuser?.length ?? 0, + itemCount: user.listFunc.length, itemBuilder: (context, index){ return InkWell( - child: Card(elevation: 0.2, + child: Card( + elevation: 0.2, child: ListTile( leading: Icon(CupertinoIcons.person_crop_circle, size: 40, - color: user.listuser![index] == context.watch().user ? Config.corPri : null,), + color: user.listFunc[index] == UserHoleriteManager.funcSelect + ? Config.corPri : null,), title: CustomText.text( - user.listuser![index].empresa?.toUpperCase() ?? "", + user.listFunc[index].attributes?.office?.toUpperCase() ?? "", style: TextStyle(fontSize: 16, - color: user.listuser![index] == context.watch().user ? Config.corPri : null + color: user.listFunc[index] == UserHoleriteManager.funcSelect + ? Config.corPri : null ), overflow: TextOverflow.ellipsis, textAlign: TextAlign.center, softWrap: true, maxLines: 1, ), - subtitle: CustomText.text('Registro: ${user.listuser![index].registro ?? ""}', + subtitle: CustomText.text('Registro: ${ + user.listFunc[index].attributes?.reg ?? ""}', style: TextStyle(fontSize: 13, - color: user.listuser![index] == context.watch().user ? Config.corPri : null), + color: user.listFunc[index] == UserHoleriteManager.funcSelect + ? Config.corPri : null), overflow: TextOverflow.ellipsis, textAlign: TextAlign.center, softWrap: true, maxLines: 1, @@ -62,8 +67,8 @@ alterUser(BuildContext context){ ), ), onTap: () async { - context.read().user = user.listuser![index]; - context.read().listcompetencias = await context.read().competencias(UserHoleriteManager.sUser); + UserHoleriteManager.funcSelect = user.listFunc[index]; + if(onAlterFunc != null) await onAlterFunc(); Navigator.pop(context); } ); diff --git a/lib/common/column_or_row.dart b/lib/common/column_or_row.dart new file mode 100644 index 0000000..51894a5 --- /dev/null +++ b/lib/common/column_or_row.dart @@ -0,0 +1,41 @@ + + +import 'package:flutter/material.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; +import 'package:responsive_framework/responsive_framework.dart'; + +class ColumnOrRow extends StatelessWidget { + const ColumnOrRow({super.key, required this.children, + this.mainAxisAlignment = MainAxisAlignment.start, + this.crossAxisAlignment = CrossAxisAlignment.center, + this.mainAxisSize = MainAxisSize.min, + this.isColumn = true, this.isWrap = false, + }); + + final List children; + final MainAxisAlignment mainAxisAlignment; + final CrossAxisAlignment crossAxisAlignment; + final MainAxisSize mainAxisSize; + final bool isColumn; + final bool isWrap; + + @override + Widget build(BuildContext context) { + return isColumn + ? Column( + mainAxisAlignment: mainAxisAlignment, + crossAxisAlignment: crossAxisAlignment, + mainAxisSize: mainAxisSize, + children: children, + ) : isWrap + ? Wrap( + children: children, + ) : Row( + mainAxisAlignment: mainAxisAlignment, + crossAxisAlignment: crossAxisAlignment, + mainAxisSize: mainAxisSize, + children: children, + ); + } +} diff --git a/lib/common/common.dart b/lib/common/common.dart index 98527dd..f816f02 100644 --- a/lib/common/common.dart +++ b/lib/common/common.dart @@ -13,4 +13,10 @@ export 'custom_text.dart'; export 'custom_container.dart'; export 'expanded_or_container.dart'; export 'camera/foto_screen.dart'; -export 'custom_textformfield.dart'; \ No newline at end of file +export 'custom_textformfield.dart'; +export 'column_or_row.dart'; +export 'custom_list_tile.dart'; +export 'custom_livelist.dart'; +export 'custom_filter.dart'; +export 'actions/func_alter_user.dart'; +export 'actions/func_alter_empresa.dart'; \ No newline at end of file diff --git a/lib/common/custom_filter.dart b/lib/common/custom_filter.dart new file mode 100644 index 0000000..ace5510 --- /dev/null +++ b/lib/common/custom_filter.dart @@ -0,0 +1,81 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; + + +import 'package:responsive_framework/responsive_framework.dart'; + + +class FilterWidget extends StatelessWidget { + const FilterWidget({super.key, required this.onFiltro, this.padding, this.filtro = 3}); + + final Function(int) onFiltro; + final EdgeInsets? padding; + final int filtro; + + @override + Widget build(BuildContext context) { + + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 15), + child: Row( + children: [ + Expanded(child: Container(),), + + Text(filtro == 0 ? 'Todos' + : filtro == 3 ? 'Ultimos 3' + : filtro == 6 ? 'Ultimos 6' + : 'Ultimos 12', style: TextStyle(fontSize: 16),), + + Expanded( + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + PopupMenuButton( + surfaceTintColor: Colors.white, + itemBuilder: (context) => [ + popupMenuEntry(3,"Ultimos 3", filtro == 3), + popupMenuEntry(6,"Ultimos 6", filtro == 6), + popupMenuEntry(12,"Ultimos 12", filtro == 12), + popupMenuEntry(0,"Todos", filtro == 0), + ], + initialValue: filtro, + offset: const Offset(10,5), + onSelected: (value) async { + await onFiltro(value); + }, + child: const Icon(Icons.filter_list_rounded,), + ), + ], + ), + ), + + ], + ), + ); + } + + + PopupMenuEntry popupMenuEntry(int value, String text, bool selected){ + return PopupMenuItem( + value: value, + child: Row( + children: [ + Stack( + alignment: Alignment.center, + children: [ + const Icon(Icons.circle_outlined, color: Colors.blue, size: 25,), + if(selected) + const Icon(Icons.circle, color: Colors.blue, size: 10) + ], + ), + const SizedBox(width: 5,), + Text(text), + ], + ), + ); + } +} + + diff --git a/lib/common/custom_list_tile.dart b/lib/common/custom_list_tile.dart new file mode 100644 index 0000000..aaf6952 --- /dev/null +++ b/lib/common/custom_list_tile.dart @@ -0,0 +1,23 @@ + + +import 'package:flutter/material.dart'; + +class CustomListTile extends StatelessWidget { + const CustomListTile({super.key, required this.child, this.height = 80, this.padding}); + final Widget child; + final double height; + final EdgeInsets? padding; + + @override + Widget build(BuildContext context) { + return SizedBox( + height: height, + child: Card( + child: Padding( + padding: padding ?? const EdgeInsets.symmetric(horizontal: 8.0), + child: child, + ) + ), + ); + } +} diff --git a/lib/common/custom_livelist.dart b/lib/common/custom_livelist.dart new file mode 100644 index 0000000..6dc95cc --- /dev/null +++ b/lib/common/custom_livelist.dart @@ -0,0 +1,154 @@ +import 'package:flutter/material.dart'; + +import 'package:shimmer/shimmer.dart'; +import 'package:auto_animated/auto_animated.dart'; +import 'package:provider/provider.dart'; + +import '../config.dart'; +import 'column_or_row.dart'; +import 'custom_list_tile.dart'; + + + +class CustomLiveList extends StatefulWidget { + const CustomLiveList({super.key, required this.list, this.isLoad = false, this.padding, this.endScroll, + required this.onTap, this.isList = true, this.scrollController, required this.content}); + final List list; + final Widget Function(T item) content; + final Function(T item) onTap; + final Function()? endScroll; + final ScrollController? scrollController; + final bool isList; + final bool isLoad; + final EdgeInsets? padding; + + @override + State> createState() => _CustomLiveListState(); +} + +class _CustomLiveListState extends State> { + + bool load = false; + + listner() async { + if(widget.scrollController!.position.atEdge){ + setState(() { + load = true; + }); + try { + await widget.endScroll!(); + } catch (e) {} + setState(() { + load = false; + }); + } + } + + @override + void initState() { + if(widget.scrollController != null && widget.endScroll != null){ + widget.scrollController!.addListener(listner); + } + super.initState(); + } + + @override + void dispose() { + if(widget.scrollController != null && widget.endScroll != null){ + widget.scrollController!.removeListener(listner); + } + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Expanded( + child: widget.isLoad ? Shimmer.fromColors( + baseColor: context.watch().darkTemas ? Colors.grey[800]! : Colors.grey.shade200, + highlightColor: context.watch().darkTemas ? Colors.grey[600]! : Colors.grey, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: ColumnOrRow( + isColumn: widget.isList, isWrap: true, + children: List.generate(6, + (index) => SizedBox( + width: widget.isList ? null : 80, + child: CustomListTile( + padding: widget.padding, + child: Container() + ), + ) + ) + ), + ), + ) : LayoutBuilder( + builder: (_, constraints){ + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: Column( + children: [ + Expanded( + child: ListOrGrid( + width: constraints.maxWidth, + itemCount: widget.list.length, + controller: widget.scrollController, + itemBuilder: (BuildContext context, int index, Animation animation) { + final item = widget.list[index]; + return FadeTransition( + opacity: Tween( + begin: 0, + end: 1, + ).animate(animation), + child: SlideTransition( + position: Tween( + begin: const Offset(0, -0.1), + end: Offset.zero, + ).animate(animation), + child: GestureDetector( + onTap: (){ + widget.onTap(item); + }, + child: CustomListTile( + padding: widget.padding, + child: widget.content(item) + ) + ) + ), + ); + }, + ), + ), + if(load) + const Center(child: Padding( + padding: EdgeInsets.all(8.0), + child: CircularProgressIndicator(), + ),) + ], + ), + ); + } + ), + ); + } + + ListOrGrid({required Widget Function(BuildContext, int, Animation) itemBuilder, + ScrollController? controller, required double width, required int itemCount, + }){ + return widget.isList ? LiveList( + showItemInterval: const Duration(milliseconds: 0), + showItemDuration: const Duration(milliseconds: 180), + itemBuilder: itemBuilder, controller: controller, + itemCount: itemCount, + ) : LiveGrid( + showItemInterval: const Duration(milliseconds: 0), + showItemDuration: const Duration(milliseconds: 200), + itemBuilder: itemBuilder, controller: controller, + itemCount: itemCount, + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: width ~/ 170 , + crossAxisSpacing: 10, + mainAxisSpacing: 10, + ), + ); + } +} diff --git a/lib/controllers/controllers.dart b/lib/controllers/controllers.dart index bb21fed..948ba58 100644 --- a/lib/controllers/controllers.dart +++ b/lib/controllers/controllers.dart @@ -14,7 +14,6 @@ export 'ponto/comprovante_manager.dart'; export 'ponto/gethora.dart'; export 'holerite/holerite_manager.dart'; -export 'holerite/informe_manager.dart'; export 'holerite/user_manager.dart'; export 'holerite/primeiro_acesso_manager.dart'; export 'holerite/senha_manager.dart'; diff --git a/lib/controllers/holerite/holerite_manager.dart b/lib/controllers/holerite/holerite_manager.dart index 2ea474b..cb6da26 100644 --- a/lib/controllers/holerite/holerite_manager.dart +++ b/lib/controllers/holerite/holerite_manager.dart @@ -11,57 +11,82 @@ import '../../services/services.dart'; class HoleriteManager extends ChangeNotifier { final HoleriteService _service = HoleriteService(); - List _listcompetencias = []; - List get listcompetencias => _listcompetencias; - set listcompetencias(List v){ - _listcompetencias = v; + HoleriteModel? holerites; + List get listHolerites => holerites?.data ?? []; + + + bool _load = false; + bool get load => _load; + set load(bool v){ + _load = v; notifyListeners(); } - Future> resumoscreen(int? idholerite, int mes, int ano) async { - if(idholerite == null ) return []; - List result = await _service.resumoscreen(idholerite, mes, ano); - return result; + int _page = 0; + int get page => _page; + set page(int v){ + _page = v; + notifyListeners(); } - - Future> competencias(UsuarioHolerite? user) async { - if(user == null ) return []; - List result = await _service.competencias(user); - if(result.isNotEmpty){ - listcompetencias = result; - //listcompetencias = listcompetencias.reversed.toList(); - dropdowndata = result.first.descricao ?? 'Holerites'; + + int _pageSize = 3; + int get pageSize => _pageSize; + set pageSize(int v){ + if(_pageSize != v){ + _page = 0; + _pageSize = v; + listHolerite(); + notifyListeners(); } - return result; } - Future holeriteresumo(UsuarioHolerite? user, int idholerite, int mes, int ano, int? tipo) async { - File? result = await _service.holeriteresumo(user, idholerite, mes, ano, tipo); - return result; + Future init() async { + _page = 0; + _pageSize = 3; + _load = true; + await listHolerite(isLoad: false); } - Future holeriteresumoBytes(UsuarioHolerite? user, int idholerite, int mes, int ano, int? tipo) async { - Uint8List? result = await _service.holeriteresumoBytes(user, idholerite, mes, ano, tipo); - return result; + List filtroHolerite(DatumHolerite holerite, int filtro){ + final l = listHolerites.where((e) => e.attributes?.type == holerite.attributes?.type).toList(); + int end = l.indexWhere((e) => e.id == holerite.id); + int start = 0; + if(end+1 - filtro > 0){ + start = end+1 - filtro; + } + final list = l.getRange(start, end+1).toList(); + return list.map((e) + => ChartColum(e.id ?? 0, '${e.attributes?.competence ?? ''}\n${e.id ?? 0}', + e.attributes?.data?.funcionarioResumo?.liquido ?? 0)).toList(); } + DatumHolerite selectHolerite(int id) => listHolerites.firstWhere((e) => e.id == id); - String _dropdowndata = "Holerites"; - String get dropdowndata => _dropdowndata; - set dropdowndata(String v){ - _dropdowndata = v; + + Future listHolerite({bool isLoad = true}) async { + if(isLoad) load = true; + final result = await _service.listHolerite(_page, _pageSize); + holerites = result; + load = false; notifyListeners(); } - dropdowntipoInit(String v){ - _dropdowntipo = v; + Future newPageHolerite() async { + _page += 1; + final result = await _service.newPageHolerite(_page, _pageSize); + if(result.isNotEmpty){ + holerites?.data?.addAll(result); + notifyListeners(); + } } - String _dropdowntipo = ""; - String get dropdowntipo => _dropdowntipo; - set dropdowntipo(String v){ - _dropdowntipo = v; - notifyListeners(); + Future holeriteresumo(int idholerite, int mes, int ano, int? tipo) async { + //File? result = await _service.holeriteresumo(idholerite, mes, ano, tipo); + //return result; } + Future holeriteresumoBytes(int idholerite, int mes, int ano, int? tipo) async { + //Uint8List? result = await _service.holeriteresumoBytes(user, idholerite, mes, ano, tipo); + //return result; + } } \ No newline at end of file diff --git a/lib/controllers/holerite/informe_manager.dart b/lib/controllers/holerite/informe_manager.dart deleted file mode 100644 index 99dfbce..0000000 --- a/lib/controllers/holerite/informe_manager.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:universal_io/io.dart'; -import 'dart:async'; -import 'package:flutter/material.dart'; - - -import '../../model/model.dart'; -import '../../services/services.dart'; - - -class InformeManager extends ChangeNotifier { - InformeService _service = InformeService(); - - InformeRendimentosModel? _competencia; - InformeRendimentosModel? get competencia => _competencia; - set competencia(InformeRendimentosModel? v){ - _competencia = v; - notifyListeners(); - } - - List _listcompetencias = []; - List get listcompetencias => _listcompetencias; - set listcompetencias(List v){ - _listcompetencias = v; - notifyListeners(); - } - - Future competencias(UsuarioHolerite user) async { - try{ - listcompetencias = await _service.competencias(user) ; - competencia = listcompetencias.first; - } catch(e){ - debugPrint('catch ' + e.toString()); - } - } - - Future informeRendimentosPDF(UsuarioHolerite user, int? ano) async { - try{ - File? file = await _service.informeRendimentosPDF(user, ano); - return file; - } catch(e){ - debugPrint(e.toString()); - return null; - } - } - -} \ No newline at end of file diff --git a/lib/controllers/holerite/senha_manager.dart b/lib/controllers/holerite/senha_manager.dart index 1ea1f60..f0cf479 100644 --- a/lib/controllers/holerite/senha_manager.dart +++ b/lib/controllers/holerite/senha_manager.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:assecontservices/assecontservices.dart'; +import '../../config.dart'; +import '../../services/holerite/senha.dart'; +import '../controllers.dart'; class SenhaHoleriteManager extends ChangeNotifier { @@ -20,19 +22,20 @@ class SenhaHoleriteManager extends ChangeNotifier { notifyListeners(); } - Future sendPass({String? email, String? cpf, }) async { - String? result = await _service.sendPass(email: email, cpf: cpf); + Future sendPass({String? email, String? cpf, }) async { + bool? result = await _service.sendPass(email: email, cpf: cpf); return result; } Future alteracaoPass(BuildContext context, {required String senha, required String senhaNova,}) async { - bool? result = await _service.alteracaoPass(id: UserHoleriteManager.sUser!.id!, senha: senha, senhaNova: senhaNova); - if(result ?? false){ + final result = await _service.alteracaoPass(senha: senha, senhaNova: senhaNova); + if(result != null){ Config.usenha = senhaNova; context.read().senha.text = senhaNova; + UserHoleriteManager.user?.copyWith(user: result); context.read().memorizar(); } - return result ?? false; + return result != null; } ofuscarEmail(String e){ diff --git a/lib/controllers/holerite/user_manager.dart b/lib/controllers/holerite/user_manager.dart index 1833fd9..f3bf998 100644 --- a/lib/controllers/holerite/user_manager.dart +++ b/lib/controllers/holerite/user_manager.dart @@ -5,7 +5,9 @@ import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../../common/common.dart'; +import '../../model/holerite/usuario/funcionarios.dart'; import '../../model/model.dart'; +import '../../services/holerite/funcionarios.dart'; import '../../services/services.dart'; import '../../config.dart'; @@ -13,21 +15,18 @@ import '../../config.dart'; class UserHoleriteManager extends ChangeNotifier { final UserHoleriteService _service = UserHoleriteService(); + final FuncionariosHoleriteService _serviceFunc = FuncionariosHoleriteService(); final BiometriaServices _serviceBio = BiometriaServices(); UserHoleriteManager(){ loadBio(); } - List? listuser; + List listFunc = []; + static DatumFuncionarios? funcSelect; static String? token; - static UsuarioHolerite? sUser; - UsuarioHolerite? get user => sUser; - set user(UsuarioHolerite? v){ - sUser = v; - notifyListeners(); - } + static UsuarioHoleriteModel? user; final TextEditingController email = TextEditingController(); final TextEditingController cpf = TextEditingController(); @@ -46,6 +45,8 @@ class UserHoleriteManager extends ChangeNotifier { final prefs = await SharedPreferences.getInstance(); await prefs.setString("user", email.text); await prefs.setString("usenha", senha.text); + if(usenha == '') usenha = senha.text; + if(uemail == '') uemail = email.text; Config.usenha = usenha; if(status){ await prefs.setString("senha", senha.text); @@ -73,9 +74,11 @@ class UserHoleriteManager extends ChangeNotifier { } Future signInAuth({required String email, required String senha}) async { - listuser = await _service.signInAuth(email: email, senha: senha, token: token); - user = listuser!.last; + user = await _service.signInAuth(email: email, senha: senha, token: token); + listFunc = await _serviceFunc.listFuncionarios(); memorizar(); + if(listFunc.isNotEmpty) funcSelect = listFunc.last; + notifyListeners(); return true; } @@ -92,8 +95,25 @@ class UserHoleriteManager extends ChangeNotifier { return result; } + Future updateFunc({String? accountBank, String? pixKeyBank, String? email, + String? phone, String? agencyBank, String? typeBank, String? codeBank, }) async { + + final result = await _serviceFunc.updateFuncionario( + id: funcSelect?.id, phone: phone, email: email, accountBank: accountBank, + typeBank: typeBank, codeBank: codeBank, pixKeyBank: pixKeyBank, agencyBank: agencyBank, + ); + if(result != null){ + funcSelect = result; + listFunc = listFunc.map((e) => e.id == result.id ? result : e).toList(); + notifyListeners(); + return true; + }else{ + return false; + } + } + Future deleteUser() async { - bool result = await _service.deleteUser(user?.id); + bool result = true;//await _service.deleteUser(user?.id); if(result){ signOut(); } @@ -103,7 +123,8 @@ class UserHoleriteManager extends ChangeNotifier { signOut(){ cleanPreferebces(); user = null; - listuser = null; + listFunc.clear(); + funcSelect = null; _status = false; uemail = ''; usenha = ''; diff --git a/lib/controllers/ponto/users_manager.dart b/lib/controllers/ponto/users_manager.dart index 4ce709d..7730455 100644 --- a/lib/controllers/ponto/users_manager.dart +++ b/lib/controllers/ponto/users_manager.dart @@ -93,7 +93,7 @@ class UserPontoManager extends ChangeNotifier { Future signInAuth({required String email,required String senha, String? token}) async { usuario = await _service.signInAuth(email: email, senha: senha, token: token); if(usuario?.app ?? false){ - UserHoleriteManager.sUser = UsuarioHolerite.fromPonto(usuario!); + UserHoleriteManager.user?.user = UserHolerite.fromPonto(usuario!); } Config.usenha = senha; usenha = senha; diff --git a/lib/model/holerite/holerite/holerite.dart b/lib/model/holerite/holerite/holerite.dart index 7115904..2496225 100644 --- a/lib/model/holerite/holerite/holerite.dart +++ b/lib/model/holerite/holerite/holerite.dart @@ -1,199 +1,397 @@ +// To parse this JSON data, do +// +// final holeriteModel = holeriteModelFromMap(jsonString); + import 'dart:convert'; +import 'package:assecontservices/assecontservices.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; -import 'package:intl/intl.dart'; import 'package:responsive_framework/responsive_breakpoints.dart'; -class ChartPizza { - final String desc; - final double valor; +class HoleriteModel { + List? data; + Meta? meta; - ChartPizza(this.desc, this.valor); -} + HoleriteModel({ + this.data, + this.meta, + }); -class ChartColum { - final int ind; - final String data; - final double valor; - ChartColum(this.ind, this.data, this.valor); -} + factory HoleriteModel.fromMap(Map json) => HoleriteModel( + data: json["data"] == null ? [] : List.from(json["data"]!.map((x) => DatumHolerite.fromMap(x))), + meta: json["meta"] == null ? null : Meta.fromMap(json["meta"]), + ); -// To parse this JSON data, do -// -// final holeriteModel = holeriteModelFromMap(jsonString); + Map toMap() => { + "data": data == null ? [] : List.from(data!.map((x) => x.toMap())), + "meta": meta?.toMap(), + }; +} +class DatumHolerite { + int? id; + Attributes? attributes; -class HoleriteModel { - HoleriteModel({ - this.holeriteTipo, - this.holeriteTipoCod, - this.vencimentos, - this.descontos, - this.liquido, - this.dataCriacao, - this.dataVisualizacao, - this.historicos, + DatumHolerite({ + this.id, + this.attributes, }); - final String? holeriteTipo; - final int? holeriteTipoCod; - final double? vencimentos; - final double? descontos; - final double? liquido; - final String? dataCriacao; - final String? dataVisualizacao; - final List? historicos; + factory DatumHolerite.fromMap(Map json) => DatumHolerite( + id: json["id"], + attributes: json["attributes"] == null ? null : Attributes.fromMap(json["attributes"]), + ); - factory HoleriteModel.fromJson(String str) => HoleriteModel.fromMap(json.decode(str)); + Map toMap() => { + "id": id, + "attributes": attributes?.toMap(), + }; +} +class Attributes { + String? cpf; + String? name; + String? office; + Data? data; + DateTime? createdAt; + DateTime? updatedAt; + String? type; + String? month; + String? year; + DateTime? createDate; + String? registration; + String? competence; + String? rg; + String? phone; + double? baseSalary; + String? agencyAccount; + String? email; + String? sindicate; + String? depIr; + String? depSf; + String? ctps; + String? uploadId; + String? importingUser; + String? sheetType; + bool? isSigned; + DateTime? signedAt; - String toJson() => json.encode(toMap()); + Attributes({ + this.cpf, + this.name, + this.office, + this.data, + this.createdAt, + this.updatedAt, + this.type, + this.month, + this.year, + this.createDate, + this.registration, + this.competence, + this.rg, + this.phone, + this.baseSalary, + this.agencyAccount, + this.email, + this.sindicate, + this.depIr, + this.depSf, + this.ctps, + this.uploadId, + this.importingUser, + this.sheetType, + this.isSigned, + this.signedAt, + }); - factory HoleriteModel.fromMap(Map json) => HoleriteModel( - holeriteTipo: json["holeriteTipo"], - holeriteTipoCod: json["HoleriteTipoId"] ?? competenciaCodigo(json["holeriteTipo"]), - vencimentos: json["vencimentos"] == null ? null : double.tryParse(json["vencimentos"].toString().replaceAll('.', '').replaceAll(',', '.')), - descontos: json["descontos"] == null ? null : double.tryParse(json["descontos"].toString().replaceAll('.', '').replaceAll(',', '.')), - liquido: json["liquido"] == null ? null : double.tryParse(json["liquido"].toString().replaceAll('.', '').replaceAll(',', '.')), - dataCriacao: json["dataCriacao"], - dataVisualizacao: json["dataVisualizacao"], - historicos: json["historicos"] == null ? null : List.from(json["historicos"].map((x) => Historico.fromMap(x))), + factory Attributes.fromMap(Map json) => Attributes( + cpf: json["cpf"], + name: json["name"], + office: json["office"], + data: json["data"] == null ? null : Data.fromMap(json["data"]), + createdAt: json["createdAt"] == null ? null : DateTime.parse(json["createdAt"]), + updatedAt: json["updatedAt"] == null ? null : DateTime.parse(json["updatedAt"]), + type: json["type"], + month: json["month"], + year: json["year"], + createDate: json["create_date"] == null ? null : DateTime.parse(json["create_date"]), + registration: json["registration"], + competence: json["competence"], + rg: json["rg"], + phone: json["phone"], + baseSalary: json["baseSalary"]?.toDouble(), + agencyAccount: json["agencyAccount"], + email: json["email"], + sindicate: json["sindicate"], + depIr: json["depIr"], + depSf: json["depSf"], + ctps: json["ctps"], + uploadId: json["uploadId"], + importingUser: json["importingUser"], + sheetType: json["sheetType"], + isSigned: json["isSigned"], + signedAt: json["signedAt"] == null ? null : DateTime.parse(json["signedAt"]), ); Map toMap() => { - "holeriteTipo": holeriteTipo, - "holeriteTipoCod": holeriteTipoCod, - "vencimentos": vencimentos, - "descontos": descontos, - "liquido": liquido, - "dataCriacao": dataCriacao, - "dataVisualizacao": dataVisualizacao, - "historicos": historicos == null ? null : List.from(historicos!.map((x) => x.toMap())), + "cpf": cpf, + "name": name, + "office": office, + "data": data?.toMap(), + "createdAt": createdAt?.toIso8601String(), + "updatedAt": updatedAt?.toIso8601String(), + "type": type, + "month": month, + "year": year, + "create_date": createDate?.toIso8601String(), + "registration": registration, + "competence": competence, + "rg": rg, + "phone": phone, + "baseSalary": baseSalary, + "agencyAccount": agencyAccount, + "email": email, + "sindicate": sindicate, + "depIr": depIr, + "depSf": depSf, + "ctps": ctps, + "uploadId": uploadId, + "importingUser": importingUser, + "sheetType": sheetType, + "isSigned": isSigned, + "signedAt": signedAt?.toIso8601String(), }; +} + +class Data { + int? cbo; + String? cpf; + String? reg; + bool? erro; + String? nome; + dynamic chapa; + String? cnpjcpf; + dynamic admissao; + List? rawLines; + int? setorLocal; + List? errorFields; + dynamic mensagemErro; + FuncionarioResumo? funcionarioResumo; + List? funcionarioEventos; + + Data({ + this.cbo, + this.cpf, + this.reg, + this.erro, + this.nome, + this.chapa, + this.cnpjcpf, + this.admissao, + this.rawLines, + this.setorLocal, + this.errorFields, + this.mensagemErro, + this.funcionarioResumo, + this.funcionarioEventos, + }); - static int competenciaCodigo(String? comp){ - switch (comp) { - case "Salário": - return 1; - case "Pró Labore": - return 2; - case "Adiantamento": - return 3; - case "1ª Parcela 13º Salário": - return 4; - case "2ª Parcela 13º Salário": - return 5; - case "PLR": - return 6; - case "Abono": - return 7; - case "Salário Domestica": - return 8; - case "1ª Parcela 13º Domestica": - return 9; - case "2ª Parcela 13º Domestica": - return 10; - default: - return 1; - } - } - - List toColum(List list, BuildContext context){ - int i = 0; - List listmap = []; - if(list.isNotEmpty){ - while(i < ((list.length) > (kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone ? 6 : 3) ? - (kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone? 6 : 3) : (list.length )) ){ - listmap.add(ChartColum(i, list[i].competencia!, list[i].liquido! ),); - i++; - } - } - listmap.sort((a, b) => b.ind.compareTo(a.ind)); - return listmap; - } + factory Data.fromMap(Map json) => Data( + cbo: json["cbo"], + cpf: json["cpf"], + reg: json["reg"], + erro: json["erro"], + nome: json["nome"], + chapa: json["chapa"], + cnpjcpf: json["cnpjcpf"], + admissao: json["admissao"], + rawLines: json["rawLines"] == null ? [] : List.from(json["rawLines"]!.map((x) => x)), + setorLocal: json["setorLocal"], + errorFields: json["errorFields"] == null ? [] : List.from(json["errorFields"]!.map((x) => x)), + mensagemErro: json["mensagemErro"], + funcionarioResumo: json["funcionarioResumo"] == null ? null : FuncionarioResumo.fromMap(json["funcionarioResumo"]), + funcionarioEventos: json["funcionarioEventos"] == null ? [] : List.from(json["funcionarioEventos"]!.map((x) => FuncionarioEvento.fromMap(x))), + ); + + Map toMap() => { + "cbo": cbo, + "cpf": cpf, + "reg": reg, + "erro": erro, + "nome": nome, + "chapa": chapa, + "cnpjcpf": cnpjcpf, + "admissao": admissao, + "rawLines": rawLines == null ? [] : List.from(rawLines!.map((x) => x)), + "setorLocal": setorLocal, + "errorFields": errorFields == null ? [] : List.from(errorFields!.map((x) => x)), + "mensagemErro": mensagemErro, + "funcionarioResumo": funcionarioResumo?.toMap(), + "funcionarioEventos": funcionarioEventos == null ? [] : List.from(funcionarioEventos!.map((x) => x.toMap())), + }; } -class Historico { - Historico({ - this.competencia, - this.liquido, +class FuncionarioEvento { + String? codigo; + String? desconto; + String? descricao; + String? referencia; + String? vencimento; + + FuncionarioEvento({ + this.codigo, + this.desconto, + this.descricao, + this.referencia, + this.vencimento, }); - String? competencia; - double? liquido; + factory FuncionarioEvento.fromMap(Map json) => FuncionarioEvento( + codigo: json["codigo"], + desconto: json["desconto"], + descricao: json["descricao"], + referencia: json["referencia"], + vencimento: json["vencimento"], + ); - factory Historico.fromJson(String str) => Historico.fromMap(json.decode(str)); + Map toMap() => { + "codigo": codigo, + "desconto": desconto, + "descricao": descricao, + "referencia": referencia, + "vencimento": vencimento, + }; +} - String toJson() => json.encode(toMap()); +class FuncionarioResumo { + String? banco; + String? conta; + String? frase; + double? baseIr; + String? funcao; + String? credito; + String? divisao; + double? liquido; + String? mesFgts; + double? baseFgts; + String? competencia; + double? salarioBase; + double? totalDescontos; + double? salContribuicao; + double? totalVencimentos; - factory Historico.fromMap(Map json) { - String _data = ''; - List s = json["competencia"].toString().split("/"); - if(s.length == 3){ - _data = DateFormat("MMMM y", 'Pt-Br').format( - DateTime(int.parse(s[2].toString().split(' ').first), int.parse(s[1]), int.parse(s[0]) )).toUpperCase(); - } - return Historico( - competencia: _data, - liquido: json["liquido"] == null ? null : double.tryParse(json["liquido"].toString().replaceAll('.', '').replaceAll(',', '.')), - ); - } + FuncionarioResumo({ + this.banco, + this.conta, + this.frase, + this.baseIr, + this.funcao, + this.credito, + this.divisao, + this.liquido, + this.mesFgts, + this.baseFgts, + this.competencia, + this.salarioBase, + this.totalDescontos, + this.salContribuicao, + this.totalVencimentos, + }); + + factory FuncionarioResumo.fromMap(Map json) => FuncionarioResumo( + banco: json["banco"], + conta: json["conta"], + frase: json["frase"], + baseIr: json["baseIR"] == null ? 0 : json["baseIR"].toString().toDouble(), + funcao: json["funcao"], + credito: json["credito"], + divisao: json["divisao"], + liquido: json["liquido"] == null ? 0 : json["liquido"].toString().toDouble(), + mesFgts: json["mesFGTS"], + baseFgts: json["baseFGTS"] == null ? 0 : json["baseFGTS"].toString().toDouble(), + competencia: json["competencia"], + salarioBase: json["salarioBase"] == null ? 0 : json["salarioBase"].toString().toDouble(), + totalDescontos: json["totalDescontos"] == null ? 0 : json["totalDescontos"].toString().toDouble(), + salContribuicao: json["salContribuicao"] == null ? 0 : json["salContribuicao"].toString().toDouble(), + totalVencimentos: json["totalVencimentos"] == null ? 0 : json["totalVencimentos"].toString().toDouble(), + ); Map toMap() => { - "competencia": competencia, + "banco": banco, + "conta": conta, + "frase": frase, + "baseIR": baseIr, + "funcao": funcao, + "credito": credito, + "divisao": divisao, "liquido": liquido, + "mesFGTS": mesFgts, + "baseFGTS": baseFgts, + "competencia": competencia, + "salarioBase": salarioBase, + "totalDescontos": totalDescontos, + "salContribuicao": salContribuicao, + "totalVencimentos": totalVencimentos, }; - } +class Meta { + Pagination? pagination; -// To parse this JSON data, do -// -// final competenciasModel = competenciasModelFromMap(jsonString); + Meta({ + this.pagination, + }); -class CompetenciasModel { - CompetenciasModel({ - this.id, - this.mes, - this.ano, - this.descricao, - this.data, + factory Meta.fromMap(Map json) => Meta( + pagination: json["pagination"] == null ? null : Pagination.fromMap(json["pagination"]), + ); + + Map toMap() => { + "pagination": pagination?.toMap(), + }; +} + +class Pagination { + int? page; + int? pageSize; + int? pageCount; + int? total; + + Pagination({ + this.page, + this.pageSize, + this.pageCount, + this.total, }); - int? id; - int? mes; - int? ano; - DateTime? data; - String? descricao; + factory Pagination.fromMap(Map json) => Pagination( + page: json["page"], + pageSize: json["pageSize"], + pageCount: json["pageCount"], + total: json["total"], + ); + + Map toMap() => { + "page": page, + "pageSize": pageSize, + "pageCount": pageCount, + "total": total, + }; +} + +class ChartPizza { + final String desc; + final double valor; - List fromList(List json) { - if(json.isNotEmpty){ - List list = json.map((e) => CompetenciasModel?.fromString(e)).toList(); - try{ - list.sort((a,b) => b.data!.compareTo(a.data!) ); - }catch(e){ - debugPrint(e.toString()); - } - return list; - }else{ - return []; - } - } - - factory CompetenciasModel.fromString(Map json) { - List _data = json['comp'].split("/"); - return CompetenciasModel( - id: int.tryParse(json['idUser'].toString()), - mes: int.tryParse(_data.first), - ano: int.tryParse(_data.last), - data: DateTime(int.tryParse(_data.last) ?? 0, int.tryParse(_data.first) ?? 0), - descricao: DateFormat("MMMM yyyy", 'Pt-Br').format( - DateTime(int.tryParse(_data.last) ?? 0, int.tryParse(_data.first) ?? 0)).toUpperCase(), - ); - } + ChartPizza(this.desc, this.valor); } +class ChartColum { + final int ind; + final String data; + final double valor; + ChartColum(this.ind, this.data, this.valor); +} \ No newline at end of file diff --git a/lib/model/holerite/informe/informe.dart b/lib/model/holerite/informe/informe.dart deleted file mode 100644 index b59669b..0000000 --- a/lib/model/holerite/informe/informe.dart +++ /dev/null @@ -1,230 +0,0 @@ -// To parse this JSON data, do -// -// final informeRendimentosModel = informeRendimentosModelFromMap(jsonString); - -import 'dart:convert'; - -class InformeRendimentosModel { - InformeRendimentosModel({ - this.id, - this.ano, - this.anoReferencia, - this.naturezaRendimento, - this.total, - this.contribuicaoPrevidenciaria, - this.contribuicaoPrevidenciariaPrivada, - this.pensaoAlimenticia, - this.impostoRendaRetido, - this.parcialIsenta, - this.ajudaDeCusto, - this.pensao, - this.lucro, - this.pagosTitular, - this.recisaoContratoTrabalho, - this.isentosOutros, - this.salario13, - this.retidoSalario13, - this.liquidoOutros, - this.totalTributavel, - this.exclusaoAcaoJudicial, - this.deducaoPrevidenciaria, - this.deducaoPensaoAlimenticia, - this.impostoRetidoFonte, - this.isentosPensao, - this.informacoesComplemetares, - this.responsavelNome, - this.data, - this.cnpj, - this.razaoSocial, - this.cpf, - this.nome, - this.disponiblizado, - this.visualizado, - }); - - int? id; - dynamic ano; - String? anoReferencia; - dynamic naturezaRendimento; - int? total; - int? contribuicaoPrevidenciaria; - int? contribuicaoPrevidenciariaPrivada; - int? pensaoAlimenticia; - int? impostoRendaRetido; - int? parcialIsenta; - int? ajudaDeCusto; - int? pensao; - int? lucro; - int? pagosTitular; - int? recisaoContratoTrabalho; - int? isentosOutros; - int? salario13; - int? retidoSalario13; - int? liquidoOutros; - int? totalTributavel; - int? exclusaoAcaoJudicial; - int? deducaoPrevidenciaria; - int? deducaoPensaoAlimenticia; - int? impostoRetidoFonte; - int? isentosPensao; - dynamic informacoesComplemetares; - dynamic responsavelNome; - dynamic data; - dynamic cnpj; - dynamic razaoSocial; - dynamic cpf; - dynamic nome; - String? disponiblizado; - String? visualizado; - - InformeRendimentosModel copyWith({ - int? id, - dynamic ano, - String? anoReferencia, - dynamic naturezaRendimento, - int? total, - int? contribuicaoPrevidenciaria, - int? contribuicaoPrevidenciariaPrivada, - int? pensaoAlimenticia, - int? impostoRendaRetido, - int? parcialIsenta, - int? ajudaDeCusto, - int? pensao, - int? lucro, - int? pagosTitular, - int? recisaoContratoTrabalho, - int? isentosOutros, - int? salario13, - int? retidoSalario13, - int? liquidoOutros, - int? totalTributavel, - int? exclusaoAcaoJudicial, - int? deducaoPrevidenciaria, - int? deducaoPensaoAlimenticia, - int? impostoRetidoFonte, - int? isentosPensao, - dynamic informacoesComplemetares, - dynamic responsavelNome, - dynamic data, - dynamic cnpj, - dynamic razaoSocial, - dynamic cpf, - dynamic nome, - String? disponiblizado, - String? visualizado, - }) => - InformeRendimentosModel( - id: id ?? this.id, - ano: ano ?? this.ano, - anoReferencia: anoReferencia ?? this.anoReferencia, - naturezaRendimento: naturezaRendimento ?? this.naturezaRendimento, - total: total ?? this.total, - contribuicaoPrevidenciaria: contribuicaoPrevidenciaria ?? this.contribuicaoPrevidenciaria, - contribuicaoPrevidenciariaPrivada: contribuicaoPrevidenciariaPrivada ?? this.contribuicaoPrevidenciariaPrivada, - pensaoAlimenticia: pensaoAlimenticia ?? this.pensaoAlimenticia, - impostoRendaRetido: impostoRendaRetido ?? this.impostoRendaRetido, - parcialIsenta: parcialIsenta ?? this.parcialIsenta, - ajudaDeCusto: ajudaDeCusto ?? this.ajudaDeCusto, - pensao: pensao ?? this.pensao, - lucro: lucro ?? this.lucro, - pagosTitular: pagosTitular ?? this.pagosTitular, - recisaoContratoTrabalho: recisaoContratoTrabalho ?? this.recisaoContratoTrabalho, - isentosOutros: isentosOutros ?? this.isentosOutros, - salario13: salario13 ?? this.salario13, - retidoSalario13: retidoSalario13 ?? this.retidoSalario13, - liquidoOutros: liquidoOutros ?? this.liquidoOutros, - totalTributavel: totalTributavel ?? this.totalTributavel, - exclusaoAcaoJudicial: exclusaoAcaoJudicial ?? this.exclusaoAcaoJudicial, - deducaoPrevidenciaria: deducaoPrevidenciaria ?? this.deducaoPrevidenciaria, - deducaoPensaoAlimenticia: deducaoPensaoAlimenticia ?? this.deducaoPensaoAlimenticia, - impostoRetidoFonte: impostoRetidoFonte ?? this.impostoRetidoFonte, - isentosPensao: isentosPensao ?? this.isentosPensao, - informacoesComplemetares: informacoesComplemetares ?? this.informacoesComplemetares, - responsavelNome: responsavelNome ?? this.responsavelNome, - data: data ?? this.data, - cnpj: cnpj ?? this.cnpj, - razaoSocial: razaoSocial ?? this.razaoSocial, - cpf: cpf ?? this.cpf, - nome: nome ?? this.nome, - disponiblizado: disponiblizado ?? this.disponiblizado, - visualizado: visualizado ?? this.visualizado, - ); - - factory InformeRendimentosModel.fromJson(String str) => InformeRendimentosModel.fromMap(json.decode(str)); - - String toJson() => json.encode(toMap()); - - factory InformeRendimentosModel.fromMap(Map json) => InformeRendimentosModel( - id: json["id"] == null ? null : json["id"], - ano: json["ano"], - anoReferencia: json["anoReferencia"] == null ? null : json["anoReferencia"], - naturezaRendimento: json["naturezaRendimento"], - total: json["total"] == null ? null : json["total"], - contribuicaoPrevidenciaria: json["contribuicaoPrevidenciaria"] == null ? null : json["contribuicaoPrevidenciaria"], - contribuicaoPrevidenciariaPrivada: json["contribuicaoPrevidenciariaPrivada"] == null ? null : json["contribuicaoPrevidenciariaPrivada"], - pensaoAlimenticia: json["pensaoAlimenticia"] == null ? null : json["pensaoAlimenticia"], - impostoRendaRetido: json["impostoRendaRetido"] == null ? null : json["impostoRendaRetido"], - parcialIsenta: json["parcialIsenta"] == null ? null : json["parcialIsenta"], - ajudaDeCusto: json["ajudaDeCusto"] == null ? null : json["ajudaDeCusto"], - pensao: json["pensao"] == null ? null : json["pensao"], - lucro: json["lucro"] == null ? null : json["lucro"], - pagosTitular: json["pagosTitular"] == null ? null : json["pagosTitular"], - recisaoContratoTrabalho: json["recisaoContratoTrabalho"] == null ? null : json["recisaoContratoTrabalho"], - isentosOutros: json["isentosOutros"] == null ? null : json["isentosOutros"], - salario13: json["salario13"] == null ? null : json["salario13"], - retidoSalario13: json["retidoSalario13"] == null ? null : json["retidoSalario13"], - liquidoOutros: json["liquidoOutros"] == null ? null : json["liquidoOutros"], - totalTributavel: json["totalTributavel"] == null ? null : json["totalTributavel"], - exclusaoAcaoJudicial: json["exclusaoAcaoJudicial"] == null ? null : json["exclusaoAcaoJudicial"], - deducaoPrevidenciaria: json["deducaoPrevidenciaria"] == null ? null : json["deducaoPrevidenciaria"], - deducaoPensaoAlimenticia: json["deducaoPensaoAlimenticia"] == null ? null : json["deducaoPensaoAlimenticia"], - impostoRetidoFonte: json["impostoRetidoFonte"] == null ? null : json["impostoRetidoFonte"], - isentosPensao: json["isentosPensao"] == null ? null : json["isentosPensao"], - informacoesComplemetares: json["informacoesComplemetares"], - responsavelNome: json["responsavelNome"], - data: json["data"], - cnpj: json["cnpj"], - razaoSocial: json["razaoSocial"], - cpf: json["cpf"], - nome: json["nome"], - disponiblizado: json["disponiblizado"] == null ? null : json["disponiblizado"], - visualizado: json["visualizado"] == null ? null : json["visualizado"], - ); - - Map toMap() => { - "id": id == null ? null : id, - "ano": ano, - "anoReferencia": anoReferencia == null ? null : anoReferencia, - "naturezaRendimento": naturezaRendimento, - "total": total == null ? null : total, - "contribuicaoPrevidenciaria": contribuicaoPrevidenciaria == null ? null : contribuicaoPrevidenciaria, - "contribuicaoPrevidenciariaPrivada": contribuicaoPrevidenciariaPrivada == null ? null : contribuicaoPrevidenciariaPrivada, - "pensaoAlimenticia": pensaoAlimenticia == null ? null : pensaoAlimenticia, - "impostoRendaRetido": impostoRendaRetido == null ? null : impostoRendaRetido, - "parcialIsenta": parcialIsenta == null ? null : parcialIsenta, - "ajudaDeCusto": ajudaDeCusto == null ? null : ajudaDeCusto, - "pensao": pensao == null ? null : pensao, - "lucro": lucro == null ? null : lucro, - "pagosTitular": pagosTitular == null ? null : pagosTitular, - "recisaoContratoTrabalho": recisaoContratoTrabalho == null ? null : recisaoContratoTrabalho, - "isentosOutros": isentosOutros == null ? null : isentosOutros, - "salario13": salario13 == null ? null : salario13, - "retidoSalario13": retidoSalario13 == null ? null : retidoSalario13, - "liquidoOutros": liquidoOutros == null ? null : liquidoOutros, - "totalTributavel": totalTributavel == null ? null : totalTributavel, - "exclusaoAcaoJudicial": exclusaoAcaoJudicial == null ? null : exclusaoAcaoJudicial, - "deducaoPrevidenciaria": deducaoPrevidenciaria == null ? null : deducaoPrevidenciaria, - "deducaoPensaoAlimenticia": deducaoPensaoAlimenticia == null ? null : deducaoPensaoAlimenticia, - "impostoRetidoFonte": impostoRetidoFonte == null ? null : impostoRetidoFonte, - "isentosPensao": isentosPensao == null ? null : isentosPensao, - "informacoesComplemetares": informacoesComplemetares, - "responsavelNome": responsavelNome, - "data": data, - "cnpj": cnpj, - "razaoSocial": razaoSocial, - "cpf": cpf, - "nome": nome, - "disponiblizado": disponiblizado == null ? null : disponiblizado, - "visualizado": visualizado == null ? null : visualizado, - }; -} diff --git a/lib/model/holerite/usuario/funcionarios.dart b/lib/model/holerite/usuario/funcionarios.dart new file mode 100644 index 0000000..877de99 --- /dev/null +++ b/lib/model/holerite/usuario/funcionarios.dart @@ -0,0 +1,242 @@ + + +class FuncionariosHoleriteModel { + List? data; + MetaFuncionarios? meta; + + FuncionariosHoleriteModel({ + this.data, + this.meta, + }); + + FuncionariosHoleriteModel copyWith({ + List? data, + MetaFuncionarios? meta, + }) => + FuncionariosHoleriteModel( + data: data ?? this.data, + meta: meta ?? this.meta, + ); + + factory FuncionariosHoleriteModel.fromMap(Map json) => FuncionariosHoleriteModel( + data: json["data"] == null ? [] : List.from(json["data"]!.map((x) => DatumFuncionarios.fromMap(x))), + meta: json["meta"] == null ? null : MetaFuncionarios.fromMap(json["meta"]), + ); + + Map toMap() => { + "data": data == null ? [] : List.from(data!.map((x) => x.toMap())), + "meta": meta?.toMap(), + }; +} + +class DatumFuncionarios { + int? id; + AttributesFuncionarios? attributes; + + DatumFuncionarios({ + this.id, + this.attributes, + }); + + DatumFuncionarios copyWith({ + int? id, + AttributesFuncionarios? attributes, + }) => + DatumFuncionarios( + id: id ?? this.id, + attributes: attributes ?? this.attributes, + ); + + factory DatumFuncionarios.fromMap(Map json) => DatumFuncionarios( + id: json["id"], + attributes: json["attributes"] == null ? null : AttributesFuncionarios.fromMap(json["attributes"]), + ); + + Map toMap() => { + "id": id, + "attributes": attributes?.toMap(), + }; +} + +class AttributesFuncionarios { + String? nome; + String? cpf; + String? phone; + String? email; + int? baseSalary; + String? office; + String? sector; + String? ctps; + String? syndicate; + String? codeBank; + String? accountBank; + String? typeBank; + String? pixKeyBank; + String? agencyBank; + DateTime? createdAt; + DateTime? updatedAt; + String? reg; + bool? isPreRegistered; + + AttributesFuncionarios({ + this.nome, + this.cpf, + this.phone, + this.email, + this.baseSalary, + this.office, + this.sector, + this.ctps, + this.syndicate, + this.codeBank, + this.accountBank, + this.typeBank, + this.pixKeyBank, + this.agencyBank, + this.createdAt, + this.updatedAt, + this.reg, + this.isPreRegistered, + }); + + AttributesFuncionarios copyWith({ + String? nome, + String? cpf, + String? phone, + String? email, + int? baseSalary, + String? office, + String? sector, + String? ctps, + String? syndicate, + String? codeBank, + String? accountBank, + String? typeBank, + String? pixKeyBank, + String? agencyBank, + DateTime? createdAt, + DateTime? updatedAt, + String? reg, + bool? isPreRegistered, + }) => + AttributesFuncionarios( + nome: nome ?? this.nome, + cpf: cpf ?? this.cpf, + phone: phone ?? this.phone, + email: email ?? this.email, + baseSalary: baseSalary ?? this.baseSalary, + office: office ?? this.office, + sector: sector ?? this.sector, + ctps: ctps ?? this.ctps, + syndicate: syndicate ?? this.syndicate, + codeBank: codeBank ?? this.codeBank, + accountBank: accountBank ?? this.accountBank, + typeBank: typeBank ?? this.typeBank, + pixKeyBank: pixKeyBank ?? this.pixKeyBank, + agencyBank: agencyBank ?? this.agencyBank, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + reg: reg ?? this.reg, + isPreRegistered: isPreRegistered ?? this.isPreRegistered, + ); + + factory AttributesFuncionarios.fromMap(Map json) => AttributesFuncionarios( + nome: json["nome"], + cpf: json["cpf"], + phone: json["phone"], + email: json["email"], + baseSalary: json["baseSalary"], + office: json["office"], + sector: json["sector"], + ctps: json["ctps"], + syndicate: json["syndicate"], + codeBank: json["codeBank"], + accountBank: json["accountBank"], + typeBank: json["typeBank"], + pixKeyBank: json["pixKeyBank"], + agencyBank: json["agencyBank"], + createdAt: json["createdAt"] == null ? null : DateTime.parse(json["createdAt"]), + updatedAt: json["updatedAt"] == null ? null : DateTime.parse(json["updatedAt"]), + reg: json["reg"], + isPreRegistered: json["isPreRegistered"], + ); + + Map toMap() => { + "nome": nome, + "cpf": cpf, + "phone": phone, + "email": email, + "baseSalary": baseSalary, + "office": office, + "sector": sector, + "ctps": ctps, + "syndicate": syndicate, + "codeBank": codeBank, + "accountBank": accountBank, + "typeBank": typeBank, + "pixKeyBank": pixKeyBank, + "agencyBank": agencyBank, + "createdAt": createdAt?.toIso8601String(), + "updatedAt": updatedAt?.toIso8601String(), + "reg": reg, + "isPreRegistered": isPreRegistered, + }; +} + +class MetaFuncionarios { + PaginationFuncionarios? pagination; + + MetaFuncionarios({ + this.pagination, + }); + + MetaFuncionarios copyWith({ + PaginationFuncionarios? pagination, + }) => + MetaFuncionarios( + pagination: pagination ?? this.pagination, + ); + + factory MetaFuncionarios.fromMap(Map json) => MetaFuncionarios( + pagination: json["pagination"] == null ? null : PaginationFuncionarios.fromMap(json["pagination"]), + ); + + Map toMap() => { + "pagination": pagination?.toMap(), + }; +} + +class PaginationFuncionarios { + int? start; + int? limit; + int? total; + + PaginationFuncionarios({ + this.start, + this.limit, + this.total, + }); + + PaginationFuncionarios copyWith({ + int? start, + int? limit, + int? total, + }) => + PaginationFuncionarios( + start: start ?? this.start, + limit: limit ?? this.limit, + total: total ?? this.total, + ); + + factory PaginationFuncionarios.fromMap(Map json) => PaginationFuncionarios( + start: json["start"], + limit: json["limit"], + total: json["total"], + ); + + Map toMap() => { + "start": start, + "limit": limit, + "total": total, + }; +} diff --git a/lib/model/holerite/usuario/usuario.dart b/lib/model/holerite/usuario/usuario.dart index d36dc6e..69c96d5 100644 --- a/lib/model/holerite/usuario/usuario.dart +++ b/lib/model/holerite/usuario/usuario.dart @@ -2,65 +2,174 @@ import '../../model.dart'; -class UsuarioHolerite { + +class UsuarioHoleriteModel { + String? jwt; + UserHolerite? user; + + UsuarioHoleriteModel({ + this.jwt, + this.user, + }); + + UsuarioHoleriteModel copyWith({ + UsuarioHoleriteModel? user, + }) => + UsuarioHoleriteModel( + jwt: user?.jwt ?? this.jwt, + user: this.user == null ? user?.user : this.user?.copyWith( + id: user?.user?.id, + username: user?.user?.username, + email: user?.user?.email, + provider: user?.user?.provider, + confirmed: user?.user?.confirmed, + blocked: user?.user?.blocked, + cpf: user?.user?.cpf, + fantasyName: user?.user?.fantasyName, + enterpriseName: user?.user?.enterpriseName, + phone: user?.user?.phone, + stateRegistration: user?.user?.stateRegistration, + createdAt: user?.user?.createdAt, + updatedAt: user?.user?.updatedAt, + name: user?.user?.name, + office: user?.user?.office, + department: user?.user?.department, + isManager: user?.user?.isManager, + ), + ); + + factory UsuarioHoleriteModel.fromMap(Map json) => UsuarioHoleriteModel( + jwt: json["jwt"], + user: json["user"] == null ? null : UserHolerite.fromMap(json["user"]), + ); + + Map toMap() => { + "jwt": jwt, + "user": user?.toMap(), + }; +} + +class UserHolerite { int? id; - String? nome; - String? empresa; - String? cnpj; - String? registro; - String? cpf; + String? username; String? email; - String? ddd; - String? celular; + String? provider; + bool? confirmed; + bool? blocked; + String? cpf; + String? fantasyName; + String? enterpriseName; + String? phone; + String? stateRegistration; + DateTime? createdAt; + DateTime? updatedAt; + String? name; + String? office; + String? department; + bool? isManager; - UsuarioHolerite({this.id, this.nome, this.empresa, this.email, this.cnpj, this.cpf, this.registro, this.ddd, this.celular}); + UserHolerite({ + this.id, + this.username, + this.email, + this.provider, + this.confirmed, + this.blocked, + this.cpf, + this.fantasyName, + this.enterpriseName, + this.phone, + this.stateRegistration, + this.createdAt, + this.updatedAt, + this.name, + this.office, + this.department, + this.isManager, + }); - UsuarioHolerite copyWith({ - String? email, String? nome, String? empresa, String? cpf, String? cnpj, String? registro, String? celular - }) => UsuarioHolerite( - id: id ?? this.id, - nome: nome ?? this.nome, - empresa: empresa ?? this.empresa, - email: email ?? this.email, - cpf: cpf ?? this.cpf, - cnpj: cnpj ?? this.cnpj, - registro: registro ?? this.registro, - ddd: ddd ?? this.ddd, - celular: celular ?? this.celular - ); + UserHolerite copyWith({ + int? id, + String? username, + String? email, + String? provider, + bool? confirmed, + bool? blocked, + String? cpf, + String? fantasyName, + String? enterpriseName, + String? phone, + String? stateRegistration, + DateTime? createdAt, + DateTime? updatedAt, + String? name, + String? office, + String? department, + bool? isManager, + }) => + UserHolerite( + id: id ?? this.id, + username: username ?? this.username, + email: email ?? this.email, + provider: provider ?? this.provider, + confirmed: confirmed ?? this.confirmed, + blocked: blocked ?? this.blocked, + cpf: cpf ?? this.cpf, + fantasyName: fantasyName ?? this.fantasyName, + enterpriseName: enterpriseName ?? this.enterpriseName, + phone: phone ?? this.phone, + stateRegistration: stateRegistration ?? this.stateRegistration, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, + name: name ?? this.name, + office: office ?? this.office, + department: department ?? this.department, + isManager: isManager ?? this.isManager, + ); - UsuarioHolerite.fromMap(Map map){ - this.id = map["id"]; - this.email = map["email"]; - this.empresa = map["empresa"]; - this.nome = map["nome"]; - this.cpf = map["cpf"]; - this.cnpj = map["cnpj"]; - this.registro = map["registro"]; - this.ddd = map["ddd"]; - this.celular = map["celular"]; - } + factory UserHolerite.fromMap(Map json) => UserHolerite( + id: json["id"], + username: json["username"], + email: json["email"], + provider: json["provider"], + confirmed: json["confirmed"], + blocked: json["blocked"], + cpf: json["cpf"] ?? '373.771.848-25', + fantasyName: json["fantasyName"], + enterpriseName: json["enterpriseName"], + phone: json["phone"], + stateRegistration: json["stateRegistration"], + createdAt: json["createdAt"] == null ? null : DateTime.tryParse(json["createdAt"]), + updatedAt: json["updatedAt"] == null ? null : DateTime.tryParse(json["updatedAt"]), + name: json["name"], + office: json["office"], + department: json["department"], + isManager: json["isManager"], + ); - UsuarioHolerite.fromPonto(UsuarioPonto user){ - this.id = user.funcionario?.funcionarioId; + UserHolerite.fromPonto(UsuarioPonto user){ this.email = user.funcionario?.email; - this.nome = user.funcionario?.nome; + this.name = user.funcionario?.nome; this.cpf = user.funcionario?.cpf; - this.cnpj = user.funcionario?.cnpj; - this.registro = user.funcionario?.registro; } - Map toMap(){ - return { - 'id': id, - 'email': email, - 'empresa': empresa, - 'nome': nome, - 'cpf': cpf, - 'cnpj': cnpj, - 'registro': registro, - 'ddd': ddd, - 'celular': celular, - }; - } -} \ No newline at end of file + Map toMap() => { + "id": id, + "username": username, + "email": email, + "provider": provider, + "confirmed": confirmed, + "blocked": blocked, + "cpf": cpf, + "fantasyName": fantasyName, + "enterpriseName": enterpriseName, + "phone": phone, + "stateRegistration": stateRegistration, + "createdAt": createdAt?.toIso8601String(), + "updatedAt": updatedAt?.toIso8601String(), + "name": name, + "office": office, + "department": department, + "isManager": isManager, + }; +} diff --git a/lib/model/model.dart b/lib/model/model.dart index 7fdac18..d34ad38 100644 --- a/lib/model/model.dart +++ b/lib/model/model.dart @@ -1,6 +1,5 @@ export 'holerite/holerite/holerite.dart'; export 'holerite/usuario/usuario.dart'; -export 'holerite/informe/informe.dart'; export 'holerite/primeiro_acesso/primeiro_acesso_model.dart'; export 'tablet/config/config.dart'; diff --git a/lib/services/holerite/funcionarios.dart b/lib/services/holerite/funcionarios.dart new file mode 100644 index 0000000..b03cbe2 --- /dev/null +++ b/lib/services/holerite/funcionarios.dart @@ -0,0 +1,106 @@ +import 'dart:convert'; +import 'dart:typed_data'; + +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'dart:async'; + +import 'package:flutter_html_to_pdf/flutter_html_to_pdf.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:universal_io/io.dart'; + + +import '../../controllers/holerite/user_manager.dart'; +import '../../enums/versao_app.dart'; +import '../../model/holerite/usuario/funcionarios.dart'; +import '../http/http.dart'; +import '../../model/model.dart'; +import '../../config.dart'; + +class FuncionariosHoleriteService { + final HttpCli _http = HttpCli(); + + Future> listFuncionarios() async { + final String _api = "/employees?pagination[limit]=50&filters[cpf]=${UserHoleriteManager.user?.user?.cpf}"; + + final MyHttpResponse response = await _http.get( + url: Config.conf.apiHoleriteEmail! + _api, + headers: { + 'Authorization': 'Bearer ${UserHoleriteManager.user?.jwt}' + }, + ); + + try{ + if(response.isSucess) { + final data = response.data; + if(data != null) { + FuncionariosHoleriteModel model = FuncionariosHoleriteModel.fromMap(data); + return model.data ?? []; + } + } + + } catch(e) { + debugPrint('Erro FuncionariosHoleriteService listFuncionarios: $e'); + } + return []; + } + + Future updateFuncionario( + {int? id, + String? phone, + String? email, + String? typeBank, + String? codeBank, + String? accountBank, + String? pixKeyBank, + String? agencyBank}) async { + + final String _api = "/employees/$id"; + Map body = {}; + + if(phone != null){ + body['phone'] = phone; + } + if(email != null){ + body['email'] = email; + } + if(codeBank != null){ + body['codeBank'] = codeBank; + } + if(accountBank != null){ + body['accountBank'] = accountBank; + } + if(typeBank != null){ + body['typeBank'] = typeBank; + } + if(pixKeyBank != null){ + body['pixKeyBank'] = pixKeyBank; + } + if(agencyBank != null){ + body['agencyBank'] = agencyBank; + } + + final MyHttpResponse response = await _http.put( + url: Config.conf.apiHoleriteEmail! + _api, + headers: { + 'Authorization': 'Bearer ${UserHoleriteManager.user?.jwt}' + }, + body: { + "data": body + } + ); + + try{ + if(response.isSucess) { + Map? data = response.data; + if(data != null && data.containsKey('data')) { + DatumFuncionarios model = DatumFuncionarios.fromMap(data['data']); + return model; + } + } + } catch(e) { + debugPrint(e.toString()); + } + } + +} \ No newline at end of file diff --git a/lib/services/holerite/holerite.dart b/lib/services/holerite/holerite.dart index 16dd9e3..4188044 100644 --- a/lib/services/holerite/holerite.dart +++ b/lib/services/holerite/holerite.dart @@ -10,6 +10,7 @@ import 'package:path_provider/path_provider.dart'; import 'package:universal_io/io.dart'; +import '../../controllers/holerite/user_manager.dart'; import '../../enums/versao_app.dart'; import '../http/http.dart'; import '../../model/model.dart'; @@ -18,51 +19,36 @@ import '../../config.dart'; class HoleriteService { final HttpCli _http = HttpCli(); - Future> resumoscreen(int idholerite, int mes, int ano) async { - String _api = "/holeriteresumo/resumoscreen"; + Future listHolerite(int page, int pageSize) async { + String _api = "/holerites?sort=desc&pagination[page]=$page&pagination[pageSize]=${pageSize == 0 ? 25 : pageSize}"; + "&filters[employee]=${UserHoleriteManager.funcSelect?.id}"; - final MyHttpResponse response = await _http.post( - url: Config.conf.apiHolerite! + _api, - body: { - "Id": idholerite, //'13369340000136', - "month": mes, - "year": ano, - } + final MyHttpResponse response = await _http.get( + url: Config.conf.apiHoleriteEmail! + _api, + headers: { + 'Authorization': 'Bearer ${UserHoleriteManager.user?.jwt}' + }, ); try{ if(response.isSucess) { - List list = response.data; - if(list.length > 0) { - List comp = list.map((e) => HoleriteModel.fromMap(e)).toList(); - return comp; + final data = response.data; + if(data != null) { + HoleriteModel? model = HoleriteModel.fromMap(data); + return model; } } } catch(e) { debugPrint(e.toString()); } - return []; - } - Future> competencias(UsuarioHolerite user) async { - String _api = "/holeriteresumo/competenciasid"; - - final MyHttpResponse response = await _http.post( - url: Config.conf.apiHolerite! + _api, - body: { - "cnpj": user.cnpj.toString(), - "register": user.registro.toString(), - "cpf": Config.conf.nomeApp == VersaoApp.HoleriteApp ? null : user.cpf, - } - ); - + Future> newPageHolerite(int page, int pageSize) async { try{ - if(response.isSucess) { - List list = response.data; - List comp = CompetenciasModel().fromList(list); - return comp; + final result = await listHolerite(page, pageSize); + if(result != null && result.data != null && result.data!.isNotEmpty) { + return result.data!; } } catch(e){ debugPrint(e.toString()); @@ -70,16 +56,20 @@ class HoleriteService { return []; } - Future holeriteresumo(UsuarioHolerite? user, int idholerite, int mes, int ano, int? tipo) async { + Future holeriteresumo(UsuarioHoleriteModel? user, int idholerite, int mes, int ano, int? tipo) async { String _api = "/holeriteresumo"; try{ final MyHttpResponse response = await _http.post( - url: Config.conf.apiHolerite! + _api, decoder: false, + url: Config.conf.apiHolerite! + _api, + headers: { + 'Authorization': 'Bearer ${UserHoleriteManager.user?.jwt}' + }, + decoder: false, body: { "Id": idholerite, - "cnpj": user?.cnpj, - "register": user?.registro, - "cpf": Config.conf.nomeApp == VersaoApp.HoleriteApp ? null : user?.cpf, + //"cnpj": user?.cnpj, + //"register": user?.registro, + "cpf": Config.conf.nomeApp == VersaoApp.HoleriteApp ? null : user?.user?.cpf, "month": mes, "year": ano, "holeriteType": tipo @@ -106,16 +96,16 @@ class HoleriteService { } } - Future holeriteresumoBytes(UsuarioHolerite? user, int idholerite, int mes, int ano, int? tipo) async { + Future holeriteresumoBytes(UsuarioHoleriteModel? user, int idholerite, int mes, int ano, int? tipo) async { String _api = "/holeriteresumo/holeriteresumoBytes"; try{ final MyHttpResponse response = await _http.post( url: Config.conf.apiHolerite! + _api, body: { "Id": idholerite, - "cnpj": user?.cnpj, - "register": user?.registro, - "cpf": Config.conf.nomeApp == VersaoApp.HoleriteApp ? null : user?.cpf, + //"cnpj": user?.cnpj, + //"register": user?.registro, + "cpf": Config.conf.nomeApp == VersaoApp.HoleriteApp ? null : user?.user?.cpf, "month": mes, "year": ano, "holeriteType": tipo diff --git a/lib/services/holerite/informe.dart b/lib/services/holerite/informe.dart deleted file mode 100644 index 7eb7bcc..0000000 --- a/lib/services/holerite/informe.dart +++ /dev/null @@ -1,76 +0,0 @@ -import 'package:universal_io/io.dart'; -import 'dart:async'; -import 'package:flutter/material.dart'; - -import 'package:flutter_html_to_pdf/flutter_html_to_pdf.dart'; -import 'package:path_provider/path_provider.dart'; - -import '../../model/model.dart'; -import '../../config.dart'; -import '../http/http.dart'; - - - -class InformeService { - final HttpCli _http = HttpCli(); - - Future> competencias(UsuarioHolerite? user) async { - String _api = "/informeRendimentos/competencias"; - try{ - final MyHttpResponse response = await _http.post( - url: Config.conf.apiHolerite! + _api, - body:{ - "cnpj": user?.cnpj , - "register": user?.registro , - "cpf": user?.registro != null ? null : user?.cpf, - } - ); - if(response.isSucess) { - List list = response.data; - List comp = list.map((e) => InformeRendimentosModel.fromMap(e)).toList(); - return comp.reversed.toList(); - } else { - debugPrint(response.codigo.toString()); - debugPrint(response.data.toString()); - } - } catch(e){ - debugPrint('catch ' + e.toString()); - } - return []; - } - - Future informeRendimentosPDF(UsuarioHolerite user, int? ano) async { - String _api = "/informeRendimentos"; - try{ - final MyHttpResponse response = await _http.post( - url: Config.conf.apiHolerite! + _api, decoder: false, - body: { - "cnpj": user.cnpj , - "register": user.registro , - "cpf": user.registro != null ? null : user.cpf, - "year": ano, - } - ); - if(response.isSucess) { - var htmlContent = ''' - - - ${response.data} - - '''; - Directory tempDir = await getTemporaryDirectory(); - String savedPath = "Informe de Rendimentos - " + ano.toString(); - File? file = await FlutterHtmlToPdf.convertFromHtmlContent( - htmlContent, tempDir.path, savedPath - ); - return file; - } else { - debugPrint(response.codigo.toString()); - return null; - } - } catch(e){ - debugPrint('catch erro informeRendimentosPDF ' + e.toString()); - return null; - } - } -} \ No newline at end of file diff --git a/lib/services/holerite/senha.dart b/lib/services/holerite/senha.dart index 9360eff..d6f05db 100644 --- a/lib/services/holerite/senha.dart +++ b/lib/services/holerite/senha.dart @@ -1,26 +1,28 @@ import 'package:flutter/material.dart'; import '../../config.dart'; +import '../../controllers/holerite/user_manager.dart'; +import '../../model/holerite/usuario/usuario.dart'; import '../http/http.dart'; class SenhaHoleriteService { final HttpCli _http = HttpCli(); - Future sendPass({String? email, String? cpf, }) async { - String _metodo = '/holerite/email/senha'; + Future sendPass({String? email, String? cpf, }) async { + String _metodo = '/auth/forgot-password'; try{ String? _cpf = cpf != null ? cpf.replaceAll('.', '').replaceAll('-', '') : null; Map body = { - "Email": email, - "Cpf": _cpf + "email": email, + //"Cpf": _cpf }; MyHttpResponse response = await _http.post( url: Config.conf.apiHoleriteEmail! + _metodo, body: body ); if(response.isSucess){ - return response.data['email']; + return response.data['ok']; } throw response.codigo.toString(); } catch (e){ @@ -31,32 +33,32 @@ class SenhaHoleriteService { case HttpError.timeout : throw 'Tempo limite de login excedido, verifique sua internet!'; case "404" : - throw 'Email ou Cpf não cadastrado!'; + throw 'Email não cadastrado!'; default: throw 'Erro inesperado, tente novamente!'; } } } - Future alteracaoPass({required int id, required String senha, required String senhaNova,}) async { - String _metodo = '/holerite/email/alterarSenha'; + Future alteracaoPass({required String senha, required String senhaNova,}) async { + String _metodo = '/auth/change-password'; MyHttpResponse? response; try{ response = await _http.post( url: Config.conf.apiHoleriteEmail! + _metodo, headers: { - 'Content-Type': 'application/json; charset=utf-8', - 'Accept': '*/*', - 'Accept-Encoding': 'gzip, deflate, br', + 'Authorization': 'Bearer ${UserHoleriteManager.user?.jwt}' }, body: { - "Id": id, - "Senha": senha, - "NovaSenha": senhaNova + "password": senhaNova, + "currentPassword": senha, + "passwordConfirmation": senhaNova } ); if(response.isSucess){ - return response.isSucess; + final user = response.data; + final UsuarioHoleriteModel _user = UsuarioHoleriteModel.fromMap(user); + return _user; } throw response.codigo.toString(); } catch (e){ diff --git a/lib/services/holerite/usuario.dart b/lib/services/holerite/usuario.dart index 87357f1..353aab1 100644 --- a/lib/services/holerite/usuario.dart +++ b/lib/services/holerite/usuario.dart @@ -5,36 +5,36 @@ import 'package:cpf_cnpj_validator/cpf_validator.dart'; import '../../model/model.dart'; import '../../config.dart'; +import '../../utils/validacoes.dart'; import '../http/http.dart'; class UserHoleriteService { final HttpCli _http = HttpCli(); - Future?> signInAuth({required String email, required String senha, String? token}) async { - String _metodo = '/holerite/login'; + Future signInAuth({required String email, required String senha, String? token}) async { + String _metodo = '/auth/local'; try{ - String _email = CPFValidator.isValid(email) ? - email.replaceAll('.', '').replaceAll('-', '').replaceAll('/', '') : email; + String _email = CPFValidator.isValid(email) ? Validacoes.numeric(email): email; MyHttpResponse response = await _http.post( url: Config.conf.apiHoleriteEmail! + _metodo, body: { - "Email": _email, - "Senha": senha, - "Token": token + "identifier": _email, + "password": senha, + //"Token": token } ); if (response.isSucess) { - List user = response.data; - final List _user = user.map((e) => UsuarioHolerite.fromMap(e)).toList(); + final user = response.data; + final UsuarioHoleriteModel _user = UsuarioHoleriteModel.fromMap(user); return _user; }else{ throw response.codigo.toString(); } } catch (e){ - debugPrint(e.toString()); + debugPrint('Erro UserHoleriteService signInAuth: $e'); switch(e){ case HttpError.unexpected : throw 'Erro inesperado, tente novamente!'; @@ -48,6 +48,8 @@ class UserHoleriteService { } } + + /// metodo inativo Future deleteUser(int? idUser) async { String _metodo = '/holerite/novo/delete'; try{ @@ -60,7 +62,7 @@ class UserHoleriteService { return response.isSucess; } catch (e){ - debugPrint(e.toString()); + debugPrint('Erro UserHoleriteService deleteUser: $e'); return false; } } diff --git a/lib/services/http/http_cliente.dart b/lib/services/http/http_cliente.dart index 1bae5c7..0309719 100644 --- a/lib/services/http/http_cliente.dart +++ b/lib/services/http/http_cliente.dart @@ -52,11 +52,14 @@ class HttpCli { response.headers['content-disposition']!.contains('json') ? 'json' : null ); } else { + throw HttpError.statusCode; } } catch(e){ - debugPrint('catch ' + e.toString()); + debugPrint('catch $e'); + debugPrint(response.statusCode.toString()); + debugPrint(response.body); bool r = e == HttpError.statusCode; return MyHttpResponse( isSucess: false, diff --git a/lib/services/services.dart b/lib/services/services.dart index 91cc7c2..f9ad2ce 100644 --- a/lib/services/services.dart +++ b/lib/services/services.dart @@ -13,7 +13,6 @@ export 'ponto/registro_ponto.dart'; export 'ponto/comprovante.dart'; export 'holerite/holerite.dart'; -export 'holerite/informe.dart'; export 'holerite/primeiro_acesso.dart'; export 'holerite/usuario.dart'; export 'holerite/senha.dart'; @@ -33,6 +32,8 @@ export 'sendmail.dart'; export 'update_app.dart'; export 'sqlite_ponto.dart'; +export 'http/http.dart'; + abstract class Services { final HttpCli http = HttpCli(); diff --git a/lib/ui/smartphone/holerite/detelhes_holerite.dart b/lib/ui/smartphone/holerite/detelhes_holerite.dart index 4ae1dc6..f4cfc6c 100644 --- a/lib/ui/smartphone/holerite/detelhes_holerite.dart +++ b/lib/ui/smartphone/holerite/detelhes_holerite.dart @@ -1,12 +1,12 @@ import 'dart:typed_data'; - -import 'package:flutter/foundation.dart'; -import 'package:responsive_framework/responsive_breakpoints.dart'; -import 'package:universal_io/io.dart'; +import 'package:assecontservices/utils/extensions.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; +import 'package:universal_io/io.dart'; import 'package:intl/intl.dart'; +import 'package:responsive_framework/responsive_breakpoints.dart'; import 'package:flutter_awesome_alert_box/flutter_awesome_alert_box.dart'; import 'package:charts_flutter/flutter.dart' as charts; import 'package:charts_common/common.dart' as common; @@ -21,42 +21,14 @@ import '../../../model/model.dart'; class DetalhesHolerite extends StatefulWidget { - final List holerite; - final int idComp; - final int mes; - final int ano; - DetalhesHolerite(this.holerite, this.idComp, this.mes, this.ano); + DatumHolerite holerite; + DetalhesHolerite(this.holerite); @override - _DetalhesHoleriteState createState() => _DetalhesHoleriteState(); + State createState() => _DetalhesHoleriteState(); } class _DetalhesHoleriteState extends State { - bool load = false; - HoleriteModel? holerite; - var mask = NumberFormat.currency(locale: 'pt_Br', customPattern: 'R\$#,##0.00'); - - init(){ - if(context.read().dropdowntipo != ''){ - List? _temp = widget.holerite.where((e) => - e.holeriteTipo == context.read().dropdowntipo).toList(); - if(_temp.isNotEmpty){ - holerite = _temp.first; - } - } - if(widget.holerite.isNotEmpty){ - holerite ??= widget.holerite.first; - context.read().dropdowntipoInit(holerite?.holeriteTipo ?? ''); - } - } - - @override - void initState() { - init(); - super.initState(); - } - - double getPorcentagem(double valor, double total){ if(total == 0){ return 0.0; @@ -76,6 +48,7 @@ class _DetalhesHoleriteState extends State { double width = MediaQuery.of(context).size.width; return Scaffold( + appBar: AppBar(title: Text('${widget.holerite.attributes?.type ?? ''} ${widget.holerite.attributes?.competence ?? ''}'),), body: Container( decoration: BoxDecoration( border: Border(bottom: BorderSide(width: 70, @@ -90,95 +63,6 @@ class _DetalhesHoleriteState extends State { mainAxisAlignment: MainAxisAlignment.spaceAround, mainAxisSize: MainAxisSize.max, children: [ - if(kIsWeb) - Row( - mainAxisAlignment: !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone ? - width >= 1500 ? MainAxisAlignment.center : - MainAxisAlignment.end : MainAxisAlignment.center, - children: [ - Container( - height: 35, - margin: const EdgeInsets.symmetric(horizontal: 40,), - padding: const EdgeInsets.symmetric(horizontal: 10), - constraints: BoxConstraints( - maxWidth: !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone - ? width >= 1052 ? 400 : 200 : 250 ), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(15), - border: Border.all(color: Colors.grey, width: 1) - ), - child: DropdownButton( - isExpanded: true, - value: context.watch().dropdowntipo, - iconSize: 20, - elevation: 0, - dropdownColor: Colors.white, - icon: Icon(Icons.arrow_drop_down, color: Colors.black,), - style: TextStyle(color: Colors.black), - underline: Container(), - onChanged: (newValue) async { - setState(() { - context.read().dropdowntipo = newValue!; - holerite = widget.holerite.firstWhere((e) => e.holeriteTipo == newValue); - }); - }, - items: widget.holerite.map((e) => e.holeriteTipo).toList() - .map>(( value) { - return DropdownMenuItem( - value: value, - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 8), - child: CustomText.text(value ?? ''), - ), - ); - }).toList(), - ), - ), - ], - ), - if(kIsWeb) - SizedBox(height: 20,), - - if(!kIsWeb) - Container( - height: 35, - margin: const EdgeInsets.symmetric(horizontal: 40,), - padding: const EdgeInsets.symmetric(horizontal: 10), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(15), - border: Border.all(color: Colors.grey, width: 1) - ), - child: DropdownButton( - isExpanded: true, - value: context.watch().dropdowntipo, - iconSize: 20, - elevation: 0, - icon: Icon(Icons.arrow_drop_down, color: Colors.black,), - style: TextStyle(color: Colors.black), - underline: Container(), - onChanged: (newValue) async { - setState(() { - context.read().dropdowntipo = newValue!; - holerite = widget.holerite.firstWhere((e) => e.holeriteTipo == newValue); - }); - }, - items: widget.holerite.map((e) => e.holeriteTipo).toList() - .map>(( value) { - return DropdownMenuItem( - value: value, - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 8), - child: CustomText.text(value ?? ''), - ), - ); - }).toList(), - ), - ), - Container( height: 195, width: width, padding: EdgeInsets.symmetric( @@ -207,7 +91,8 @@ class _DetalhesHoleriteState extends State { borderRadius: BorderRadius.circular(30) ), child: Center( - child: CustomText.text("Proventos\n${mask.format(holerite?.vencimentos ?? 0)}", + child: CustomText.text("Proventos\n${ + widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos.real()}", textAlign: TextAlign.center, autoSize: true, style: const TextStyle(color: Colors.white), ), @@ -221,7 +106,8 @@ class _DetalhesHoleriteState extends State { borderRadius: BorderRadius.circular(30) ), child: Center( - child: CustomText.text("Descontos\n${mask.format(holerite?.descontos ?? 0)}", + child: CustomText.text("Descontos\n${ + widget.holerite.attributes?.data?.funcionarioResumo?.totalDescontos.real()}", textAlign: TextAlign.center, autoSize: true, style: const TextStyle(color: Colors.white), ), @@ -235,7 +121,8 @@ class _DetalhesHoleriteState extends State { borderRadius: BorderRadius.circular(30) ), child: Center( - child: CustomText.text("Liquido\n${mask.format(holerite?.liquido ?? 0)}", + child: CustomText.text("Liquido\n${ + widget.holerite.attributes?.data?.funcionarioResumo?.liquido.real()}", textAlign: TextAlign.center, autoSize: true, style: const TextStyle(color: Colors.white), ), @@ -249,6 +136,12 @@ class _DetalhesHoleriteState extends State { alignment: Alignment.center, padding: const EdgeInsets.only(top: 5, left: 10, right: 10), width: width * 0.59 > width - 110 ? width - 110 : width * 0.59, + decoration: BoxDecoration( + color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? Colors.white : Colors.grey[100], + borderRadius: BorderRadius.circular(15) + ), child: Column( mainAxisAlignment: MainAxisAlignment.center, mainAxisSize: MainAxisSize.min, @@ -260,7 +153,8 @@ class _DetalhesHoleriteState extends State { height: 138, constraints: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone ? BoxConstraints(maxWidth: width >= 852 ? 400 : 300) : null, + && !ResponsiveBreakpoints.of(context).isPhone + ? BoxConstraints(maxWidth: width >= 852 ? 400 : 300) : null, child: charts.PieChart([charts.Series( id: 'Pizza', domainFn: (ChartPizza sales, _) => sales.desc, @@ -274,18 +168,26 @@ class _DetalhesHoleriteState extends State { }, data: [ ChartPizza('Proventos', - getPorcentagem(holerite?.vencimentos ?? 10.0, - holerite?.vencimentos != null && holerite?.liquido != null - ? (holerite?.vencimentos ?? 0) + (holerite?.liquido ?? 0) : - holerite?.vencimentos != null || holerite?.liquido != null - ? (holerite?.vencimentos ?? 0) + (holerite?.liquido ?? 0) : 100.0), + getPorcentagem(widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos ?? 10.0, + widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos != null + && widget.holerite.attributes?.data?.funcionarioResumo?.liquido != null + ? (widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos ?? 0) + + (widget.holerite.attributes?.data?.funcionarioResumo?.liquido ?? 0) : + widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos != null + || widget.holerite.attributes?.data?.funcionarioResumo?.liquido != null + ? (widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos ?? 0) + + (widget.holerite.attributes?.data?.funcionarioResumo?.liquido ?? 0) : 100.0), ), ChartPizza('Liquido', - getPorcentagem(holerite?.liquido ?? 0.0, - holerite?.vencimentos != null && holerite?.liquido != null - ? (holerite?.vencimentos ?? 0) + (holerite?.liquido ?? 0) : - holerite?.vencimentos != null || holerite?.liquido != null - ? (holerite?.vencimentos ?? 0) + (holerite?.liquido ?? 0) : 100.0),) + getPorcentagem(widget.holerite.attributes?.data?.funcionarioResumo?.liquido ?? 0.0, + widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos != null + && widget.holerite.attributes?.data?.funcionarioResumo?.liquido != null + ? (widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos ?? 0) + + (widget.holerite.attributes?.data?.funcionarioResumo?.liquido ?? 0) : + widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos != null + || widget.holerite.attributes?.data?.funcionarioResumo?.liquido != null + ? (widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos ?? 0) + + (widget.holerite.attributes?.data?.funcionarioResumo?.liquido ?? 0) : 100.0),) ], labelAccessorFn: (ChartPizza sales, _) => '${sales.valor.toString()}%') ], @@ -302,7 +204,8 @@ class _DetalhesHoleriteState extends State { horizontalFirst: true, cellPadding: EdgeInsets.only(left: width * 0.06, bottom: 2), entryTextStyle: common.TextStyleSpec( - fontSize: (11).toInt(), color: charts.MaterialPalette.black, + fontSize: (11).toInt(), + color: charts.MaterialPalette.black, ), showMeasures: false, legendDefaultMeasure: charts.LegendDefaultMeasure.none, @@ -312,10 +215,12 @@ class _DetalhesHoleriteState extends State { arcRendererDecorators: [ charts.ArcLabelDecorator( insideLabelStyleSpec: charts.TextStyleSpec( - fontSize: (12).toInt(), color: charts.MaterialPalette.white, + fontSize: (12).toInt(), + color: charts.MaterialPalette.white, ), outsideLabelStyleSpec: charts.TextStyleSpec( - fontSize: (11).toInt(), color: charts.MaterialPalette.black, + fontSize: (11).toInt(), + color: charts.MaterialPalette.black, ), labelPosition: charts.ArcLabelPosition.auto, ) @@ -333,17 +238,23 @@ class _DetalhesHoleriteState extends State { alignment: Alignment.center, padding: const EdgeInsets.all(10), decoration: BoxDecoration( - color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? Colors.white : Colors.grey[100], + color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? Colors.white : Colors.grey[100], borderRadius: BorderRadius.circular(15) ), child: Column( mainAxisAlignment: MainAxisAlignment.center, mainAxisSize: MainAxisSize.max, children: [ - CustomText.text('Líquido nos ultimos ${kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone ? '6' : '3'} meses', style: const TextStyle(color: Colors.black),), + CustomText.text('Líquido nos ultimos ${kIsWeb + && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? '6' : '3'} meses', + style: const TextStyle(color: Colors.black),), const SizedBox(height: 10,), - Container(height: height * 0.25, + SizedBox( + height: height * 0.25, child: charts.BarChart( [charts.Series( id: 'Holerites', @@ -352,7 +263,10 @@ class _DetalhesHoleriteState extends State { domainFn: (ChartColum sales, _) => sales.data, measureFn: (ChartColum sales, _) => sales.valor, colorFn: (_, __) => colors.Color.fromHex( code: 'f0D47A1'), - data: HoleriteModel().toColum(holerite!.historicos!.toList(), context), + data: context.read().filtroHolerite(widget.holerite, kIsWeb + && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? 6 : 3), labelAccessorFn: (ChartColum sales, _) => 'R\$${sales.valor.toInt()}', ), @@ -361,9 +275,11 @@ class _DetalhesHoleriteState extends State { charts.SelectionModelConfig( type: charts.SelectionModelType.info, updatedListener: (v){ - if(v.selectedDatum.length > 0){ - context.read().dropdowndata = v.selectedDatum.first.datum.data; - + if(v.selectedDatum.isNotEmpty){ + setState(() { + widget.holerite = context.read() + .selectHolerite(v.selectedDatum.first.datum.ind); + }); } } ) @@ -372,10 +288,10 @@ class _DetalhesHoleriteState extends State { vertical: true, domainAxis: charts.OrdinalAxisSpec( renderSpec: charts.SmallTickRendererSpec( - - // Tick and Label styling here. labelStyle: charts.TextStyleSpec( - fontSize: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? 12 : (width * 0.03).toInt(), // size in Pts. + fontSize: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? 12 : (width * 0.03).toInt(), // size in Pts. color: charts.MaterialPalette.black), // Change the line colors to match text color. @@ -386,10 +302,16 @@ class _DetalhesHoleriteState extends State { labelPadding: (height * 0.020).toInt(), labelPlacement: common.BarLabelPlacement.opposeAxisBaseline, insideLabelStyleSpec: charts.TextStyleSpec( - fontSize: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? 12 : (width * 0.03).toInt(), color: charts.MaterialPalette.white, + fontSize: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? 12 : (width * 0.03).toInt(), + color: charts.MaterialPalette.white, ), outsideLabelStyleSpec: charts.TextStyleSpec( - fontSize: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? 12 : (width * 0.03).toInt(), color: charts.MaterialPalette.black, + fontSize: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? 12 : (width * 0.03).toInt(), + color: charts.MaterialPalette.black, ) ), cornerStrategy: const charts.ConstCornerStrategy(20), @@ -400,7 +322,8 @@ class _DetalhesHoleriteState extends State { ) ), const SizedBox(height: 15,), - CustomText.text("Disponibilizado\n${holerite?.dataCriacao ?? ''}", textAlign: TextAlign.center,), + CustomText.text("Disponibilizado\n${widget.holerite.attributes?.createDate ?? ''}", + textAlign: TextAlign.center,), ], ), ), @@ -420,14 +343,14 @@ class _DetalhesHoleriteState extends State { String? html; try { carregar(context); - b = await context.read().holeriteresumoBytes( - UserHoleriteManager.sUser, widget.idComp, widget.mes, widget.ano, holerite?.holeriteTipoCod ); + //b = await context.read().holeriteresumoBytes( + // UserHoleriteManager.user, idComp, mes, ano, holerite?.holeriteTipoCod ); /*if(kIsWeb){ }else{ a = await context.read().holeriteresumo( - UserHoleriteManager.sUser, widget.idComp, widget.mes, widget.ano, holerite?.holeriteTipoCod ); + UserHoleriteManager.sUser, idComp, mes, ano, holerite?.holeriteTipoCod ); }*/ } catch(e){ debugPrint(e.toString()); @@ -436,7 +359,7 @@ class _DetalhesHoleriteState extends State { } if(b != null){ await Navigator.push(context, MaterialPageRoute( - builder: (context)=> FileHero( 'holerite-${widget.ano}-${widget.mes}', + builder: (context)=> FileHero( 'holerite-${widget.holerite.attributes?.year}-${widget.holerite.attributes?.month}', file: a, memori: b, html: html,))); }else{ InfoAlertBox( diff --git a/lib/ui/smartphone/holerite/detelhes_holerite_pdf.dart b/lib/ui/smartphone/holerite/detelhes_holerite_pdf.dart deleted file mode 100644 index f3bb9b8..0000000 --- a/lib/ui/smartphone/holerite/detelhes_holerite_pdf.dart +++ /dev/null @@ -1,113 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/cupertino.dart'; - - -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:charts_common/common.dart' as common; -import 'package:charts_common/src/common/color.dart' as colors; - -import '../../../common/common.dart'; -import '../../../config.dart'; -import '../../../controllers/controllers.dart'; -import '../../../model/model.dart'; -import 'detelhes_holerite.dart'; - - -class DetalhesHoleritePDF extends StatefulWidget { - BoxConstraints constraints; - DetalhesHoleritePDF(this.constraints); - - @override - _DetalhesHoleriteState createState() => _DetalhesHoleriteState(); -} - -class _DetalhesHoleriteState extends State { - bool load = false; - CompetenciasModel? _comp; - - @override - void initState() { - super.initState(); - } - - - @override - Widget build(BuildContext context) { - //double height = MediaQuery.of(context).size.height - (WidgetsBinding.instance.window.padding.top); - double width = MediaQuery.of(context).size.width; - - - return Consumer2( - builder: (_, use, holerite, __){ - Future?> dadosHolerite() async { - List? _holerite; - try{ - if(holerite.listcompetencias.isEmpty){ - holerite.listcompetencias = await holerite.competencias(UserHoleriteManager.sUser, ); - } - if(holerite.listcompetencias.isNotEmpty){ - _comp = holerite.listcompetencias.firstWhere( - (e) => e.descricao == holerite.dropdowndata); - if(_comp != null){ - _holerite = await holerite.resumoscreen(_comp!.id!, _comp!.mes!, _comp!.ano!); - } - } - } catch(e){ - _holerite = null; - } - return _holerite; - } - - return Scaffold( - body: Container( - constraints: widget.constraints, - height: widget.constraints.maxHeight, - width: width, - alignment: Alignment.topCenter, - padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 0), - child: FutureBuilder?>( - future: dadosHolerite(), - builder: (_, snapshot){ - Widget resultado; - switch( snapshot.connectionState ){ - case ConnectionState.none : - case ConnectionState.waiting : - resultado = Center( - child: Container( - width: 50, - child: const LinearProgressIndicator(minHeight: 10, backgroundColor: Colors.transparent,) - ), - ); - break; - case ConnectionState.active : - case ConnectionState.done : - if( snapshot.hasError || !snapshot.hasData || snapshot.data == null){ - resultado = GestureDetector( - child: const Icon(Icons.autorenew_outlined, - color: Config.corPri, size: 70,), - onTap: (){ - dadosHolerite(); - } - ); - }else { - if(snapshot.data != null){ - resultado = Center( - child: DetalhesHolerite( - snapshot.data!.reversed.toList(),_comp!.id!, _comp!.mes!, _comp!.ano! - ), - ); - }else{ - resultado = Center(child: CustomText.text('')); - } - } - break; - } - return resultado; - } - ), - ), - ); - } - ); - } -} diff --git a/lib/ui/smartphone/holerite/holerite_screen.dart b/lib/ui/smartphone/holerite/holerite_screen.dart index 336dfb8..f1cf24a 100644 --- a/lib/ui/smartphone/holerite/holerite_screen.dart +++ b/lib/ui/smartphone/holerite/holerite_screen.dart @@ -1,4 +1,5 @@ +import 'package:assecontservices/assecontservices.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; @@ -6,10 +7,11 @@ import 'package:responsive_framework/responsive_breakpoints.dart'; import '../../../common/common.dart'; -import '../../../config.dart'; +import '../../../common/custom_filter.dart'; +import '../../../common/custom_livelist.dart'; import '../../../helper/helper.dart'; -import '../../../model/model.dart'; import '../../../controllers/controllers.dart'; +import '../../../model/holerite/holerite/holerite.dart'; import '../../ui.dart'; import 'detelhes_holerite.dart'; @@ -21,193 +23,59 @@ class HoleriteScreen extends StatefulWidget { class _HoleriteScreenState extends State { final GlobalKey _scaffoldKey = GlobalKey(); - CompetenciasModel? _comp; - ConnectionStatusSingleton connectionStatus = ConnectionStatusSingleton.getInstance(); - - + final ConnectionStatusSingleton connectionStatus = ConnectionStatusSingleton.getInstance(); + final ScrollController scrollController = ScrollController(); @override void initState() { - context.read().competencias(UserHoleriteManager.sUser); - + context.read().init(); super.initState(); } @override Widget build(BuildContext context) { - //double width = MediaQuery.of(context).size.width; - double width = MediaQuery.of(context).size.width; - - return Consumer2( - builder: (_, use, holerite, __){ - - Future?> dadosHolerite() async { - List? _holerite; - try{ - if(holerite.listcompetencias.isEmpty){ - holerite.listcompetencias = await holerite.competencias(UserHoleriteManager.sUser); - } - if(holerite.listcompetencias.isNotEmpty){ - _comp = holerite.listcompetencias.firstWhere( - (e) => e.descricao == holerite.dropdowndata); - if(_comp != null){ - _holerite = await holerite.resumoscreen(_comp!.id!, _comp!.mes!, _comp!.ano!); - } - } - } catch(e){ - _holerite = null; - } - return _holerite; - } + return Consumer( + builder: (_, holerite, __){ return CustomScaffold.custom( key: _scaffoldKey, context: context, - height: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? 0 : 70, - appTitle: 'Meu Holerite', - appbar: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? null : Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, + height: 40, + appTitle: 'Meus Holerites', + body: Column( children: [ - Container( - alignment: Alignment.topLeft, - child: Container( - height: 40, - constraints: BoxConstraints(maxWidth: 400), - margin: const EdgeInsets.only(left: 30, right: 30, bottom: 20, top: 5), - padding: const EdgeInsets.symmetric(horizontal: 10), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(15), - border: Border.all(color: Colors.grey, width: 1) - ), - child: DropdownButton( - isExpanded: true, - dropdownColor: Colors.white, - value: holerite.dropdowndata, - iconSize: 20, - elevation: 0, - icon: const Icon(Icons.arrow_drop_down, color: Colors.black,), - style: const TextStyle(color: Colors.black), - underline: Container(), - onChanged: ( newValue) { - holerite.dropdowndata = newValue!; - dadosHolerite(); - }, - items: holerite.listcompetencias.map((e) => e.descricao). - toList().map>(( value) { - return DropdownMenuItem( - value: value ?? '', - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 8), - child: CustomText.text(value ?? ''), - ), - ); - }).toList(), - ), - ), + FilterWidget( + onFiltro: (filtro ) { + holerite.pageSize = filtro; + }, + filtro: holerite.pageSize, + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), ), - ], - ), - body: Stack( - children: [ - Container( - //height: MediaQuery.of(context).size.height - 100 - AppBar().preferredSize.height -MediaQuery.of(context).padding.top, child: !connectionStatus.hasConnection ? - Center(child: CustomText.text('Verifique sua Conexão com Internet')) : - holerite.dropdowndata == 'Holerites' ? - Center( - child: CustomText.text('Usuário não tem Holerites', - style: TextStyle(fontSize: 20),), - ) : FutureBuilder?>( - future: dadosHolerite(), - builder: (context, snapshot){ - Widget resultado; - switch( snapshot.connectionState ){ - case ConnectionState.none : - case ConnectionState.waiting : - resultado = Center( - child: Container( - width: 50, - child: const LinearProgressIndicator( - minHeight: 10, backgroundColor: Colors.transparent,) - ), - ); - break; - case ConnectionState.active : - case ConnectionState.done : - if( snapshot.hasError || !snapshot.hasData || snapshot.data == null){ - resultado = GestureDetector( - child: Icon(Icons.autorenew_outlined, - color: Config.corPri, size: 70,), - onTap: (){ - dadosHolerite(); - } - ); - }else { - if(snapshot.data?.isNotEmpty ?? false){ - resultado = Center( - child: DetalhesHolerite( - snapshot.data!.reversed.toList(), - _comp!.id!, _comp!.mes!, _comp!.ano! - ) - ); - }else{ - resultado = Center(child: CustomText.text('Nenhum Holerite disponivel')); - } - } - break; - } - return resultado; - }, - ) + Center(child: CustomText.text('Verifique sua Conexão com Internet')) : + CustomLiveList( + scrollController: scrollController, + list: holerite.listHolerites, + isLoad: holerite.load, + content: (DatumHolerite item) { + return ListTile( + leading: Text('${item.attributes?.month ?? ''}\n${item.attributes?.year ?? ''}', + textAlign: TextAlign.center,), + title: Text(item.attributes?.type ?? ''), + subtitle: Text(item.attributes?.data?.funcionarioResumo?.liquido?.real() ?? '0'), + ); + }, + onTap: (DatumHolerite item) { + CustomNavigator.routeClass(context, DetalhesHolerite(item)); + }, + endScroll: () async { + if(holerite.pageSize == 0 && ((holerite.holerites?.meta?.pagination?.pageCount ?? 0) < holerite.page)){ + await holerite.newPageHolerite(); + } + }, + ) ), - - if(kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone) - Column( - mainAxisSize: MainAxisSize.min, - children: [ - SizedBox(height: 10,), - Container( - alignment: Alignment.topLeft, - padding: const EdgeInsets.symmetric(horizontal: 20), - child: Container( - height: 35, - constraints: BoxConstraints(maxWidth: width >= 1052 ? 400 : 200), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(15), - border: Border.all(color: Colors.grey, width: 1) - ), - child: DropdownButton( - isExpanded: true, - dropdownColor: Colors.white, - value: holerite.dropdowndata, - iconSize: 20, - elevation: 0, - icon: Icon(Icons.arrow_drop_down, color: Colors.black,), - style: TextStyle(color: Colors.black), - underline: Container(), - onChanged: ( newValue) { - holerite.dropdowndata = newValue!; - dadosHolerite(); - }, - items: holerite.listcompetencias.map((e) => e.descricao). - toList().map>(( value) { - return DropdownMenuItem( - value: value ?? '', - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 8), - child: CustomText.text(value ?? ''), - ), - ); - }).toList(), - ), - ), - ), - ], - ), ], ) ); diff --git a/lib/ui/smartphone/tela_base/custom_scaffold.dart b/lib/ui/smartphone/tela_base/custom_scaffold.dart index 6d0affe..3ef2653 100644 --- a/lib/ui/smartphone/tela_base/custom_scaffold.dart +++ b/lib/ui/smartphone/tela_base/custom_scaffold.dart @@ -21,7 +21,7 @@ class CustomScaffold { static home({GlobalKey? keyListMenu, required List listMenu, double? height, Widget? buttom, required BuildContext context,required Widget body, bool isListView = true, String? foto, Widget? dados, GlobalKey? keyMenu, GlobalKey? key1, GlobalKey? key2, GlobalKey? key3, GlobalKey? key4, GlobalKey? key5, - required String appTitle,String? nome, String? cargo}){ + required String appTitle,String? nome, String? cargo, bool onFoto = true}){ double h = 180 + MediaQuery.of(context).padding.top; @@ -33,7 +33,7 @@ class CustomScaffold { cargo:cargo , buttom: buttom, listMenus: listMenu, - foto: Hero( + foto: onFoto ? Hero( tag: "foto", child: GestureDetector( onTap: () async { @@ -69,7 +69,7 @@ class CustomScaffold { ) : null, ), ), - ), + ) : null, dados: dados, appTitle: appTitle @@ -112,9 +112,21 @@ class CustomScaffold { Expanded( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 10), - child: dados ?? Container(), + child: dados ?? Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + CustomText.text(nome, + style: const TextStyle(fontSize: 20, color: Colors.white), + textAlign: TextAlign.center,), + CustomText.text(cargo, + style: const TextStyle(fontSize: 14, color: Colors.white), + textAlign: TextAlign.center), + ], + ), ), ), + if(onFoto) Padding( padding: const EdgeInsets.all(5.0), child: Hero( @@ -171,7 +183,7 @@ class CustomScaffold { child: isListView ? ListView( scrollDirection: Axis.horizontal, - padding: EdgeInsets.symmetric(horizontal: 10), + padding: const EdgeInsets.symmetric(horizontal: 10), children: listMenu, ) : Row( @@ -207,12 +219,12 @@ class CustomScaffold { minDate: dataMin ?? DateTime(2020), maxDate: dataMax ?? DateTime(DateTime.now().year + 1), dateStyle: TextStyle(color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? Config.corPri : Colors.white,), - dayOfWeekStyle: TextStyle(color: Config.corPri), + dayOfWeekStyle: const TextStyle(color: Config.corPri), todayDateStyle: TextStyle(color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? Config.corPri : Colors.white,), - monthStyle: TextStyle(color: Colors.white), + monthStyle: const TextStyle(color: Colors.white), pressedDateBackgroundColor: Colors.white30, pressedDateStyle: const TextStyle(color: Colors.white), - weekendsStyle: TextStyle(color: Config.corPri), + weekendsStyle: const TextStyle(color: Config.corPri), onDatePressed: funcData, dayOfWeek: const [ "Seg", @@ -250,7 +262,7 @@ class CustomScaffold { key: key, appBar: appTitle == null || kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone && appTitle != 'Configurações' ? null : AppBar( - title: CustomText.text(appTitle, style: TextStyle(fontSize: 16), textAlign: TextAlign.center), + title: CustomText.text(appTitle, style: const TextStyle(fontSize: 16), textAlign: TextAlign.center), centerTitle: true, actions: [ actions(context, aponta: home, config: conf), @@ -293,7 +305,7 @@ class CustomScaffold { static homeWeb({GlobalKey? key, required BuildContext context, Widget? buttom, - required Widget body, required List listMenus, required Widget foto, + required Widget body, required List listMenus, Widget? foto, Widget? dados, required String appTitle,required String? nome,required String? cargo, }){ @@ -338,9 +350,9 @@ class CustomScaffold { crossAxisAlignment: CrossAxisAlignment.start, children: [ CustomText.text(nome, - style: TextStyle(fontSize: 20), textAlign: TextAlign.center), + style: const TextStyle(fontSize: 20), textAlign: TextAlign.center), CustomText.text(cargo, - style: TextStyle(fontSize: 10), textAlign: TextAlign.center), + style: const TextStyle(fontSize: 10), textAlign: TextAlign.center), ], ), diff --git a/lib/ui/smartphone/tela_base/drawer_web.dart b/lib/ui/smartphone/tela_base/drawer_web.dart index 3aa0cec..84c0d7b 100644 --- a/lib/ui/smartphone/tela_base/drawer_web.dart +++ b/lib/ui/smartphone/tela_base/drawer_web.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; class DrawerWebView extends StatefulWidget { - Widget foto; + Widget? foto; String? titulo; List children; @@ -25,14 +25,17 @@ class _DrawerWebViewState extends State { return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ - Padding( - padding: const EdgeInsets.only(top: 10), - child: widget.foto, - ), - const Padding( - padding: EdgeInsets.all(8.0), - child: Divider(), - ), + if(widget.foto != null)...[ + Padding( + padding: const EdgeInsets.only(top: 10), + child: widget.foto, + ), + const Padding( + padding: EdgeInsets.all(8.0), + child: Divider(), + ), + ], + Expanded( child: ListView( children: widget.children diff --git a/lib/ui/ui.dart b/lib/ui/ui.dart index 9374f27..f8029b1 100644 --- a/lib/ui/ui.dart +++ b/lib/ui/ui.dart @@ -5,6 +5,5 @@ export 'smartphone/tela_base/custom_scaffold.dart'; export 'smartphone/config/config_screen.dart'; -export 'smartphone/holerite/detelhes_holerite_pdf.dart'; export 'smartphone/holerite/detelhes_holerite.dart'; export 'smartphone/holerite/holerite_screen.dart'; \ No newline at end of file diff --git a/lib/utils/extensions.dart b/lib/utils/extensions.dart new file mode 100644 index 0000000..c89569f --- /dev/null +++ b/lib/utils/extensions.dart @@ -0,0 +1,25 @@ +import 'package:intl/intl.dart'; + + + +extension FormatesDateTime on DateTime? { + String dateFormat({String? format}) { + if(this == null ) return ''; + return DateFormat(format ?? 'dd/MM/yyyy', 'pt_BR').format(this!); + } +} + +extension FormatesDouble on double? { + String real() { + var _mask = NumberFormat.currency(locale: 'pt_Br', customPattern: 'R\$#,##0.00'); + return _mask.format(this ?? 0); + } +} + +extension FormatesString on String? { + double toDouble() { + if(this == null) return 0; + final d = double.tryParse(this!.replaceAll('.', '').replaceAll(',', '.')); + return d ?? 0; + } +} \ No newline at end of file diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 96d8aef..5f8e8ce 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -6,4 +6,5 @@ export 'custom_navigator.dart'; export 'external_share.dart'; export 'get_file.dart'; export 'url_launcher.dart'; -export 'validacoes.dart'; \ No newline at end of file +export 'validacoes.dart'; +export 'extensions.dart'; \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml index d501737..f2c6277 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -102,6 +102,8 @@ dependencies: #store_launcher: ^1.0.1 auto_size_text: ^3.0.0 + auto_animated: ^3.2.0 + shimmer: ^3.0.0 schedulers: ^1.0.1 @@ -139,33 +141,4 @@ flutter: windows: pluginClass: AssecontservicesPlugin - # To add assets to your plugin package, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - # - # For details regarding assets in packages, see - # https://flutter.dev/assets-and-images/#from-packages - # - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. - - # To add custom fonts to your plugin package, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts in packages, see - # https://flutter.dev/custom-fonts/#from-packages + From f516affce2c828b5041651182f497261a92af9f6 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Mon, 3 Jun 2024 20:45:17 -0300 Subject: [PATCH 04/73] ajuste api para novo holerite --- android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + android/gradlew | 160 ++++++++ android/gradlew.bat | 90 ++++ lib/assecontservices.dart | 5 - lib/common/actions/func_alter_user.dart | 7 +- lib/common/common.dart | 4 +- lib/common/custom_alert.dart | 63 ++- lib/common/custom_buttom.dart | 118 ++++++ lib/common/custom_date_picker.dart | 2 +- lib/common/custom_livelist.dart | 13 +- lib/common/custom_load_shimmer.dart | 21 + lib/common/custom_textformfield.dart | 65 +-- lib/controllers/controllers.dart | 1 - .../holerite/primeiro_acesso_manager.dart | 32 -- lib/controllers/holerite/user_manager.dart | 118 ++++-- lib/enums/holerite_tipo.dart | 68 ++++ lib/model/holerite/holerite/holerite.dart | 207 ++++++++-- lib/model/holerite/usuario/usuario.dart | 82 ++-- lib/services/holerite/holerite.dart | 69 +--- lib/services/holerite/primeiro_acesso.dart | 135 ------ lib/services/holerite/senha.dart | 4 +- lib/services/holerite/usuario.dart | 72 +++- lib/services/http/http_cliente.dart | 69 +++- lib/services/services.dart | 1 - lib/ui/smartphone/config/config_screen.dart | 154 ++++--- .../holerite/detelhes_holerite.dart | 384 +++--------------- .../holerite/graficos_holerite.dart | 353 ++++++++++++++++ .../smartphone/holerite/holerite_screen.dart | 4 +- lib/ui/ui.dart | 3 +- lib/utils/cpf_email_formatter.dart | 70 ++++ lib/{ => utils}/cpf_rg_formatter.dart | 0 lib/utils/extensions.dart | 1 + lib/utils/utils.dart | 3 +- 34 files changed, 1542 insertions(+), 841 deletions(-) create mode 100644 android/gradle/wrapper/gradle-wrapper.jar create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/gradlew create mode 100644 android/gradlew.bat create mode 100644 lib/common/custom_buttom.dart create mode 100644 lib/common/custom_load_shimmer.dart delete mode 100644 lib/controllers/holerite/primeiro_acesso_manager.dart create mode 100644 lib/enums/holerite_tipo.dart delete mode 100644 lib/services/holerite/primeiro_acesso.dart create mode 100644 lib/ui/smartphone/holerite/graficos_holerite.dart create mode 100644 lib/utils/cpf_email_formatter.dart rename lib/{ => utils}/cpf_rg_formatter.dart (100%) diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..13372aef5e24af05341d49695ee84e5f9b594659 GIT binary patch literal 53636 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ⅅ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 H-+%o-(+5aQ literal 0 HcmV?d00001 diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..3c472b9 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip 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/lib/assecontservices.dart b/lib/assecontservices.dart index 922354e..eed7eb8 100644 --- a/lib/assecontservices.dart +++ b/lib/assecontservices.dart @@ -106,11 +106,6 @@ class Assecontservices { create: (_)=> UserHoleriteManager(), ), - if(Config.conf.nomeApp == VersaoApp.HoleriteApp) - ChangeNotifierProvider( - lazy: true, - create: (_)=> PrimeiroAcessoHoleriteManager(), - ), if(Config.conf.nomeApp == VersaoApp.HoleriteApp) ChangeNotifierProvider( lazy: true, diff --git a/lib/common/actions/func_alter_user.dart b/lib/common/actions/func_alter_user.dart index de64e77..ac3ee24 100644 --- a/lib/common/actions/func_alter_user.dart +++ b/lib/common/actions/func_alter_user.dart @@ -46,7 +46,7 @@ alterUser(BuildContext context, Function()? onAlterFunc){ color: user.listFunc[index] == UserHoleriteManager.funcSelect ? Config.corPri : null,), title: CustomText.text( - user.listFunc[index].attributes?.office?.toUpperCase() ?? "", + user.listFunc[index].attributes?.nome?.toUpperCase() ?? "", style: TextStyle(fontSize: 16, color: user.listFunc[index] == UserHoleriteManager.funcSelect ? Config.corPri : null @@ -55,8 +55,9 @@ alterUser(BuildContext context, Function()? onAlterFunc){ textAlign: TextAlign.center, softWrap: true, maxLines: 1, ), - subtitle: CustomText.text('Registro: ${ - user.listFunc[index].attributes?.reg ?? ""}', + subtitle: CustomText.text(user.listFunc[index].attributes?.reg == null ? + user.listFunc[index].attributes?.office ?? "" + : 'Registro: ${user.listFunc[index].attributes?.reg ?? ""}', style: TextStyle(fontSize: 13, color: user.listFunc[index] == UserHoleriteManager.funcSelect ? Config.corPri : null), diff --git a/lib/common/common.dart b/lib/common/common.dart index f816f02..3e130fc 100644 --- a/lib/common/common.dart +++ b/lib/common/common.dart @@ -18,5 +18,7 @@ export 'column_or_row.dart'; export 'custom_list_tile.dart'; export 'custom_livelist.dart'; export 'custom_filter.dart'; +export 'custom_buttom.dart'; export 'actions/func_alter_user.dart'; -export 'actions/func_alter_empresa.dart'; \ No newline at end of file +export 'actions/func_alter_empresa.dart'; +export 'custom_load_shimmer.dart'; \ No newline at end of file diff --git a/lib/common/custom_alert.dart b/lib/common/custom_alert.dart index 24ccd16..db693bb 100644 --- a/lib/common/custom_alert.dart +++ b/lib/common/custom_alert.dart @@ -13,7 +13,7 @@ class CustomAlert { return SuccessAlertBox( context: context, title: 'Sucesso!', - messageText: mensage + '\n', + messageText: '$mensage\n', buttonText: 'OK' ); } @@ -22,7 +22,7 @@ class CustomAlert { return InfoAlertBox( context: context, title: 'Atenção!', - infoMessage: mensage + '\n', + infoMessage: '$mensage\n', buttonText: 'OK' ); } @@ -31,7 +31,7 @@ class CustomAlert { return WarningAlertBox( context: context, title: 'Falha!', - messageText: mensage + '\n', + messageText: '$mensage\n', buttonText: 'OK' ); } @@ -43,15 +43,15 @@ class CustomAlert { Widget? widgeTitulo, String? txtBotaoSucess, String? txtBotaoCancel, - VoidCallback? funcSucess, - VoidCallback? funcCancel}){ + Function? funcSucess, + Function? funcCancel}){ bool isDark = context.read().darkTemas; return showDialog( context: context, builder: (context){ return AlertDialog( - titlePadding: EdgeInsets.all(5), + titlePadding: const EdgeInsets.all(5), title: Column( mainAxisSize: MainAxisSize.min, children: [ @@ -61,41 +61,40 @@ class CustomAlert { icon: Icon(Icons.clear, color: isDark ? Colors.white60 : Colors.black54,) ), ), - widgeTitulo != null ? widgeTitulo : - Padding( + widgeTitulo ?? Padding( padding: const EdgeInsets.symmetric(horizontal: 15), - child: CustomText.text(titulo?.toUpperCase() ?? '', style: TextStyle(fontSize: 20),textAlign: TextAlign.center,), + child: CustomText.text(titulo?.toUpperCase() ?? '', style: const TextStyle(fontSize: 20),textAlign: TextAlign.center,), ), ], ), content: corpo, - contentPadding: EdgeInsets.symmetric(horizontal: 24, vertical: 5), + contentPadding: const EdgeInsets.symmetric(horizontal: 24, vertical: 5), buttonPadding: EdgeInsets.zero, actions: [ - if(txtBotaoCancel != null) - TextButton( - onPressed: (){ - funcCancel!(); - Navigator.pop(context); - }, - child: Container( - //width: 100, alignment: Alignment.center, - padding: EdgeInsets.symmetric(vertical: 12), - child: CustomText.text(txtBotaoCancel, style: TextStyle(color: isDark ? Colors.white54 : Colors.black45),)) + if(txtBotaoCancel != null) ...[ + CustomButtom.custom( + expand: true, + onPressed: () async { + if(funcCancel != null) await funcCancel(); + Navigator.pop(context); + }, + title: txtBotaoCancel, + color: Colors.red, ), - if(txtBotaoCancel != null) SizedBox(width: 10,), - if(txtBotaoSucess != null) - TextButton( - onPressed: (){ - funcSucess!(); - Navigator.pop(context); - }, - child: Container( - //width: 100, alignment: Alignment.center, - padding: EdgeInsets.symmetric(vertical: 12), - child: CustomText.text(txtBotaoSucess, style: TextStyle(color: Colors.blue),)) + const SizedBox(width: 10,), + ], + if(txtBotaoSucess != null) ...[ + CustomButtom.custom( + expand: true, + onPressed: () async { + if(funcSucess != null) await funcSucess(); + Navigator.pop(context); + }, + title: txtBotaoSucess, + color: Config.corPri, ), - SizedBox(width: 10,), + const SizedBox(width: 10,), + ] ], ); } diff --git a/lib/common/custom_buttom.dart b/lib/common/custom_buttom.dart new file mode 100644 index 0000000..44e80c4 --- /dev/null +++ b/lib/common/custom_buttom.dart @@ -0,0 +1,118 @@ + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +import 'package:provider/provider.dart'; +import 'package:shimmer/shimmer.dart'; + +import '../config.dart'; + + + +class CustomButtom { + + static Widget custom({String? title, Function? onPressed, double? height, + bool expand = false, Color? color, Color? borderColor, Widget? image, EdgeInsets? padding, + IconData? icon, double? width, TextStyle? style, double radius = 8,}){ + + return ChangeNotifierProvider( + create: (BuildContext context) => LoadButtomProvider(), + child: Consumer(builder: (context, load, __) { + return ElevatedButton( + style: ButtonStyle( + backgroundColor: MaterialStateProperty.resolveWith( + (Set states) => states.any((e) => + e == MaterialState.disabled || e == MaterialState.error) + ? (color ?? Config.corPri).withOpacity(0.8) : color ?? Config.corPri, + ), + padding: MaterialStateProperty.resolveWith( + (Set states) => padding ?? EdgeInsets.symmetric(horizontal: 15, vertical: 5), + ), + shape: MaterialStateProperty.resolveWith( + (Set states) => RoundedRectangleBorder( + side: BorderSide(color: borderColor ?? Colors.transparent), //the outline color + borderRadius: BorderRadius.all(Radius.circular(radius))), + ), + minimumSize: MaterialStateProperty.resolveWith( + (Set states) => const Size(0,0), + ), + ), + onPressed: onPressed == null || load.isLoad ? null : () async { + load.isLoad = true; + try { + await onPressed(); + } finally { + load.isLoad = false; + } + }, + child: SizedBox( + width: width, + height: height, + child: load.isLoad ? Row( + mainAxisSize: expand ? MainAxisSize.max: MainAxisSize.min, + mainAxisAlignment: width != null && icon != null ? + MainAxisAlignment.start : MainAxisAlignment.center, + children: [ + Shimmer.fromColors( + baseColor: color == Colors.white ? Colors.grey : Colors.white, + highlightColor: Colors.grey[600]!, + child: title != null && title != '' ? Text( + width != null && width < 101 ? '...' : 'AGUARDE..', + textAlign: TextAlign.center, maxLines: 1, + style: style ?? TextStyle( + color: color == Colors.white ? Config.corPri : Colors.white, + fontWeight: FontWeight.bold, + fontSize: 20 + ), + ) : image ?? Padding( + padding: EdgeInsets.symmetric(horizontal: (title != null && title != '' ? 0 : 10)), + child: Icon(icon, size: 20, + color: color == Colors.white ? Config.corPri : Colors.white,), + ), + ), + ], + ) : Row( + mainAxisSize: expand ? MainAxisSize.max: MainAxisSize.min, + mainAxisAlignment: width != null && (icon != null || image != null) ? + MainAxisAlignment.start : MainAxisAlignment.center, + children: [ + if(icon != null || image != null) + image ?? Icon(icon, size: 20, + color: color == Colors.white ? Config.corPri : Colors.white,), + if(title != null && title != '') + Expanded( + child: Center( + child: Padding( + padding: EdgeInsets.symmetric(horizontal: (icon != null || width!= null ? 0 : 10)), + child: Text(title, textAlign: TextAlign.center, maxLines: 1, + style: style ?? TextStyle( + color: color == Colors.white ? Config.corPri : Colors.white, + fontWeight: FontWeight.bold, + fontSize: 20 + ), + ), + ), + ), + ) + ], + ), + ) + ); + } + ) + ); + } +} + +class LoadButtomProvider extends ChangeNotifier { + bool _isLoad = false; + bool get isLoad => _isLoad; + set isLoad(bool v) { + try { + _isLoad = v; + notifyListeners(); + } catch (e) { + // TODO + } + } +} \ No newline at end of file diff --git a/lib/common/custom_date_picker.dart b/lib/common/custom_date_picker.dart index 37e2ee9..37b7391 100644 --- a/lib/common/custom_date_picker.dart +++ b/lib/common/custom_date_picker.dart @@ -534,7 +534,7 @@ class _DatePickerDialogState extends State with RestorationMix CustomTextFormField.custom( //controller: _controller, //isClean: true, - onDateSubmitted: (v){ + onFieldSubmitted: (v){ final date = v.split('/'); _handleDateChanged(DateTime(int.parse(date.last),int.parse(date[1]),int.parse(date.first) )); }, diff --git a/lib/common/custom_livelist.dart b/lib/common/custom_livelist.dart index 6dc95cc..6e94099 100644 --- a/lib/common/custom_livelist.dart +++ b/lib/common/custom_livelist.dart @@ -7,18 +7,20 @@ import 'package:provider/provider.dart'; import '../config.dart'; import 'column_or_row.dart'; import 'custom_list_tile.dart'; +import 'custom_load_shimmer.dart'; class CustomLiveList extends StatefulWidget { const CustomLiveList({super.key, required this.list, this.isLoad = false, this.padding, this.endScroll, - required this.onTap, this.isList = true, this.scrollController, required this.content}); + required this.onTap, this.isList = true, this.scrollController, required this.content, this.txtListVazia}); final List list; final Widget Function(T item) content; final Function(T item) onTap; final Function()? endScroll; final ScrollController? scrollController; final bool isList; + final String? txtListVazia; final bool isLoad; final EdgeInsets? padding; @@ -63,9 +65,8 @@ class _CustomLiveListState extends State> { @override Widget build(BuildContext context) { return Expanded( - child: widget.isLoad ? Shimmer.fromColors( - baseColor: context.watch().darkTemas ? Colors.grey[800]! : Colors.grey.shade200, - highlightColor: context.watch().darkTemas ? Colors.grey[600]! : Colors.grey, + child: widget.isLoad ? CustomShimmerLoad( + isLoad: true, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 10), child: ColumnOrRow( @@ -83,6 +84,10 @@ class _CustomLiveListState extends State> { ), ) : LayoutBuilder( builder: (_, constraints){ + if(widget.list.isEmpty){ + return Center(child: Text(widget.txtListVazia ?? 'Nenhum dado carregado'),); + } + return Padding( padding: const EdgeInsets.symmetric(horizontal: 10), child: Column( diff --git a/lib/common/custom_load_shimmer.dart b/lib/common/custom_load_shimmer.dart new file mode 100644 index 0000000..cc07e95 --- /dev/null +++ b/lib/common/custom_load_shimmer.dart @@ -0,0 +1,21 @@ +import 'package:assecontservices/assecontservices.dart'; +import 'package:flutter/material.dart'; +import 'package:shimmer/shimmer.dart'; + +import '../config.dart'; + + +class CustomShimmerLoad extends StatelessWidget { + CustomShimmerLoad({super.key, this.isLoad = false, required this.child}); + final bool isLoad; + final Widget child; + + @override + Widget build(BuildContext context) { + return isLoad ? Shimmer.fromColors( + baseColor: context.watch().darkTemas ? Colors.grey[800]! : Colors.grey.shade200, + highlightColor: context.watch().darkTemas ? Colors.grey[600]! : Colors.grey, + child: child + ) : child; + } +} diff --git a/lib/common/custom_textformfield.dart b/lib/common/custom_textformfield.dart index a74411d..593f902 100644 --- a/lib/common/custom_textformfield.dart +++ b/lib/common/custom_textformfield.dart @@ -11,7 +11,8 @@ import 'package:datetime_picker_formfield_new/datetime_picker_formfield.dart'; import '../../utils/validacoes.dart'; import '../config.dart'; -import '../cpf_rg_formatter.dart'; +import '../utils/cpf_email_formatter.dart'; +import '../utils/cpf_rg_formatter.dart'; import 'custom_date_picker.dart'; @@ -20,7 +21,7 @@ class CustomTextFormField { TextEditingController? controller, String? title, Widget? icon, - void Function(String)? onDateSubmitted, + void Function(String)? onFieldSubmitted, void Function(DateTime)? onDateSaved, bool textAlign = false, bool isNext = false, @@ -31,7 +32,8 @@ class CustomTextFormField { FormType type = FormType.text, double radius = 12, double? width, - Color? txtColor, + Color? txtColor = Colors.white, + FocusNode? focusNode, }) { return Consumer( builder: (context, form, __) { @@ -45,8 +47,7 @@ class CustomTextFormField { children: [ if (title != null) Padding( - padding: EdgeInsets.only( - left: 5, top: 5, bottom: textAlign ? 5 : 0), + padding: const EdgeInsets.only(left: 5, top: 5, bottom: 5), child: Text( title, style: TextStyle( @@ -57,8 +58,9 @@ class CustomTextFormField { ), TextFormField( controller: controller, - style: TextStyle(fontSize: 12, color: Colors.black), + style: const TextStyle(fontSize: 12, color: Colors.black), scrollPadding: EdgeInsets.zero, + focusNode: focusNode, onSaved: (v) { if (onDateSaved != null && v != null) { final date = v.split('/'); @@ -66,13 +68,13 @@ class CustomTextFormField { int.parse(date[1]), int.parse(date.first))); } }, - onFieldSubmitted: onDateSubmitted, + onFieldSubmitted: onFieldSubmitted, textInputAction: isNext ? TextInputAction.next : TextInputAction.done, obscureText: type == FormType.pass, keyboardType: type == FormType.text || type == FormType.pass ? TextInputType.text - : type == FormType.email + : type == FormType.email || type == FormType.emailcpf ? TextInputType.emailAddress : TextInputType.number, decoration: InputDecoration( @@ -83,7 +85,7 @@ class CustomTextFormField { onPressed: () { controller?.clear(); }, - icon: Icon( + icon: const Icon( Icons.clear, color: Config.corPribar, ))), @@ -121,6 +123,8 @@ class CustomTextFormField { ? '000.000.000-00' : type == FormType.rgcpf ? 'RG/CPF' + : type == FormType.emailcpf + ? 'CPF/Email' : type == FormType.pass ? '********' : type == FormType.phone @@ -133,18 +137,22 @@ class CustomTextFormField { ? '00.000.000/0001-00' : type == FormType.cep ? '00000-000' - : null), - hintStyle: TextStyle(fontSize: 12, color: Colors.grey), + : 'Digite ${title ?? 'valor'}'), + hintStyle: const TextStyle(fontSize: 12, color: Colors.grey), ), inputFormatters: type == FormType.cpf - ? [ - FilteringTextInputFormatter.digitsOnly, - CpfInputFormatter(), - ] - : type == FormType.rgcpf + ? [ + FilteringTextInputFormatter.digitsOnly, + CpfInputFormatter(), + ] + : type == FormType.rgcpf + ? [ + FilteringTextInputFormatter.digitsOnly, + CpfOrRGFormatter(), + ] + : type == FormType.emailcpf ? [ - FilteringTextInputFormatter.digitsOnly, - CpfOrRGFormatter(), + CpfOrEmailFormatter(), ] : type == FormType.cep ? [ @@ -163,13 +171,23 @@ class CustomTextFormField { ] : type == FormType.date ? [ - FilteringTextInputFormatter - .digitsOnly, + FilteringTextInputFormatter.digitsOnly, DataInputFormatter(), ] : null, validator: validator ?? - (type == FormType.cpf + (type == FormType.emailcpf + ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o seu CPF/Email'; + } else if (!Validacoes.isCPF(v) && !Validacoes.emailValid(v)) { + form.isError = true; + return 'Digite CPF/Email valido'; + } + form.isError = false; + return null; + } : type == FormType.cpf ? (v) { if (v == null || v == '') { form.isError = true; @@ -335,7 +353,7 @@ class CustomTextFormField { filled: true, border: OutlineInputBorder( borderSide: isBorder - ? BorderSide(color: Config.corPribar,) + ? const BorderSide(color: Config.corPribar,) : BorderSide.none, borderRadius: BorderRadius.all(Radius.circular(radius))), errorBorder: OutlineInputBorder( @@ -345,7 +363,7 @@ class CustomTextFormField { fontWeight: FontWeight.w500, fontSize: 11, color: Colors.redAccent.shade100), - suffixIcon: Icon( + suffixIcon: const Icon( Icons.calendar_month, color: Config.corPribar, ), @@ -394,6 +412,7 @@ enum FormType { rgcpf, phone, email, + emailcpf, pass, date, text; diff --git a/lib/controllers/controllers.dart b/lib/controllers/controllers.dart index 948ba58..c7e91e8 100644 --- a/lib/controllers/controllers.dart +++ b/lib/controllers/controllers.dart @@ -15,7 +15,6 @@ export 'ponto/gethora.dart'; export 'holerite/holerite_manager.dart'; export 'holerite/user_manager.dart'; -export 'holerite/primeiro_acesso_manager.dart'; export 'holerite/senha_manager.dart'; export 'tablet/empresa_manager.dart'; export 'tablet/config_manager.dart'; diff --git a/lib/controllers/holerite/primeiro_acesso_manager.dart b/lib/controllers/holerite/primeiro_acesso_manager.dart deleted file mode 100644 index 979a5bf..0000000 --- a/lib/controllers/holerite/primeiro_acesso_manager.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - - -import '../../model/model.dart'; -import '../../services/services.dart'; - - -class PrimeiroAcessoHoleriteManager extends ChangeNotifier{ - final PrimeiroAcessoHoleriteService _service = PrimeiroAcessoHoleriteService(); - - PrimeiroAcessoHoleriteModel? acessoModel; - - Future verificar(BuildContext context , {required String cnpj, required String registro, }) async { - acessoModel = await _service.verificar(cnpj: cnpj, registro: registro); - notifyListeners(); - return acessoModel?.id != 0; - } - - Future esqueceuEmail(BuildContext context , {required String cnpj, required String registro, required String cpf, }) async { - acessoModel = await _service.esqueceuEmail(cnpj: cnpj, registro: registro, cpf: cpf); - notifyListeners(); - return acessoModel?.id != 0; - } - - Future cadastrar(BuildContext context, {required String email, - required String senha, required String cpf, String? cel,}) async { - bool result = await _service.cadastrar(id: acessoModel!.id!, cel: cel, email: email, senha: senha, cpf: cpf); - acessoModel = null; - notifyListeners(); - return result; - } -} \ No newline at end of file diff --git a/lib/controllers/holerite/user_manager.dart b/lib/controllers/holerite/user_manager.dart index f3bf998..d38149b 100644 --- a/lib/controllers/holerite/user_manager.dart +++ b/lib/controllers/holerite/user_manager.dart @@ -41,12 +41,34 @@ class UserHoleriteManager extends ChangeNotifier { notifyListeners(); } + loadBio() async { + try{ + final prefs = await SharedPreferences.getInstance(); + uemail = prefs.getString("user") ?? ''; + usenha = prefs.getString("usenha") ?? ''; + senha.text = prefs.getString("senha") ?? ''; + email.text = uemail; + Config.usenha = usenha; + await autoLogin(); + } catch(e) { + debugPrint(e.toString()); + } + } + memorizar() async { final prefs = await SharedPreferences.getInstance(); + await memorizarEmail(prefs); + await memorizarSenha(prefs); + } + + memorizarEmail(SharedPreferences prefs) async { await prefs.setString("user", email.text); + if(uemail == '') uemail = email.text; + } + + memorizarSenha(SharedPreferences prefs) async { await prefs.setString("usenha", senha.text); if(usenha == '') usenha = senha.text; - if(uemail == '') uemail = email.text; Config.usenha = usenha; if(status){ await prefs.setString("senha", senha.text); @@ -73,16 +95,6 @@ class UserHoleriteManager extends ChangeNotifier { } } - Future signInAuth({required String email, required String senha}) async { - user = await _service.signInAuth(email: email, senha: senha, token: token); - listFunc = await _serviceFunc.listFuncionarios(); - memorizar(); - if(listFunc.isNotEmpty) funcSelect = listFunc.last; - notifyListeners(); - return true; - } - - Future autoLogin() async { bool result = false; try { @@ -95,25 +107,52 @@ class UserHoleriteManager extends ChangeNotifier { return result; } - Future updateFunc({String? accountBank, String? pixKeyBank, String? email, - String? phone, String? agencyBank, String? typeBank, String? codeBank, }) async { + Future signInAuth({required String email, required String senha}) async { + user = await _service.signInAuth(email: email, senha: senha, token: token); + if(user?.user?.cpf != null && user?.user?.cpf != ''){ + listFunc = await _serviceFunc.listFuncionarios(); + if(listFunc.isNotEmpty) funcSelect = listFunc.last; + } + memorizar(); + notifyListeners(); + return true; + } - final result = await _serviceFunc.updateFuncionario( - id: funcSelect?.id, phone: phone, email: email, accountBank: accountBank, - typeBank: typeBank, codeBank: codeBank, pixKeyBank: pixKeyBank, agencyBank: agencyBank, - ); - if(result != null){ - funcSelect = result; - listFunc = listFunc.map((e) => e.id == result.id ? result : e).toList(); - notifyListeners(); - return true; - }else{ - return false; - } + Future registerUser({required String email, + required String senha,required String nome, required String cpf}) async { + user = await _service.registerUser(email: email, senha: senha, nome: nome, cpf: cpf); + listFunc = await _serviceFunc.listFuncionarios(); + if(listFunc.isNotEmpty) funcSelect = listFunc.last; + memorizar(); + notifyListeners(); + return true; + } + + Future updateUser({String? cpf, String? email, String? username}) async { + bool result = await _service.updateUser(cpf: cpf, + //email: email ?? user?.user?.email, + //username: username ?? user?.user?.username, + // senha: usenha + ); + if(result){ + if(cpf != null){ + user!.user!.cpf = cpf; + listFunc = await _serviceFunc.listFuncionarios(); + if(listFunc.isNotEmpty) funcSelect = listFunc.last; + } + if(username != null) user!.user!.username = username; + if(email != null){ + user!.user!.username = email; + final prefs = await SharedPreferences.getInstance(); + await memorizarEmail(prefs); + } + notifyListeners(); + } + return result; } Future deleteUser() async { - bool result = true;//await _service.deleteUser(user?.id); + bool result = await _service.deleteUser(); if(result){ signOut(); } @@ -141,17 +180,22 @@ class UserHoleriteManager extends ChangeNotifier { debugPrint(e.toString()); } } - loadBio() async { - try{ - final prefs = await SharedPreferences.getInstance(); - uemail = prefs.getString("user") ?? ''; - usenha = prefs.getString("usenha") ?? ''; - senha.text = prefs.getString("senha") ?? ''; - email.text = uemail; - Config.usenha = usenha; - await autoLogin(); - } catch(e) { - debugPrint(e.toString()); + + + Future updateFunc({String? accountBank, String? pixKeyBank, String? email, + String? phone, String? agencyBank, String? typeBank, String? codeBank, }) async { + + final result = await _serviceFunc.updateFuncionario( + id: funcSelect?.id, phone: phone, email: email, accountBank: accountBank, + typeBank: typeBank, codeBank: codeBank, pixKeyBank: pixKeyBank, agencyBank: agencyBank, + ); + if(result != null){ + funcSelect = result; + listFunc = listFunc.map((e) => e.id == result.id ? result : e).toList(); + notifyListeners(); + return true; + }else{ + return false; } } } \ No newline at end of file diff --git a/lib/enums/holerite_tipo.dart b/lib/enums/holerite_tipo.dart new file mode 100644 index 0000000..8f1f907 --- /dev/null +++ b/lib/enums/holerite_tipo.dart @@ -0,0 +1,68 @@ + + +enum HoleriteTipo +{ + Nenhum(0), + Salario(1), + ProLabore(2), + Adiantamento(3), + PrimeiraDecimo(4), + SegundaDecimo(5), + PLR(6), + Abono(7), + Domestica(7); + + final int value; + + String get toName { + switch(value) { + case 0: + return 'Recibo'; + case 1: + return 'Recibo de Salário'; + case 2: + return 'Recibo de Pró Labore'; + case 3: + return 'Recibo de Adiantamento'; + case 4: + return 'Recibo de 1ª Parcela 13º Salário'; + case 5: + return 'Recibo de 2ª Parcela 13º Salário'; + case 6: + return 'Participação Remunerada nos Resultados'; + case 7: + return 'Recibo de Abono'; + case 8: + return 'Recibo de Domestica'; + default: + return 'Recibo de Salário'; + } + } + + static HoleriteTipo getEnum(int? x) { + switch(x) { + case 0: + return Nenhum; + case 1: + return Salario; + case 2: + return ProLabore; + case 3: + return Adiantamento; + case 4: + return PrimeiraDecimo; + case 5: + return SegundaDecimo; + case 6: + return PLR; + case 7: + return Abono; + case 8: + return Domestica; + default: + return Nenhum; + } + } + + const HoleriteTipo(this.value); +} \ No newline at end of file diff --git a/lib/model/holerite/holerite/holerite.dart b/lib/model/holerite/holerite/holerite.dart index 2496225..5a4091b 100644 --- a/lib/model/holerite/holerite/holerite.dart +++ b/lib/model/holerite/holerite/holerite.dart @@ -1,18 +1,12 @@ -// To parse this JSON data, do -// -// final holeriteModel = holeriteModelFromMap(jsonString); - -import 'dart:convert'; import 'package:assecontservices/assecontservices.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; -import 'package:responsive_framework/responsive_breakpoints.dart'; + +import '../../../enums/holerite_tipo.dart'; class HoleriteModel { List? data; - Meta? meta; + MetaHolerite? meta; HoleriteModel({ this.data, @@ -21,7 +15,7 @@ class HoleriteModel { factory HoleriteModel.fromMap(Map json) => HoleriteModel( data: json["data"] == null ? [] : List.from(json["data"]!.map((x) => DatumHolerite.fromMap(x))), - meta: json["meta"] == null ? null : Meta.fromMap(json["meta"]), + meta: json["meta"] == null ? null : MetaHolerite.fromMap(json["meta"]), ); Map toMap() => { @@ -32,7 +26,7 @@ class HoleriteModel { class DatumHolerite { int? id; - Attributes? attributes; + DatumAttributesHolerite? attributes; DatumHolerite({ this.id, @@ -41,23 +35,32 @@ class DatumHolerite { factory DatumHolerite.fromMap(Map json) => DatumHolerite( id: json["id"], - attributes: json["attributes"] == null ? null : Attributes.fromMap(json["attributes"]), + attributes: json["attributes"] == null ? null : DatumAttributesHolerite.fromMap(json["attributes"]), ); Map toMap() => { "id": id, "attributes": attributes?.toMap(), }; + + ChartColum chartColum(){ + return ChartColum(id ?? 0, + '${attributes?.competence ?? ''}\n${attributes?.type.toName + .replaceAll('Recibo de ', '').replaceAll('13º Salário', '13º') + .replaceAll('Participação Remunerada nos Resultados', 'PLR') ?? ''}', + attributes?.data?.funcionarioResumo?.liquido ?? 0 + ); + } } -class Attributes { +class DatumAttributesHolerite { String? cpf; String? name; String? office; - Data? data; + AttributesDataHolerite? data; DateTime? createdAt; DateTime? updatedAt; - String? type; + HoleriteTipo type; String? month; String? year; DateTime? createDate; @@ -65,7 +68,7 @@ class Attributes { String? competence; String? rg; String? phone; - double? baseSalary; + int? baseSalary; String? agencyAccount; String? email; String? sindicate; @@ -76,16 +79,18 @@ class Attributes { String? importingUser; String? sheetType; bool? isSigned; - DateTime? signedAt; + dynamic signedAt; + EmployeeHolerite? employee; + String? file; - Attributes({ + DatumAttributesHolerite({ this.cpf, this.name, this.office, this.data, this.createdAt, this.updatedAt, - this.type, + this.type = HoleriteTipo.Nenhum, this.month, this.year, this.createDate, @@ -105,16 +110,18 @@ class Attributes { this.sheetType, this.isSigned, this.signedAt, + this.employee, + this.file, }); - factory Attributes.fromMap(Map json) => Attributes( + factory DatumAttributesHolerite.fromMap(Map json) => DatumAttributesHolerite( cpf: json["cpf"], name: json["name"], office: json["office"], - data: json["data"] == null ? null : Data.fromMap(json["data"]), + data: json["data"] == null ? null : AttributesDataHolerite.fromMap(json["data"]), createdAt: json["createdAt"] == null ? null : DateTime.parse(json["createdAt"]), updatedAt: json["updatedAt"] == null ? null : DateTime.parse(json["updatedAt"]), - type: json["type"], + type: HoleriteTipo.getEnum(int.tryParse(json["type"])), month: json["month"], year: json["year"], createDate: json["create_date"] == null ? null : DateTime.parse(json["create_date"]), @@ -122,7 +129,7 @@ class Attributes { competence: json["competence"], rg: json["rg"], phone: json["phone"], - baseSalary: json["baseSalary"]?.toDouble(), + baseSalary: json["baseSalary"], agencyAccount: json["agencyAccount"], email: json["email"], sindicate: json["sindicate"], @@ -133,7 +140,9 @@ class Attributes { importingUser: json["importingUser"], sheetType: json["sheetType"], isSigned: json["isSigned"], - signedAt: json["signedAt"] == null ? null : DateTime.parse(json["signedAt"]), + signedAt: json["signedAt"], + employee: json["employee"] == null ? null : EmployeeHolerite.fromMap(json["employee"]), + file: json["file"] == null ? null : json["file"]['data'], ); Map toMap() => { @@ -162,11 +171,12 @@ class Attributes { "importingUser": importingUser, "sheetType": sheetType, "isSigned": isSigned, - "signedAt": signedAt?.toIso8601String(), + "signedAt": signedAt, + "employee": employee?.toMap(), }; } -class Data { +class AttributesDataHolerite { int? cbo; String? cpf; String? reg; @@ -174,7 +184,7 @@ class Data { String? nome; dynamic chapa; String? cnpjcpf; - dynamic admissao; + DateTime? admissao; List? rawLines; int? setorLocal; List? errorFields; @@ -182,7 +192,7 @@ class Data { FuncionarioResumo? funcionarioResumo; List? funcionarioEventos; - Data({ + AttributesDataHolerite({ this.cbo, this.cpf, this.reg, @@ -199,7 +209,7 @@ class Data { this.funcionarioEventos, }); - factory Data.fromMap(Map json) => Data( + factory AttributesDataHolerite.fromMap(Map json) => AttributesDataHolerite( cbo: json["cbo"], cpf: json["cpf"], reg: json["reg"], @@ -207,7 +217,7 @@ class Data { nome: json["nome"], chapa: json["chapa"], cnpjcpf: json["cnpjcpf"], - admissao: json["admissao"], + admissao: json["admissao"] == null ? null : DateTime.parse(json["admissao"]), rawLines: json["rawLines"] == null ? [] : List.from(json["rawLines"]!.map((x) => x)), setorLocal: json["setorLocal"], errorFields: json["errorFields"] == null ? [] : List.from(json["errorFields"]!.map((x) => x)), @@ -338,15 +348,135 @@ class FuncionarioResumo { }; } -class Meta { - Pagination? pagination; +class EmployeeHolerite { + EmployeeData? data; + + EmployeeHolerite({ + this.data, + }); + + factory EmployeeHolerite.fromMap(Map json) => EmployeeHolerite( + data: json["data"] == null ? null : EmployeeData.fromMap(json["data"]), + ); + + Map toMap() => { + "data": data?.toMap(), + }; +} + +class EmployeeData { + int? id; + DataAttributes? attributes; + + EmployeeData({ + this.id, + this.attributes, + }); - Meta({ + factory EmployeeData.fromMap(Map json) => EmployeeData( + id: json["id"], + attributes: json["attributes"] == null ? null : DataAttributes.fromMap(json["attributes"]), + ); + + Map toMap() => { + "id": id, + "attributes": attributes?.toMap(), + }; +} + +class DataAttributes { + String? nome; + String? cpf; + String? phone; + String? email; + int? baseSalary; + String? office; + String? sector; + String? ctps; + String? syndicate; + String? codeBank; + String? accountBank; + String? typeBank; + String? pixKeyBank; + String? agencyBank; + DateTime? createdAt; + DateTime? updatedAt; + String? reg; + bool? isPreRegistered; + + DataAttributes({ + this.nome, + this.cpf, + this.phone, + this.email, + this.baseSalary, + this.office, + this.sector, + this.ctps, + this.syndicate, + this.codeBank, + this.accountBank, + this.typeBank, + this.pixKeyBank, + this.agencyBank, + this.createdAt, + this.updatedAt, + this.reg, + this.isPreRegistered, + }); + + factory DataAttributes.fromMap(Map json) => DataAttributes( + nome: json["nome"], + cpf: json["cpf"], + phone: json["phone"], + email: json["email"], + baseSalary: json["baseSalary"], + office: json["office"], + sector: json["sector"], + ctps: json["ctps"], + syndicate: json["syndicate"], + codeBank: json["codeBank"], + accountBank: json["accountBank"], + typeBank: json["typeBank"], + pixKeyBank: json["pixKeyBank"], + agencyBank: json["agencyBank"], + createdAt: json["createdAt"] == null ? null : DateTime.parse(json["createdAt"]), + updatedAt: json["updatedAt"] == null ? null : DateTime.parse(json["updatedAt"]), + reg: json["reg"], + isPreRegistered: json["isPreRegistered"], + ); + + Map toMap() => { + "nome": nome, + "cpf": cpf, + "phone": phone, + "email": email, + "baseSalary": baseSalary, + "office": office, + "sector": sector, + "ctps": ctps, + "syndicate": syndicate, + "codeBank": codeBank, + "accountBank": accountBank, + "typeBank": typeBank, + "pixKeyBank": pixKeyBank, + "agencyBank": agencyBank, + "createdAt": createdAt?.toIso8601String(), + "updatedAt": updatedAt?.toIso8601String(), + "reg": reg, + "isPreRegistered": isPreRegistered, + }; +} + +class MetaHolerite { + PaginationHolerite? pagination; + + MetaHolerite({ this.pagination, }); - factory Meta.fromMap(Map json) => Meta( - pagination: json["pagination"] == null ? null : Pagination.fromMap(json["pagination"]), + factory MetaHolerite.fromMap(Map json) => MetaHolerite( + pagination: json["pagination"] == null ? null : PaginationHolerite.fromMap(json["pagination"]), ); Map toMap() => { @@ -354,20 +484,20 @@ class Meta { }; } -class Pagination { +class PaginationHolerite { int? page; int? pageSize; int? pageCount; int? total; - Pagination({ + PaginationHolerite({ this.page, this.pageSize, this.pageCount, this.total, }); - factory Pagination.fromMap(Map json) => Pagination( + factory PaginationHolerite.fromMap(Map json) => PaginationHolerite( page: json["page"], pageSize: json["pageSize"], pageCount: json["pageCount"], @@ -382,6 +512,7 @@ class Pagination { }; } + class ChartPizza { final String desc; final double valor; diff --git a/lib/model/holerite/usuario/usuario.dart b/lib/model/holerite/usuario/usuario.dart index 69c96d5..9cf8be1 100644 --- a/lib/model/holerite/usuario/usuario.dart +++ b/lib/model/holerite/usuario/usuario.dart @@ -61,12 +61,12 @@ class UserHolerite { String? enterpriseName; String? phone; String? stateRegistration; - DateTime? createdAt; - DateTime? updatedAt; String? name; String? office; String? department; bool? isManager; + DateTime? createdAt; + DateTime? updatedAt; UserHolerite({ this.id, @@ -80,32 +80,58 @@ class UserHolerite { this.enterpriseName, this.phone, this.stateRegistration, - this.createdAt, - this.updatedAt, this.name, this.office, this.department, this.isManager, + this.createdAt, + this.updatedAt, }); + factory UserHolerite.fromMap(Map json) => UserHolerite( + id: json["id"], + username: json["username"], + email: json["email"], + provider: json["provider"], + confirmed: json["confirmed"], + blocked: json["blocked"], + cpf: json["cpf"], + fantasyName: json["fantasyName"], + enterpriseName: json["enterpriseName"], + phone: json["phone"], + stateRegistration: json["stateRegistration"], + name: json["name"], + office: json["office"], + department: json["department"], + isManager: json["isManager"], + createdAt: json["createdAt"] == null ? null : DateTime.parse(json["createdAt"]), + updatedAt: json["updatedAt"] == null ? null : DateTime.parse(json["updatedAt"]), + ); + + UserHolerite.fromPonto(UsuarioPonto user){ + this.email = user.funcionario?.email; + this.name = user.funcionario?.nome; + this.cpf = user.funcionario?.cpf; + } + UserHolerite copyWith({ int? id, String? username, String? email, - String? provider, + dynamic provider, bool? confirmed, bool? blocked, String? cpf, - String? fantasyName, - String? enterpriseName, - String? phone, - String? stateRegistration, + dynamic fantasyName, + dynamic enterpriseName, + dynamic phone, + dynamic stateRegistration, + dynamic name, + dynamic office, + dynamic department, + bool? isManager, DateTime? createdAt, DateTime? updatedAt, - String? name, - String? office, - String? department, - bool? isManager, }) => UserHolerite( id: id ?? this.id, @@ -119,40 +145,14 @@ class UserHolerite { enterpriseName: enterpriseName ?? this.enterpriseName, phone: phone ?? this.phone, stateRegistration: stateRegistration ?? this.stateRegistration, - createdAt: createdAt ?? this.createdAt, - updatedAt: updatedAt ?? this.updatedAt, name: name ?? this.name, office: office ?? this.office, department: department ?? this.department, isManager: isManager ?? this.isManager, + createdAt: createdAt ?? this.createdAt, + updatedAt: updatedAt ?? this.updatedAt, ); - factory UserHolerite.fromMap(Map json) => UserHolerite( - id: json["id"], - username: json["username"], - email: json["email"], - provider: json["provider"], - confirmed: json["confirmed"], - blocked: json["blocked"], - cpf: json["cpf"] ?? '373.771.848-25', - fantasyName: json["fantasyName"], - enterpriseName: json["enterpriseName"], - phone: json["phone"], - stateRegistration: json["stateRegistration"], - createdAt: json["createdAt"] == null ? null : DateTime.tryParse(json["createdAt"]), - updatedAt: json["updatedAt"] == null ? null : DateTime.tryParse(json["updatedAt"]), - name: json["name"], - office: json["office"], - department: json["department"], - isManager: json["isManager"], - ); - - UserHolerite.fromPonto(UsuarioPonto user){ - this.email = user.funcionario?.email; - this.name = user.funcionario?.nome; - this.cpf = user.funcionario?.cpf; - } - Map toMap() => { "id": id, "username": username, diff --git a/lib/services/holerite/holerite.dart b/lib/services/holerite/holerite.dart index 4188044..20f3dfa 100644 --- a/lib/services/holerite/holerite.dart +++ b/lib/services/holerite/holerite.dart @@ -20,8 +20,7 @@ class HoleriteService { final HttpCli _http = HttpCli(); Future listHolerite(int page, int pageSize) async { - String _api = "/holerites?sort=desc&pagination[page]=$page&pagination[pageSize]=${pageSize == 0 ? 25 : pageSize}"; - "&filters[employee]=${UserHoleriteManager.funcSelect?.id}"; + String _api = "/holerites?sort=desc&pagination[page]=$page&pagination[pageSize]=${pageSize == 0 ? 25 : pageSize}&filters[employee]=${UserHoleriteManager.funcSelect?.id}"; final MyHttpResponse response = await _http.get( url: Config.conf.apiHoleriteEmail! + _api, @@ -33,6 +32,7 @@ class HoleriteService { try{ if(response.isSucess) { final data = response.data; + print(data); if(data != null) { HoleriteModel? model = HoleriteModel.fromMap(data); return model; @@ -56,65 +56,22 @@ class HoleriteService { return []; } - Future holeriteresumo(UsuarioHoleriteModel? user, int idholerite, int mes, int ano, int? tipo) async { - String _api = "/holeriteresumo"; + Future holeriteresumoBytes() async { + String _api = "/holerites?filters[employee]=${UserHoleriteManager.funcSelect?.id}&populate[]=employee&populate[]=file"; try{ - final MyHttpResponse response = await _http.post( - url: Config.conf.apiHolerite! + _api, - headers: { - 'Authorization': 'Bearer ${UserHoleriteManager.user?.jwt}' - }, - decoder: false, - body: { - "Id": idholerite, - //"cnpj": user?.cnpj, - //"register": user?.registro, - "cpf": Config.conf.nomeApp == VersaoApp.HoleriteApp ? null : user?.user?.cpf, - "month": mes, - "year": ano, - "holeriteType": tipo - } - ); - if(response.isSucess) { - var htmlContent = ''' - - - ${response.data.toString().replaceAll(' ', '').replaceAll(' ', '')} - - '''; - - Directory tempDir = await getTemporaryDirectory(); - String savedPath = "holerite" + DateTime.now().microsecondsSinceEpoch.toString(); - File? file = await FlutterHtmlToPdf.convertFromHtmlContent( - htmlContent, tempDir.path, savedPath - ); - - return file; - } - } catch(e){ - debugPrint(e.toString()); - } - } - - Future holeriteresumoBytes(UsuarioHoleriteModel? user, int idholerite, int mes, int ano, int? tipo) async { - String _api = "/holeriteresumo/holeriteresumoBytes"; - try{ - final MyHttpResponse response = await _http.post( - url: Config.conf.apiHolerite! + _api, - body: { - "Id": idholerite, - //"cnpj": user?.cnpj, - //"register": user?.registro, - "cpf": Config.conf.nomeApp == VersaoApp.HoleriteApp ? null : user?.user?.cpf, - "month": mes, - "year": ano, - "holeriteType": tipo - } + final MyHttpResponse response = await _http.get( + url: Config.conf.apiHoleriteEmail! + _api, + headers: { + 'Authorization': 'Bearer ${UserHoleriteManager.user?.jwt}' + }, ); if(response.isSucess) { final dados = response.data; - return base64.decode(dados); + HoleriteModel model = HoleriteModel.fromMap(dados); + if(model.data != null && model.data!.isNotEmpty && model.data!.first.attributes?.file != null){ + return base64.decode(model.data!.first.attributes!.file!); + } } } catch(e){ debugPrint(e.toString()); diff --git a/lib/services/holerite/primeiro_acesso.dart b/lib/services/holerite/primeiro_acesso.dart deleted file mode 100644 index 341637e..0000000 --- a/lib/services/holerite/primeiro_acesso.dart +++ /dev/null @@ -1,135 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../../model/model.dart'; -import '../../config.dart'; -import '../http/http.dart'; - - -class PrimeiroAcessoHoleriteService { - final HttpCli _http = HttpCli(); - - Future verificar({required String cnpj, required String registro, }) async { - String _metodo = '/holerite/novo/verificar'; - try{ - MyHttpResponse response = await _http.post( - url: Config.conf.apiHoleriteEmail! + _metodo, - body: { - "Cnpj": cnpj, - "Registro": registro - } - ); - - if(response.isSucess){ - Map result = response.data; - if(result.containsKey('id')){ - PrimeiroAcessoHoleriteModel acessoModel = PrimeiroAcessoHoleriteModel.fromMap(result); - return acessoModel; - } - if(result.containsKey('iscliente')){ - if(result['iscliente']){ - throw "404"; - }else{ - throw "205"; - } - } - } - throw response.codigo.toString(); - - } catch (e){ - debugPrint(e.toString()); - switch(e){ - case HttpError.unexpected : - throw 'Erro inesperado, tente novamente!'; - case HttpError.timeout : - throw 'Tempo limite de login excedido, verifique sua internet!'; - case "404" : - throw 'Funcionario não cadastrado, verifique os dados e tente novamente!'; - case "205" : - throw 'Empresa não cadastrada!'; - default: - throw 'Erro inesperado, tente novamente!'; - } - } - } - - Future esqueceuEmail( - {required String cnpj, required String registro, required String cpf, }) async { - String _metodo = '/holerite/novo/recadastro'; - try{ - MyHttpResponse response = await _http.post( - url: Config.conf.apiHoleriteEmail! + _metodo, - body: { - "Cnpj": cnpj, - "Registro": registro, - "Cpf": cpf.replaceAll(".", "").replaceAll("-", "") - } - ); - - if(response.isSucess){ - Map result = response.data; - if(result.containsKey('id')){ - PrimeiroAcessoHoleriteModel acessoModel = PrimeiroAcessoHoleriteModel.fromMap(result); - return acessoModel; - } - if(result.containsKey('iscliente')){ - if(result['iscliente']){ - throw "404"; - }else{ - throw "205"; - } - } - } - throw response.codigo.toString(); - - } catch (e){ - debugPrint(e.toString()); - switch(e){ - case HttpError.unexpected : - throw 'Erro inesperado, tente novamente!'; - case HttpError.timeout : - throw 'Tempo limite de login excedido, verifique sua internet!'; - case "404" : - throw 'Funcionario não cadastrado, verifique os dados e tente novamente!'; - case "205" : - throw 'Empresa não cadastrada!'; - default: - throw 'Erro inesperado, tente novamente!'; - } - } - } - - Future cadastrar({required int id, required String email, required String senha, - required String cpf, required String? cel,}) async { - String _metodo = '/holerite/novo/cadastro'; - Map body = { - "Id": id, - "Email": email, - "Senha": senha, - "Cel": cel, - "Cpf": cpf.replaceAll(".", "").replaceAll("-", "") - }; - try{ - MyHttpResponse response = await _http.post( - url: Config.conf.apiHoleriteEmail! + _metodo, - body: body - ); - if(response.isSucess) { - return response.isSucess; - } - - throw response.codigo.toString(); - } catch (e){ - debugPrint(e.toString()); - switch(e){ - case HttpError.unexpected : - throw 'Erro inesperado, tente novamente!'; - case HttpError.timeout : - throw 'Tempo limite de login excedido, verifique sua internet!'; - case "404" : - throw 'Funcionario não cadastrado, verifique os dados e tente novamente!'; - default: - throw 'Erro inesperado, tente novamente!'; - } - } - } -} \ No newline at end of file diff --git a/lib/services/holerite/senha.dart b/lib/services/holerite/senha.dart index d6f05db..f7c08ed 100644 --- a/lib/services/holerite/senha.dart +++ b/lib/services/holerite/senha.dart @@ -1,3 +1,4 @@ +import 'package:assecontservices/assecontservices.dart'; import 'package:flutter/material.dart'; import '../../config.dart'; import '../../controllers/holerite/user_manager.dart'; @@ -12,9 +13,8 @@ class SenhaHoleriteService { String _metodo = '/auth/forgot-password'; try{ - String? _cpf = cpf != null ? cpf.replaceAll('.', '').replaceAll('-', '') : null; Map body = { - "email": email, + "email": email ?? Validacoes.numeric(cpf), //"Cpf": _cpf }; MyHttpResponse response = await _http.post( diff --git a/lib/services/holerite/usuario.dart b/lib/services/holerite/usuario.dart index 353aab1..4e5462c 100644 --- a/lib/services/holerite/usuario.dart +++ b/lib/services/holerite/usuario.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:cpf_cnpj_validator/cpf_validator.dart'; +import '../../controllers/holerite/user_manager.dart'; import '../../model/model.dart'; import '../../config.dart'; import '../../utils/validacoes.dart'; @@ -48,16 +49,50 @@ class UserHoleriteService { } } - - /// metodo inativo - Future deleteUser(int? idUser) async { - String _metodo = '/holerite/novo/delete'; + Future registerUser({required String nome, + required String email, required String senha, required String cpf}) async { + String _metodo = '/auth/local/register'; + Map body = { + "username": nome, + "email": email, + "password": senha, + "cpf": cpf.replaceAll(".", "").replaceAll("-", "") + }; try{ MyHttpResponse response = await _http.post( url: Config.conf.apiHoleriteEmail! + _metodo, - body: { - "Id": idUser - } + body: body + ); + if (response.isSucess) { + final user = response.data; + final UsuarioHoleriteModel _user = UsuarioHoleriteModel.fromMap(user); + return _user; + }else{ + throw response.codigo.toString(); + } + } catch (e){ + debugPrint(e.toString()); + switch(e){ + case HttpError.unexpected : + throw 'Erro inesperado, tente novamente!'; + case HttpError.timeout : + throw 'Tempo limite de login excedido, verifique sua internet!'; + case "400" : + throw 'Funcionario já cadastrado'; + default: + throw 'Erro inesperado, tente novamente!'; + } + } + } + + Future deleteUser() async { + String _metodo = '/users/${UserHoleriteManager.user?.user?.id}'; + try{ + MyHttpResponse response = await _http.delete( + url: Config.conf.apiHoleriteEmail! + _metodo, + headers: { + 'Authorization': 'Bearer ${UserHoleriteManager.user?.jwt}' + }, ); return response.isSucess; @@ -66,4 +101,27 @@ class UserHoleriteService { return false; } } + + Future updateUser({String? cpf, String? email, String? username, String? senha }) async { + String _metodo = '/users/${UserHoleriteManager.user?.user?.id}'; + Map body = {}; + if(cpf != null) body['cpf'] = Validacoes.numeric(cpf); + if(email != null) body['email'] = email; + if(username != null) body['username'] = username; + if(senha != null) body['password'] = senha; + try{ + MyHttpResponse response = await _http.put( + url: Config.conf.apiHoleriteEmail! + _metodo, + headers: { + 'Authorization': 'Bearer ${UserHoleriteManager.user?.jwt}' + }, + body: body + ); + print(response.data); + return response.isSucess; + } catch (e){ + debugPrint('Erro UserHoleriteService updateUser: $e'); + return false; + } + } } \ No newline at end of file diff --git a/lib/services/http/http_cliente.dart b/lib/services/http/http_cliente.dart index 0309719..1b84457 100644 --- a/lib/services/http/http_cliente.dart +++ b/lib/services/http/http_cliente.dart @@ -69,7 +69,7 @@ class HttpCli { ); } } catch (error) { - debugPrint('onError ' + error.toString()); + debugPrint('onError $error'); return MyHttpResponse( isSucess: false, httpError: error == HttpError.timeout ? HttpError.timeout : HttpError.unexpected, @@ -127,7 +127,7 @@ class HttpCli { } } catch(e){ - debugPrint('post catch ' + e.toString()); + debugPrint('post catch $e'); bool r = e == HttpError.statusCode; return MyHttpResponse( isSucess: false, @@ -137,7 +137,7 @@ class HttpCli { ); } } catch (error) { - debugPrint('post onError ' + error.toString()); + debugPrint('post onError $error'); return MyHttpResponse( isSucess: false, httpError: error == HttpError.timeout ? HttpError.timeout : HttpError.unexpected, @@ -192,7 +192,7 @@ class HttpCli { } } catch(e){ - debugPrint('catch ' + e.toString()); + debugPrint('catch $e'); bool r = e == HttpError.statusCode; return MyHttpResponse( isSucess: false, @@ -202,7 +202,7 @@ class HttpCli { ); } } catch (error) { - debugPrint('onError ' + error.toString()); + debugPrint('onError $error'); return MyHttpResponse( isSucess: false, @@ -212,4 +212,63 @@ class HttpCli { ); } } + + + Future delete({required String url, Map? headers, + Map? body, bool decoder = false}) async { + + if(!connectionStatus.hasConnection){ + return MyHttpResponse( + isSucess: false, + httpError: HttpError.conection, + data: 'Falha de conexão com internet' + ); + } + + try { + final http.Response response = await http.delete( + Uri.parse(url), + headers: headers ?? { + 'Content-Type': 'application/json; charset=UTF-8', + 'charset': 'UTF-8', + }, + body: jsonEncode(body) + ).timeout(Duration(seconds: 60), onTimeout : () { + debugPrint('delete timeout'); + throw HttpError.timeout; + }); + + try{ + if(response.statusCode >= 200 && response.statusCode < 300){ + final result = decoder ? json.decode(response.body) : response.body; + return MyHttpResponse( + isSucess: true, + codigo: 200, + data: result, + ); + } else { + debugPrint(response.body); + throw HttpError.statusCode; + } + + } catch(e){ + debugPrint('delete catch $e'); + bool r = e == HttpError.statusCode; + return MyHttpResponse( + isSucess: false, + httpError: r ? HttpError.statusCode : HttpError.unexpected, + codigo: response.statusCode, + data: r ? response.body : 'Erro inesperado, tente novamente mais tarde' + ); + } + } catch (error) { + debugPrint('delete onError $error'); + return MyHttpResponse( + isSucess: false, + httpError: error == HttpError.timeout ? HttpError.timeout : HttpError.unexpected, + data: error == HttpError.timeout ? + 'Tempo limite de conexão excedido' : 'Erro inesperado, tente novamente mais tarde' + ); + } + } } \ No newline at end of file diff --git a/lib/services/services.dart b/lib/services/services.dart index f9ad2ce..6283315 100644 --- a/lib/services/services.dart +++ b/lib/services/services.dart @@ -13,7 +13,6 @@ export 'ponto/registro_ponto.dart'; export 'ponto/comprovante.dart'; export 'holerite/holerite.dart'; -export 'holerite/primeiro_acesso.dart'; export 'holerite/usuario.dart'; export 'holerite/senha.dart'; diff --git a/lib/ui/smartphone/config/config_screen.dart b/lib/ui/smartphone/config/config_screen.dart index 19ef88f..5d30ae2 100644 --- a/lib/ui/smartphone/config/config_screen.dart +++ b/lib/ui/smartphone/config/config_screen.dart @@ -22,91 +22,89 @@ class _ScreenConfigState extends State { return CustomScaffold.custom( context: context, - height: 40, conf: true, + height: 30, conf: true, appTitle: 'Configurações', - body: Container( - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children:[ - Container( - padding: EdgeInsets.all(10), - child: Column( - children: [ - SwitchListTile( - title: CustomText.text("Modo Escuro"), - value: color, - onChanged: (bool valor){ - context.read().darkTemas = valor; + body: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children:[ + Container( + padding: EdgeInsets.all(10), + child: Column( + children: [ + SwitchListTile( + title: CustomText.text("Modo Escuro"), + value: color, + onChanged: (bool valor){ + context.read().darkTemas = valor; + } + ), + if(!kIsWeb) + Divider(height: 2,), + if(!kIsWeb) + Consumer( + builder: (_, bio, __) { + return SwitchListTile( + title: CustomText.text("Login com Bio/Face"), + value: bio.bio, + onChanged: (bool valor) { + if(bio.checkbio){ + bio.perguntar = !valor; + bio.bio = valor; + } } - ), - if(!kIsWeb) - Divider(height: 2,), - if(!kIsWeb) - Consumer( - builder: (_, bio, __) { - return SwitchListTile( - title: CustomText.text("Login com Bio/Face"), - value: bio.bio, - onChanged: (bool valor) { - if(bio.checkbio){ - bio.perguntar = !valor; - bio.bio = valor; - } - } - ); - }, - ), - Divider(height: 2,), - ], + ); + }, ), - ), + Divider(height: 2,), + ], + ), + ), - Column( - children: [ - if(Config.conf.nomeApp == VersaoApp.HoleriteApp) - Container( - decoration: BoxDecoration( - border: Border.all(color: Colors.red), - borderRadius: const BorderRadius.all(Radius.circular(8)) + Column( + children: [ + if(Config.conf.nomeApp == VersaoApp.HoleriteApp) + Container( + decoration: BoxDecoration( + border: Border.all(color: Colors.red), + borderRadius: const BorderRadius.all(Radius.circular(8)) + ), + margin: EdgeInsets.symmetric(horizontal: 20), + padding: const EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text("Deletar sua conta!", + style: TextStyle(color: Colors.redAccent)), + const Text("Esta ação excluirá permanentemente sua conta e não poderá ser desfeita.", + style: TextStyle(color: Colors.redAccent)), + const SizedBox(height: 8), + ElevatedButton( + style: const ButtonStyle( + backgroundColor: MaterialStatePropertyAll(Colors.red), + ), + onPressed: () async { + _showDeleteDialog(context); + }, + child: const Center(child: Text("Excluir", + style: TextStyle(color: Colors.white),),), ), - margin: EdgeInsets.symmetric(horizontal: 20), - padding: const EdgeInsets.all(10), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const Text("Deletar sua conta!", - style: TextStyle(color: Colors.redAccent)), - const Text("Esta ação excluirá permanentemente sua conta e não poderá ser desfeita.", - style: TextStyle(color: Colors.redAccent)), - const SizedBox(height: 8), - ElevatedButton( - style: const ButtonStyle( - backgroundColor: MaterialStatePropertyAll(Colors.red), - ), - onPressed: () async { - _showDeleteDialog(context); - }, - child: const Center(child: Text("Excluir", - style: TextStyle(color: Colors.white),),), - ), - ], - ), - ), - if(Config.conf.nomeApp == VersaoApp.HoleriteApp) - SizedBox(height: 20,), + ], + ), + ), + if(Config.conf.nomeApp == VersaoApp.HoleriteApp) + SizedBox(height: 20,), - Padding( - padding: const EdgeInsets.only(bottom: 15, right: 25), - child: Row(mainAxisAlignment: MainAxisAlignment.end, - children: [ - CustomText.text('Versao '+ Config.versao), - ], - ), - ) - ], + Padding( + padding: const EdgeInsets.only(bottom: 15, right: 25), + child: Row(mainAxisAlignment: MainAxisAlignment.end, + children: [ + CustomText.text('Versao '+ Config.versao), + ], + ), ) - ] - ) + ], + ) + ] ) ); } diff --git a/lib/ui/smartphone/holerite/detelhes_holerite.dart b/lib/ui/smartphone/holerite/detelhes_holerite.dart index f4cfc6c..6626254 100644 --- a/lib/ui/smartphone/holerite/detelhes_holerite.dart +++ b/lib/ui/smartphone/holerite/detelhes_holerite.dart @@ -1,23 +1,16 @@ -import 'dart:typed_data'; -import 'package:assecontservices/utils/extensions.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; - -import 'package:universal_io/io.dart'; -import 'package:intl/intl.dart'; -import 'package:responsive_framework/responsive_breakpoints.dart'; import 'package:flutter_awesome_alert_box/flutter_awesome_alert_box.dart'; -import 'package:charts_flutter/flutter.dart' as charts; -import 'package:charts_common/common.dart' as common; -import 'package:charts_common/src/common/color.dart' as colors; - +import 'package:responsive_framework/responsive_breakpoints.dart'; +import 'package:universal_io/io.dart'; -import '../../../common/common.dart'; -import '../../../config.dart'; +import '../../../common/heros_file.dart'; +import '../../../common/load_screen.dart'; import '../../../controllers/controllers.dart'; import '../../../model/model.dart'; +import 'graficos_holerite.dart'; class DetalhesHolerite extends StatefulWidget { @@ -44,336 +37,57 @@ class _DetalhesHoleriteState extends State { @override Widget build(BuildContext context) { - double height = MediaQuery.of(context).size.height - (WidgetsBinding.instance.window.padding.top); - double width = MediaQuery.of(context).size.width; - - return Scaffold( - appBar: AppBar(title: Text('${widget.holerite.attributes?.type ?? ''} ${widget.holerite.attributes?.competence ?? ''}'),), - body: Container( - decoration: BoxDecoration( - border: Border(bottom: BorderSide(width: 70, - color: Theme.of(context).scaffoldBackgroundColor)) - ), - width: width, - height: height, - alignment: Alignment.topRight, - padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 12), - child: SingleChildScrollView( - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceAround, - mainAxisSize: MainAxisSize.max, - children: [ - Container( - height: 195, width: width, - padding: EdgeInsets.symmetric( - horizontal: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone ? 20 : 0), - decoration: BoxDecoration( - color: kIsWeb ? Colors.white : null, - borderRadius: BorderRadius.circular(15), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Container( - width: 110, - padding: EdgeInsets.symmetric( - vertical: 10, - horizontal: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone ? 40 : 0), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - padding: const EdgeInsets.all(5), - decoration: BoxDecoration( - color: Colors.blue[900], - borderRadius: BorderRadius.circular(30) - ), - child: Center( - child: CustomText.text("Proventos\n${ - widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos.real()}", - textAlign: TextAlign.center, autoSize: true, - style: const TextStyle(color: Colors.white), - ), - ), - ), - const SizedBox(height: 10,), - Container( - padding: const EdgeInsets.all(5), - decoration: BoxDecoration( - color: Colors.red[900], - borderRadius: BorderRadius.circular(30) - ), - child: Center( - child: CustomText.text("Descontos\n${ - widget.holerite.attributes?.data?.funcionarioResumo?.totalDescontos.real()}", - textAlign: TextAlign.center, autoSize: true, - style: const TextStyle(color: Colors.white), - ), - ), - ), - const SizedBox(height: 10,), - Container( - padding: const EdgeInsets.all(5), - decoration: BoxDecoration( - color: Colors.orange, - borderRadius: BorderRadius.circular(30) - ), - child: Center( - child: CustomText.text("Liquido\n${ - widget.holerite.attributes?.data?.funcionarioResumo?.liquido.real()}", - textAlign: TextAlign.center, autoSize: true, - style: const TextStyle(color: Colors.white), - ), - ), - ), - ], - ), - ), - Container( - alignment: Alignment.center, - padding: const EdgeInsets.only(top: 5, left: 10, right: 10), - width: width * 0.59 > width - 110 ? width - 110 : width * 0.59, - decoration: BoxDecoration( - color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone - ? Colors.white : Colors.grey[100], - borderRadius: BorderRadius.circular(15) - ), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.min, - children: [ - CustomText.text('Proventos'.toUpperCase(), - style: const TextStyle(color: Colors.black),), - const SizedBox(height: 4,), - Container( - height: 138, - constraints: kIsWeb - && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone - ? BoxConstraints(maxWidth: width >= 852 ? 400 : 300) : null, - child: charts.PieChart([charts.Series( - id: 'Pizza', - domainFn: (ChartPizza sales, _) => sales.desc, - measureFn: (ChartPizza sales, _) => sales.valor, - colorFn: (ChartPizza sales, cor) { - if(sales.desc != 'Proventos'){ - return colors.Color.fromHex( code: 'fFF9800'); - }else{ - return colors.Color.fromHex( code: 'f0D47A1'); - } - }, - data: [ - ChartPizza('Proventos', - getPorcentagem(widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos ?? 10.0, - widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos != null - && widget.holerite.attributes?.data?.funcionarioResumo?.liquido != null - ? (widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos ?? 0) - + (widget.holerite.attributes?.data?.funcionarioResumo?.liquido ?? 0) : - widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos != null - || widget.holerite.attributes?.data?.funcionarioResumo?.liquido != null - ? (widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos ?? 0) - + (widget.holerite.attributes?.data?.funcionarioResumo?.liquido ?? 0) : 100.0), - ), - ChartPizza('Liquido', - getPorcentagem(widget.holerite.attributes?.data?.funcionarioResumo?.liquido ?? 0.0, - widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos != null - && widget.holerite.attributes?.data?.funcionarioResumo?.liquido != null - ? (widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos ?? 0) - + (widget.holerite.attributes?.data?.funcionarioResumo?.liquido ?? 0) : - widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos != null - || widget.holerite.attributes?.data?.funcionarioResumo?.liquido != null - ? (widget.holerite.attributes?.data?.funcionarioResumo?.totalVencimentos ?? 0) - + (widget.holerite.attributes?.data?.funcionarioResumo?.liquido ?? 0) : 100.0),) - ], - labelAccessorFn: (ChartPizza sales, _) => '${sales.valor.toString()}%') - ], - animate: true, - layoutConfig: charts.LayoutConfig( - leftMarginSpec: common.MarginSpec.fixedPixel(0), - rightMarginSpec: common.MarginSpec.fixedPixel(0), - topMarginSpec: common.MarginSpec.fixedPixel(12), - bottomMarginSpec: common.MarginSpec.fixedPixel(2), - ), - behaviors: [ - charts.DatumLegend( - position: charts.BehaviorPosition.bottom, - horizontalFirst: true, - cellPadding: EdgeInsets.only(left: width * 0.06, bottom: 2), - entryTextStyle: common.TextStyleSpec( - fontSize: (11).toInt(), - color: charts.MaterialPalette.black, - ), - showMeasures: false, - legendDefaultMeasure: charts.LegendDefaultMeasure.none, - ), - ], - defaultRenderer: charts.ArcRendererConfig( - arcRendererDecorators: [ - charts.ArcLabelDecorator( - insideLabelStyleSpec: charts.TextStyleSpec( - fontSize: (12).toInt(), - color: charts.MaterialPalette.white, - ), - outsideLabelStyleSpec: charts.TextStyleSpec( - fontSize: (11).toInt(), - color: charts.MaterialPalette.black, - ), - labelPosition: charts.ArcLabelPosition.auto, - ) - ]) - ), - ) - ], - ) - ), - ], - ), - ), - const SizedBox(height: 10,), - Container( - alignment: Alignment.center, - padding: const EdgeInsets.all(10), - decoration: BoxDecoration( - color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone - ? Colors.white : Colors.grey[100], - borderRadius: BorderRadius.circular(15) - ), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.max, - children: [ - CustomText.text('Líquido nos ultimos ${kIsWeb - && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone - ? '6' : '3'} meses', - style: const TextStyle(color: Colors.black),), - const SizedBox(height: 10,), - SizedBox( - height: height * 0.25, - child: charts.BarChart( - [charts.Series( - id: 'Holerites', - displayName: 'Líquido nos ultimos ${kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone ? '6' : '3'} meses', - domainFn: (ChartColum sales, _) => sales.data, - measureFn: (ChartColum sales, _) => sales.valor, - colorFn: (_, __) => colors.Color.fromHex( code: 'f0D47A1'), - data: context.read().filtroHolerite(widget.holerite, kIsWeb - && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone - ? 6 : 3), - labelAccessorFn: (ChartColum sales, _) => - 'R\$${sales.valor.toInt()}', - ), - ], - selectionModels: [ - charts.SelectionModelConfig( - type: charts.SelectionModelType.info, - updatedListener: (v){ - if(v.selectedDatum.isNotEmpty){ - setState(() { - widget.holerite = context.read() - .selectHolerite(v.selectedDatum.first.datum.ind); - }); - } - } - ) - ], - animate: true, - vertical: true, - domainAxis: charts.OrdinalAxisSpec( - renderSpec: charts.SmallTickRendererSpec( - labelStyle: charts.TextStyleSpec( - fontSize: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone - ? 12 : (width * 0.03).toInt(), // size in Pts. - color: charts.MaterialPalette.black), + return GraficosHolerite( + titulo: '${widget.holerite.attributes?.type ?? ''} ${widget.holerite.attributes?.competence ?? ''}', + totalVencimentos: widget.holerite.attributes?.data?.funcionarioResumo!.totalVencimentos, + totalDescontos: widget.holerite.attributes?.data?.funcionarioResumo?.totalDescontos, + liquido: widget.holerite.attributes?.data?.funcionarioResumo?.liquido, + listChartColum: context.read().filtroHolerite(widget.holerite, kIsWeb + && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? 6 : 3), + updatedChartColum: (v){ + if(v.selectedDatum.isNotEmpty){ + setState(() { + widget.holerite = context.read() + .selectHolerite(v.selectedDatum.first.datum.ind); + }); + } + }, + onPressfloatingButton: () async { + File? a; + Uint8List? b; + String? html; + try { + carregar(context); + //b = await context.read().holeriteresumoBytes( + // UserHoleriteManager.user, idComp, mes, ano, holerite?.holeriteTipoCod ); - // Change the line colors to match text color. - lineStyle: const charts.LineStyleSpec( - color: charts.MaterialPalette.black))), - defaultRenderer: common.BarRendererConfig( - barRendererDecorator: charts.BarLabelDecorator( - labelPadding: (height * 0.020).toInt(), - labelPlacement: common.BarLabelPlacement.opposeAxisBaseline, - insideLabelStyleSpec: charts.TextStyleSpec( - fontSize: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone - ? 12 : (width * 0.03).toInt(), - color: charts.MaterialPalette.white, - ), - outsideLabelStyleSpec: charts.TextStyleSpec( - fontSize: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone - ? 12 : (width * 0.03).toInt(), - color: charts.MaterialPalette.black, - ) - ), - cornerStrategy: const charts.ConstCornerStrategy(20), - ), - ), - ), - ], - ) - ), - const SizedBox(height: 15,), - CustomText.text("Disponibilizado\n${widget.holerite.attributes?.createDate ?? ''}", - textAlign: TextAlign.center,), - ], - ), - ), - ), - floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, - floatingActionButton: FloatingActionButton.extended( - heroTag: 'File', - backgroundColor: Config.corPri, - focusColor: Colors.blue, - foregroundColor: Colors.amber, - hoverColor: Colors.green, - splashColor: Colors.tealAccent, - // focusColor: Settings.corPri.withOpacity(0.5), - onPressed: () async { - File? a; - Uint8List? b; - String? html; - try { - carregar(context); - //b = await context.read().holeriteresumoBytes( - // UserHoleriteManager.user, idComp, mes, ano, holerite?.holeriteTipoCod ); - - /*if(kIsWeb){ + /*if(kIsWeb){ }else{ a = await context.read().holeriteresumo( UserHoleriteManager.sUser, idComp, mes, ano, holerite?.holeriteTipoCod ); }*/ - } catch(e){ - debugPrint(e.toString()); - } finally { - Navigator.pop(context); - } - if(b != null){ - await Navigator.push(context, MaterialPageRoute( - builder: (context)=> FileHero( 'holerite-${widget.holerite.attributes?.year}-${widget.holerite.attributes?.month}', - file: a, memori: b, html: html,))); - }else{ - InfoAlertBox( - context: context, - title: 'Atenção', - infoMessage: 'Não foi possivel carregar o holerite\nverifique sua conexão com internet!', - buttonText: 'ok' - ); - } - }, - label: CustomText.text('Visualizar e Assinar'.toUpperCase(), - style: const TextStyle(fontSize: 20, color: Colors.white),) - - ), + } catch(e){ + debugPrint(e.toString()); + } finally { + Navigator.pop(context); + } + if(b != null){ + await Navigator.push(context, MaterialPageRoute( + builder: (context)=> FileHero('holerite-${widget.holerite.attributes?.year}-${widget.holerite.attributes?.month}', + file: a, memori: b, html: html,))); + }else{ + InfoAlertBox( + context: context, + title: 'Atenção', + infoMessage: 'Não foi possivel carregar o holerite\nverifique sua conexão com internet!', + buttonText: 'ok' + ); + } + } ); } } diff --git a/lib/ui/smartphone/holerite/graficos_holerite.dart b/lib/ui/smartphone/holerite/graficos_holerite.dart new file mode 100644 index 0000000..9bcb5fb --- /dev/null +++ b/lib/ui/smartphone/holerite/graficos_holerite.dart @@ -0,0 +1,353 @@ +import 'package:assecontservices/utils/extensions.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; + +import 'package:responsive_framework/responsive_breakpoints.dart'; +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:charts_common/common.dart' as common; +import 'package:charts_common/src/common/color.dart' as colors; + + +import '../../../common/common.dart'; +import '../../../config.dart'; +import '../../../model/model.dart'; + + +class GraficosHolerite extends StatefulWidget { + String? titulo; + double? totalVencimentos; + double? liquido; + double? totalDescontos; + List? listChartColum; + Function(charts.SelectionModel)? updatedChartColum; + Function()? onPressfloatingButton; + String? createDate; + bool isLoad; + + + GraficosHolerite( + {this.titulo, + this.totalVencimentos, + this.liquido, + this.totalDescontos, + this.listChartColum, + this.updatedChartColum, + this.createDate, + this.onPressfloatingButton, + this.isLoad = false, + }); + + @override + State createState() => _DetalhesHoleriteState(); +} + +class _DetalhesHoleriteState extends State { + double getPorcentagem(double valor, double total){ + if(total == 0){ + return 0.0; + } + double result = 0; + try{ + result = (valor/total) * 100.0; + }catch(e){ + result = 0; + } + return double.parse(result.toStringAsFixed(1)); + } + + @override + Widget build(BuildContext context) { + double height = MediaQuery.of(context).size.height - (WidgetsBinding.instance.window.padding.top); + double width = MediaQuery.of(context).size.width; + + return Scaffold( + appBar: widget.titulo == null ? null : AppBar( + title: Text(widget.titulo ?? ''), + ), + body: Container( + decoration: widget.titulo == null ? null : BoxDecoration( + border: Border(bottom: BorderSide(width: 70, + color: Theme.of(context).scaffoldBackgroundColor)) + ), + width: width, + height: height, + alignment: Alignment.topRight, + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 12), + child: CustomShimmerLoad( + isLoad: widget.isLoad, + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + mainAxisSize: MainAxisSize.max, + children: [ + Container( + height: 195, width: width, + padding: EdgeInsets.symmetric( + horizontal: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone ? 20 : 0), + decoration: BoxDecoration( + color: kIsWeb ? Colors.white : null, + borderRadius: BorderRadius.circular(15), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Container( + width: 110, + padding: EdgeInsets.symmetric( + vertical: 10, + horizontal: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone ? 40 : 0), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + padding: const EdgeInsets.all(5), + decoration: BoxDecoration( + color: Colors.blue[900], + borderRadius: BorderRadius.circular(30) + ), + child: Center( + child: CustomText.text("Proventos\n${ + widget.totalVencimentos.real()}", + textAlign: TextAlign.center, autoSize: true, + style: const TextStyle(color: Colors.white), + ), + ), + ), + const SizedBox(height: 10,), + Container( + padding: const EdgeInsets.all(5), + decoration: BoxDecoration( + color: Colors.red[900], + borderRadius: BorderRadius.circular(30) + ), + child: Center( + child: CustomText.text("Descontos\n${ + widget.totalDescontos.real()}", + textAlign: TextAlign.center, autoSize: true, + style: const TextStyle(color: Colors.white), + ), + ), + ), + const SizedBox(height: 10,), + Container( + padding: const EdgeInsets.all(5), + decoration: BoxDecoration( + color: Colors.orange, + borderRadius: BorderRadius.circular(30) + ), + child: Center( + child: CustomText.text("Liquido\n${ + widget.liquido.real()}", + textAlign: TextAlign.center, autoSize: true, + style: const TextStyle(color: Colors.white), + ), + ), + ), + ], + ), + ), + + Container( + alignment: Alignment.center, + padding: const EdgeInsets.only(top: 5, left: 10, right: 10), + width: width * 0.59 > width - 110 ? width - 110 : width * 0.59, + decoration: BoxDecoration( + color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? Colors.white : Colors.grey[100], + borderRadius: BorderRadius.circular(15) + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.min, + children: [ + CustomText.text('Proventos'.toUpperCase(), + style: const TextStyle(color: Colors.black),), + const SizedBox(height: 4,), + Container( + height: 138, + constraints: kIsWeb + && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? BoxConstraints(maxWidth: width >= 852 ? 400 : 300) : null, + child: charts.PieChart([charts.Series( + id: 'Pizza', + domainFn: (ChartPizza sales, _) => sales.desc, + measureFn: (ChartPizza sales, _) => sales.valor, + colorFn: (ChartPizza sales, cor) { + if(sales.desc != 'Proventos'){ + return colors.Color.fromHex( code: 'fFF9800'); + }else{ + return colors.Color.fromHex( code: 'f0D47A1'); + } + }, + data: [ + ChartPizza('Proventos', + getPorcentagem(widget.totalVencimentos ?? 10.0, + widget.totalVencimentos != null && widget.liquido != null + ? (widget.totalVencimentos ?? 0) + (widget.liquido ?? 0) : + widget.totalVencimentos != null || widget.liquido != null + ? (widget.totalVencimentos ?? 0) + (widget.liquido ?? 0) : 100.0), + ), + ChartPizza('Liquido', + getPorcentagem(widget.liquido ?? 0.0, + widget.totalVencimentos != null && widget.liquido != null + ? (widget.totalVencimentos ?? 0) + (widget.liquido ?? 0) : + widget.totalVencimentos != null || widget.liquido != null + ? (widget.totalVencimentos ?? 0) + (widget.liquido ?? 0) : 100.0),) + ], + labelAccessorFn: (ChartPizza sales, _) => '${sales.valor.toString()}%') + ], + animate: true, + layoutConfig: charts.LayoutConfig( + leftMarginSpec: common.MarginSpec.fixedPixel(0), + rightMarginSpec: common.MarginSpec.fixedPixel(0), + topMarginSpec: common.MarginSpec.fixedPixel(12), + bottomMarginSpec: common.MarginSpec.fixedPixel(2), + ), + behaviors: [ + charts.DatumLegend( + position: charts.BehaviorPosition.bottom, + horizontalFirst: true, + cellPadding: EdgeInsets.only(left: width * 0.06, bottom: 2), + entryTextStyle: common.TextStyleSpec( + fontSize: (11).toInt(), + color: charts.MaterialPalette.black, + ), + showMeasures: false, + legendDefaultMeasure: charts.LegendDefaultMeasure.none, + ), + ], + defaultRenderer: charts.ArcRendererConfig( + arcRendererDecorators: [ + charts.ArcLabelDecorator( + insideLabelStyleSpec: charts.TextStyleSpec( + fontSize: (12).toInt(), + color: charts.MaterialPalette.white, + ), + outsideLabelStyleSpec: charts.TextStyleSpec( + fontSize: (11).toInt(), + color: charts.MaterialPalette.black, + ), + labelPosition: charts.ArcLabelPosition.auto, + ) + ]) + ), + ) + ], + ) + ), + ], + ), + ), + const SizedBox(height: 10,), + if(widget.listChartColum != null && widget.listChartColum!.isNotEmpty) ...[ + Container( + alignment: Alignment.center, + padding: const EdgeInsets.all(10), + decoration: BoxDecoration( + color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? Colors.white : Colors.grey[100], + borderRadius: BorderRadius.circular(15) + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + children: [ + CustomText.text('Líquido nos ultimos ${kIsWeb + && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? '6' : '3'} meses', + style: const TextStyle(color: Colors.black),), + const SizedBox(height: 10,), + SizedBox( + height: height * 0.25, + child: charts.BarChart( + [charts.Series( + id: 'Holerites', + displayName: 'Líquido nos ultimos ${kIsWeb + && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone ? '6' : '3'} meses', + domainFn: (ChartColum sales, _) => sales.data, + measureFn: (ChartColum sales, _) => sales.valor, + colorFn: (_, __) => colors.Color.fromHex( code: 'f0D47A1'), + data: widget.listChartColum!, + labelAccessorFn: (ChartColum sales, _) => + 'R\$${sales.valor.toInt()}', + ), + ], + selectionModels: [ + charts.SelectionModelConfig( + type: charts.SelectionModelType.info, + updatedListener: widget.updatedChartColum + ) + ], + animate: true, + vertical: true, + domainAxis: charts.OrdinalAxisSpec( + renderSpec: charts.SmallTickRendererSpec( + labelStyle: charts.TextStyleSpec( + fontSize: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? 12 : (width * 0.03).toInt(), // size in Pts. + color: charts.MaterialPalette.black), + + // Change the line colors to match text color. + lineStyle: const charts.LineStyleSpec( + color: charts.MaterialPalette.black))), + defaultRenderer: common.BarRendererConfig( + barRendererDecorator: charts.BarLabelDecorator( + labelPadding: (height * 0.020).toInt(), + labelPlacement: common.BarLabelPlacement.opposeAxisBaseline, + insideLabelStyleSpec: charts.TextStyleSpec( + fontSize: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? 12 : (width * 0.03).toInt(), + color: charts.MaterialPalette.white, + ), + outsideLabelStyleSpec: charts.TextStyleSpec( + fontSize: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? 12 : (width * 0.03).toInt(), + color: charts.MaterialPalette.black, + ) + ), + cornerStrategy: const charts.ConstCornerStrategy(20), + ), + ), + ), + ], + ) + ), + const SizedBox(height: 15,), + ], + + if(widget.createDate != null) + CustomText.text("Disponibilizado\n${widget.createDate ?? ''}", + textAlign: TextAlign.center,), + ], + ), + ), + ), + ), + floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, + floatingActionButton: widget.onPressfloatingButton == null ? null + : FloatingActionButton.extended( + heroTag: 'File', + backgroundColor: Config.corPri, + focusColor: Colors.blue, + foregroundColor: Colors.amber, + hoverColor: Colors.green, + splashColor: Colors.tealAccent, + // focusColor: Settings.corPri.withOpacity(0.5), + onPressed: widget.onPressfloatingButton, + label: CustomText.text('Visualizar e Assinar'.toUpperCase(), + style: const TextStyle(fontSize: 20, color: Colors.white),) + ), + ); + } +} diff --git a/lib/ui/smartphone/holerite/holerite_screen.dart b/lib/ui/smartphone/holerite/holerite_screen.dart index f1cf24a..e906dda 100644 --- a/lib/ui/smartphone/holerite/holerite_screen.dart +++ b/lib/ui/smartphone/holerite/holerite_screen.dart @@ -40,7 +40,7 @@ class _HoleriteScreenState extends State { return CustomScaffold.custom( key: _scaffoldKey, context: context, - height: 40, + height: 30, appTitle: 'Meus Holerites', body: Column( children: [ @@ -62,7 +62,7 @@ class _HoleriteScreenState extends State { return ListTile( leading: Text('${item.attributes?.month ?? ''}\n${item.attributes?.year ?? ''}', textAlign: TextAlign.center,), - title: Text(item.attributes?.type ?? ''), + title: Text(item.attributes?.type.toName ?? ''), subtitle: Text(item.attributes?.data?.funcionarioResumo?.liquido?.real() ?? '0'), ); }, diff --git a/lib/ui/ui.dart b/lib/ui/ui.dart index f8029b1..4ace0e5 100644 --- a/lib/ui/ui.dart +++ b/lib/ui/ui.dart @@ -6,4 +6,5 @@ export 'smartphone/tela_base/custom_scaffold.dart'; export 'smartphone/config/config_screen.dart'; export 'smartphone/holerite/detelhes_holerite.dart'; -export 'smartphone/holerite/holerite_screen.dart'; \ No newline at end of file +export 'smartphone/holerite/holerite_screen.dart'; +export 'smartphone/holerite/graficos_holerite.dart'; \ No newline at end of file diff --git a/lib/utils/cpf_email_formatter.dart b/lib/utils/cpf_email_formatter.dart new file mode 100644 index 0000000..d44af8a --- /dev/null +++ b/lib/utils/cpf_email_formatter.dart @@ -0,0 +1,70 @@ +import 'package:brasil_fields/brasil_fields.dart'; +import 'package:flutter/services.dart'; + +import 'package:assecontservices/utils/validacoes.dart'; + +import 'package:brasil_fields/src/formatters/compound_formatters/compound_formatter.dart'; +import 'package:brasil_fields/src/formatters/cpf_input_formatter.dart'; +import 'package:brasil_fields/src/interfaces/compoundable_formatter.dart'; + + + +class CpfOrEmailFormatter extends TextInputFormatter { + final CpfInputFormatter cpfFormatter = CpfInputFormatter(); + final EmailInputFormatter emailFormatter = EmailInputFormatter(); + + @override + TextEditingValue formatEditUpdate( + TextEditingValue oldValue, TextEditingValue newValue) { + if (CPFValidator.isValid(newValue.text)) { + print('cpfFormatter'); + return cpfFormatter.formatEditUpdate(oldValue, newValue); + } else { + print('emailFormatter'); + return emailFormatter.formatEditUpdate(oldValue, newValue); + } + } +} + +class EmailInputFormatter extends TextInputFormatter { + + + @override + TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) { + String text = newValue.text.trim().toLowerCase(); + int selectionIndex = newValue.selection.end; + + // Apply basic mask by removing spaces and converting to lowercase + if (text.contains(' ')) { + text = text.replaceAll(' ', ''); + selectionIndex = text.length; + } + + if (Validacoes.emailValid(text) || text.isEmpty) { + return TextEditingValue( + text: text, + selection: TextSelection.collapsed(offset: selectionIndex), + ); + } + return newValue; + } +} + +class CpfOrEmailFormatter2 extends CompoundFormatter { + CpfOrEmailFormatter2() : super([CpfInputFormatter(), EmailInputFormatter2()]); +} + + +class EmailInputFormatter2 extends TextInputFormatter implements CompoundableFormatter{ + @override + TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) { + if (newValue.text.isEmpty || Validacoes.emailValid(newValue.text) ) { + return newValue; + } + return newValue; + } + + @override + // TODO: implement maxLength + int get maxLength => 50; +} diff --git a/lib/cpf_rg_formatter.dart b/lib/utils/cpf_rg_formatter.dart similarity index 100% rename from lib/cpf_rg_formatter.dart rename to lib/utils/cpf_rg_formatter.dart diff --git a/lib/utils/extensions.dart b/lib/utils/extensions.dart index c89569f..d1101fe 100644 --- a/lib/utils/extensions.dart +++ b/lib/utils/extensions.dart @@ -11,6 +11,7 @@ extension FormatesDateTime on DateTime? { extension FormatesDouble on double? { String real() { + if(this == 0) return 'R\$0,00'; var _mask = NumberFormat.currency(locale: 'pt_Br', customPattern: 'R\$#,##0.00'); return _mask.format(this ?? 0); } diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 5f8e8ce..bf944db 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -7,4 +7,5 @@ export 'external_share.dart'; export 'get_file.dart'; export 'url_launcher.dart'; export 'validacoes.dart'; -export 'extensions.dart'; \ No newline at end of file +export 'extensions.dart'; + From cd8d170944b6aa2fca1aa5b98b0bca54e06af2b1 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 28 Jun 2024 00:38:55 -0300 Subject: [PATCH 05/73] =?UTF-8?q?ajuste=20primeiro=20acesso=20app=20e=20re?= =?UTF-8?q?mo=C3=A7ao=20servi=C3=A7es=20asseweb?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/assecontservices.dart | 29 ++-- lib/common/actions/actions.dart | 5 +- lib/common/actions/func_alter_empresa.dart | 7 +- lib/common/custom_buttom.dart | 2 +- lib/common/heros_file.dart | 3 +- lib/controllers/asseweb/home_manager.dart | 36 ----- lib/controllers/controllers.dart | 2 +- .../holerite/holerite_manager.dart | 16 +-- lib/controllers/holerite/user_manager.dart | 2 +- lib/helper/conn.dart | 2 +- .../primeiro_acesso_model.dart | 12 -- lib/model/model.dart | 2 +- lib/services/asseweb/boletos.dart | 66 --------- lib/services/asseweb/home.dart | 66 --------- lib/services/asseweb/obrigacoes.dart | 128 ------------------ lib/services/biometria.dart | 6 +- lib/services/holerite/holerite.dart | 15 +- lib/services/services.dart | 4 +- lib/ui/smartphone/config/config_screen.dart | 16 +-- .../holerite/detelhes_holerite.dart | 44 ++---- .../holerite/graficos_holerite.dart | 2 +- .../smartphone/holerite/holerite_screen.dart | 4 +- .../tela_base/custom_menu_item.dart | 3 +- .../smartphone/tela_base/custom_scaffold.dart | 20 ++- lib/utils/conversoes.dart | 14 +- pubspec.yaml | 43 +++--- 26 files changed, 112 insertions(+), 437 deletions(-) delete mode 100644 lib/controllers/asseweb/home_manager.dart delete mode 100644 lib/model/holerite/primeiro_acesso/primeiro_acesso_model.dart delete mode 100644 lib/services/asseweb/boletos.dart delete mode 100644 lib/services/asseweb/home.dart delete mode 100644 lib/services/asseweb/obrigacoes.dart diff --git a/lib/assecontservices.dart b/lib/assecontservices.dart index eed7eb8..89b7c5e 100644 --- a/lib/assecontservices.dart +++ b/lib/assecontservices.dart @@ -1,15 +1,12 @@ import 'package:flutter/foundation.dart'; - import 'package:flutter/material.dart'; import 'package:nested/nested.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; - +import 'package:responsive_framework/responsive_framework.dart'; import 'package:safe_device/safe_device.dart'; import 'package:device_preview/device_preview.dart'; import 'package:package_info_plus/package_info_plus.dart'; -import 'package:responsive_framework/breakpoint.dart'; -import 'package:responsive_framework/responsive_breakpoints.dart'; import 'package:universal_io/io.dart' as io; import 'common/custom_textformfield.dart'; @@ -187,11 +184,7 @@ class Assecontservices { ), ///-----------asseweb--------------/// - if(Config.conf.nomeApp == VersaoApp.AssewebApp) - ChangeNotifierProvider( - lazy: true, - create: (_) => HomeAssewebManager(), - ), + if(Config.conf.nomeApp == VersaoApp.AssewebApp) ChangeNotifierProvider( lazy: false, @@ -221,22 +214,16 @@ class Assecontservices { } -class MyApp extends StatefulWidget { - String? titulo; - RouteFactory? rotas; - - MyApp({required this.titulo, required this.rotas}); - - @override - State createState() => _MyAppState(); -} +class MyApp extends StatelessWidget { + final String? titulo; + final RouteFactory? rotas; -class _MyAppState extends State { + const MyApp({super.key, required this.titulo, required this.rotas}); @override Widget build(BuildContext context) { return MaterialApp( - title: widget.titulo ?? '', + title: titulo ?? '', debugShowCheckedModeBanner: false, theme: context.watch().darkTemas ? ThemeData.dark(useMaterial3: true).copyWith( @@ -295,7 +282,7 @@ class _MyAppState extends State { ], supportedLocales: const [Locale('pt', 'BR')], initialRoute: '/', - onGenerateRoute: widget.rotas, + onGenerateRoute: rotas, ); } diff --git a/lib/common/actions/actions.dart b/lib/common/actions/actions.dart index 381aa59..a56b05f 100644 --- a/lib/common/actions/actions.dart +++ b/lib/common/actions/actions.dart @@ -1,6 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:responsive_framework/responsive_breakpoints.dart'; +import 'package:responsive_framework/responsive_framework.dart'; + import '../../controllers/controllers.dart'; import '../../config.dart'; @@ -78,7 +79,7 @@ actions(BuildContext context, {bool aponta = false, bool registro = false, if(Config.conf.nomeApp == VersaoApp.HoleriteApp) { alterUser(context, onAlter); } else if(Config.conf.nomeApp == VersaoApp.AssewebApp) { - alterEmpresa(context); + alterEmpresa(context, onAlter); } break; case 1 : diff --git a/lib/common/actions/func_alter_empresa.dart b/lib/common/actions/func_alter_empresa.dart index d60d0f8..3582d0d 100644 --- a/lib/common/actions/func_alter_empresa.dart +++ b/lib/common/actions/func_alter_empresa.dart @@ -6,7 +6,7 @@ import '../../config.dart'; import '../../controllers/controllers.dart'; -alterEmpresa(BuildContext context){ +alterEmpresa(BuildContext context, Function()? onAlterEmp){ Widget child = Consumer( builder: (_,user,__){ return Container( @@ -33,7 +33,7 @@ alterEmpresa(BuildContext context){ decoration: TextDecoration.none ),), const SizedBox(height: 20,), - Container( + SizedBox( height: 200, child: ListView.builder( itemCount: user.user?.login?.companies?.length ?? 0, @@ -66,8 +66,7 @@ alterEmpresa(BuildContext context){ ), onTap: () async { user.companies = user.user?.login?.companies![index]; - context.read().getObrigacoesusuarios(); - context.read().getContatos(); + if(onAlterEmp != null) await onAlterEmp(); Navigator.pop(context); } ); diff --git a/lib/common/custom_buttom.dart b/lib/common/custom_buttom.dart index 44e80c4..5468a2f 100644 --- a/lib/common/custom_buttom.dart +++ b/lib/common/custom_buttom.dart @@ -26,7 +26,7 @@ class CustomButtom { ? (color ?? Config.corPri).withOpacity(0.8) : color ?? Config.corPri, ), padding: MaterialStateProperty.resolveWith( - (Set states) => padding ?? EdgeInsets.symmetric(horizontal: 15, vertical: 5), + (Set states) => padding ?? const EdgeInsets.symmetric(horizontal: 15, vertical: 5), ), shape: MaterialStateProperty.resolveWith( (Set states) => RoundedRectangleBorder( diff --git a/lib/common/heros_file.dart b/lib/common/heros_file.dart index 173e150..aed4778 100644 --- a/lib/common/heros_file.dart +++ b/lib/common/heros_file.dart @@ -8,9 +8,8 @@ import 'package:flutter/rendering.dart'; import 'package:path_provider/path_provider.dart'; -import 'package:responsive_framework/responsive_breakpoints.dart'; +import 'package:responsive_framework/responsive_framework.dart'; import 'package:share_extend/share_extend.dart'; -import 'package:filesystem_picker/filesystem_picker.dart'; import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart'; import 'package:universal_io/io.dart'; import 'package:universal_html/html.dart' as html; diff --git a/lib/controllers/asseweb/home_manager.dart b/lib/controllers/asseweb/home_manager.dart deleted file mode 100644 index bba672b..0000000 --- a/lib/controllers/asseweb/home_manager.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; - - -import '../../model/model.dart'; -import '../../services/services.dart'; -import 'user_manager.dart'; - -class HomeAssewebManager extends ChangeNotifier { - final HomeAssewebService _service = HomeAssewebService(); - List listContatos = []; - List listObrigacoes = []; - - void getHomePage(){ - getContatos(); - getObrigacoesusuarios(); - } - - Future getContatos() async { - listContatos = await _service.contatos( - token: UserAssewebManager.sUser?.token ?? '', - id: UserAssewebManager.sCompanies?.id ?? 0, - ); - notifyListeners(); - } - - Future getObrigacoesusuarios() async { - listObrigacoes = await _service.obrigacoesusuarios( - token: UserAssewebManager.sUser?.token ?? '', - idcliente: UserAssewebManager.sCompanies?.id ?? 0, - idusuario: UserAssewebManager.sUser?.login?.id ?? 0, - ); - listObrigacoes.sort((a,b) => a.obrigacaoClientePeriodo?.deadLine?.compareTo(b.obrigacaoClientePeriodo!.deadLine!) ?? 0); - - notifyListeners(); - } -} \ No newline at end of file diff --git a/lib/controllers/controllers.dart b/lib/controllers/controllers.dart index c7e91e8..1154cf2 100644 --- a/lib/controllers/controllers.dart +++ b/lib/controllers/controllers.dart @@ -22,7 +22,7 @@ export 'tablet/historico_manager.dart'; export 'tablet/user_manager_offiline.dart'; export 'asseweb/user_manager.dart'; export 'asseweb/senha_manager.dart'; -export 'asseweb/home_manager.dart'; + export 'update_app_manager.dart'; diff --git a/lib/controllers/holerite/holerite_manager.dart b/lib/controllers/holerite/holerite_manager.dart index cb6da26..928e722 100644 --- a/lib/controllers/holerite/holerite_manager.dart +++ b/lib/controllers/holerite/holerite_manager.dart @@ -80,13 +80,13 @@ class HoleriteManager extends ChangeNotifier { } } - Future holeriteresumo(int idholerite, int mes, int ano, int? tipo) async { - //File? result = await _service.holeriteresumo(idholerite, mes, ano, tipo); - //return result; - } - - Future holeriteresumoBytes(int idholerite, int mes, int ano, int? tipo) async { - //Uint8List? result = await _service.holeriteresumoBytes(user, idholerite, mes, ano, tipo); - //return result; + Future holeriteresumoBytes(int? idholerite) async { + try { + Uint8List? result = await _service.holeriteresumoBytes(idholerite); + return result; + } catch (e) { + debugPrint(e.toString()); + return null; + } } } \ No newline at end of file diff --git a/lib/controllers/holerite/user_manager.dart b/lib/controllers/holerite/user_manager.dart index d38149b..71e2c31 100644 --- a/lib/controllers/holerite/user_manager.dart +++ b/lib/controllers/holerite/user_manager.dart @@ -120,7 +120,7 @@ class UserHoleriteManager extends ChangeNotifier { Future registerUser({required String email, required String senha,required String nome, required String cpf}) async { - user = await _service.registerUser(email: email, senha: senha, nome: nome, cpf: cpf); + user = await _service.registerUser(email: email, senha: senha, nome: nome, cpf: cpf, ); listFunc = await _serviceFunc.listFuncionarios(); if(listFunc.isNotEmpty) funcSelect = listFunc.last; memorizar(); diff --git a/lib/helper/conn.dart b/lib/helper/conn.dart index 4484c7d..0870ee7 100644 --- a/lib/helper/conn.dart +++ b/lib/helper/conn.dart @@ -48,7 +48,7 @@ class ConnectionStatusSingleton { connectionChangeController.close(); } - void _connectionChange(ConnectivityResult result) { + void _connectionChange(List result) { checkConnection(); } diff --git a/lib/model/holerite/primeiro_acesso/primeiro_acesso_model.dart b/lib/model/holerite/primeiro_acesso/primeiro_acesso_model.dart deleted file mode 100644 index 9480a22..0000000 --- a/lib/model/holerite/primeiro_acesso/primeiro_acesso_model.dart +++ /dev/null @@ -1,12 +0,0 @@ - -class PrimeiroAcessoHoleriteModel{ - int? id; - String? name; - String? email; - - PrimeiroAcessoHoleriteModel.fromMap(Map map){ - this.id = map["id"] == null ? null : map["id"]; - this.email = map["email"] == null ? null : map["email"]; - this.name = map["name"] == null ? null : map["name"]; - } -} \ No newline at end of file diff --git a/lib/model/model.dart b/lib/model/model.dart index d34ad38..b98b12a 100644 --- a/lib/model/model.dart +++ b/lib/model/model.dart @@ -1,6 +1,6 @@ export 'holerite/holerite/holerite.dart'; export 'holerite/usuario/usuario.dart'; -export 'holerite/primeiro_acesso/primeiro_acesso_model.dart'; + export 'tablet/config/config.dart'; export 'tablet/empresa/empresa.dart'; diff --git a/lib/services/asseweb/boletos.dart b/lib/services/asseweb/boletos.dart deleted file mode 100644 index 5129f31..0000000 --- a/lib/services/asseweb/boletos.dart +++ /dev/null @@ -1,66 +0,0 @@ -import 'package:universal_io/io.dart'; -import 'dart:typed_data'; -import 'package:flutter/material.dart'; -import 'package:flutter_html_to_pdf/flutter_html_to_pdf.dart'; -import 'package:intl/intl.dart'; -import 'package:path_provider/path_provider.dart'; - -import '../../config.dart'; -import '../../controllers/controllers.dart'; -import '../../model/model.dart'; -import '../../utils/get_file.dart'; -import '../http/http.dart'; - -class BoletosAssewebService { - final HttpCli _http = HttpCli(); - - Future> getListBoletos({String? cnpj}) async { - String _metodo = '/api/Boletos'; - - try { - MyHttpResponse response = await _http.post( - url: Config.conf.apiBoletos! + _metodo, - headers: { - 'Content-Type': 'application/json', - }, - body: { - 'CnpjCpf': cnpj, - } - ); - - if (response.isSucess) { - List result = response.data; - List listBoletos = result.map((e) => BoletosModel.fromMap(e)).toList(); - listBoletos.sort((a,b) => b.dataVencimento!.compareTo(a.dataVencimento!) ); - - return listBoletos; - }else{ - debugPrint('BoletosAssewebService - getListBoletos: ${response.codigo} ${response.data}'); - } - } catch (e) { - debugPrint('BoletosAssewebService - getListBoletos: ' + e.toString()); - } - return []; - } - - Future boletoFile(BoletosModel boleto, ) async { - - try { - MyHttpResponse response = await _http.get( - url: boleto.url ?? '', decoder: false, bits: true, - ); - - if (response.isSucess) { - Uint8List u = response.data; - File result = await CustomFile.fileTemp('pdf',memori: u, - nome: "boleto_${boleto.numero}_${DateFormat('ddMMyyyy').format(boleto.dataVencimento!)}"); - return result; - }else{ - debugPrint('BoletosAssewebService - boletoFile: ${response.codigo} ${response.data}'); - } - } catch (e) { - debugPrint('BoletosAssewebService - boletoFile: ' + e.toString()); - } - } - -} diff --git a/lib/services/asseweb/home.dart b/lib/services/asseweb/home.dart deleted file mode 100644 index 9843bcd..0000000 --- a/lib/services/asseweb/home.dart +++ /dev/null @@ -1,66 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../../config.dart'; -import '../../model/model.dart'; -import '../http/http.dart'; - -class HomeAssewebService { - final HttpCli _http = HttpCli(); - - Future> contatos( - {required String token, required int id}) async { - String _metodo = '/api/Client/contacts?clientId=${id}'; - - try { - MyHttpResponse response = await _http.get( - url: Config.conf.apiAsseweb! + _metodo, - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer ' + token - }, - ); - - if (response.isSucess) { - List result = response.data; - - List ListaContatos = - result.map((e) => ContatosAsseweb.fromMap(e)).toList(); - - return ListaContatos; - } - } catch (e) { - debugPrint(e.toString()); - } - return []; - } - - Future> obrigacoesusuarios( - {required String token, required int idcliente, required int idusuario}) async { - String _metodo = '/api/Obrigacao/obrbyuser?userId=${idusuario}&clientId=${idcliente}&days=20'; - - try { - MyHttpResponse response = await _http.get( - url: Config.conf.apiAsseweb! + _metodo, - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer ' + token - }, - ); - - if (response.isSucess) { - List result = response.data; - - List obrigacoes = - result.map((e) => ObrigacoesHomeModel.fromMap(e)).toList(); - - return obrigacoes; - }else{ - debugPrint('HomeAssewebService - obrigacoesusuarios: ${response.codigo}\n${response.data}'); - } - } catch (e) { - debugPrint('HomeAssewebService - obrigacoesusuarios: ' + e.toString()); - } - return []; - } - -} diff --git a/lib/services/asseweb/obrigacoes.dart b/lib/services/asseweb/obrigacoes.dart deleted file mode 100644 index 6b72d97..0000000 --- a/lib/services/asseweb/obrigacoes.dart +++ /dev/null @@ -1,128 +0,0 @@ -import 'package:universal_io/io.dart'; -import 'dart:typed_data'; -import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; - -import '../../config.dart'; -import '../../controllers/controllers.dart'; -import '../../enums/enums.dart'; -import '../../model/model.dart'; -import '../../utils/get_file.dart'; -import '../../utils/utils.dart'; -import '../http/http.dart'; - -class ObrigacoesAssewebService { - final HttpCli _http = HttpCli(); - - Future obrigacoesdetalhes({int? obrcliperId,}) async { - String _metodo = '/api/Obrigacao/obrdetails?obrcliperId=${obrcliperId}'; - - try { - MyHttpResponse response = await _http.get( - url: Config.conf.apiAsseweb! + _metodo, - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer ${UserAssewebManager.sUser?.token}' - }, - ); - - if (response.isSucess) { - final List result = response.data; - - ObrigacoesDetalhesModel obrigacoesDetalhes = ObrigacoesDetalhesModel.fromMap(result.first); - obrigacoesDetalhes.statusTimeLine = StatusTimeLine.statusTimeLine(obrigacoesDetalhes); - return obrigacoesDetalhes; - }else{ - debugPrint('ObrigacoesAssewebService - obrigacoesdetalhes: ${response.codigo} ${response.data}'); - } - } catch (e) { - debugPrint(e.toString()); - } - } - - Future> obrigacoesMes( - {int? tipo, required DateTime inicio, required DateTime termino}) async { - String _metodo = '/api/Obrigacao/obrmonthbyuser?userId=${UserAssewebManager.sUser?.login?.id}&clientId=${UserAssewebManager.sCompanies?.id}&obrType=${tipo ?? 0}&startDate=${DateFormat('yyyy-MM-dd').format(inicio)}&endDate=${DateFormat('yyyy-MM-dd').format(termino)}'; - - try { - MyHttpResponse response = await _http.get( - url: Config.conf.apiAsseweb! + _metodo, - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer ${UserAssewebManager.sUser?.token}' - }, - ); - - if (response.isSucess) { - List result = response.data; - if(result.isNotEmpty){ - List obrigacoes = result.map((e) => Validacoes.stringToDataBr(e.toString())! ).toList(); - return obrigacoes; - } - }else{ - debugPrint('ObrigacoesAssewebService - obrigacoesMes: ${response.codigo} ${response.data}'); - } - } catch (e) { - debugPrint('ObrigacoesAssewebService - obrigacoesMes: ${e.toString()}'); - } - return []; - } - - Future> obrigacoesdata({required DateTime date, int? tipo}) async { - String _metodo = '/api/Obrigacao/obrbydate?userId=${UserAssewebManager.sUser?.login?.id}&clientId=${UserAssewebManager.sCompanies?.id}&obrType=${tipo ?? 0}&date=${DateFormat("yyyy-MM-dd").format(date)}'; - - try { - MyHttpResponse response = await _http.get( - url: Config.conf.apiAsseweb! + _metodo, - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer ${UserAssewebManager.sUser?.token}' - }, - ); - - if (response.isSucess) { - List result = response.data; - List obrigacoes = result.map((e) => ObrigacaoModel.fromMap(e)).toList(); - return obrigacoes; - }else{ - debugPrint('ObrigacoesAssewebService - obrigacoesdata: ${response.codigo} ${response.data}'); - } - } catch (e) { - debugPrint(e.toString()); - } - return []; - } - - Future obrigacaoFile({int? idfileObg}) async { - String _metodo = '/api/Obrigacao/obrfile?obrAqrId=${idfileObg}&clientId=${UserAssewebManager.sCompanies?.id}&recalculo=false'; - - - try { - MyHttpResponse response = await _http.get( - url: Config.conf.apiAsseweb! + _metodo, - decoder: false, bits: true, - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer ${UserAssewebManager.sUser?.token}' - }, - ); - - if (response.isSucess) { - Uint8List u = response.data; - if(response.extencao == 'html'){ - File file = await CustomFile.fileTemp('html',memori: u); - File result = await CustomFile.fileHtml(file); - return result; - }else{ - File result = await CustomFile.fileTemp(response.extencao ?? 'pdf', memori: u); - return result; - } - }else{ - debugPrint('ObrigacoesAssewebService - obrigacaoFile: ${response.codigo} ${response.data}'); - } - } catch (e) { - debugPrint('ObrigacoesAssewebService - obrigacaoFile: ${e.toString()}'); - } - } - -} diff --git a/lib/services/biometria.dart b/lib/services/biometria.dart index f1ebfa6..d97472c 100644 --- a/lib/services/biometria.dart +++ b/lib/services/biometria.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; import 'package:local_auth/local_auth.dart'; -import 'package:local_auth_ios/local_auth_ios.dart'; import 'package:local_auth_android/local_auth_android.dart'; +import 'package:local_auth_darwin/local_auth_darwin.dart'; + import '../enums/enums.dart'; import '../config.dart'; @@ -57,7 +58,8 @@ class BiometriaServices { cancelButton : 'Cancelar' , goToSettingsButton : 'Configurações' , goToSettingsDescription : 'Configure seu ID' , - lockOut : ' Reative seu ID' ); + lockOut : ' Reative seu ID' + ); const andStrings = AndroidAuthMessages( cancelButton: 'Cancelar', diff --git a/lib/services/holerite/holerite.dart b/lib/services/holerite/holerite.dart index 20f3dfa..2d04311 100644 --- a/lib/services/holerite/holerite.dart +++ b/lib/services/holerite/holerite.dart @@ -56,22 +56,21 @@ class HoleriteService { return []; } - Future holeriteresumoBytes() async { - String _api = "/holerites?filters[employee]=${UserHoleriteManager.funcSelect?.id}&populate[]=employee&populate[]=file"; + Future holeriteresumoBytes(int? id) async { + String _api = "/holerites/$id/generate-pdf"; + print(_api); try{ final MyHttpResponse response = await _http.get( - url: Config.conf.apiHoleriteEmail! + _api, + url: Config.conf.apiHoleriteEmail! + _api, bits: true, headers: { - 'Authorization': 'Bearer ${UserHoleriteManager.user?.jwt}' + 'Authorization': 'Bearer ${UserHoleriteManager.user?.jwt}', + 'Content-Type': 'application/pdf' }, ); if(response.isSucess) { final dados = response.data; - HoleriteModel model = HoleriteModel.fromMap(dados); - if(model.data != null && model.data!.isNotEmpty && model.data!.first.attributes?.file != null){ - return base64.decode(model.data!.first.attributes!.file!); - } + return dados; } } catch(e){ debugPrint(e.toString()); diff --git a/lib/services/services.dart b/lib/services/services.dart index 6283315..fc0ea72 100644 --- a/lib/services/services.dart +++ b/lib/services/services.dart @@ -21,10 +21,8 @@ export 'tablet/usuario_offiline.dart'; export 'tablet/usuario_codigo.dart'; export 'asseweb/usuario.dart'; -export 'asseweb/home.dart'; -export 'asseweb/obrigacoes.dart'; export 'asseweb/senha.dart'; -export 'asseweb/boletos.dart'; + export 'biometria.dart'; export 'sendmail.dart'; diff --git a/lib/ui/smartphone/config/config_screen.dart b/lib/ui/smartphone/config/config_screen.dart index 5d30ae2..703af93 100644 --- a/lib/ui/smartphone/config/config_screen.dart +++ b/lib/ui/smartphone/config/config_screen.dart @@ -28,7 +28,7 @@ class _ScreenConfigState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children:[ Container( - padding: EdgeInsets.all(10), + padding: const EdgeInsets.all(10), child: Column( children: [ SwitchListTile( @@ -39,7 +39,7 @@ class _ScreenConfigState extends State { } ), if(!kIsWeb) - Divider(height: 2,), + const Divider(height: 2,), if(!kIsWeb) Consumer( builder: (_, bio, __) { @@ -55,7 +55,7 @@ class _ScreenConfigState extends State { ); }, ), - Divider(height: 2,), + const Divider(height: 2,), ], ), ), @@ -68,7 +68,7 @@ class _ScreenConfigState extends State { border: Border.all(color: Colors.red), borderRadius: const BorderRadius.all(Radius.circular(8)) ), - margin: EdgeInsets.symmetric(horizontal: 20), + margin: const EdgeInsets.symmetric(horizontal: 20), padding: const EdgeInsets.all(10), child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -92,7 +92,7 @@ class _ScreenConfigState extends State { ), ), if(Config.conf.nomeApp == VersaoApp.HoleriteApp) - SizedBox(height: 20,), + const SizedBox(height: 20,), Padding( padding: const EdgeInsets.only(bottom: 15, right: 25), @@ -121,17 +121,17 @@ class _ScreenConfigState extends State { style: TextStyle(color: Colors.redAccent), ), ), - content: SingleChildScrollView( + content: const SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, - children: const [ + children: [ Text("Depois de excluir esta conta, não há como voltar atrás.",), SizedBox(height: 25), Text("Deseja excluir sua conta?",), ], ), ), - actionsPadding: EdgeInsets.symmetric(horizontal: 15), + actionsPadding: const EdgeInsets.symmetric(horizontal: 15), actions: [ TextButton( child: const Text("Cancelar", ), diff --git a/lib/ui/smartphone/holerite/detelhes_holerite.dart b/lib/ui/smartphone/holerite/detelhes_holerite.dart index 6626254..173c0e4 100644 --- a/lib/ui/smartphone/holerite/detelhes_holerite.dart +++ b/lib/ui/smartphone/holerite/detelhes_holerite.dart @@ -1,11 +1,12 @@ import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; -import 'package:flutter_awesome_alert_box/flutter_awesome_alert_box.dart'; -import 'package:responsive_framework/responsive_breakpoints.dart'; -import 'package:universal_io/io.dart'; +import 'package:responsive_framework/responsive_framework.dart'; + + +import '../../../common/custom_snackbar.dart'; import '../../../common/heros_file.dart'; import '../../../common/load_screen.dart'; import '../../../controllers/controllers.dart'; @@ -56,37 +57,22 @@ class _DetalhesHoleriteState extends State { } }, onPressfloatingButton: () async { - File? a; - Uint8List? b; - String? html; try { carregar(context); - //b = await context.read().holeriteresumoBytes( - // UserHoleriteManager.user, idComp, mes, ano, holerite?.holeriteTipoCod ); - - /*if(kIsWeb){ - - }else{ - a = await context.read().holeriteresumo( - UserHoleriteManager.sUser, idComp, mes, ano, holerite?.holeriteTipoCod ); - }*/ + final file = await context.read().holeriteresumoBytes(widget.holerite.id); + Navigator.pop(context); + if(file != null){ + await Navigator.push(context, MaterialPageRoute( + builder: (context)=> FileHero( + 'holerite-${widget.holerite.attributes?.year}-${widget.holerite.attributes?.month}', + memori: file, ))); + }else{ + CustomSnackbar.error(text: 'Não foi possivel carregar o holerite, verifique sua conexão com internet!', context: context); + } } catch(e){ debugPrint(e.toString()); - } finally { - Navigator.pop(context); - } - if(b != null){ - await Navigator.push(context, MaterialPageRoute( - builder: (context)=> FileHero('holerite-${widget.holerite.attributes?.year}-${widget.holerite.attributes?.month}', - file: a, memori: b, html: html,))); - }else{ - InfoAlertBox( - context: context, - title: 'Atenção', - infoMessage: 'Não foi possivel carregar o holerite\nverifique sua conexão com internet!', - buttonText: 'ok' - ); } + } ); } diff --git a/lib/ui/smartphone/holerite/graficos_holerite.dart b/lib/ui/smartphone/holerite/graficos_holerite.dart index 9bcb5fb..ee5509e 100644 --- a/lib/ui/smartphone/holerite/graficos_holerite.dart +++ b/lib/ui/smartphone/holerite/graficos_holerite.dart @@ -3,10 +3,10 @@ import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; -import 'package:responsive_framework/responsive_breakpoints.dart'; import 'package:charts_flutter/flutter.dart' as charts; import 'package:charts_common/common.dart' as common; import 'package:charts_common/src/common/color.dart' as colors; +import 'package:responsive_framework/responsive_framework.dart'; import '../../../common/common.dart'; diff --git a/lib/ui/smartphone/holerite/holerite_screen.dart b/lib/ui/smartphone/holerite/holerite_screen.dart index e906dda..888825a 100644 --- a/lib/ui/smartphone/holerite/holerite_screen.dart +++ b/lib/ui/smartphone/holerite/holerite_screen.dart @@ -1,9 +1,6 @@ - import 'package:assecontservices/assecontservices.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; -import 'package:responsive_framework/responsive_breakpoints.dart'; import '../../../common/common.dart'; @@ -12,6 +9,7 @@ import '../../../common/custom_livelist.dart'; import '../../../helper/helper.dart'; import '../../../controllers/controllers.dart'; import '../../../model/holerite/holerite/holerite.dart'; +import '../../../utils/custom_navigator.dart'; import '../../ui.dart'; import 'detelhes_holerite.dart'; diff --git a/lib/ui/smartphone/tela_base/custom_menu_item.dart b/lib/ui/smartphone/tela_base/custom_menu_item.dart index 9dcf6de..bbdd9e2 100644 --- a/lib/ui/smartphone/tela_base/custom_menu_item.dart +++ b/lib/ui/smartphone/tela_base/custom_menu_item.dart @@ -1,7 +1,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:responsive_framework/responsive_breakpoints.dart'; +import 'package:responsive_framework/responsive_framework.dart'; + import '../../../config.dart'; import '../../../common/common.dart'; diff --git a/lib/ui/smartphone/tela_base/custom_scaffold.dart b/lib/ui/smartphone/tela_base/custom_scaffold.dart index 3ef2653..34b7560 100644 --- a/lib/ui/smartphone/tela_base/custom_scaffold.dart +++ b/lib/ui/smartphone/tela_base/custom_scaffold.dart @@ -21,7 +21,7 @@ class CustomScaffold { static home({GlobalKey? keyListMenu, required List listMenu, double? height, Widget? buttom, required BuildContext context,required Widget body, bool isListView = true, String? foto, Widget? dados, GlobalKey? keyMenu, GlobalKey? key1, GlobalKey? key2, GlobalKey? key3, GlobalKey? key4, GlobalKey? key5, - required String appTitle,String? nome, String? cargo, bool onFoto = true}){ + required String appTitle,String? nome, String? cargo, bool onFoto = true, Function()? onAlter}){ double h = 180 + MediaQuery.of(context).padding.top; @@ -33,6 +33,7 @@ class CustomScaffold { cargo:cargo , buttom: buttom, listMenus: listMenu, + onAlter: onAlter, foto: onFoto ? Hero( tag: "foto", child: GestureDetector( @@ -77,6 +78,7 @@ class CustomScaffold { key: Config.scaffoldKey, body: body, height: height ?? h, + onAlter: onAlter, appbar: SafeArea( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -100,7 +102,9 @@ class CustomScaffold { key2: key2, key3: key3, key4: key4, - key5: key5), + key5: key5, + onAlter: onAlter + ), ], ), const SizedBox( @@ -255,8 +259,10 @@ class CustomScaffold { ); } - static custom({GlobalKey? key, required BuildContext context, required double height, bool conf = false, - Widget? appbar, required Widget body, bool home = false, Widget? expanAppbar, String? appTitle, Widget? buttom}){ + static custom({GlobalKey? key, required BuildContext context, + required double height, bool conf = false, Function()? onAlter, + Widget? appbar, required Widget body, bool home = false, + Widget? expanAppbar, String? appTitle, Widget? buttom}){ return Scaffold( key: key, @@ -265,7 +271,7 @@ class CustomScaffold { title: CustomText.text(appTitle, style: const TextStyle(fontSize: 16), textAlign: TextAlign.center), centerTitle: true, actions: [ - actions(context, aponta: home, config: conf), + actions(context, aponta: home, config: conf, onAlter: onAlter), ], ), body: SizedBox( @@ -305,7 +311,7 @@ class CustomScaffold { static homeWeb({GlobalKey? key, required BuildContext context, Widget? buttom, - required Widget body, required List listMenus, Widget? foto, + required Widget body, required List listMenus, Widget? foto, Function()? onAlter, Widget? dados, required String appTitle,required String? nome,required String? cargo, }){ @@ -356,7 +362,7 @@ class CustomScaffold { ], ), - actions(context, aponta: true), + actions(context, aponta: true, onAlter: onAlter), ], ), ), diff --git a/lib/utils/conversoes.dart b/lib/utils/conversoes.dart index 5ef12e3..1731826 100644 --- a/lib/utils/conversoes.dart +++ b/lib/utils/conversoes.dart @@ -1,4 +1,5 @@ +import 'dart:async'; import 'package:universal_io/io.dart'; import 'package:flutter/material.dart'; @@ -9,6 +10,15 @@ import 'package:geocoding/geocoding.dart' as geo; class Conversoes { + Conversoes(){ + setLocale(); + } + + Future setLocale() async { + try{ + await geo.GeocodingPlatform.instance?.setLocaleIdentifier('pt_BR'); + }catch(e){} + } static Future htmlToPdf({required String html, String? nome}) async { try{ @@ -20,7 +30,7 @@ class Conversoes { '''; Directory tempDir = await getTemporaryDirectory(); - String savedPath = nome ?? ("contrato - " + DateTime.now().microsecondsSinceEpoch.toString()); + String savedPath = nome ?? ("contrato - ${DateTime.now().microsecondsSinceEpoch}"); File? file = await FlutterHtmlToPdf.convertFromHtmlContent( htmlContent, tempDir.path, savedPath ); @@ -48,7 +58,7 @@ class Conversoes { static Future getEndereco(double? latitude, double? longitude) async { if(latitude == null || longitude == null) return null; - List placemarks = await geo.placemarkFromCoordinates(latitude, longitude, localeIdentifier: 'pt_BR'); + List placemarks = await geo.placemarkFromCoordinates(latitude, longitude); if(placemarks.isNotEmpty){ geo.Placemark place = placemarks.first; diff --git a/pubspec.yaml b/pubspec.yaml index f2c6277..40684b8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,36 +13,36 @@ dependencies: flutter_localizations: sdk: flutter - provider: ^6.1.1 + provider: ^6.1.2 flutter_awesome_alert_box: ^2.1.1 top_snackbar_flutter: ^3.1.0 - sqflite: ^2.3.0 #^2.0.2 - sqflite_common_ffi: ^2.3.0+4 - sqflite_common_ffi_web: ^0.4.0 + sqflite: ^2.3.3+1 #^2.0.2 + sqflite_common_ffi: ^2.3.3 + sqflite_common_ffi_web: ^0.4.3+1 - responsive_framework: 1.1.1 + responsive_framework: ^1.4.0 ###^0.2.0 - http: ^1.1.0 + http: ^1.2.1 intl: any #^0.18.1 - image_picker: ^1.0.4 - filesystem_picker: ^4.0.0 #^2.0.2 + image_picker: ^1.1.2 + filesystem_picker: ^4.1.0 #^2.0.2 - local_auth: 2.1.7 + local_auth: ^2.2.0 - photo_view: ^0.14.0 + photo_view: ^0.15.0 - geocoding: ^2.1.1 - location: ^5.0.3 + geocoding: ^3.0.0 + location: ^6.0.2 #$google_maps_flutter: ^2.2.5 - url_launcher: ^6.2.1 + url_launcher: ^6.3.0 flutter_carousel_slider: ^1.1.0 @@ -66,13 +66,10 @@ dependencies: flutter_html_to_pdf: ^0.7.0 #syncfusion_flutter_pdfviewer: ^23.1.39 - syncfusion_flutter_pdfviewer: - git: - url: https://github.com/pretolio/syncfusion_flutter_pdfviewer.git - ref: main + syncfusion_flutter_pdfviewer: ^26.1.35 - path_provider: ^2.1.1 - shared_preferences: ^2.2.2 + path_provider: ^2.1.3 + shared_preferences: ^2.2.3 external_path: ^1.0.3 cpf_cnpj_validator: ^2.0.0 @@ -84,7 +81,7 @@ dependencies: universal_io: ^2.2.2 universal_html: ^2.2.4 - connectivity_plus: 5.0.2 + connectivity_plus: ^6.0.3 package_info_plus: any #^3.0.2 #^1.4.2 #device_info_plus: ^9.0.0 @@ -93,10 +90,10 @@ dependencies: url: https://github.com/pretolio/safe_device.git ref: main - brasil_fields: ^1.14.0 + brasil_fields: ^1.14.3 datetime_picker_formfield_new: ^2.1.0 - in_app_review: ^2.0.8 + in_app_review: ^2.0.9 launch_review: ^3.0.1 #store_launcher: ^1.0.1 @@ -107,7 +104,7 @@ dependencies: schedulers: ^1.0.1 - device_preview: ^1.1.0 + device_preview: ^1.2.0 dependency_overrides: #intl: ^0.17.0 From 94ba60d831a6b00ee0134d1bd2af9892f0f671aa Mon Sep 17 00:00:00 2001 From: "XS3\\TX900297" Date: Fri, 28 Jun 2024 11:25:12 -0300 Subject: [PATCH 06/73] ajuste app asseweb para inclusao relatorio do simples --- .idea/LibraryAppFlutter.iml | 3 + .idea/libraries/Dart_SDK.xml | 40 ++-- .idea/libraries/Flutter_Plugins.xml | 89 ++++---- .idea/other.xml | 263 ++++++++++++++++++++++ .idea/vcs.xml | 5 +- lib/common/custom_livelist.dart | 3 - lib/common/heros_file.dart | 23 +- lib/controllers/asseweb/user_manager.dart | 4 +- lib/enums/enums.dart | 3 +- lib/enums/regime_empresa.dart | 35 +++ lib/model/asseweb/usuario/usuario.dart | 57 +++-- lib/model/configuracoes.dart | 26 ++- lib/services/asseweb/usuario.dart | 5 +- 13 files changed, 432 insertions(+), 124 deletions(-) create mode 100644 .idea/other.xml create mode 100644 lib/enums/regime_empresa.dart diff --git a/.idea/LibraryAppFlutter.iml b/.idea/LibraryAppFlutter.iml index 9d377e0..1a885c7 100644 --- a/.idea/LibraryAppFlutter.iml +++ b/.idea/LibraryAppFlutter.iml @@ -36,6 +36,9 @@ + + + diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml index b8ce787..c3b7674 100644 --- a/.idea/libraries/Dart_SDK.xml +++ b/.idea/libraries/Dart_SDK.xml @@ -1,25 +1,27 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/libraries/Flutter_Plugins.xml b/.idea/libraries/Flutter_Plugins.xml index 27197a0..592a2e4 100644 --- a/.idea/libraries/Flutter_Plugins.xml +++ b/.idea/libraries/Flutter_Plugins.xml @@ -1,56 +1,59 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + - - + + + + + + + - - - + + + + + + - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.idea/other.xml b/.idea/other.xml new file mode 100644 index 0000000..0d3a1fb --- /dev/null +++ b/.idea/other.xml @@ -0,0 +1,263 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 41611c9..1ee4241 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,9 +2,6 @@ - - - - + \ No newline at end of file diff --git a/lib/common/custom_livelist.dart b/lib/common/custom_livelist.dart index 6e94099..9d92f97 100644 --- a/lib/common/custom_livelist.dart +++ b/lib/common/custom_livelist.dart @@ -1,10 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:shimmer/shimmer.dart'; import 'package:auto_animated/auto_animated.dart'; -import 'package:provider/provider.dart'; -import '../config.dart'; import 'column_or_row.dart'; import 'custom_list_tile.dart'; import 'custom_load_shimmer.dart'; diff --git a/lib/common/heros_file.dart b/lib/common/heros_file.dart index aed4778..5dc5f55 100644 --- a/lib/common/heros_file.dart +++ b/lib/common/heros_file.dart @@ -26,7 +26,7 @@ class FileHero extends StatefulWidget { final String? html; final String name; final Widget? menu; - FileHero(this.name, {this.menu, this.file,this.memori, this.html}); + const FileHero(this.name, {super.key, this.menu, this.file,this.memori, this.html}); @override _FileHeroState createState() => _FileHeroState(); @@ -102,7 +102,7 @@ class _FileHeroState extends State { } ),*/ IconButton( - icon: Icon(Icons.send, color: Colors.white,), + icon: const Icon(Icons.send, color: Colors.white,), onPressed: () async { if(kIsWeb){ if(widget.memori != null){ @@ -123,7 +123,6 @@ class _FileHeroState extends State { subject: "${widget.name}.pdf"); } } - } ), ], @@ -134,7 +133,6 @@ class _FileHeroState extends State { alignment: Alignment.bottomCenter, children: [ Container( - height: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? MediaQuery.of(context).size.height - MediaQuery.of(context).padding.top - AppBar().preferredSize.height : null, @@ -144,19 +142,16 @@ class _FileHeroState extends State { child: widget.memori != null ? SfPdfViewer.memory(widget.memori!, ) : widget.file == null ? Container() : SfPdfViewer.file(widget.file!), ), - menus() + + if(widget.menu != null) ...[ + SizedBox( + height: 120, + child: widget.menu! + ) + ] ], ) ) ); } - - Widget menus(){ - if(widget.menu != null){ - return Container( - height: 120, - child: widget.menu!); - } - return Container(); - } } \ No newline at end of file diff --git a/lib/controllers/asseweb/user_manager.dart b/lib/controllers/asseweb/user_manager.dart index 4f644f0..71b47ec 100644 --- a/lib/controllers/asseweb/user_manager.dart +++ b/lib/controllers/asseweb/user_manager.dart @@ -27,6 +27,8 @@ class UserAssewebManager extends ChangeNotifier { } + static String? fcmToken; + static UsuarioAsseweb? sUser; UsuarioAsseweb? get user => sUser; set user(UsuarioAsseweb? v){ @@ -87,7 +89,7 @@ class UserAssewebManager extends ChangeNotifier { bool result = false; try { if (uemail != '' && usenha != '') { - result = await signInAuth(email: uemail, senha: usenha); + result = await signInAuth(email: uemail, senha: usenha, ); } } catch (e) { debugPrint(e.toString()); diff --git a/lib/enums/enums.dart b/lib/enums/enums.dart index 76bdca4..6355252 100644 --- a/lib/enums/enums.dart +++ b/lib/enums/enums.dart @@ -5,4 +5,5 @@ export 'marcacao_offline_status.dart'; export 'config_backup.dart'; export 'shared_tipes.dart'; export 'obrigacao_tipo.dart'; -export 'status_timeline.dart'; \ No newline at end of file +export 'status_timeline.dart'; +export 'regime_empresa.dart'; \ No newline at end of file diff --git a/lib/enums/regime_empresa.dart b/lib/enums/regime_empresa.dart new file mode 100644 index 0000000..3b1630e --- /dev/null +++ b/lib/enums/regime_empresa.dart @@ -0,0 +1,35 @@ + + +enum RegimeEmpresa { + Outras(0), + LucroPresumido(1), + LucroReal(2), + Simples(3), + Imunes(4), + Mei(5), + Isenta(6); + + static RegimeEmpresa getEnum(int? x) { + switch(x) { + case 0: + return Outras; + case 1: + return LucroPresumido; + case 2: + return LucroReal; + case 3: + return Simples; + case 4: + return Imunes; + case 5: + return Mei; + case 6: + return Isenta; + default: + return Outras; + } + } + + final int value; + const RegimeEmpresa(this.value); +} \ No newline at end of file diff --git a/lib/model/asseweb/usuario/usuario.dart b/lib/model/asseweb/usuario/usuario.dart index 4c8a5e7..ca5c194 100644 --- a/lib/model/asseweb/usuario/usuario.dart +++ b/lib/model/asseweb/usuario/usuario.dart @@ -4,14 +4,16 @@ import 'dart:convert'; +import '../../../enums/regime_empresa.dart'; + class UsuarioAsseweb { - UsuarioAsseweb({ + const UsuarioAsseweb({ this.login, this.token, }); - Login? login; - String? token; + final Login? login; + final String? token; factory UsuarioAsseweb.fromJson(String str) => UsuarioAsseweb.fromMap(json.decode(str)); @@ -29,7 +31,7 @@ class UsuarioAsseweb { } class Login { - Login({ + const Login({ this.id, this.name, this.email, @@ -44,22 +46,24 @@ class Login { this.master, this.lastCompanyId, this.companies, + }); - int? id; - String? name; - String? email; - String? phoneNumber; - String? ddd; - String? password; - DateTime? lastAcess; - DateTime? birthday; - String? version; - dynamic resignation; - String? uid; - bool? master; - int? lastCompanyId; - List? companies; + final int? id; + + final String? name; + final String? email; + final String? phoneNumber; + final String? ddd; + final String? password; + final DateTime? lastAcess; + final DateTime? birthday; + final String? version; + final dynamic resignation; + final String? uid; + final bool? master; + final int? lastCompanyId; + final List? companies; factory Login.fromJson(String str) => Login.fromMap(json.decode(str)); @@ -101,21 +105,23 @@ class Login { } class Company { - Company({ + const Company({ this.id, this.number, this.name, this.fantasyName, this.cnpj, this.conntacts, + this.regime = RegimeEmpresa.Outras }); - int? id; - int? number; - String? name; - String? fantasyName; - String? cnpj; - dynamic conntacts; + final int? id; + final int? number; + final String? name; + final String? fantasyName; + final String? cnpj; + final dynamic conntacts; + final RegimeEmpresa regime; factory Company.fromJson(String str) => Company.fromMap(json.decode(str)); @@ -123,6 +129,7 @@ class Company { factory Company.fromMap(Map json) => Company( id: json["id"], + regime: RegimeEmpresa.getEnum(json["regime"]), number: json["number"], name: json["name"], fantasyName: json["fantasyName"], diff --git a/lib/model/configuracoes.dart b/lib/model/configuracoes.dart index ba99b1c..73b7d82 100644 --- a/lib/model/configuracoes.dart +++ b/lib/model/configuracoes.dart @@ -2,25 +2,27 @@ import '../enums/enums.dart'; class ConfiguracoesModel { - String? apiAsseweb; - String? apiHolerite; - String? apiHoleriteEmail; - String? apiAsseponto; - String? apiAssepontoNova; - String? apiEspelho; - String? apiBoletos; - String? androidAppId ; - String? iosAppId; - String? iosAppIdNum ; + final String? apiAsseweb; + final String? apiHolerite; + final String? apiHoleriteEmail; + final String? apiAsseponto; + final String? apiAssepontoNova; + final String? apiEspelho; + final String? apiBoletos; + final String? apiRelatorioFechamento; + final String? androidAppId ; + final String? iosAppId; + final String? iosAppIdNum ; - VersaoApp? nomeApp; + final VersaoApp? nomeApp; - ConfiguracoesModel( + const ConfiguracoesModel( {this.apiAsseweb, this.apiHolerite, this.apiHoleriteEmail, this.apiAsseponto, this.apiAssepontoNova, + this.apiRelatorioFechamento, this.apiBoletos, this.apiEspelho, this.androidAppId, diff --git a/lib/services/asseweb/usuario.dart b/lib/services/asseweb/usuario.dart index 615a70d..8c19246 100644 --- a/lib/services/asseweb/usuario.dart +++ b/lib/services/asseweb/usuario.dart @@ -15,7 +15,8 @@ class UserAssewebService { url: Config.conf.apiAsseweb! + _metodo, body: { "email": email, - "password": senha + "password": senha, + "token" : UserAssewebManager.fcmToken } ); @@ -29,7 +30,7 @@ class UserAssewebService { throw response.codigo.toString(); } } catch (e){ - debugPrint('UserAssewebService signInAuth: ' + e.toString()); + debugPrint('UserAssewebService signInAuth: $e'); switch(e){ case HttpError.unexpected : throw 'Erro inesperado, tente novamente!'; From 37a80c20ead88aa5167bf81e9eaabf5a78383079 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Sat, 29 Jun 2024 22:29:35 -0300 Subject: [PATCH 07/73] ajuste uruario do asseweb para receber novos parametros --- lib/model/asseweb/usuario/usuario.dart | 50 +++++--------------------- 1 file changed, 8 insertions(+), 42 deletions(-) diff --git a/lib/model/asseweb/usuario/usuario.dart b/lib/model/asseweb/usuario/usuario.dart index ca5c194..83deef2 100644 --- a/lib/model/asseweb/usuario/usuario.dart +++ b/lib/model/asseweb/usuario/usuario.dart @@ -5,6 +5,7 @@ import 'dart:convert'; import '../../../enums/regime_empresa.dart'; +import '../contatos/contatos.dart'; class UsuarioAsseweb { const UsuarioAsseweb({ @@ -17,17 +18,10 @@ class UsuarioAsseweb { factory UsuarioAsseweb.fromJson(String str) => UsuarioAsseweb.fromMap(json.decode(str)); - String toJson() => json.encode(toMap()); - factory UsuarioAsseweb.fromMap(Map json) => UsuarioAsseweb( login: json["login"] == null ? null : Login.fromMap(json["login"]), token: json["token"], ); - - Map toMap() => { - "login": login?.toMap(), - "token": token, - }; } class Login { @@ -46,11 +40,9 @@ class Login { this.master, this.lastCompanyId, this.companies, - }); final int? id; - final String? name; final String? email; final String? phoneNumber; @@ -59,7 +51,7 @@ class Login { final DateTime? lastAcess; final DateTime? birthday; final String? version; - final dynamic resignation; + final DateTime? resignation; final String? uid; final bool? master; final int? lastCompanyId; @@ -67,8 +59,6 @@ class Login { factory Login.fromJson(String str) => Login.fromMap(json.decode(str)); - String toJson() => json.encode(toMap()); - factory Login.fromMap(Map json) => Login( id: json["id"], name: json["name"], @@ -86,22 +76,6 @@ class Login { companies: json["companies"] == null ? [] : List.from(json["companies"]!.map((x) => Company.fromMap(x))), ); - Map toMap() => { - "id": id, - "name": name, - "email": email, - "phoneNumber": phoneNumber, - "ddd": ddd, - "password": password, - "lastAcess": lastAcess?.toIso8601String(), - "birthday": birthday, - "version": version, - "resignation": resignation, - "uid": uid, - "master": master, - "lastCompanyId": lastCompanyId, - "companies": companies == null ? [] : List.from(companies!.map((x) => x.toMap())), - }; } class Company { @@ -110,6 +84,7 @@ class Company { this.number, this.name, this.fantasyName, + this.inicio, this.cnpj, this.conntacts, this.regime = RegimeEmpresa.Outras @@ -120,29 +95,20 @@ class Company { final String? name; final String? fantasyName; final String? cnpj; - final dynamic conntacts; + final DateTime? inicio; + final List? conntacts; final RegimeEmpresa regime; factory Company.fromJson(String str) => Company.fromMap(json.decode(str)); - String toJson() => json.encode(toMap()); - factory Company.fromMap(Map json) => Company( id: json["id"], - regime: RegimeEmpresa.getEnum(json["regime"]), + regime: RegimeEmpresa.getEnum(json["classificacao"]), + inicio: json["inicio"] == null ? null : DateTime.parse(json["inicio"]), number: json["number"], name: json["name"], fantasyName: json["fantasyName"], cnpj: json["cnpj"], - conntacts: json["conntacts"], + conntacts: json["conntacts"] == null ? [] : List.from(json["conntacts"]!.map((x) => ContatosAsseweb.fromMap(x))), ); - - Map toMap() => { - "id": id, - "number": number, - "name": name, - "fantasyName": fantasyName, - "cnpj": cnpj, - "conntacts": conntacts, - }; } From b23b1e91a61020835b973905c952a9e2aa3cf403 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 5 Jul 2024 00:25:27 -0300 Subject: [PATCH 08/73] ajuste auto login asseweb --- lib/common/load_screen.dart | 2 +- lib/controllers/asseweb/user_manager.dart | 14 +++++++++++--- lib/services/asseweb/usuario.dart | 2 +- lib/services/http/http_cliente.dart | 4 ++-- lib/ui/smartphone/tela_base/custom_scaffold.dart | 1 + 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/common/load_screen.dart b/lib/common/load_screen.dart index e68b16f..a62b8eb 100644 --- a/lib/common/load_screen.dart +++ b/lib/common/load_screen.dart @@ -5,7 +5,7 @@ carregar(BuildContext context){ barrierDismissible: false, context: context, builder: (context){ - return Center(child: CircularProgressIndicator(backgroundColor: Colors.transparent,), + return const Center(child: CircularProgressIndicator(backgroundColor: Colors.transparent,), ); } ); diff --git a/lib/controllers/asseweb/user_manager.dart b/lib/controllers/asseweb/user_manager.dart index 71b47ec..250b1c7 100644 --- a/lib/controllers/asseweb/user_manager.dart +++ b/lib/controllers/asseweb/user_manager.dart @@ -15,7 +15,7 @@ class UserAssewebManager extends ChangeNotifier { final BiometriaServices _serviceBio = BiometriaServices(); UserAssewebManager(){ - loadBio(); + init(); } static Company? sCompanies; @@ -85,6 +85,10 @@ class UserAssewebManager extends ChangeNotifier { return true; } + Future updateEmpresa() async { + return await _service.lastcompanyupdate(companyId: companies?.id); + } + Future autoLogin() async { bool result = false; try { @@ -118,12 +122,16 @@ class UserAssewebManager extends ChangeNotifier { } } - loadBio() async { + init() async { + final prefs = await SharedPreferences.getInstance(); + status = prefs.getBool("autologin") ?? false; + } + + Future loadBio() async { try{ final prefs = await SharedPreferences.getInstance(); uemail = kReleaseMode ? prefs.getString("user") ?? '' : email.text; usenha = kReleaseMode ? prefs.getString("usenha") ?? '' : senha.text; - status = prefs.getBool("autologin") ?? false; if(kReleaseMode){ senha.text = ''; diff --git a/lib/services/asseweb/usuario.dart b/lib/services/asseweb/usuario.dart index 8c19246..7201931 100644 --- a/lib/services/asseweb/usuario.dart +++ b/lib/services/asseweb/usuario.dart @@ -56,7 +56,7 @@ class UserAssewebService { ); return response.isSucess; } catch (e){ - debugPrint('UserAssewebService lastcompanyupdate: ' + e.toString()); + debugPrint('UserAssewebService lastcompanyupdate: $e'); } return false; } diff --git a/lib/services/http/http_cliente.dart b/lib/services/http/http_cliente.dart index 1b84457..d1413cc 100644 --- a/lib/services/http/http_cliente.dart +++ b/lib/services/http/http_cliente.dart @@ -13,7 +13,7 @@ class HttpCli { final ConnectionStatusSingleton connectionStatus = ConnectionStatusSingleton.getInstance(); Future get( - {required String url, Map? headers, bool decoder = true, bool bits = false, bool isCon = true,}) async { + {required String url, Map? headers, bool decoder = true, int timeout = 15, bool bits = false, bool isCon = true,}) async { if(isCon && !connectionStatus.hasConnection){ return MyHttpResponse( @@ -29,7 +29,7 @@ class HttpCli { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin':'*' } - ).timeout(const Duration(seconds: 15), onTimeout : () { + ).timeout(Duration(seconds: timeout), onTimeout : () { debugPrint('get timeout'); throw HttpError.timeout; }); diff --git a/lib/ui/smartphone/tela_base/custom_scaffold.dart b/lib/ui/smartphone/tela_base/custom_scaffold.dart index 34b7560..832e3b7 100644 --- a/lib/ui/smartphone/tela_base/custom_scaffold.dart +++ b/lib/ui/smartphone/tela_base/custom_scaffold.dart @@ -32,6 +32,7 @@ class CustomScaffold { nome:nome , cargo:cargo , buttom: buttom, + listMenus: listMenu, onAlter: onAlter, foto: onFoto ? Hero( From 8bdb9889bcd0ff59b0263cfa3167c0265256dba2 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Thu, 18 Jul 2024 17:06:56 -0300 Subject: [PATCH 09/73] ajuste api de gerar pdf holerite --- lib/services/holerite/holerite.dart | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/services/holerite/holerite.dart b/lib/services/holerite/holerite.dart index 2d04311..620cabb 100644 --- a/lib/services/holerite/holerite.dart +++ b/lib/services/holerite/holerite.dart @@ -57,15 +57,18 @@ class HoleriteService { } Future holeriteresumoBytes(int? id) async { - String _api = "/holerites/$id/generate-pdf"; - print(_api); + String _api = "/holerites/generate-pdf"; + try{ - final MyHttpResponse response = await _http.get( - url: Config.conf.apiHoleriteEmail! + _api, bits: true, + final MyHttpResponse response = await _http.post( + url: Config.conf.apiHoleriteEmail! + _api, isbyte: true, headers: { 'Authorization': 'Bearer ${UserHoleriteManager.user?.jwt}', 'Content-Type': 'application/pdf' }, + body:{ + "ids": [id] + } ); if(response.isSucess) { From 874a1c2763eb9193740ab5ac2d70a836bb81b0a8 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Thu, 18 Jul 2024 19:01:07 -0300 Subject: [PATCH 10/73] ajuste no gerar pdf holerite --- lib/services/holerite/holerite.dart | 10 ++++++---- lib/services/http/http_cliente.dart | 7 ++++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/services/holerite/holerite.dart b/lib/services/holerite/holerite.dart index 620cabb..9472e92 100644 --- a/lib/services/holerite/holerite.dart +++ b/lib/services/holerite/holerite.dart @@ -58,16 +58,18 @@ class HoleriteService { Future holeriteresumoBytes(int? id) async { String _api = "/holerites/generate-pdf"; - try{ final MyHttpResponse response = await _http.post( url: Config.conf.apiHoleriteEmail! + _api, isbyte: true, headers: { 'Authorization': 'Bearer ${UserHoleriteManager.user?.jwt}', - 'Content-Type': 'application/pdf' + 'Accept': '*/*', + 'Accept-Encoding': 'gzip, deflate, br', + 'Connection': 'keep-alive', + 'Content-Type': 'application/json', }, - body:{ - "ids": [id] + body: { + "ids": id } ); diff --git a/lib/services/http/http_cliente.dart b/lib/services/http/http_cliente.dart index d1413cc..e50215a 100644 --- a/lib/services/http/http_cliente.dart +++ b/lib/services/http/http_cliente.dart @@ -80,8 +80,9 @@ class HttpCli { } - Future post({required String url, Map? headers, - Map? body, bool decoder = true, bool isbyte = false, int timeout = 55}) async { + Future post({Uri? uri, String? url, Map? headers, + Map? body, bool decoder = true, + bool isbyte = false, int timeout = 55}) async { if(!connectionStatus.hasConnection){ return MyHttpResponse( @@ -93,7 +94,7 @@ class HttpCli { try { final http.Response response = await http.post( - Uri.parse(url), + uri ?? Uri.parse(url ?? ''), headers: headers ?? { 'Content-Type': 'application/json; charset=UTF-8', 'charset': 'UTF-8', From a3bbb2efa4f354c75a39a03389fa49589420b1e9 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Thu, 8 Aug 2024 12:03:54 -0300 Subject: [PATCH 11/73] ajuste no listar holerite --- lib/config.dart | 2 +- lib/services/holerite/holerite.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/config.dart b/lib/config.dart index a026559..e9a6b3f 100644 --- a/lib/config.dart +++ b/lib/config.dart @@ -68,7 +68,7 @@ class Config extends ChangeNotifier { final prefs = await SharedPreferences.getInstance(); primeiroAcesso = prefs.getBool("priacesso") ?? true; darkTemas = prefs.getBool("darkTemas") ?? false; - if(!kIsWeb){ + if(Platform.isAndroid){ documentos = await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOCUMENTS); if(documentos == ''){ documentos = await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOWNLOADS); diff --git a/lib/services/holerite/holerite.dart b/lib/services/holerite/holerite.dart index 9472e92..fd72b88 100644 --- a/lib/services/holerite/holerite.dart +++ b/lib/services/holerite/holerite.dart @@ -20,7 +20,7 @@ class HoleriteService { final HttpCli _http = HttpCli(); Future listHolerite(int page, int pageSize) async { - String _api = "/holerites?sort=desc&pagination[page]=$page&pagination[pageSize]=${pageSize == 0 ? 25 : pageSize}&filters[employee]=${UserHoleriteManager.funcSelect?.id}"; + String _api = "/holerites/by-employee/${UserHoleriteManager.funcSelect?.id}"; final MyHttpResponse response = await _http.get( url: Config.conf.apiHoleriteEmail! + _api, From 567d32614c549e248837ccc899ee49db89379f9d Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Tue, 13 Aug 2024 19:32:27 -0300 Subject: [PATCH 12/73] ajuste holerite --- .idea/LibraryAppFlutter.iml | 15 + .idea/libraries/Dart_SDK.xml | 42 +-- .idea/libraries/Flutter_Plugins.xml | 87 ++--- .idea/vcs.xml | 5 +- .../ponto/registro_ponto_manager.dart | 5 +- lib/model/holerite/holerite/holerite.dart | 355 +++++++++--------- lib/services/holerite/holerite.dart | 3 +- lib/services/ponto/registro_ponto.dart | 13 +- lib/utils/conversoes.dart | 22 -- pubspec.yaml | 23 +- 10 files changed, 270 insertions(+), 300 deletions(-) diff --git a/.idea/LibraryAppFlutter.iml b/.idea/LibraryAppFlutter.iml index 1a885c7..565d22c 100644 --- a/.idea/LibraryAppFlutter.iml +++ b/.idea/LibraryAppFlutter.iml @@ -39,6 +39,21 @@ + + + + + + + + + + + + + + + diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml index c3b7674..5c5a0b5 100644 --- a/.idea/libraries/Dart_SDK.xml +++ b/.idea/libraries/Dart_SDK.xml @@ -1,27 +1,27 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/libraries/Flutter_Plugins.xml b/.idea/libraries/Flutter_Plugins.xml index 592a2e4..62c263e 100644 --- a/.idea/libraries/Flutter_Plugins.xml +++ b/.idea/libraries/Flutter_Plugins.xml @@ -1,59 +1,54 @@ - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - + + - - - - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 1ee4241..41611c9 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,6 +2,9 @@ - + + + + \ No newline at end of file diff --git a/lib/controllers/ponto/registro_ponto_manager.dart b/lib/controllers/ponto/registro_ponto_manager.dart index 014f3aa..5403cd8 100644 --- a/lib/controllers/ponto/registro_ponto_manager.dart +++ b/lib/controllers/ponto/registro_ponto_manager.dart @@ -18,8 +18,9 @@ class RegistroManger { File? image; int auth = 0; - Future postPontoMarcar(BuildContext context, UsuarioPonto user, double? latitude, double? longitude) async { - bool result = await _service.postPontoMarcar(user, latitude, longitude); + Future postPontoMarcar(BuildContext context, UsuarioPonto user, double? latitude, double? longitude, String? endereco) async { + + bool result = await _service.postPontoMarcar(user, latitude, longitude, endereco); if(result){ CustomAlert.sucess( context: context, diff --git a/lib/model/holerite/holerite/holerite.dart b/lib/model/holerite/holerite/holerite.dart index 5a4091b..cc7a333 100644 --- a/lib/model/holerite/holerite/holerite.dart +++ b/lib/model/holerite/holerite/holerite.dart @@ -4,9 +4,24 @@ import 'package:assecontservices/assecontservices.dart'; import '../../../enums/holerite_tipo.dart'; +class ChartPizza { + final String desc; + final double valor; + + ChartPizza(this.desc, this.valor); +} + +class ChartColum { + final int ind; + final String data; + final double valor; + ChartColum(this.ind, this.data, this.valor); +} + + class HoleriteModel { - List? data; - MetaHolerite? meta; + final List? data; + final MetaHolerite? meta; HoleriteModel({ this.data, @@ -25,8 +40,8 @@ class HoleriteModel { } class DatumHolerite { - int? id; - DatumAttributesHolerite? attributes; + final int? id; + final DatumAttributes? attributes; DatumHolerite({ this.id, @@ -35,7 +50,7 @@ class DatumHolerite { factory DatumHolerite.fromMap(Map json) => DatumHolerite( id: json["id"], - attributes: json["attributes"] == null ? null : DatumAttributesHolerite.fromMap(json["attributes"]), + attributes: json["attributes"] == null ? null : DatumAttributes.fromMap(json["attributes"]), ); Map toMap() => { @@ -53,37 +68,36 @@ class DatumHolerite { } } -class DatumAttributesHolerite { - String? cpf; - String? name; - String? office; - AttributesDataHolerite? data; - DateTime? createdAt; - DateTime? updatedAt; - HoleriteTipo type; - String? month; - String? year; - DateTime? createDate; - String? registration; - String? competence; - String? rg; - String? phone; - int? baseSalary; - String? agencyAccount; - String? email; - String? sindicate; - String? depIr; - String? depSf; - String? ctps; - String? uploadId; - String? importingUser; - String? sheetType; - bool? isSigned; - dynamic signedAt; - EmployeeHolerite? employee; - String? file; - - DatumAttributesHolerite({ +class DatumAttributes { + final String? cpf; + final String? name; + final String? office; + final AttributesData? data; + final DateTime? createdAt; + final DateTime? updatedAt; + final HoleriteTipo type; + final String? month; + final String? year; + final DateTime? createDate; + final String? registration; + final String? competence; + final dynamic rg; + final dynamic phone; + final dynamic baseSalary; + final dynamic agencyAccount; + final dynamic email; + final dynamic sindicate; + final dynamic depIr; + final dynamic depSf; + final dynamic ctps; + final String? uploadId; + final String? importingUser; + final String? sheetType; + final bool? isSigned; + final DateTime? signedAt; + final FileClass? file; + + DatumAttributes({ this.cpf, this.name, this.office, @@ -110,15 +124,14 @@ class DatumAttributesHolerite { this.sheetType, this.isSigned, this.signedAt, - this.employee, this.file, }); - factory DatumAttributesHolerite.fromMap(Map json) => DatumAttributesHolerite( + factory DatumAttributes.fromMap(Map json) => DatumAttributes( cpf: json["cpf"], name: json["name"], office: json["office"], - data: json["data"] == null ? null : AttributesDataHolerite.fromMap(json["data"]), + data: json["data"] == null ? null : AttributesData.fromMap(json["data"]), createdAt: json["createdAt"] == null ? null : DateTime.parse(json["createdAt"]), updatedAt: json["updatedAt"] == null ? null : DateTime.parse(json["updatedAt"]), type: HoleriteTipo.getEnum(int.tryParse(json["type"])), @@ -140,9 +153,8 @@ class DatumAttributesHolerite { importingUser: json["importingUser"], sheetType: json["sheetType"], isSigned: json["isSigned"], - signedAt: json["signedAt"], - employee: json["employee"] == null ? null : EmployeeHolerite.fromMap(json["employee"]), - file: json["file"] == null ? null : json["file"]['data'], + signedAt: json["signedAt"] == null ? null : DateTime.parse(json["signedAt"]), + file: json["file"] == null ? null : FileClass.fromMap(json["file"]), ); Map toMap() => { @@ -171,28 +183,28 @@ class DatumAttributesHolerite { "importingUser": importingUser, "sheetType": sheetType, "isSigned": isSigned, - "signedAt": signedAt, - "employee": employee?.toMap(), + "signedAt": signedAt?.toIso8601String(), + "file": file?.toMap(), }; } -class AttributesDataHolerite { - int? cbo; - String? cpf; - String? reg; - bool? erro; - String? nome; - dynamic chapa; - String? cnpjcpf; - DateTime? admissao; - List? rawLines; - int? setorLocal; - List? errorFields; - dynamic mensagemErro; - FuncionarioResumo? funcionarioResumo; - List? funcionarioEventos; - - AttributesDataHolerite({ +class AttributesData { + final int? cbo; + final String? cpf; + final String? reg; + final bool? erro; + final String? nome; + final dynamic chapa; + final String? cnpjcpf; + final String? admissao; + final List? rawLines; + final int? setorLocal; + final List? errorFields; + final dynamic mensagemErro; + final FuncionarioResumo? funcionarioResumo; + final List? funcionarioEventos; + + AttributesData({ this.cbo, this.cpf, this.reg, @@ -209,7 +221,7 @@ class AttributesDataHolerite { this.funcionarioEventos, }); - factory AttributesDataHolerite.fromMap(Map json) => AttributesDataHolerite( + factory AttributesData.fromMap(Map json) => AttributesData( cbo: json["cbo"], cpf: json["cpf"], reg: json["reg"], @@ -217,7 +229,7 @@ class AttributesDataHolerite { nome: json["nome"], chapa: json["chapa"], cnpjcpf: json["cnpjcpf"], - admissao: json["admissao"] == null ? null : DateTime.parse(json["admissao"]), + admissao: json["admissao"], rawLines: json["rawLines"] == null ? [] : List.from(json["rawLines"]!.map((x) => x)), setorLocal: json["setorLocal"], errorFields: json["errorFields"] == null ? [] : List.from(json["errorFields"]!.map((x) => x)), @@ -245,11 +257,11 @@ class AttributesDataHolerite { } class FuncionarioEvento { - String? codigo; - String? desconto; - String? descricao; - String? referencia; - String? vencimento; + final String? codigo; + final String? desconto; + final String? descricao; + final String? referencia; + final String? vencimento; FuncionarioEvento({ this.codigo, @@ -277,21 +289,21 @@ class FuncionarioEvento { } class FuncionarioResumo { - String? banco; - String? conta; - String? frase; - double? baseIr; - String? funcao; - String? credito; - String? divisao; - double? liquido; - String? mesFgts; - double? baseFgts; - String? competencia; - double? salarioBase; - double? totalDescontos; - double? salContribuicao; - double? totalVencimentos; + final String? banco; + final String? conta; + final String? frase; + final String? baseIr; + final String? funcao; + final String? credito; + final String? divisao; + final double? liquido; + final String? mesFgts; + final String? baseFgts; + final String? competencia; + final double? salarioBase; + final double? totalDescontos; + final double? salContribuicao; + final double? totalVencimentos; FuncionarioResumo({ this.banco, @@ -315,18 +327,18 @@ class FuncionarioResumo { banco: json["banco"], conta: json["conta"], frase: json["frase"], - baseIr: json["baseIR"] == null ? 0 : json["baseIR"].toString().toDouble(), + baseIr: json["baseIR"], funcao: json["funcao"], credito: json["credito"], divisao: json["divisao"], - liquido: json["liquido"] == null ? 0 : json["liquido"].toString().toDouble(), + liquido: double.parse(json["liquido"]?.replaceAll('.', '').replaceAll(',', '.') ?? '0'), mesFgts: json["mesFGTS"], - baseFgts: json["baseFGTS"] == null ? 0 : json["baseFGTS"].toString().toDouble(), + baseFgts: json["baseFGTS"], competencia: json["competencia"], - salarioBase: json["salarioBase"] == null ? 0 : json["salarioBase"].toString().toDouble(), - totalDescontos: json["totalDescontos"] == null ? 0 : json["totalDescontos"].toString().toDouble(), - salContribuicao: json["salContribuicao"] == null ? 0 : json["salContribuicao"].toString().toDouble(), - totalVencimentos: json["totalVencimentos"] == null ? 0 : json["totalVencimentos"].toString().toDouble(), + salarioBase: double.parse(json["salarioBase"]?.replaceAll('.', '').replaceAll(',', '.') ?? '0'), + totalDescontos: double.parse(json["totalDescontos"]?.replaceAll('.', '').replaceAll(',', '.') ?? '0'), + salContribuicao: double.parse(json["salContribuicao"]?.replaceAll('.', '').replaceAll(',', '.') ?? '0'), + totalVencimentos: double.parse(json["totalVencimentos"]?.replaceAll('.', '').replaceAll(',', '.') ?? '0'), ); Map toMap() => { @@ -348,15 +360,15 @@ class FuncionarioResumo { }; } -class EmployeeHolerite { - EmployeeData? data; +class FileClass { + final FileData? data; - EmployeeHolerite({ + FileClass({ this.data, }); - factory EmployeeHolerite.fromMap(Map json) => EmployeeHolerite( - data: json["data"] == null ? null : EmployeeData.fromMap(json["data"]), + factory FileClass.fromMap(Map json) => FileClass( + data: json["data"] == null ? null : FileData.fromMap(json["data"]), ); Map toMap() => { @@ -364,16 +376,16 @@ class EmployeeHolerite { }; } -class EmployeeData { - int? id; - DataAttributes? attributes; +class FileData { + final int? id; + final DataAttributes? attributes; - EmployeeData({ + FileData({ this.id, this.attributes, }); - factory EmployeeData.fromMap(Map json) => EmployeeData( + factory FileData.fromMap(Map json) => FileData( id: json["id"], attributes: json["attributes"] == null ? null : DataAttributes.fromMap(json["attributes"]), ); @@ -385,86 +397,82 @@ class EmployeeData { } class DataAttributes { - String? nome; - String? cpf; - String? phone; - String? email; - int? baseSalary; - String? office; - String? sector; - String? ctps; - String? syndicate; - String? codeBank; - String? accountBank; - String? typeBank; - String? pixKeyBank; - String? agencyBank; - DateTime? createdAt; - DateTime? updatedAt; - String? reg; - bool? isPreRegistered; + final String? name; + final String? alternativeText; + final String? caption; + final dynamic width; + final dynamic height; + final dynamic formats; + final String? hash; + final String? ext; + final String? mime; + final double? size; + final String? url; + final dynamic previewUrl; + final String? provider; + final dynamic providerMetadata; + final String? folderPath; + final DateTime? createdAt; + final DateTime? updatedAt; DataAttributes({ - this.nome, - this.cpf, - this.phone, - this.email, - this.baseSalary, - this.office, - this.sector, - this.ctps, - this.syndicate, - this.codeBank, - this.accountBank, - this.typeBank, - this.pixKeyBank, - this.agencyBank, + this.name, + this.alternativeText, + this.caption, + this.width, + this.height, + this.formats, + this.hash, + this.ext, + this.mime, + this.size, + this.url, + this.previewUrl, + this.provider, + this.providerMetadata, + this.folderPath, this.createdAt, this.updatedAt, - this.reg, - this.isPreRegistered, }); factory DataAttributes.fromMap(Map json) => DataAttributes( - nome: json["nome"], - cpf: json["cpf"], - phone: json["phone"], - email: json["email"], - baseSalary: json["baseSalary"], - office: json["office"], - sector: json["sector"], - ctps: json["ctps"], - syndicate: json["syndicate"], - codeBank: json["codeBank"], - accountBank: json["accountBank"], - typeBank: json["typeBank"], - pixKeyBank: json["pixKeyBank"], - agencyBank: json["agencyBank"], + name: json["name"], + alternativeText: json["alternativeText"], + caption: json["caption"], + width: json["width"], + height: json["height"], + formats: json["formats"], + hash: json["hash"], + ext: json["ext"], + mime: json["mime"], + size: json["size"]?.toDouble(), + url: json["url"], + previewUrl: json["previewUrl"], + provider: json["provider"], + providerMetadata: json["provider_metadata"], + folderPath: json["folderPath"], createdAt: json["createdAt"] == null ? null : DateTime.parse(json["createdAt"]), updatedAt: json["updatedAt"] == null ? null : DateTime.parse(json["updatedAt"]), - reg: json["reg"], - isPreRegistered: json["isPreRegistered"], ); Map toMap() => { - "nome": nome, - "cpf": cpf, - "phone": phone, - "email": email, - "baseSalary": baseSalary, - "office": office, - "sector": sector, - "ctps": ctps, - "syndicate": syndicate, - "codeBank": codeBank, - "accountBank": accountBank, - "typeBank": typeBank, - "pixKeyBank": pixKeyBank, - "agencyBank": agencyBank, + "name": name, + "alternativeText": alternativeText, + "caption": caption, + "width": width, + "height": height, + "formats": formats, + "hash": hash, + "ext": ext, + "mime": mime, + "size": size, + "url": url, + "previewUrl": previewUrl, + "provider": provider, + "provider_metadata": providerMetadata, + "folderPath": folderPath, "createdAt": createdAt?.toIso8601String(), "updatedAt": updatedAt?.toIso8601String(), - "reg": reg, - "isPreRegistered": isPreRegistered, }; } @@ -510,19 +518,4 @@ class PaginationHolerite { "pageCount": pageCount, "total": total, }; -} - - -class ChartPizza { - final String desc; - final double valor; - - ChartPizza(this.desc, this.valor); -} - -class ChartColum { - final int ind; - final String data; - final double valor; - ChartColum(this.ind, this.data, this.valor); } \ No newline at end of file diff --git a/lib/services/holerite/holerite.dart b/lib/services/holerite/holerite.dart index fd72b88..3773e98 100644 --- a/lib/services/holerite/holerite.dart +++ b/lib/services/holerite/holerite.dart @@ -32,7 +32,6 @@ class HoleriteService { try{ if(response.isSucess) { final data = response.data; - print(data); if(data != null) { HoleriteModel? model = HoleriteModel.fromMap(data); return model; @@ -40,7 +39,7 @@ class HoleriteService { } } catch(e) { - debugPrint(e.toString()); + debugPrint('HoleriteService listHolerite $e'); } } diff --git a/lib/services/ponto/registro_ponto.dart b/lib/services/ponto/registro_ponto.dart index 056d8c6..4021345 100644 --- a/lib/services/ponto/registro_ponto.dart +++ b/lib/services/ponto/registro_ponto.dart @@ -1,10 +1,8 @@ import 'dart:async'; -import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import '../../controllers/controllers.dart'; import '../../enums/enums.dart'; import '../../model/model.dart'; import '../../config.dart'; @@ -18,17 +16,10 @@ class RegistroService { final SqlitePontoService _sqlitePonto = SqlitePontoService(); - Future postPontoMarcar(UsuarioPonto user, double? latitude, double? longitude) async { + Future postPontoMarcar(UsuarioPonto user, double? latitude, double? longitude, String? endereco) async { String _api = "/api/marcacao/verificarMarcacoesFuncionario"; - String? endereco; - if(latitude != null && longitude != null){ - try { - endereco = await Conversoes.getEndereco(latitude, longitude); - } catch (e) { - debugPrint('erro endereco $e'); - } - } + DateTime now = DateTime.now(); final MyHttpResponse response = await _http.post( diff --git a/lib/utils/conversoes.dart b/lib/utils/conversoes.dart index 1731826..4a3d0c4 100644 --- a/lib/utils/conversoes.dart +++ b/lib/utils/conversoes.dart @@ -6,19 +6,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_html_to_pdf/flutter_html_to_pdf.dart'; import 'package:path_provider/path_provider.dart'; -import 'package:geocoding/geocoding.dart' as geo; class Conversoes { - Conversoes(){ - setLocale(); - } - Future setLocale() async { - try{ - await geo.GeocodingPlatform.instance?.setLocaleIdentifier('pt_BR'); - }catch(e){} - } static Future htmlToPdf({required String html, String? nome}) async { try{ @@ -54,18 +45,5 @@ class Conversoes { return result; } - - - static Future getEndereco(double? latitude, double? longitude) async { - if(latitude == null || longitude == null) return null; - List placemarks = await geo.placemarkFromCoordinates(latitude, longitude); - if(placemarks.isNotEmpty){ - geo.Placemark place = placemarks.first; - - String endereco = '${place.street}, ${place.subThoroughfare} - ${place.subLocality}, ${place.subAdministrativeArea} - ${place.country}'; - - return endereco; - } - } } diff --git a/pubspec.yaml b/pubspec.yaml index 40684b8..1aa02eb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -20,26 +20,22 @@ dependencies: sqflite: ^2.3.3+1 #^2.0.2 sqflite_common_ffi: ^2.3.3 - sqflite_common_ffi_web: ^0.4.3+1 + sqflite_common_ffi_web: ^0.4.4 responsive_framework: ^1.4.0 ###^0.2.0 - http: ^1.2.1 + http: ^1.2.2 intl: any #^0.18.1 image_picker: ^1.1.2 filesystem_picker: ^4.1.0 #^2.0.2 - local_auth: ^2.2.0 + local_auth: ^2.3.0 photo_view: ^0.15.0 - geocoding: ^3.0.0 - location: ^6.0.2 - - #$google_maps_flutter: ^2.2.5 url_launcher: ^6.3.0 @@ -66,10 +62,10 @@ dependencies: flutter_html_to_pdf: ^0.7.0 #syncfusion_flutter_pdfviewer: ^23.1.39 - syncfusion_flutter_pdfviewer: ^26.1.35 + syncfusion_flutter_pdfviewer: ^26.2.9 - path_provider: ^2.1.3 - shared_preferences: ^2.2.3 + path_provider: ^2.1.4 + shared_preferences: ^2.3.1 external_path: ^1.0.3 cpf_cnpj_validator: ^2.0.0 @@ -81,7 +77,7 @@ dependencies: universal_io: ^2.2.2 universal_html: ^2.2.4 - connectivity_plus: ^6.0.3 + connectivity_plus: ^6.0.5 package_info_plus: any #^3.0.2 #^1.4.2 #device_info_plus: ^9.0.0 @@ -90,7 +86,7 @@ dependencies: url: https://github.com/pretolio/safe_device.git ref: main - brasil_fields: ^1.14.3 + brasil_fields: ^1.15.0 datetime_picker_formfield_new: ^2.1.0 in_app_review: ^2.0.9 @@ -106,9 +102,8 @@ dependencies: device_preview: ^1.2.0 -dependency_overrides: - #intl: ^0.17.0 +dependency_overrides: dev_dependencies: From f16080906d01a33944c5b60cf50fc8ebda25f391 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Thu, 15 Aug 2024 00:04:38 -0300 Subject: [PATCH 13/73] ajuste no login asseweb --- lib/controllers/asseweb/user_manager.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/controllers/asseweb/user_manager.dart b/lib/controllers/asseweb/user_manager.dart index 250b1c7..ac3fa85 100644 --- a/lib/controllers/asseweb/user_manager.dart +++ b/lib/controllers/asseweb/user_manager.dart @@ -78,7 +78,9 @@ class UserAssewebManager extends ChangeNotifier { Future signInAuth({required String email, required String senha}) async { sUser = await _service.signInAuth(email: email, senha: senha); if (user != null && (user!.login?.companies?.isNotEmpty ?? false)) { - sCompanies = user!.login?.companies?.firstWhere((e) => e.id == user?.login?.lastCompanyId) ?? user!.login?.companies?.first; + sCompanies = user!.login?.companies?.any((e) => e.id == user?.login?.lastCompanyId) ?? false ? + user!.login?.companies?.firstWhere((e) => e.id == user?.login?.lastCompanyId) : + user!.login?.companies?.firstOrNull; } memorizar(); notifyListeners(); From 3b881d8b8f0b0a367c86252e5795090ea6f39f41 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Thu, 15 Aug 2024 17:11:51 -0300 Subject: [PATCH 14/73] ajuste inicializacao do iphone --- lib/assecontservices.dart | 33 ++++++++++++++--------- lib/controllers/update_app_manager.dart | 12 +++++---- lib/services/biometria.dart | 7 ++--- lib/ui/smartphone/intro/intro_screen.dart | 16 ++++++----- 4 files changed, 39 insertions(+), 29 deletions(-) diff --git a/lib/assecontservices.dart b/lib/assecontservices.dart index 89b7c5e..2a195c0 100644 --- a/lib/assecontservices.dart +++ b/lib/assecontservices.dart @@ -73,18 +73,11 @@ class Assecontservices { List _providers = [ - if(ponto) - Provider( - lazy: false, - create: (_)=> DBPonto(), - ), - ChangeNotifierProvider( lazy: false, create: (_)=> Config(), ), ChangeNotifierProvider( - lazy: false, create: (_)=> FormProvider(), ), if(Config.conf.nomeApp != VersaoApp.PontoTablet) @@ -92,9 +85,10 @@ class Assecontservices { lazy: false, create: (_)=> BiometriaManager(), ), + + if(Config.conf.nomeApp != VersaoApp.AssewebApp) ChangeNotifierProvider( - lazy: true, create: (_)=> HoleriteManager(), ), if(Config.conf.nomeApp != VersaoApp.AssewebApp) @@ -105,9 +99,10 @@ class Assecontservices { if(Config.conf.nomeApp == VersaoApp.HoleriteApp) ChangeNotifierProvider( - lazy: true, create: (_)=> SenhaHoleriteManager(), ), + + if(Config.conf.nomeApp == VersaoApp.PontoTablet) ChangeNotifierProvider( lazy: false, @@ -134,6 +129,13 @@ class Assecontservices { lazy: false, create: (_)=> UserPontoManager(), ), + + if(ponto) + Provider( + lazy: false, + create: (_)=> DBPonto(), + ), + if(ponto) ChangeNotifierProvider( create: (_)=> ComprovanteManagger(), @@ -192,15 +194,19 @@ class Assecontservices { ), if(Config.conf.nomeApp == VersaoApp.AssewebApp) Provider( - lazy: false, create: (context) => SenhaAssewebManager(), ), ]; if(providers != null){ - _providers.addAll(providers); + try{ + _providers.addAll(providers); + }catch(e){ + + } } + print('init app'); runApp( MultiProvider( providers: _providers, @@ -216,14 +222,14 @@ class Assecontservices { class MyApp extends StatelessWidget { final String? titulo; - final RouteFactory? rotas; + final RouteFactory rotas; const MyApp({super.key, required this.titulo, required this.rotas}); @override Widget build(BuildContext context) { return MaterialApp( - title: titulo ?? '', + title: titulo ?? 'Assecont', debugShowCheckedModeBanner: false, theme: context.watch().darkTemas ? ThemeData.dark(useMaterial3: true).copyWith( @@ -261,6 +267,7 @@ class MyApp extends StatelessWidget { ), builder: (context, child) { final MediaQueryData data = MediaQuery.of(context); + print('builder MediaQueryData'); return MediaQuery( data: data.copyWith(textScaler: const TextScaler.linear(1.0)), child: ResponsiveBreakpoints.builder( diff --git a/lib/controllers/update_app_manager.dart b/lib/controllers/update_app_manager.dart index bec54f4..7d89d86 100644 --- a/lib/controllers/update_app_manager.dart +++ b/lib/controllers/update_app_manager.dart @@ -12,7 +12,7 @@ import '../config.dart'; class UpdateAppManager { - UpdateAppService _service = UpdateAppService(); + final UpdateAppService _service = UpdateAppService(); checkVersion(BuildContext context) async { if(kIsWeb){ @@ -21,14 +21,16 @@ class UpdateAppManager { try{ if(Config.isWin) throw 'executando no windowns'; - if(kReleaseMode && ((Config.isIOS && Config.isJailBroken) || (!Config.isIOS && !Config.isRealDevice))){ + if(kReleaseMode && ( (!Config.isIOS && !Config.isRealDevice))){ CustomAlert.custom( context: context, titulo: 'Atenção!', corpo: CustomText.text('Não é possivel executar este app neste dispositivo!', maxLines: 2, softWrap: true, textAlign: TextAlign.center,), txtBotaoSucess: 'OK', - funcSucess: _funcExit() + funcSucess: (){ + _funcExit(); + } ); }else{ final bool appStatus = await _service.postUpdateApp(); @@ -55,14 +57,14 @@ class UpdateAppManager { } ); }else{ - Future.delayed(Duration(seconds: 2), (){ + Future.delayed(const Duration(seconds: 2), (){ Navigator.pushNamedAndRemoveUntil(context, '/login', (route) => false); }); } } } catch(e){ debugPrint(e.toString()); - Future.delayed(Duration(seconds: 2), (){ + Future.delayed(const Duration(seconds: 2), (){ Navigator.pushNamedAndRemoveUntil(context, '/login', (route) => false); }); } diff --git a/lib/services/biometria.dart b/lib/services/biometria.dart index d97472c..d6212e4 100644 --- a/lib/services/biometria.dart +++ b/lib/services/biometria.dart @@ -32,16 +32,13 @@ class BiometriaServices { debugPrint('Tem biometria cadastrada: $canCheckBiometrics'); if (canCheckBiometrics) { List availableBiometrics = await localAuth.getAvailableBiometrics(); - debugPrint('Lista de biometria cadastrada: $availableBiometrics.isNotEmpty'); - if (availableBiometrics.isNotEmpty) { - return true; - } + debugPrint('Lista de biometria cadastrada: ${availableBiometrics.isNotEmpty}'); + return availableBiometrics.isNotEmpty; } } catch (e) { debugPrint(e.toString()); } } - return false; } diff --git a/lib/ui/smartphone/intro/intro_screen.dart b/lib/ui/smartphone/intro/intro_screen.dart index 102a901..2c06173 100644 --- a/lib/ui/smartphone/intro/intro_screen.dart +++ b/lib/ui/smartphone/intro/intro_screen.dart @@ -18,9 +18,14 @@ class _IntroScreenState extends State { @override void initState() { super.initState(); - Future.delayed(Duration(milliseconds: 800), (){ + Future.delayed(const Duration(milliseconds: 900), (){ if(mounted){ - UpdateAppManager().checkVersion(context); + final UpdateAppManager service = UpdateAppManager(); + try { + service.checkVersion(context); + } catch (e) { + // TODO + } } }); } @@ -29,8 +34,7 @@ class _IntroScreenState extends State { Widget build(BuildContext context) { return Container( alignment: Alignment.center, - - decoration: BoxDecoration( + decoration: const BoxDecoration( gradient: LinearGradient( begin: Alignment.topRight, end: Alignment.bottomLeft, @@ -38,7 +42,7 @@ class _IntroScreenState extends State { ) ), child: Container( - constraints: BoxConstraints(maxWidth: 500), + constraints: const BoxConstraints(maxWidth: 500), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -47,7 +51,7 @@ class _IntroScreenState extends State { child: Image.asset('assets/imagens/LOGO_ASSECONT.png', fit: BoxFit.fitWidth, package: 'assecontservices'), ), - Container( + const SizedBox( width: 50, child: LinearProgressIndicator(minHeight: 10, backgroundColor: Colors.transparent,) ) From 38b95d04c76322c6b49192cbf5cef188d81fbd63 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Thu, 5 Sep 2024 15:17:29 -0300 Subject: [PATCH 15/73] ajuste no holerite e melhoria nos widgets padrao --- lib/assecontservices.dart | 3 - lib/common/custom_textformfield.dart | 517 +++++++++--------- .../holerite/holerite_manager.dart | 15 +- lib/services/holerite/funcionarios.dart | 12 +- lib/services/holerite/holerite.dart | 5 - lib/ui/smartphone/config/config_screen.dart | 3 +- .../smartphone/holerite/holerite_screen.dart | 7 +- .../smartphone/tela_base/custom_scaffold.dart | 424 ++++++++------ lib/utils/camera.dart | 11 +- pubspec.yaml | 10 +- 10 files changed, 540 insertions(+), 467 deletions(-) diff --git a/lib/assecontservices.dart b/lib/assecontservices.dart index 2a195c0..e64eafe 100644 --- a/lib/assecontservices.dart +++ b/lib/assecontservices.dart @@ -77,9 +77,6 @@ class Assecontservices { lazy: false, create: (_)=> Config(), ), - ChangeNotifierProvider( - create: (_)=> FormProvider(), - ), if(Config.conf.nomeApp != VersaoApp.PontoTablet) ChangeNotifierProvider( lazy: false, diff --git a/lib/common/custom_textformfield.dart b/lib/common/custom_textformfield.dart index 593f902..3c06475 100644 --- a/lib/common/custom_textformfield.dart +++ b/lib/common/custom_textformfield.dart @@ -35,275 +35,278 @@ class CustomTextFormField { Color? txtColor = Colors.white, FocusNode? focusNode, }) { - return Consumer( - builder: (context, form, __) { - return SizedBox( - width: width, - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: textAlign - ? CrossAxisAlignment.center - : CrossAxisAlignment.start, - children: [ - if (title != null) - Padding( - padding: const EdgeInsets.only(left: 5, top: 5, bottom: 5), - child: Text( - title, - style: TextStyle( - color: txtColor, - fontSize: textAlign ? 18 : 14, - fontWeight: FontWeight.w600), + return ChangeNotifierProvider( + create: (_)=> FormProvider(), + child: Consumer( + builder: (context, form, __) { + return SizedBox( + width: width, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: textAlign + ? CrossAxisAlignment.center + : CrossAxisAlignment.start, + children: [ + if (title != null) + Padding( + padding: const EdgeInsets.only(left: 5, top: 5, bottom: 5), + child: Text( + title, + style: TextStyle( + color: txtColor, + fontSize: textAlign ? 18 : 14, + fontWeight: FontWeight.w600), + ), ), - ), - TextFormField( - controller: controller, - style: const TextStyle(fontSize: 12, color: Colors.black), - scrollPadding: EdgeInsets.zero, - focusNode: focusNode, - onSaved: (v) { - if (onDateSaved != null && v != null) { - final date = v.split('/'); - onDateSaved(DateTime(int.parse(date.last), - int.parse(date[1]), int.parse(date.first))); - } - }, - onFieldSubmitted: onFieldSubmitted, - textInputAction: - isNext ? TextInputAction.next : TextInputAction.done, - obscureText: type == FormType.pass, - keyboardType: type == FormType.text || type == FormType.pass - ? TextInputType.text - : type == FormType.email || type == FormType.emailcpf - ? TextInputType.emailAddress - : TextInputType.number, - decoration: InputDecoration( - suffixIcon: icon ?? - (!isClean - ? null - : IconButton( - onPressed: () { - controller?.clear(); - }, - icon: const Icon( - Icons.clear, - color: Config.corPribar, - ))), - fillColor: form.isError ? Colors.red.shade100 : Colors.white, - filled: true, - contentPadding: - const EdgeInsets.symmetric(horizontal: 12, vertical: 0), - enabledBorder: OutlineInputBorder( - borderSide: isBorder - ? BorderSide(color: Colors.grey.shade300) - : BorderSide.none, - borderRadius: BorderRadius.all(Radius.circular(radius)) - ), - border: OutlineInputBorder( - borderSide: isBorder - ? BorderSide(color: Colors.grey.shade300) - : BorderSide.none, - borderRadius: BorderRadius.all(Radius.circular(radius)) - ), - focusedBorder: OutlineInputBorder( - borderSide: isBorder - ? const BorderSide(color: Config.corPribar,) - : BorderSide.none, - borderRadius: BorderRadius.all(Radius.circular(radius)) + TextFormField( + controller: controller, + style: const TextStyle(fontSize: 12, color: Colors.black), + scrollPadding: EdgeInsets.zero, + focusNode: focusNode, + onSaved: (v) { + if (onDateSaved != null && v != null) { + final date = v.split('/'); + onDateSaved(DateTime(int.parse(date.last), + int.parse(date[1]), int.parse(date.first))); + } + }, + onFieldSubmitted: onFieldSubmitted, + textInputAction: + isNext ? TextInputAction.next : TextInputAction.done, + obscureText: type == FormType.pass, + keyboardType: type == FormType.text || type == FormType.pass + ? TextInputType.text + : type == FormType.email || type == FormType.emailcpf + ? TextInputType.emailAddress + : TextInputType.number, + decoration: InputDecoration( + suffixIcon: icon ?? + (!isClean + ? null + : IconButton( + onPressed: () { + controller?.clear(); + }, + icon: const Icon( + Icons.clear, + color: Config.corPribar, + ))), + fillColor: form.isError ? Colors.red.shade100 : Colors.white, + filled: true, + contentPadding: + const EdgeInsets.symmetric(horizontal: 12, vertical: 0), + enabledBorder: OutlineInputBorder( + borderSide: isBorder + ? BorderSide(color: Colors.grey.shade300) + : BorderSide.none, + borderRadius: BorderRadius.all(Radius.circular(radius)) + ), + border: OutlineInputBorder( + borderSide: isBorder + ? BorderSide(color: Colors.grey.shade300) + : BorderSide.none, + borderRadius: BorderRadius.all(Radius.circular(radius)) + ), + focusedBorder: OutlineInputBorder( + borderSide: isBorder + ? const BorderSide(color: Config.corPribar,) + : BorderSide.none, + borderRadius: BorderRadius.all(Radius.circular(radius)) + ), + errorBorder: OutlineInputBorder( + borderSide: BorderSide(color: Colors.redAccent.shade100), + borderRadius: BorderRadius.all(Radius.circular(radius))), + errorStyle: TextStyle( + fontWeight: FontWeight.w500, + fontSize: 11, + color: Colors.redAccent.shade100), + hintText: hintText ?? + (type == FormType.cpf + ? '000.000.000-00' + : type == FormType.rgcpf + ? 'RG/CPF' + : type == FormType.emailcpf + ? 'CPF/Email' + : type == FormType.pass + ? '********' + : type == FormType.phone + ? '(11) 98888-8888' + : type == FormType.email + ? 'email@email.com' + : type == FormType.date + ? 'DD/MM/AAAA' + : type == FormType.cnpj + ? '00.000.000/0001-00' + : type == FormType.cep + ? '00000-000' + : 'Digite ${title ?? 'valor'}'), + hintStyle: const TextStyle(fontSize: 12, color: Colors.grey), ), - errorBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.redAccent.shade100), - borderRadius: BorderRadius.all(Radius.circular(radius))), - errorStyle: TextStyle( - fontWeight: FontWeight.w500, - fontSize: 11, - color: Colors.redAccent.shade100), - hintText: hintText ?? - (type == FormType.cpf - ? '000.000.000-00' - : type == FormType.rgcpf - ? 'RG/CPF' - : type == FormType.emailcpf - ? 'CPF/Email' - : type == FormType.pass - ? '********' - : type == FormType.phone - ? '(11) 98888-8888' - : type == FormType.email - ? 'email@email.com' - : type == FormType.date - ? 'DD/MM/AAAA' - : type == FormType.cnpj - ? '00.000.000/0001-00' - : type == FormType.cep - ? '00000-000' - : 'Digite ${title ?? 'valor'}'), - hintStyle: const TextStyle(fontSize: 12, color: Colors.grey), - ), - inputFormatters: type == FormType.cpf - ? [ - FilteringTextInputFormatter.digitsOnly, - CpfInputFormatter(), - ] - : type == FormType.rgcpf - ? [ - FilteringTextInputFormatter.digitsOnly, - CpfOrRGFormatter(), - ] - : type == FormType.emailcpf + inputFormatters: type == FormType.cpf + ? [ + FilteringTextInputFormatter.digitsOnly, + CpfInputFormatter(), + ] + : type == FormType.rgcpf ? [ - CpfOrEmailFormatter(), + FilteringTextInputFormatter.digitsOnly, + CpfOrRGFormatter(), ] - : type == FormType.cep - ? [ - FilteringTextInputFormatter.digitsOnly, - CepInputFormatter(), - ] - : type == FormType.cnpj - ? [ - FilteringTextInputFormatter.digitsOnly, - CnpjInputFormatter(), - ] - : type == FormType.phone - ? [ - FilteringTextInputFormatter.digitsOnly, - TelefoneInputFormatter(), - ] - : type == FormType.date - ? [ - FilteringTextInputFormatter.digitsOnly, - DataInputFormatter(), - ] - : null, - validator: validator ?? - (type == FormType.emailcpf - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite o seu CPF/Email'; - } else if (!Validacoes.isCPF(v) && !Validacoes.emailValid(v)) { - form.isError = true; - return 'Digite CPF/Email valido'; - } - form.isError = false; - return null; - } : type == FormType.cpf - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite o seu CPF'; - } else if (!Validacoes.isCPF(v)) { - form.isError = true; - return 'Digite CPF valido'; - } - form.isError = false; - return null; - } - : type == FormType.cnpj - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite o seu CNPJ'; - } else if (v.length < 18) { - form.isError = true; - return 'Digite o seu CNPJ'; - } - form.isError = false; - return null; + : type == FormType.emailcpf + ? [ + CpfOrEmailFormatter(), + ] + : type == FormType.cep + ? [ + FilteringTextInputFormatter.digitsOnly, + CepInputFormatter(), + ] + : type == FormType.cnpj + ? [ + FilteringTextInputFormatter.digitsOnly, + CnpjInputFormatter(), + ] + : type == FormType.phone + ? [ + FilteringTextInputFormatter.digitsOnly, + TelefoneInputFormatter(), + ] + : type == FormType.date + ? [ + FilteringTextInputFormatter.digitsOnly, + DataInputFormatter(), + ] + : null, + validator: validator ?? + (type == FormType.emailcpf + ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o seu CPF/Email'; + } else if (!Validacoes.isCPF(v) && !Validacoes.emailValid(v)) { + form.isError = true; + return 'Digite CPF/Email valido'; + } + form.isError = false; + return null; + } : type == FormType.cpf + ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o seu CPF'; + } else if (!Validacoes.isCPF(v)) { + form.isError = true; + return 'Digite CPF valido'; } - : type == FormType.cep - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite o seu CEP'; - } else if (v.length < 10) { - form.isError = true; - return 'Digite o seu CEP'; - } - form.isError = false; - return null; + form.isError = false; + return null; + } + : type == FormType.cnpj + ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o seu CNPJ'; + } else if (v.length < 18) { + form.isError = true; + return 'Digite o seu CNPJ'; } - : type == FormType.rgcpf - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite o seu documento'; - } else if (v.length == 13) { - form.isError = true; - return 'Digite o seu CPF'; - } else if (v.length < 12) { - form.isError = true; - return 'Digite o seu RG/CPF'; - } - form.isError = false; - return null; + form.isError = false; + return null; + } + : type == FormType.cep + ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o seu CEP'; + } else if (v.length < 10) { + form.isError = true; + return 'Digite o seu CEP'; } - : type == FormType.phone - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite o seu telefone'; - } else if (v.length < 14) { - form.isError = true; - return 'Digite o seu telefone'; - } - form.isError = false; - return null; + form.isError = false; + return null; + } + : type == FormType.rgcpf + ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o seu documento'; + } else if (v.length == 13) { + form.isError = true; + return 'Digite o seu CPF'; + } else if (v.length < 12) { + form.isError = true; + return 'Digite o seu RG/CPF'; } - : type == FormType.email - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite seu email novo'; - } else if (!Validacoes - .emailValid(v)) { - form.isError = true; - return 'Digite email valido!'; - } - form.isError = false; - return null; + form.isError = false; + return null; + } + : type == FormType.phone + ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o seu telefone'; + } else if (v.length < 14) { + form.isError = true; + return 'Digite o seu telefone'; } - : type == FormType.pass - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite sua senha'; - }else if (v.length < 6) { - form.isError = true; - return 'Senha deve conter no minimo 6 caracteres'; - } - form.isError = false; - return null; + form.isError = false; + return null; + } + : type == FormType.email + ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite seu email novo'; + } else if (!Validacoes + .emailValid(v)) { + form.isError = true; + return 'Digite email valido!'; } - : type == FormType.date - ? (v) { - if (v == null || - v == '' || - v.length != 10) { - form.isError = true; - return 'Digite a data'; - } else if (!Validacoes - .isDate(v)) { - form.isError = true; - return 'Digite uma data valida'; - } - form.isError = false; - return null; + form.isError = false; + return null; + } + : type == FormType.pass + ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite sua senha'; + }else if (v.length < 6) { + form.isError = true; + return 'Senha deve conter no minimo 6 caracteres'; } - : (v) { - if (v == null || - v == '') { - form.isError = true; - return 'Digite o $title'; + form.isError = false; + return null; + } + : type == FormType.date + ? (v) { + if (v == null || + v == '' || + v.length != 10) { + form.isError = true; + return 'Digite a data'; + } else if (!Validacoes + .isDate(v)) { + form.isError = true; + return 'Digite uma data valida'; + } + form.isError = false; + return null; } - form.isError = false; - return null; - }), - ), - ], - ), - ); - }); + : (v) { + if (v == null || + v == '') { + form.isError = true; + return 'Digite o $title'; + } + form.isError = false; + return null; + }), + ), + ], + ), + ); + }), + ); } static Widget date( diff --git a/lib/controllers/holerite/holerite_manager.dart b/lib/controllers/holerite/holerite_manager.dart index 928e722..d51f7f8 100644 --- a/lib/controllers/holerite/holerite_manager.dart +++ b/lib/controllers/holerite/holerite_manager.dart @@ -40,7 +40,8 @@ class HoleriteManager extends ChangeNotifier { } } - Future init() async { + Future init({bool update = false}) async { + if(listHolerites.isNotEmpty && !update) return; _page = 0; _pageSize = 3; _load = true; @@ -67,6 +68,18 @@ class HoleriteManager extends ChangeNotifier { if(isLoad) load = true; final result = await _service.listHolerite(_page, _pageSize); holerites = result; + holerites!.data?.sort((a, b) { + try { + if (a.attributes!.year != b.attributes!.year) { + return b.attributes!.year!.compareTo(a.attributes!.year!); + } else { + return b.attributes!.month!.compareTo(a.attributes!.month!); + } + } catch (e) { + return 999; + } + }); + load = false; notifyListeners(); } diff --git a/lib/services/holerite/funcionarios.dart b/lib/services/holerite/funcionarios.dart index b03cbe2..26b7975 100644 --- a/lib/services/holerite/funcionarios.dart +++ b/lib/services/holerite/funcionarios.dart @@ -1,27 +1,19 @@ -import 'dart:convert'; -import 'dart:typed_data'; +import 'package:assecontservices/assecontservices.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'dart:async'; -import 'package:flutter_html_to_pdf/flutter_html_to_pdf.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:universal_io/io.dart'; - - import '../../controllers/holerite/user_manager.dart'; -import '../../enums/versao_app.dart'; import '../../model/holerite/usuario/funcionarios.dart'; import '../http/http.dart'; -import '../../model/model.dart'; import '../../config.dart'; class FuncionariosHoleriteService { final HttpCli _http = HttpCli(); Future> listFuncionarios() async { - final String _api = "/employees?pagination[limit]=50&filters[cpf]=${UserHoleriteManager.user?.user?.cpf}"; + final String _api = "/employees?pagination[limit]=50&filters[cpf]=${Validacoes.numeric(UserHoleriteManager.user?.user?.cpf)}"; final MyHttpResponse response = await _http.get( url: Config.conf.apiHoleriteEmail! + _api, diff --git a/lib/services/holerite/holerite.dart b/lib/services/holerite/holerite.dart index 3773e98..c6b48bb 100644 --- a/lib/services/holerite/holerite.dart +++ b/lib/services/holerite/holerite.dart @@ -5,13 +5,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'dart:async'; -import 'package:flutter_html_to_pdf/flutter_html_to_pdf.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:universal_io/io.dart'; - import '../../controllers/holerite/user_manager.dart'; -import '../../enums/versao_app.dart'; import '../http/http.dart'; import '../../model/model.dart'; import '../../config.dart'; diff --git a/lib/ui/smartphone/config/config_screen.dart b/lib/ui/smartphone/config/config_screen.dart index 703af93..9b2f448 100644 --- a/lib/ui/smartphone/config/config_screen.dart +++ b/lib/ui/smartphone/config/config_screen.dart @@ -20,8 +20,7 @@ class _ScreenConfigState extends State { Widget build(BuildContext context) { bool color = context.watch().darkTemas; - return CustomScaffold.custom( - context: context, + return HomeIoWidget( height: 30, conf: true, appTitle: 'Configurações', body: Column( diff --git a/lib/ui/smartphone/holerite/holerite_screen.dart b/lib/ui/smartphone/holerite/holerite_screen.dart index 888825a..8e93e93 100644 --- a/lib/ui/smartphone/holerite/holerite_screen.dart +++ b/lib/ui/smartphone/holerite/holerite_screen.dart @@ -35,20 +35,19 @@ class _HoleriteScreenState extends State { return Consumer( builder: (_, holerite, __){ - return CustomScaffold.custom( + return HomeIoWidget( key: _scaffoldKey, - context: context, height: 30, appTitle: 'Meus Holerites', body: Column( children: [ - FilterWidget( + /*FilterWidget( onFiltro: (filtro ) { holerite.pageSize = filtro; }, filtro: holerite.pageSize, padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), - ), + ),*/ Container( child: !connectionStatus.hasConnection ? Center(child: CustomText.text('Verifique sua Conexão com Internet')) : diff --git a/lib/ui/smartphone/tela_base/custom_scaffold.dart b/lib/ui/smartphone/tela_base/custom_scaffold.dart index 832e3b7..cb21931 100644 --- a/lib/ui/smartphone/tela_base/custom_scaffold.dart +++ b/lib/ui/smartphone/tela_base/custom_scaffold.dart @@ -15,24 +15,43 @@ import 'custom_menu_item.dart'; import 'drawer_web.dart'; +class HomeWidget extends StatelessWidget { + const HomeWidget({super.key, this.keyListMenu, required this.listMenu, + this.height, required this.body, this.foto, this.dados, this.keyMenu, this.buttom, + this.key1, this.key2, this.key3, this.key4, this.key5, required this.appTitle, + this.nome, this.cargo, this.onAlter, this.isListView = true, this.onFoto = true}); -class CustomScaffold { - - static home({GlobalKey? keyListMenu, required List listMenu, double? height, Widget? buttom, - required BuildContext context,required Widget body, bool isListView = true, String? foto, Widget? dados, - GlobalKey? keyMenu, GlobalKey? key1, GlobalKey? key2, GlobalKey? key3, GlobalKey? key4, GlobalKey? key5, - required String appTitle,String? nome, String? cargo, bool onFoto = true, Function()? onAlter}){ + final GlobalKey? keyListMenu; + final List listMenu; + final double? height; + final Widget? buttom; + final Widget body; + final bool isListView; + final String? foto; + final Widget? dados; + final GlobalKey? keyMenu; + final GlobalKey? key1; + final GlobalKey? key2; + final GlobalKey? key3; + final GlobalKey? key4; + final GlobalKey? key5; + final String appTitle; + final String? nome; + final String? cargo; + final bool onFoto; + final Function()? onAlter; + @override + Widget build(BuildContext context) { double h = 180 + MediaQuery.of(context).padding.top; - return kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone - ? homeWeb( - context: context, + return kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? HomeWebWidget( body: body, nome:nome , cargo:cargo , buttom: buttom, - listMenus: listMenu, onAlter: onAlter, foto: onFoto ? Hero( @@ -42,7 +61,7 @@ class CustomScaffold { await Navigator.push(context, MaterialPageRoute( builder: (context) => ImageHero( - foto == null ? null : base64Decode(foto) + foto == null ? null : base64Decode(foto!) )) ); //setState(() {}); @@ -61,7 +80,7 @@ class CustomScaffold { color: Config.corPri, image: foto != null ? DecorationImage( - image: MemoryImage(base64Decode(foto)), + image: MemoryImage(base64Decode(foto!)), fit: BoxFit.cover) : null), child: foto == null ? const Icon( @@ -74,8 +93,7 @@ class CustomScaffold { ) : null, dados: dados, appTitle: appTitle - - ) : custom( + ) : HomeIoWidget( key: Config.scaffoldKey, body: body, height: height ?? h, @@ -122,8 +140,8 @@ class CustomScaffold { crossAxisAlignment: CrossAxisAlignment.center, children: [ CustomText.text(nome, - style: const TextStyle(fontSize: 20, color: Colors.white), - textAlign: TextAlign.center,), + style: const TextStyle(fontSize: 20, color: Colors.white), + textAlign: TextAlign.center,), CustomText.text(cargo, style: const TextStyle(fontSize: 14, color: Colors.white), textAlign: TextAlign.center), @@ -132,52 +150,51 @@ class CustomScaffold { ), ), if(onFoto) - Padding( - padding: const EdgeInsets.all(5.0), - child: Hero( - tag: "foto", - child: GestureDetector( - onTap: () async { - await Navigator.push(context, - MaterialPageRoute( - builder: (context) => ImageHero( - foto == null ? null : base64Decode(foto) - )) - ); - //setState(() {}); - }, - child: Container( - alignment: Alignment.topCenter, - height: 100, - width: 100, - decoration: BoxDecoration( - border: foto != null - ? Border.all( - color: Config.corPri, width: 2) - : Border.all( - color: Colors.white, width: 5), - borderRadius: BorderRadius.circular(100), - color: Config.corPri, - image: foto != null - ? DecorationImage( - image: MemoryImage(base64Decode(foto)), - fit: BoxFit.cover) - : null), - child: foto == null ? const Icon( - CupertinoIcons.person, - color: Colors.white, - size: 90, - ) : null, + Padding( + padding: const EdgeInsets.all(5.0), + child: Hero( + tag: "foto", + child: GestureDetector( + onTap: () async { + await Navigator.push(context, + MaterialPageRoute( + builder: (context) => ImageHero( + foto == null ? null : base64Decode(foto!) + )) + ); + //setState(() {}); + }, + child: Container( + alignment: Alignment.topCenter, + height: 100, + width: 100, + decoration: BoxDecoration( + border: foto != null + ? Border.all( + color: Config.corPri, width: 2) + : Border.all( + color: Colors.white, width: 5), + borderRadius: BorderRadius.circular(100), + color: Config.corPri, + image: foto != null + ? DecorationImage( + image: MemoryImage(base64Decode(foto!)), + fit: BoxFit.cover) + : null), + child: foto == null ? const Icon( + CupertinoIcons.person, + color: Colors.white, + size: 90, + ) : null, + ), ), ), ), - ), ], ), ], ), ), - context: context, buttom: buttom, home: true , expanAppbar: Container( @@ -186,51 +203,80 @@ class CustomScaffold { height: 120, alignment: Alignment.center, child: isListView ? - ListView( - scrollDirection: Axis.horizontal, - padding: const EdgeInsets.symmetric(horizontal: 10), - children: listMenu, - ) : - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: listMenu, - ), + ListView( + scrollDirection: Axis.horizontal, + padding: const EdgeInsets.symmetric(horizontal: 10), + children: listMenu, + ) : + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: listMenu, + ), ), ); } +} + + +class HomeCalendarioWidget extends StatefulWidget { + const HomeCalendarioWidget({super.key, this.globalKey, required this.funcData, + required this.controller, required this.body, required this.listdecoration, + required this.appTitle, this.buttom, this.dataInit, this.dataMin, this.dataMax}); - static calendario({GlobalKey? key, required Function(DateTime) funcData, - required CalendarWeekController controller, required Widget body, - required List listdecoration, required String appTitle, Widget? buttom, - required BuildContext context, DateTime? dataInit, DateTime? dataMin, DateTime? dataMax}){ + final GlobalKey? globalKey; + final Function(DateTime) funcData; + final CalendarWeekController controller; + final Widget body; + final List listdecoration; + final String appTitle; + final Widget? buttom; + final DateTime? dataInit; + final DateTime? dataMin; + final DateTime? dataMax; - if(dataInit != null){ - controller.jumpToDate(dataInit); + @override + State createState() => _HomeCalendarioWidgetState(); +} + +class _HomeCalendarioWidgetState extends State { + + @override + void initState() { + if(widget.dataInit != null){ + widget.controller.jumpToDate(widget.dataInit!); } + super.initState(); + } - return custom( - key: key, - body: body, - appTitle: appTitle, + @override + Widget build(BuildContext context) { + return HomeIoWidget( + key: widget.globalKey, + body: widget.body, + appTitle: widget.appTitle, height: 110, - buttom: buttom, + buttom: widget.buttom, appbar: CalendarWeek( - controller: controller, + controller: widget.controller, height: 100, showMonth: true, - activeIcon: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone, - backgroundColor: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone + activeIcon: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone, + backgroundColor: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone ? Config.corPribar : Colors.transparent, - minDate: dataMin ?? DateTime(2020), - maxDate: dataMax ?? DateTime(DateTime.now().year + 1), - dateStyle: TextStyle(color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? Config.corPri : Colors.white,), + minDate: widget.dataMin ?? DateTime(2020), + maxDate: widget.dataMax ?? DateTime(DateTime.now().year + 1), + dateStyle: TextStyle(color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone ? Config.corPri : Colors.white,), dayOfWeekStyle: const TextStyle(color: Config.corPri), - todayDateStyle: TextStyle(color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? Config.corPri : Colors.white,), + todayDateStyle: TextStyle(color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone ? Config.corPri : Colors.white,), monthStyle: const TextStyle(color: Colors.white), pressedDateBackgroundColor: Colors.white30, pressedDateStyle: const TextStyle(color: Colors.white), weekendsStyle: const TextStyle(color: Config.corPri), - onDatePressed: funcData, + onDatePressed: widget.funcData, dayOfWeek: const [ "Seg", "Tec", @@ -254,70 +300,99 @@ class CustomScaffold { "Novembro", "Dezembro" ], - decorations: listdecoration + decorations: widget.listdecoration ), - context: context, ); } +} + - static custom({GlobalKey? key, required BuildContext context, - required double height, bool conf = false, Function()? onAlter, - Widget? appbar, required Widget body, bool home = false, - Widget? expanAppbar, String? appTitle, Widget? buttom}){ +class HomeIoWidget extends StatelessWidget { + const HomeIoWidget({super.key, this.globalKey, required this.height, + this.onAlter, this.appbar, required this.body, this.expanAppbar, + this.appTitle, this.buttom, this.conf = false, this.home = false}); + final GlobalKey? globalKey; + final double height; + final bool conf; + final Function()? onAlter; + final Widget? appbar; + final Widget body; + final bool home; + final Widget? expanAppbar; + final String? appTitle; + final Widget? buttom; + + + @override + Widget build(BuildContext context) { return Scaffold( - key: key, - appBar: appTitle == null || kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone && appTitle != 'Configurações' ? null : AppBar( - title: CustomText.text(appTitle, style: const TextStyle(fontSize: 16), textAlign: TextAlign.center), - centerTitle: true, - actions: [ - actions(context, aponta: home, config: conf, onAlter: onAlter), - ], - ), - body: SizedBox( - height: MediaQuery.of(context).size.height, - width: double.infinity, - child: Column( - children: [ - Stack( - children: [ - Container( - height: height, - width: MediaQuery.of(context).size.width, - decoration: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? null : BoxDecoration( - color: context.watch().darkTemas ? - Theme.of(context).appBarTheme.backgroundColor : Config.corPribar, - borderRadius: const BorderRadius.only( - bottomRight: Radius.circular(45), - bottomLeft: Radius.circular(45), - ) - ), - child: appbar - ), - if(expanAppbar != null) - expanAppbar - ], - ), - Expanded( - child: body - ), - ], - ) - ), - floatingActionButtonLocation: buttom == null ? null : FloatingActionButtonLocation.centerFloat, - floatingActionButton: buttom + key: globalKey, + appBar: appTitle == null || kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone && appTitle != 'Configurações' ? null : AppBar( + title: CustomText.text(appTitle, style: const TextStyle(fontSize: 16), textAlign: TextAlign.center), + centerTitle: true, + actions: [ + actions(context, aponta: home, config: conf, onAlter: onAlter), + ], + ), + body: SizedBox( + height: MediaQuery.of(context).size.height, + width: double.infinity, + child: Column( + children: [ + Stack( + children: [ + Container( + height: height, + width: MediaQuery.of(context).size.width, + decoration: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone ? null + : BoxDecoration( + color: context.watch().darkTemas ? + Theme.of(context).appBarTheme.backgroundColor : Config.corPribar, + borderRadius: const BorderRadius.only( + bottomRight: Radius.circular(45), + bottomLeft: Radius.circular(45), + ) + ), + child: appbar + ), + if(expanAppbar != null) + expanAppbar! + ], + ), + Expanded( + child: body + ), + ], + ) + ), + floatingActionButtonLocation: buttom == null ? null : FloatingActionButtonLocation.centerFloat, + floatingActionButton: buttom ); } +} - - static homeWeb({GlobalKey? key, required BuildContext context, Widget? buttom, - required Widget body, required List listMenus, Widget? foto, Function()? onAlter, - Widget? dados, required String appTitle,required String? nome,required String? cargo, }){ +class HomeWebWidget extends StatelessWidget { + const HomeWebWidget({super.key, this.globalKey, this.buttom, required this.body, this.onAlter, + required this.listMenus, this.foto, this.dados, required this.appTitle, this.nome, this.cargo}); + final GlobalKey? globalKey; + final Widget? buttom; + final Widget body; + final List listMenus; + final Widget? foto; + final Function()? onAlter; + final Widget? dados; + final String appTitle; + final String? nome; + final String? cargo; + @override + Widget build(BuildContext context) { return Scaffold( - key: key, + key: globalKey, body: Row( mainAxisSize: MainAxisSize.max, children: [ @@ -332,54 +407,53 @@ class CustomScaffold { ), Expanded( child: Scaffold( - body: Column( - children: [ - Container( - decoration: BoxDecoration( - color: context.watch().darkTemas - ? Theme.of(context).appBarTheme.backgroundColor : Colors.white, - boxShadow: const [ - BoxShadow( - color: Colors.grey, - offset: Offset(5.5, 0), // Ajuste a sombra vertical aqui - blurRadius: 4, // Ajuste a intensidade da sombra aqui - ), - ], - ), - margin: EdgeInsets.zero, - child: Padding( - padding: const EdgeInsets.only(top: 10, left: 20, right: 10, bottom: 10), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - CustomText.text(nome, - style: const TextStyle(fontSize: 20), textAlign: TextAlign.center), - CustomText.text(cargo, - style: const TextStyle(fontSize: 10), textAlign: TextAlign.center), - ], + body: Column( + children: [ + Container( + decoration: BoxDecoration( + color: context.watch().darkTemas + ? Theme.of(context).appBarTheme.backgroundColor : Colors.white, + boxShadow: const [ + BoxShadow( + color: Colors.grey, + offset: Offset(5.5, 0), // Ajuste a sombra vertical aqui + blurRadius: 4, // Ajuste a intensidade da sombra aqui ), - - actions(context, aponta: true, onAlter: onAlter), ], ), + margin: EdgeInsets.zero, + child: Padding( + padding: const EdgeInsets.only(top: 10, left: 20, right: 10, bottom: 10), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + CustomText.text(nome, + style: const TextStyle(fontSize: 20), textAlign: TextAlign.center), + CustomText.text(cargo, + style: const TextStyle(fontSize: 10), textAlign: TextAlign.center), + ], + ), + + actions(context, aponta: true, onAlter: onAlter), + ], + ), + ), ), - ), - Expanded( - child: body - ), - ], - ), - floatingActionButtonLocation: buttom == null ? null : FloatingActionButtonLocation.centerFloat, - floatingActionButton: buttom + Expanded( + child: body + ), + ], + ), + floatingActionButtonLocation: buttom == null ? null : FloatingActionButtonLocation.centerFloat, + floatingActionButton: buttom ), ), ], ), - ); } -} \ No newline at end of file +} diff --git a/lib/utils/camera.dart b/lib/utils/camera.dart index 66ee96a..1a9bddb 100644 --- a/lib/utils/camera.dart +++ b/lib/utils/camera.dart @@ -17,7 +17,8 @@ class CameraService { await _picker.pickImage( source: ImageSource.camera, preferredCameraDevice: CameraDevice.front, - maxHeight: 600, + imageQuality: 70, + maxHeight: 1080, //imageQuality: 70, ).then((value) async { if(value != null){ @@ -34,7 +35,7 @@ class CameraService { }); return img; }catch (e){ - debugPrint('Erro camera ' + e.toString()); + debugPrint('Erro camera $e'); return null; } } @@ -45,8 +46,8 @@ class CameraService { try{ await _picker.pickImage( source: ImageSource.gallery, - imageQuality: 60, - maxHeight: 600, + imageQuality: 70, + maxHeight: 1080, ).then((value) async { if(value != null){ if(kIsWeb){ @@ -63,7 +64,7 @@ class CameraService { }); return img; }catch (e){ - debugPrint('Erro getGallery ' + e.toString()); + debugPrint('Erro getGallery $e'); return null; } } diff --git a/pubspec.yaml b/pubspec.yaml index 1aa02eb..d10ebad 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -20,9 +20,9 @@ dependencies: sqflite: ^2.3.3+1 #^2.0.2 sqflite_common_ffi: ^2.3.3 - sqflite_common_ffi_web: ^0.4.4 + sqflite_common_ffi_web: ^0.4.5+2 - responsive_framework: ^1.4.0 + responsive_framework: ^1.5.1 ###^0.2.0 http: ^1.2.2 @@ -62,11 +62,11 @@ dependencies: flutter_html_to_pdf: ^0.7.0 #syncfusion_flutter_pdfviewer: ^23.1.39 - syncfusion_flutter_pdfviewer: ^26.2.9 + syncfusion_flutter_pdfviewer: ^26.2.13 path_provider: ^2.1.4 - shared_preferences: ^2.3.1 - external_path: ^1.0.3 + shared_preferences: ^2.3.2 + external_path: ^2.0.1 cpf_cnpj_validator: ^2.0.0 From 17956dd07577d9b5775feb8e1cb0e58e45a15dff Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Mon, 9 Sep 2024 11:50:07 -0300 Subject: [PATCH 16/73] ajuste da lib pdf --- lib/services/ponto/comprovante.dart | 5 +---- lib/utils/conversoes.dart | 24 ++++++++++++++++++++++-- lib/utils/get_file.dart | 16 ++++++---------- pubspec.yaml | 3 ++- 4 files changed, 31 insertions(+), 17 deletions(-) diff --git a/lib/services/ponto/comprovante.dart b/lib/services/ponto/comprovante.dart index e99f7b9..4158ecf 100644 --- a/lib/services/ponto/comprovante.dart +++ b/lib/services/ponto/comprovante.dart @@ -1,18 +1,15 @@ import 'dart:convert'; -import 'package:universal_io/io.dart'; import 'dart:async'; import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:flutter_html_to_pdf/flutter_html_to_pdf.dart'; + import '../../model/model.dart'; import '../../config.dart'; -import '../../utils/get_file.dart'; import '../http/http.dart'; diff --git a/lib/utils/conversoes.dart b/lib/utils/conversoes.dart index 4a3d0c4..3865e04 100644 --- a/lib/utils/conversoes.dart +++ b/lib/utils/conversoes.dart @@ -4,7 +4,7 @@ import 'dart:async'; import 'package:universal_io/io.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_html_to_pdf/flutter_html_to_pdf.dart'; +import 'package:flutter_html_to_pdf_plus/flutter_html_to_pdf_plus.dart'; import 'package:path_provider/path_provider.dart'; @@ -23,7 +23,9 @@ class Conversoes { Directory tempDir = await getTemporaryDirectory(); String savedPath = nome ?? ("contrato - ${DateTime.now().microsecondsSinceEpoch}"); File? file = await FlutterHtmlToPdf.convertFromHtmlContent( - htmlContent, tempDir.path, savedPath + content: htmlContent, configuration: PrintPdfConfiguration( + targetDirectory: tempDir.path, targetName: savedPath + ) ); return file; @@ -33,6 +35,24 @@ class Conversoes { } + static Future fileHtmlToPdf({required File html, String? nome}) async { + try{ + Directory tempDir = await getTemporaryDirectory(); + String savedPath = nome ?? DateTime.now().microsecondsSinceEpoch.toString(); + + File? file = await FlutterHtmlToPdf.convertFromHtmlFile( + htmlFile: html, configuration: PrintPdfConfiguration( + targetDirectory: tempDir.path, targetName: savedPath + ) + ); + + return file; + }catch(e){ + debugPrint(e.toString()); + } + } + + static double redimencionarTamanhos(double? widthOriginal, double? heightOriginal, double tamanhoNovo, bool newWidth){ if(widthOriginal == null || heightOriginal == null) return 0; double result = 0; diff --git a/lib/utils/get_file.dart b/lib/utils/get_file.dart index 0c6e3a5..746a5e8 100644 --- a/lib/utils/get_file.dart +++ b/lib/utils/get_file.dart @@ -5,10 +5,10 @@ import 'package:universal_io/io.dart'; import 'dart:typed_data'; import 'package:universal_html/html.dart' as webFile; -import 'package:flutter_html_to_pdf/flutter_html_to_pdf.dart'; import 'package:path_provider/path_provider.dart'; import '../services/http/http_cliente.dart'; +import 'conversoes.dart'; class CustomFile { @@ -38,7 +38,7 @@ class CustomFile { return file; } - static Future contentHtml(String nomeFile, {String? html}) async { + static Future contentHtml(String nomeFile, {String? html}) async { var htmlContent = ''' @@ -46,19 +46,15 @@ class CustomFile { '''; - Directory tempDir = await getTemporaryDirectory(); - File? file = await FlutterHtmlToPdf.convertFromHtmlContent( - htmlContent, tempDir.path, nomeFile - ); + File? file = await Conversoes.htmlToPdf(html: htmlContent, nome: nomeFile); return file; } - static Future fileHtml( File html,{String? nomeFile,}) async { + static Future fileHtml( File html,{String? nomeFile,}) async { String name = nomeFile ?? DateTime.now().microsecondsSinceEpoch.toString(); - Directory tempDir = await getTemporaryDirectory(); - File? file = await FlutterHtmlToPdf.convertFromHtmlFile( - html, tempDir.path, name + File? file = await Conversoes.fileHtmlToPdf( + html: html, nome: name ); return file; } diff --git a/pubspec.yaml b/pubspec.yaml index d10ebad..9971a00 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -59,7 +59,8 @@ dependencies: ref: main #webcontent_converter: ^0.0.7+1 - flutter_html_to_pdf: ^0.7.0 + #flutter_html_to_pdf: ^0.7.0 + flutter_html_to_pdf_plus: ^0.1.0 #syncfusion_flutter_pdfviewer: ^23.1.39 syncfusion_flutter_pdfviewer: ^26.2.13 From d534baf79550d749cc6353a957bcc400de39038a Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Mon, 9 Sep 2024 12:33:24 -0300 Subject: [PATCH 17/73] Update build.gradle --- android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/build.gradle b/android/build.gradle index 1f94b9d..3928a4c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,7 +2,7 @@ group 'com.assecont.servicos.assecontservices' version '1.0-SNAPSHOT' buildscript { - ext.kotlin_version = '1.8.10' + ext.kotlin_version = '1.9.23' repositories { google() mavenCentral() From d43c6f1bc33d9a3a862c76bf348f4b60b5abc22f Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Mon, 9 Sep 2024 13:39:50 -0300 Subject: [PATCH 18/73] update lib descontinuada --- lib/controllers/update_app_manager.dart | 2 +- pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/controllers/update_app_manager.dart b/lib/controllers/update_app_manager.dart index 7d89d86..82606dd 100644 --- a/lib/controllers/update_app_manager.dart +++ b/lib/controllers/update_app_manager.dart @@ -3,8 +3,8 @@ import 'package:universal_io/io.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:launch_app_store/launch_app_store.dart'; -import 'package:launch_review/launch_review.dart'; import '../common/common.dart'; import '../services/services.dart'; diff --git a/pubspec.yaml b/pubspec.yaml index 9971a00..3f66fc1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -91,7 +91,7 @@ dependencies: datetime_picker_formfield_new: ^2.1.0 in_app_review: ^2.0.9 - launch_review: ^3.0.1 + launch_app_store: ^1.1.2 #store_launcher: ^1.0.1 From 7729a701186c08f832a59a51ee3e142c1ecf087a Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Mon, 9 Sep 2024 14:24:53 -0300 Subject: [PATCH 19/73] Update build.gradle --- android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/build.gradle b/android/build.gradle index 3928a4c..76c7c36 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,7 +2,7 @@ group 'com.assecont.servicos.assecontservices' version '1.0-SNAPSHOT' buildscript { - ext.kotlin_version = '1.9.23' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() From 47bb606a98523ac681d21b2aa3081a04ceba59eb Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Mon, 9 Sep 2024 22:24:31 -0300 Subject: [PATCH 20/73] update lib nao compativel com versoes mais atuais do flutter --- lib/utils/external_share.dart | 2 +- pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/utils/external_share.dart b/lib/utils/external_share.dart index c5386e4..c1333b1 100644 --- a/lib/utils/external_share.dart +++ b/lib/utils/external_share.dart @@ -1,7 +1,7 @@ import 'package:flutter/services.dart'; -import 'package:share_extend/share_extend.dart'; +import 'package:hyj_share_extend/hyj_share_extend.dart'; import '../enums/enums.dart'; diff --git a/pubspec.yaml b/pubspec.yaml index 3f66fc1..463934f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -73,7 +73,7 @@ dependencies: #open_file_safe: ^3.2.3 - share_extend: ^2.0.0 + hyj_share_extend: ^1.0.0 universal_io: ^2.2.2 universal_html: ^2.2.4 From 5548369eb9d52404079f04de18532ede20b759de Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Mon, 9 Sep 2024 22:39:48 -0300 Subject: [PATCH 21/73] ajuste troca de lib para compartilhar arquivos --- lib/common/heros_file.dart | 22 ++++++++++++++-------- lib/utils/external_share.dart | 3 ++- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/lib/common/heros_file.dart b/lib/common/heros_file.dart index 5dc5f55..5eb1cce 100644 --- a/lib/common/heros_file.dart +++ b/lib/common/heros_file.dart @@ -9,12 +9,12 @@ import 'package:flutter/rendering.dart'; import 'package:path_provider/path_provider.dart'; import 'package:responsive_framework/responsive_framework.dart'; -import 'package:share_extend/share_extend.dart'; import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart'; import 'package:universal_io/io.dart'; import 'package:universal_html/html.dart' as html; import '../config.dart'; +import '../utils/external_share.dart'; import '../utils/get_file.dart'; import 'load_screen.dart'; @@ -29,7 +29,7 @@ class FileHero extends StatefulWidget { const FileHero(this.name, {super.key, this.menu, this.file,this.memori, this.html}); @override - _FileHeroState createState() => _FileHeroState(); + State createState() => _FileHeroState(); } class _FileHeroState extends State { @@ -109,18 +109,24 @@ class _FileHeroState extends State { salvarArquivo(widget.memori!, "${widget.name}.pdf"); } }else if(widget.file != null){ - ShareExtend.share(widget.file!.path, "file", - sharePanelTitle: "Enviar PDF", - subject: "${widget.name}.pdf"); + ExternalShare.shareFile( + path: widget.file!.path, + titulo: "Enviar PDF", + nomeFile: "${widget.name}.pdf", + tipo: SheredType.pdf, + ); }else{ carregar(context); Uint8List? rawPath = widget.memori ?? await _capturePng(); Navigator.pop(context); if(rawPath != null){ final file = await CustomFile.fileTemp('pdf', memori: rawPath, nome: widget.name); - ShareExtend.share(file.path, "file", - sharePanelTitle: "Enviar PDF", - subject: "${widget.name}.pdf"); + ExternalShare.shareFile( + path: file.path, + titulo: "Enviar PDF", + nomeFile: "${widget.name}.pdf", + tipo: SheredType.pdf, + ); } } } diff --git a/lib/utils/external_share.dart b/lib/utils/external_share.dart index c1333b1..8a6ee7c 100644 --- a/lib/utils/external_share.dart +++ b/lib/utils/external_share.dart @@ -1,10 +1,11 @@ -import 'package:flutter/services.dart'; import 'package:hyj_share_extend/hyj_share_extend.dart'; import '../enums/enums.dart'; +export '../enums/enums.dart'; + class ExternalShare { static share(String titulo, String texto, String url) async { From 39b70f418f9ca52d8aad12c2bd328a9af9a26271 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Tue, 10 Sep 2024 00:32:50 -0300 Subject: [PATCH 22/73] inclusao de lib external share --- lib/utils/external_share.dart | 2 +- packages/share_extend/.gitattributes | 1 + packages/share_extend/.gitignore | 79 +++ packages/share_extend/CHANGELOG.md | 61 +++ packages/share_extend/LICENSE | 21 + packages/share_extend/README-cn.md | 91 ++++ packages/share_extend/README.md | 94 ++++ packages/share_extend/android/.gitignore | 8 + packages/share_extend/android/build.gradle | 38 ++ .../share_extend/android/gradle.properties | 3 + packages/share_extend/android/settings.gradle | 1 + .../android/src/main/AndroidManifest.xml | 14 + .../zt/shareextend/MethodCallHandlerImpl.java | 36 ++ .../java/com/zt/shareextend/MimeUtils.java | 129 +++++ .../main/java/com/zt/shareextend/Share.java | 125 +++++ .../com/zt/shareextend/ShareExtendPlugin.java | 94 ++++ .../zt/shareextend/ShareExtendProvider.java | 160 ++++++ .../java/com/zt/shareextend/ShareUtils.java | 55 ++ packages/share_extend/example/.gitignore | 71 +++ packages/share_extend/example/.metadata | 8 + packages/share_extend/example/README.md | 8 + .../example/android/app/build.gradle | 61 +++ .../android/app/src/main/AndroidManifest.xml | 59 ++ .../EmbeddingV1Activity.java | 25 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values/styles.xml | 8 + .../share_extend/example/android/build.gradle | 30 ++ .../example/android/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.properties | 6 + .../example/android/settings.gradle | 15 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../example/ios/Flutter/Debug.xcconfig | 2 + .../example/ios/Flutter/Flutter.podspec | 18 + .../example/ios/Flutter/Release.xcconfig | 2 + packages/share_extend/example/ios/Podfile | 41 ++ .../ios/Runner.xcodeproj/project.pbxproj | 507 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/xcschemes/Runner.xcscheme | 91 ++++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../example/ios/Runner/AppDelegate.h | 6 + .../example/ios/Runner/AppDelegate.m | 13 + .../AppIcon.appiconset/Contents.json | 122 +++++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 11112 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 ++ .../ios/Runner/Base.lproj/Main.storyboard | 26 + .../example/ios/Runner/Info.plist | 49 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + .../share_extend/example/ios/Runner/main.m | 9 + packages/share_extend/example/lib/main.dart | 123 +++++ packages/share_extend/example/pubspec.yaml | 79 +++ .../example/test/widget_test.dart | 25 + packages/share_extend/ios/.gitignore | 36 ++ packages/share_extend/ios/Assets/.gitkeep | 0 .../ios/Classes/ShareExtendPlugin.h | 4 + .../ios/Classes/ShareExtendPlugin.m | 75 +++ .../share_extend/ios/share_extend.podspec | 21 + packages/share_extend/lib/share_extend.dart | 87 +++ packages/share_extend/pubspec.yaml | 26 + pubspec.yaml | 3 +- 84 files changed, 2799 insertions(+), 2 deletions(-) create mode 100644 packages/share_extend/.gitattributes create mode 100644 packages/share_extend/.gitignore create mode 100644 packages/share_extend/CHANGELOG.md create mode 100644 packages/share_extend/LICENSE create mode 100644 packages/share_extend/README-cn.md create mode 100644 packages/share_extend/README.md create mode 100644 packages/share_extend/android/.gitignore create mode 100644 packages/share_extend/android/build.gradle create mode 100644 packages/share_extend/android/gradle.properties create mode 100644 packages/share_extend/android/settings.gradle create mode 100644 packages/share_extend/android/src/main/AndroidManifest.xml create mode 100644 packages/share_extend/android/src/main/java/com/zt/shareextend/MethodCallHandlerImpl.java create mode 100644 packages/share_extend/android/src/main/java/com/zt/shareextend/MimeUtils.java create mode 100644 packages/share_extend/android/src/main/java/com/zt/shareextend/Share.java create mode 100644 packages/share_extend/android/src/main/java/com/zt/shareextend/ShareExtendPlugin.java create mode 100644 packages/share_extend/android/src/main/java/com/zt/shareextend/ShareExtendProvider.java create mode 100644 packages/share_extend/android/src/main/java/com/zt/shareextend/ShareUtils.java create mode 100644 packages/share_extend/example/.gitignore create mode 100644 packages/share_extend/example/.metadata create mode 100644 packages/share_extend/example/README.md create mode 100644 packages/share_extend/example/android/app/build.gradle create mode 100644 packages/share_extend/example/android/app/src/main/AndroidManifest.xml create mode 100644 packages/share_extend/example/android/app/src/main/java/com/zt/shareextendexample/EmbeddingV1Activity.java create mode 100644 packages/share_extend/example/android/app/src/main/res/drawable/launch_background.xml create mode 100644 packages/share_extend/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 packages/share_extend/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 packages/share_extend/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 packages/share_extend/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 packages/share_extend/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 packages/share_extend/example/android/app/src/main/res/values/styles.xml create mode 100644 packages/share_extend/example/android/build.gradle create mode 100644 packages/share_extend/example/android/gradle.properties create mode 100644 packages/share_extend/example/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 packages/share_extend/example/android/settings.gradle create mode 100644 packages/share_extend/example/ios/Flutter/AppFrameworkInfo.plist create mode 100644 packages/share_extend/example/ios/Flutter/Debug.xcconfig create mode 100644 packages/share_extend/example/ios/Flutter/Flutter.podspec create mode 100644 packages/share_extend/example/ios/Flutter/Release.xcconfig create mode 100644 packages/share_extend/example/ios/Podfile create mode 100644 packages/share_extend/example/ios/Runner.xcodeproj/project.pbxproj create mode 100644 packages/share_extend/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 packages/share_extend/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 packages/share_extend/example/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 packages/share_extend/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/share_extend/example/ios/Runner/AppDelegate.h create mode 100644 packages/share_extend/example/ios/Runner/AppDelegate.m create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 packages/share_extend/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 packages/share_extend/example/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 packages/share_extend/example/ios/Runner/Base.lproj/Main.storyboard create mode 100644 packages/share_extend/example/ios/Runner/Info.plist create mode 100644 packages/share_extend/example/ios/Runner/Runner-Bridging-Header.h create mode 100644 packages/share_extend/example/ios/Runner/main.m create mode 100644 packages/share_extend/example/lib/main.dart create mode 100644 packages/share_extend/example/pubspec.yaml create mode 100644 packages/share_extend/example/test/widget_test.dart create mode 100644 packages/share_extend/ios/.gitignore create mode 100644 packages/share_extend/ios/Assets/.gitkeep create mode 100644 packages/share_extend/ios/Classes/ShareExtendPlugin.h create mode 100644 packages/share_extend/ios/Classes/ShareExtendPlugin.m create mode 100644 packages/share_extend/ios/share_extend.podspec create mode 100644 packages/share_extend/lib/share_extend.dart create mode 100644 packages/share_extend/pubspec.yaml diff --git a/lib/utils/external_share.dart b/lib/utils/external_share.dart index 8a6ee7c..8abc092 100644 --- a/lib/utils/external_share.dart +++ b/lib/utils/external_share.dart @@ -1,6 +1,6 @@ -import 'package:hyj_share_extend/hyj_share_extend.dart'; +import 'package:share_extend/share_extend.dart'; import '../enums/enums.dart'; diff --git a/packages/share_extend/.gitattributes b/packages/share_extend/.gitattributes new file mode 100644 index 0000000..ff1b95c --- /dev/null +++ b/packages/share_extend/.gitattributes @@ -0,0 +1 @@ +* linguist-language=Dart \ No newline at end of file diff --git a/packages/share_extend/.gitignore b/packages/share_extend/.gitignore new file mode 100644 index 0000000..9821784 --- /dev/null +++ b/packages/share_extend/.gitignore @@ -0,0 +1,79 @@ +# Built application files +*.apk +*.ap_ + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/assetWizardSettings.xml +.idea/dictionaries +.idea/libraries +.idea/caches + +# Keystore files +# Uncomment the following line if you do not want to check your keystore files in. +#*.jks + +*.idea +*.packages + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md + +pubspec.lock +*.iml + +.DS_Store +.atom/ +.idea/ +.vscode/ +.flutter-plugins-dependencies +.dart_tool +flutter_export_environment.sh \ No newline at end of file diff --git a/packages/share_extend/CHANGELOG.md b/packages/share_extend/CHANGELOG.md new file mode 100644 index 0000000..983eba7 --- /dev/null +++ b/packages/share_extend/CHANGELOG.md @@ -0,0 +1,61 @@ +## 2.0.0 +* support audio share +* null safety support + +## 1.1.9 +* fix ios not found module issue. + +## 1.1.8 +* support android embedding v2 api +* add extraText option for android Intent.EXTRA_TEXT when sharing image or file. + +## 1.1.7 +* set default popover point on the ipad + +## 1.1.6 +* fix some permission issues on some devices. +* update lower bound dart dependency to 2.0.0. + +## 1.1.5 +* fix provider issues for api < 24 + +## 1.1.4 +* add grant uri permission on Android + +## 1.1.3 +* add option subject for sharing multiple images + +## 1.1.2 +* rebuild the provider code on android platform +* update sample code + +## 1.1.1 +* add option param "share panel title" on android +* add option param "subject" on both android and ios +* update sample code with latest image_picker plugin version that fixed video picker bugs + +## 1.1.0 +* 添加多图,多文件分享功能 +* 合并image_picker在ios13中选取视频不可用的补丁 + +## 1.0.9 +* 移除了Android端的内置存储的读写权限,改成由APP端来按需求配置 + +## 1.0.7 +* Android端修改了FileProvider的authorities,继承FileProvider,防止FileProvider冲突 + +## 1.0.6 +* 修复了android端分享应用沙盒内文件可能出错的bug +* 优化了android端分享时的权限请求逻辑 + +## 1.0.5 +* Fix bugs when sharing videos to some apps like WeChat. + +## 1.0.4 + +* Updated to Support Latest Android Dependencies + + +## 0.0.1 + +* TODO: Describe initial release. diff --git a/packages/share_extend/LICENSE b/packages/share_extend/LICENSE new file mode 100644 index 0000000..fd41d95 --- /dev/null +++ b/packages/share_extend/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 zhouteng + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/share_extend/README-cn.md b/packages/share_extend/README-cn.md new file mode 100644 index 0000000..203fb32 --- /dev/null +++ b/packages/share_extend/README-cn.md @@ -0,0 +1,91 @@ +Language: [English](https://github.com/zhouteng0217/ShareExtend/blob/master/README-en.md) | [中文简体](https://github.com/zhouteng0217/ShareExtend/blob/master/README.md) + +# ShareExtend + +[![pub package](https://img.shields.io/pub/v/share_extend.svg)](https://pub.dartlang.org/packages/share_extend) + +调用系统分享的Flutter组件,支持分享文本、图片、视频和文件 + +## 安装 + +``` +dependencies: + share_extend: "^2.0.0" +``` + +### iOS + +添加下面的key到工程的info.plist文件,路径 ```/ios/Runner/Info.plist```,用于将分享的图片保存到相册 + +``` +NSPhotoLibraryAddUsageDescription +这里填写为什么需要相册写入权限的描述语句 +``` + +### Android + +如果涉及到要分享存储空间里面的文件,需要用到读写存储空间权限的,请在项目的android模块的下,添加读写权限,路径为 `/android/app/src/main/AndroidManifest.xml` + +``` + + +``` + +## 导入 + +``` +import 'package:share_extend/share_extend.dart'; +``` + +## 使用 + +``` + +//分享文本 +ShareExtend.share("share text", "text","android share panel title","share subject"); + +//分享图片 (例子中使用了一个image_picker的插件来实现图片的选择) +File f = + await ImagePicker.pickImage(source: ImageSource.gallery); +ShareExtend.share(f.path, "image"); + +//分享视频 +File f = await ImagePicker.pickVideo( + source: ImageSource.gallery); +ShareExtend.share(f.path, "video"); + +//分享文件 +Directory dir = Platform.isAndroid + ? await getExternalStorageDirectory() + : await getApplicationDocumentsDirectory(); +File testFile = new File("${dir.path}/flutter/test.txt"); +if (!await testFile.exists()) { + await testFile.create(recursive: true); + testFile.writeAsStringSync("test for share documents file"); +} +ShareExtend.share(testFile.path, "file"); + +//分享多图(借助了MultiImagePicker来多选获取图片图片,由于该库没有提供文件路径,因此demo里面先将图片保存为图片再调用分享) +_shareMultipleImages() async { + List assetList = await MultiImagePicker.pickImages(maxImages: 5); + var imageList = List(); + for (var asset in assetList) { + String path = + await _writeByteToImageFile(await asset.getByteData(quality: 30)); + imageList.add(path); + } + ShareExtend.shareMultiple(imageList, "image",subject: "share muti image"); +} + +Future _writeByteToImageFile(ByteData byteData) async { + Directory dir = Platform.isAndroid + ? await getExternalStorageDirectory() + : await getApplicationDocumentsDirectory(); + File imageFile = new File( + "${dir.path}/flutter/${DateTime.now().millisecondsSinceEpoch}.png"); + imageFile.createSync(recursive: true); + imageFile.writeAsBytesSync(byteData.buffer.asUint8List(0)); + return imageFile.path; +} + +``` \ No newline at end of file diff --git a/packages/share_extend/README.md b/packages/share_extend/README.md new file mode 100644 index 0000000..2e09309 --- /dev/null +++ b/packages/share_extend/README.md @@ -0,0 +1,94 @@ +Language: [English](https://github.com/zhouteng0217/ShareExtend/blob/master/README.md) | [中文简体](https://github.com/zhouteng0217/ShareExtend/blob/master/README-cn.md) + +# ShareExtend + +[![pub package](https://img.shields.io/pub/v/share_extend.svg)](https://pub.dartlang.org/packages/share_extend) + +A Flutter plugin for iOS and Android for sharing text, image, video and file with system ui. + +## Installation + +First, add `share_extend` as a dependency in your pubspec.yaml file. + +``` +dependencies: + share_extend: "^2.0.0" +``` + +### iOS + +Add the following key to your info.plist file, located in `/ios/Runner/Info.plist` for saving shared images to photo library. + +``` +NSPhotoLibraryAddUsageDescription +describe why your app needs access to write photo library +``` + +### Android + +If your project needs read and write permissions for sharing external storage file, please add the following permissions to your AndroidManifest.xml, located in `/android/app/src/main/AndroidManifest.xml` + +``` + + +``` + +## Import + +``` +import 'package:share_extend/share_extend.dart'; +``` + + +## Example + +``` + +//share text +ShareExtend.share("share text", "text","android share panel title","share subject"); + +//share image +File f = + await ImagePicker.pickImage(source: ImageSource.gallery); +ShareExtend.share(f.path, "image"); + +//share video +File f = await ImagePicker.pickVideo( + source: ImageSource.gallery); +ShareExtend.share(f.path, "video"); + +//share file +Directory dir = Platform.isAndroid + ? await getExternalStorageDirectory() + : await getApplicationDocumentsDirectory(); +File testFile = new File("${dir.path}/flutter/test.txt"); +if (!await testFile.exists()) { + await testFile.create(recursive: true); + testFile.writeAsStringSync("test for share documents file"); +} +ShareExtend.share(testFile.path, "file"); + +///share multiple images +_shareMultipleImages() async { + List assetList = await MultiImagePicker.pickImages(maxImages: 5); + var imageList = List(); + for (var asset in assetList) { + String path = + await _writeByteToImageFile(await asset.getByteData(quality: 30)); + imageList.add(path); + } + ShareExtend.shareMultiple(imageList, "image",subject: "share muti image"); +} + +Future _writeByteToImageFile(ByteData byteData) async { + Directory dir = Platform.isAndroid + ? await getExternalStorageDirectory() + : await getApplicationDocumentsDirectory(); + File imageFile = new File( + "${dir.path}/flutter/${DateTime.now().millisecondsSinceEpoch}.png"); + imageFile.createSync(recursive: true); + imageFile.writeAsBytesSync(byteData.buffer.asUint8List(0)); + return imageFile.path; +} + +``` \ No newline at end of file diff --git a/packages/share_extend/android/.gitignore b/packages/share_extend/android/.gitignore new file mode 100644 index 0000000..c6cbe56 --- /dev/null +++ b/packages/share_extend/android/.gitignore @@ -0,0 +1,8 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures diff --git a/packages/share_extend/android/build.gradle b/packages/share_extend/android/build.gradle new file mode 100644 index 0000000..ce3d1d9 --- /dev/null +++ b/packages/share_extend/android/build.gradle @@ -0,0 +1,38 @@ +group 'com.zt.shareextend' +version '1.0-SNAPSHOT' + +buildscript { + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.google.gms:google-services:4.3.10' + } +} + +rootProject.allprojects { + repositories { + google() + jcenter() + } +} + +apply plugin: 'com.android.library' + +android { + compileSdkVersion 34 + namespace "com.zt.shareextend" + defaultConfig { + minSdkVersion 19 + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + lintOptions { + disable 'InvalidPackage' + } +} + +dependencies { + api 'androidx.legacy:legacy-support-core-utils:1.0.0' +} diff --git a/packages/share_extend/android/gradle.properties b/packages/share_extend/android/gradle.properties new file mode 100644 index 0000000..678cd62 --- /dev/null +++ b/packages/share_extend/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.enableJetifier=true +android.useAndroidX=true \ No newline at end of file diff --git a/packages/share_extend/android/settings.gradle b/packages/share_extend/android/settings.gradle new file mode 100644 index 0000000..586a10e --- /dev/null +++ b/packages/share_extend/android/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'share_extend' diff --git a/packages/share_extend/android/src/main/AndroidManifest.xml b/packages/share_extend/android/src/main/AndroidManifest.xml new file mode 100644 index 0000000..2a44432 --- /dev/null +++ b/packages/share_extend/android/src/main/AndroidManifest.xml @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/packages/share_extend/android/src/main/java/com/zt/shareextend/MethodCallHandlerImpl.java b/packages/share_extend/android/src/main/java/com/zt/shareextend/MethodCallHandlerImpl.java new file mode 100644 index 0000000..6812036 --- /dev/null +++ b/packages/share_extend/android/src/main/java/com/zt/shareextend/MethodCallHandlerImpl.java @@ -0,0 +1,36 @@ +package com.zt.shareextend; + +import androidx.annotation.NonNull; + +import java.util.Map; + +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel; + +/** + * Created by zhouteng on 2020/6/27 + */ +public class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { + + private static final String METHOD_SHARE = "share"; + + private Share share; + + public MethodCallHandlerImpl(Share share) { + this.share = share; + } + + @Override + public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) { + if (METHOD_SHARE.equals(call.method)) { + if (!(call.arguments instanceof Map)) { + throw new IllegalArgumentException("Map argument expected"); + } + share.share(call); + result.success(null); + } else { + result.notImplemented(); + } + } + +} diff --git a/packages/share_extend/android/src/main/java/com/zt/shareextend/MimeUtils.java b/packages/share_extend/android/src/main/java/com/zt/shareextend/MimeUtils.java new file mode 100644 index 0000000..d45bb31 --- /dev/null +++ b/packages/share_extend/android/src/main/java/com/zt/shareextend/MimeUtils.java @@ -0,0 +1,129 @@ +package com.zt.shareextend; + +import android.text.TextUtils; +import android.webkit.MimeTypeMap; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by zhouteng on 2020-03-29 + */ +public class MimeUtils { + + private static final String DEFAULT_MINE_TYPE = "application/octet-stream"; + + private static final Map extensionToMimeTypeMap = new HashMap<>(); + + static { + add("epub", "application/epub+zip"); + add("ogx", "application/ogg"); + add("odp", "application/vnd.oasis.opendocument.presentation"); + add("otp", "application/vnd.oasis.opendocument.presentation-template"); + add("yt", "application/vnd.youtube.yt"); + add("hwp", "application/x-hwp"); + add("3gpp", "video/3gpp"); + add("3gp", "video/3gpp"); + add("3gpp2", "video/3gpp2"); + add("3g2", "video/3gpp2"); + add("oga", "audio/ogg"); + add("ogg", "audio/ogg"); + add("spx", "audio/ogg"); + add("dng", "image/x-adobe-dng"); + add("cr2", "image/x-canon-cr2"); + add("raf", "image/x-fuji-raf"); + add("nef", "image/x-nikon-nef"); + add("nrw", "image/x-nikon-nrw"); + add("orf", "image/x-olympus-orf"); + add("rw2", "image/x-panasonic-rw2"); + add("pef", "image/x-pentax-pef"); + add("srw", "image/x-samsung-srw"); + add("arw", "image/x-sony-arw"); + add("ogv", "video/ogg"); + add("tgz", "application/x-gtar-compressed"); + add("taz", "application/x-gtar-compressed"); + add("csv", "text/csv"); + add("gz", "application/gzip"); + add("cab", "application/vnd.ms-cab-compressed"); + add("7z", "application/x-7z-compressed"); + add("bz", "application/x-bzip"); + add("bz2", "application/x-bzip2"); + add("z", "application/x-compress"); + add("jar", "application/x-java-archive"); + add("lzma", "application/x-lzma"); + add("xz", "application/x-xz"); + add("m3u", "audio/x-mpegurl"); + add("m3u8", "audio/x-mpegurl"); + add("p7b", "application/x-pkcs7-certificates"); + add("spc", "application/x-pkcs7-certificates"); + add("p7c", "application/pkcs7-mime"); + add("p7s", "application/pkcs7-signature"); + add("es", "application/ecmascript"); + add("js", "application/javascript"); + add("json", "application/json"); + add("ts", "application/typescript"); + add("perl", "text/x-perl"); + add("pl", "text/x-perl"); + add("pm", "text/x-perl"); + add("py", "text/x-python"); + add("py3", "text/x-python"); + add("py3x", "text/x-python"); + add("pyx", "text/x-python"); + add("wsgi", "text/x-python"); + add("rb", "text/ruby"); + add("sh", "application/x-sh"); + add("yaml", "text/x-yaml"); + add("yml", "text/x-yaml"); + add("asm", "text/x-asm"); + add("s", "text/x-asm"); + add("cs", "text/x-csharp"); + add("azw", "application/vnd.amazon.ebook"); + add("ibooks", "application/x-ibooks+zip"); + add("mobi", "application/x-mobipocket-ebook"); + add("woff", "font/woff"); + add("woff2", "font/woff2"); + add("msg", "application/vnd.ms-outlook"); + add("eml", "message/rfc822"); + add("eot", "application/vnd.ms-fontobject"); + add("ttf", "font/ttf"); + add("otf", "font/otf"); + add("ttc", "font/collection"); + add("markdown", "text/markdown"); + add("md", "text/markdown"); + add("mkd", "text/markdown"); + add("conf", "text/plain"); + add("ini", "text/plain"); + add("list", "text/plain"); + add("log", "text/plain"); + add("prop", "text/plain"); + add("properties", "text/plain"); + add("rc", "text/plain"); + add("flv", "video/x-flv"); + } + + private static void add(String extension, String mimeType) { + if (!extensionToMimeTypeMap.containsKey(extension)) { + extensionToMimeTypeMap.put(extension, mimeType); + } + } + + public static String getMineType(File file) { + final int lastDot = file.getName().lastIndexOf('.'); + if (lastDot < 0) { + return DEFAULT_MINE_TYPE; + } + + final String extension = file.getName().substring(lastDot + 1).toLowerCase(); + String mineType = extensionToMimeTypeMap.get(extension); + if (!TextUtils.isEmpty(mineType)) { + return mineType; + } + + mineType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); + if (!TextUtils.isEmpty(mineType)) { + return mineType; + } + return DEFAULT_MINE_TYPE; + } +} diff --git a/packages/share_extend/android/src/main/java/com/zt/shareextend/Share.java b/packages/share_extend/android/src/main/java/com/zt/shareextend/Share.java new file mode 100644 index 0000000..8189add --- /dev/null +++ b/packages/share_extend/android/src/main/java/com/zt/shareextend/Share.java @@ -0,0 +1,125 @@ +package com.zt.shareextend; + +import android.Manifest; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; + +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import io.flutter.plugin.common.MethodCall; + +/** + * Created by zhouteng on 2020/6/27 + *

+ * Handles share action + */ +public class Share { + + private static final int CODE_ASK_PERMISSION = 100; + + private Context context; + private MethodCall call; + + public Share(Context context) { + this.context = context; + } + + void share() { + share(call); + } + + void share(MethodCall call) { + + if (call == null) { + return; + } + + this.call = call; + + List list = call.argument("list"); + String type = call.argument("type"); + String sharePanelTitle = call.argument("sharePanelTitle"); + String subject = call.argument("subject"); + ArrayList extraTexts = call.argument("extraTexts"); + + if (list == null || list.isEmpty()) { + throw new IllegalArgumentException("Non-empty list expected"); + } + + ArrayList uriList = new ArrayList<>(); + + Intent shareIntent = new Intent(); + shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + shareIntent.putExtra(Intent.EXTRA_SUBJECT, subject); + + if ("text".equals(type)) { + shareIntent.setAction(Intent.ACTION_SEND); + shareIntent.putExtra(Intent.EXTRA_TEXT, list.get(0)); + shareIntent.setType("text/plain"); + } else { + if (ShareUtils.shouldRequestPermission(list)) { + if (!checkPermission()) { + requestPermission(); + return; + } + } + for (String path : list) { + File f = new File(path); + Uri uri = ShareUtils.getUriForFile(context, f); + uriList.add(uri); + } + + if ("image".equals(type)) { + shareIntent.setType("image/*"); + } else if ("video".equals(type)) { + shareIntent.setType("video/*"); + } else if ("audio".equals(type)) { + shareIntent.setType("audio/*"); + } else { + shareIntent.setType("application/*"); + } + if (uriList.size() == 1) { + shareIntent.putExtra(Intent.EXTRA_TEXT, extraTexts != null && !extraTexts.isEmpty() ? extraTexts.get(0) : null); + shareIntent.setAction(Intent.ACTION_SEND); + shareIntent.putExtra(Intent.EXTRA_STREAM, uriList.get(0)); + } else { + shareIntent.putExtra(Intent.EXTRA_TEXT, extraTexts); + shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE); + shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList); + } + } + startChooserActivity(shareIntent, sharePanelTitle, uriList); + } + + private void startChooserActivity(Intent shareIntent, String sharePanelTitle, ArrayList uriList) { + Intent chooserIntent = Intent.createChooser(shareIntent, sharePanelTitle); + ShareUtils.grantUriPermission(context, uriList, chooserIntent); + + if (context instanceof Activity) { + context.startActivity(chooserIntent); + } else { + chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(chooserIntent); + } + } + + private boolean checkPermission() { + return ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) + == PackageManager.PERMISSION_GRANTED; + } + + private void requestPermission() { + if (!(context instanceof Activity)) { + return; + } + ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, CODE_ASK_PERMISSION); + } +} diff --git a/packages/share_extend/android/src/main/java/com/zt/shareextend/ShareExtendPlugin.java b/packages/share_extend/android/src/main/java/com/zt/shareextend/ShareExtendPlugin.java new file mode 100644 index 0000000..e48690d --- /dev/null +++ b/packages/share_extend/android/src/main/java/com/zt/shareextend/ShareExtendPlugin.java @@ -0,0 +1,94 @@ +package com.zt.shareextend; + +import android.content.Context; +import android.content.pm.PackageManager; + +import androidx.annotation.NonNull; + +import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.embedding.engine.plugins.activity.ActivityAware; +import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugin.common.PluginRegistry; +import io.flutter.plugin.common.PluginRegistry.Registrar; + +/** + * Plugin method host for presenting a share sheet via Intent + */ +public class ShareExtendPlugin implements FlutterPlugin, ActivityAware, PluginRegistry.RequestPermissionsResultListener { + + /// the authorities for FileProvider + private static final int CODE_ASK_PERMISSION = 100; + private static final String CHANNEL = "com.zt.shareextend/share_extend"; + + private FlutterPluginBinding pluginBinding; + private ActivityPluginBinding activityBinding; + + private MethodChannel methodChannel; + private MethodCallHandlerImpl callHandler; + private Share share; + + public static void registerWith(Registrar registrar) { + ShareExtendPlugin plugin = new ShareExtendPlugin(); + plugin.setUpChannel(registrar.context(), registrar.messenger(), registrar, null); + } + + @Override + public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) { + pluginBinding = flutterPluginBinding; + } + + @Override + public void onDetachedFromEngine(@NonNull FlutterPluginBinding flutterPluginBinding) { + pluginBinding = null; + } + + @Override + public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBinding) { + activityBinding = activityPluginBinding; + setUpChannel(activityBinding.getActivity(), pluginBinding.getBinaryMessenger(), null, activityBinding); + } + + @Override + public void onDetachedFromActivityForConfigChanges() { + onDetachedFromActivity(); + } + + @Override + public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding activityPluginBinding) { + onAttachedToActivity(activityPluginBinding); + } + + @Override + public void onDetachedFromActivity() { + tearDown(); + } + + private void setUpChannel(Context context, BinaryMessenger messenger,Registrar registrar, ActivityPluginBinding activityBinding) { + methodChannel = new MethodChannel(messenger, CHANNEL); + share = new Share(context); + callHandler = new MethodCallHandlerImpl(share); + methodChannel.setMethodCallHandler(callHandler); + if (registrar != null) { + registrar.addRequestPermissionsResultListener(this); + } else { + activityBinding.addRequestPermissionsResultListener(this); + } + } + + private void tearDown() { + activityBinding.removeRequestPermissionsResultListener(this); + activityBinding = null; + methodChannel.setMethodCallHandler(null); + methodChannel = null; + } + + @Override + public boolean onRequestPermissionsResult(int requestCode, String[] perms, int[] grantResults) { + if (requestCode == CODE_ASK_PERMISSION && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + share.share(); + } + return false; + } +} diff --git a/packages/share_extend/android/src/main/java/com/zt/shareextend/ShareExtendProvider.java b/packages/share_extend/android/src/main/java/com/zt/shareextend/ShareExtendProvider.java new file mode 100644 index 0000000..d9029ef --- /dev/null +++ b/packages/share_extend/android/src/main/java/com/zt/shareextend/ShareExtendProvider.java @@ -0,0 +1,160 @@ +package com.zt.shareextend; + +import android.content.ContentProvider; +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.content.pm.ProviderInfo; +import android.database.Cursor; +import android.database.MatrixCursor; +import android.net.Uri; +import android.os.ParcelFileDescriptor; +import android.provider.MediaStore; +import android.provider.OpenableColumns; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import java.io.File; +import java.io.FileNotFoundException; + +public class ShareExtendProvider extends ContentProvider { + + private static final String[] COLUMNS = { + OpenableColumns.DISPLAY_NAME, + OpenableColumns.SIZE, + MediaStore.MediaColumns.DATA + }; + + @Override + public void attachInfo(Context context, ProviderInfo info) { + super.attachInfo(context, info); + + // Sanity check our security + if (info.exported) { + throw new SecurityException("Provider must not be exported"); + } + if (!info.grantUriPermissions) { + throw new SecurityException("Provider must grant uri permissions"); + } + } + + @Override + public boolean onCreate() { + return false; + } + + @Nullable + @Override + public ParcelFileDescriptor openFile(@NonNull Uri uri, @NonNull String mode) throws FileNotFoundException { + final File file = getFileForUri(uri); + final int fileMode = modeToMode(mode); + return ParcelFileDescriptor.open(file, fileMode); + } + + private static int modeToMode(String mode) { + int modeBits; + if ("r".equals(mode)) { + modeBits = ParcelFileDescriptor.MODE_READ_ONLY; + } else if ("w".equals(mode) || "wt".equals(mode)) { + modeBits = ParcelFileDescriptor.MODE_WRITE_ONLY + | ParcelFileDescriptor.MODE_CREATE + | ParcelFileDescriptor.MODE_TRUNCATE; + } else if ("wa".equals(mode)) { + modeBits = ParcelFileDescriptor.MODE_WRITE_ONLY + | ParcelFileDescriptor.MODE_CREATE + | ParcelFileDescriptor.MODE_APPEND; + } else if ("rw".equals(mode)) { + modeBits = ParcelFileDescriptor.MODE_READ_WRITE + | ParcelFileDescriptor.MODE_CREATE; + } else if ("rwt".equals(mode)) { + modeBits = ParcelFileDescriptor.MODE_READ_WRITE + | ParcelFileDescriptor.MODE_CREATE + | ParcelFileDescriptor.MODE_TRUNCATE; + } else { + throw new IllegalArgumentException("Invalid mode: " + mode); + } + return modeBits; + } + + @Nullable + @Override + public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { + + File file = getFileForUri(uri); + + if (projection == null) { + projection = COLUMNS; + } + + String[] cols = new String[projection.length]; + Object[] values = new Object[projection.length]; + int i = 0; + for (String col : projection) { + if (OpenableColumns.DISPLAY_NAME.equals(col)) { + cols[i] = OpenableColumns.DISPLAY_NAME; + values[i++] = file.getName(); + } else if (OpenableColumns.SIZE.equals(col)) { + cols[i] = OpenableColumns.SIZE; + values[i++] = file.length(); + } else if (MediaStore.MediaColumns.DATA.equals(col)) { + cols[i] = MediaStore.MediaColumns.DATA; + values[i++] = file.getAbsolutePath(); + } + } + + cols = copyOf(cols, i); + values = copyOf(values, i); + + final MatrixCursor cursor = new MatrixCursor(cols, 1); + cursor.addRow(values); + return cursor; + } + + private static String[] copyOf(String[] original, int newLength) { + final String[] result = new String[newLength]; + System.arraycopy(original, 0, result, 0, newLength); + return result; + } + + private static Object[] copyOf(Object[] original, int newLength) { + final Object[] result = new Object[newLength]; + System.arraycopy(original, 0, result, 0, newLength); + return result; + } + + @Nullable + @Override + public String getType(@NonNull Uri uri) { + return MimeUtils.getMineType(getFileForUri(uri)); + } + + public static Uri getUriForPath(String authority, String path) { + return new Uri.Builder() + .scheme(ContentResolver.SCHEME_CONTENT) + .authority(authority) + .path(Uri.encode(path)) + .build(); + } + + private File getFileForUri(Uri uri) { + String path = Uri.decode(uri.getPath()).substring(1); + return new File(path); + } + + @Nullable + @Override + public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) { + throw new UnsupportedOperationException("No external inserts"); + } + + @Override + public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) { + throw new UnsupportedOperationException("No external deletes"); + } + + @Override + public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) { + throw new UnsupportedOperationException("No external updates"); + } +} diff --git a/packages/share_extend/android/src/main/java/com/zt/shareextend/ShareUtils.java b/packages/share_extend/android/src/main/java/com/zt/shareextend/ShareUtils.java new file mode 100644 index 0000000..e9fddea --- /dev/null +++ b/packages/share_extend/android/src/main/java/com/zt/shareextend/ShareUtils.java @@ -0,0 +1,55 @@ +package com.zt.shareextend; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; + +import java.io.File; +import java.util.List; + +class ShareUtils { + + /// get the uri for file + static Uri getUriForFile(Context context, File file) { + + String authorities = context.getPackageName() + ".shareextend.fileprovider"; + + return ShareExtendProvider.getUriForPath(authorities, file.getAbsolutePath()); + } + + static void grantUriPermission(Context context, List uriList, Intent intent) { + // some devices will crash when calling queryIntentActivities, so add try catch temporarily. + try { + for (Uri uri : uriList) { + List resolveInfos = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); + for (ResolveInfo resolveInfo : resolveInfos) { + context.grantUriPermission(resolveInfo.activityInfo.packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); + } + } + } catch (Exception e) { + + } + } + + static boolean shouldRequestPermission(List pathList) { + for (String path : pathList) { + if (shouldRequestPermission(path)) { + return true; + } + } + return false; + } + + private static boolean shouldRequestPermission(String path) { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isPathInExternalStorage(path); + } + + private static boolean isPathInExternalStorage(String path) { + File storagePath = Environment.getExternalStorageDirectory(); + return path.startsWith(storagePath.getAbsolutePath()); + } +} diff --git a/packages/share_extend/example/.gitignore b/packages/share_extend/example/.gitignore new file mode 100644 index 0000000..47e0b4d --- /dev/null +++ b/packages/share_extend/example/.gitignore @@ -0,0 +1,71 @@ +# Miscellaneous +*.class +*.lock +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# Visual Studio Code related +.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +.dart_tool/ +.flutter-plugins +.packages +.pub-cache/ +.pub/ +build/ + +# Android related +**/android/**/gradle-wrapper.jar +**/android/.gradle +**/android/captures/ +**/android/gradlew +**/android/gradlew.bat +**/android/local.properties +**/android/**/GeneratedPluginRegistrant.java + +# iOS/XCode related +**/ios/**/*.mode1v3 +**/ios/**/*.mode2v3 +**/ios/**/*.moved-aside +**/ios/**/*.pbxuser +**/ios/**/*.perspectivev3 +**/ios/**/*sync/ +**/ios/**/.sconsign.dblite +**/ios/**/.tags* +**/ios/**/.vagrant/ +**/ios/**/DerivedData/ +**/ios/**/Icon? +**/ios/**/Pods/ +**/ios/**/.symlinks/ +**/ios/**/profile +**/ios/**/xcuserdata +**/ios/.generated/ +**/ios/Flutter/App.framework +**/ios/Flutter/Flutter.framework +**/ios/Flutter/Generated.xcconfig +**/ios/Flutter/app.flx +**/ios/Flutter/app.zip +**/ios/Flutter/flutter_assets/ +**/ios/ServiceDefinitions.json +**/ios/Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!**/ios/**/default.mode1v3 +!**/ios/**/default.mode2v3 +!**/ios/**/default.pbxuser +!**/ios/**/default.perspectivev3 +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/packages/share_extend/example/.metadata b/packages/share_extend/example/.metadata new file mode 100644 index 0000000..e372436 --- /dev/null +++ b/packages/share_extend/example/.metadata @@ -0,0 +1,8 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 13684e4f8e9edb4c2b2a0fd8e1439f93e6e30fde + channel: unknown diff --git a/packages/share_extend/example/README.md b/packages/share_extend/example/README.md new file mode 100644 index 0000000..511e08f --- /dev/null +++ b/packages/share_extend/example/README.md @@ -0,0 +1,8 @@ +# share_extend_example + +Demonstrates how to use the share_extend plugin. + +## Getting Started + +For help getting started with Flutter, view our online +[documentation](https://flutter.io/). diff --git a/packages/share_extend/example/android/app/build.gradle b/packages/share_extend/example/android/app/build.gradle new file mode 100644 index 0000000..6699f6c --- /dev/null +++ b/packages/share_extend/example/android/app/build.gradle @@ -0,0 +1,61 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion 28 + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.zt.shareextendexample" + minSdkVersion 19 + targetSdkVersion 28 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test:runner:1.1.2-alpha01' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.2-alpha01' +} diff --git a/packages/share_extend/example/android/app/src/main/AndroidManifest.xml b/packages/share_extend/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..c34a48a --- /dev/null +++ b/packages/share_extend/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/share_extend/example/android/app/src/main/java/com/zt/shareextendexample/EmbeddingV1Activity.java b/packages/share_extend/example/android/app/src/main/java/com/zt/shareextendexample/EmbeddingV1Activity.java new file mode 100644 index 0000000..7752f8f --- /dev/null +++ b/packages/share_extend/example/android/app/src/main/java/com/zt/shareextendexample/EmbeddingV1Activity.java @@ -0,0 +1,25 @@ +package com.zt.shareextendexample; + +import android.os.Bundle; + +import com.vitanov.multiimagepicker.MultiImagePickerPlugin; +import com.zt.shareextend.ShareExtendPlugin; + +import io.flutter.app.FlutterActivity; +import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.plugins.GeneratedPluginRegistrant; +import io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin; +import io.flutter.plugins.imagepicker.ImagePickerPlugin; +import io.flutter.plugins.pathprovider.PathProviderPlugin; + +public class EmbeddingV1Activity extends FlutterActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ShareExtendPlugin.registerWith(registrarFor("com.zt.shareextend.ShareExtendPlugin")); + ImagePickerPlugin.registerWith(registrarFor("io.flutter.plugins.imagepicker.ImagePickerPlugin")); + MultiImagePickerPlugin.registerWith(registrarFor("com.vitanov.multiimagepicker.MultiImagePickerPlugin")); + PathProviderPlugin.registerWith(registrarFor("io.flutter.plugins.pathprovider.PathProviderPlugin")); + FlutterAndroidLifecyclePlugin.registerWith(registrarFor("io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin")); + } +} diff --git a/packages/share_extend/example/android/app/src/main/res/drawable/launch_background.xml b/packages/share_extend/example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/packages/share_extend/example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/packages/share_extend/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/share_extend/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/packages/share_extend/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/share_extend/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/packages/share_extend/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/share_extend/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/packages/share_extend/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/share_extend/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/packages/share_extend/example/android/app/src/main/res/values/styles.xml b/packages/share_extend/example/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..00fa441 --- /dev/null +++ b/packages/share_extend/example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,8 @@ + + + + diff --git a/packages/share_extend/example/android/build.gradle b/packages/share_extend/example/android/build.gradle new file mode 100644 index 0000000..2627e66 --- /dev/null +++ b/packages/share_extend/example/android/build.gradle @@ -0,0 +1,30 @@ +buildscript { + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.3.1' + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +rootProject.buildDir = '../build' + +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/packages/share_extend/example/android/gradle.properties b/packages/share_extend/example/android/gradle.properties new file mode 100644 index 0000000..b6e61b6 --- /dev/null +++ b/packages/share_extend/example/android/gradle.properties @@ -0,0 +1,4 @@ +android.enableJetifier=true +android.useAndroidX=true +org.gradle.jvmargs=-Xmx1536M +android.enableR8=true diff --git a/packages/share_extend/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/share_extend/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..585b78a --- /dev/null +++ b/packages/share_extend/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Thu Feb 07 10:23:11 EST 2019 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip diff --git a/packages/share_extend/example/android/settings.gradle b/packages/share_extend/example/android/settings.gradle new file mode 100644 index 0000000..5a2f14f --- /dev/null +++ b/packages/share_extend/example/android/settings.gradle @@ -0,0 +1,15 @@ +include ':app' + +def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() + +def plugins = new Properties() +def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') +if (pluginsFile.exists()) { + pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } +} + +plugins.each { name, path -> + def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() + include ":$name" + project(":$name").projectDir = pluginDirectory +} diff --git a/packages/share_extend/example/ios/Flutter/AppFrameworkInfo.plist b/packages/share_extend/example/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..9367d48 --- /dev/null +++ b/packages/share_extend/example/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 8.0 + + diff --git a/packages/share_extend/example/ios/Flutter/Debug.xcconfig b/packages/share_extend/example/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..e8efba1 --- /dev/null +++ b/packages/share_extend/example/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/packages/share_extend/example/ios/Flutter/Flutter.podspec b/packages/share_extend/example/ios/Flutter/Flutter.podspec new file mode 100644 index 0000000..2c4421c --- /dev/null +++ b/packages/share_extend/example/ios/Flutter/Flutter.podspec @@ -0,0 +1,18 @@ +# +# NOTE: This podspec is NOT to be published. It is only used as a local source! +# This is a generated file; do not edit or check into version control. +# + +Pod::Spec.new do |s| + s.name = 'Flutter' + s.version = '1.0.0' + s.summary = 'High-performance, high-fidelity mobile apps.' + s.homepage = 'https://flutter.io' + s.license = { :type => 'MIT' } + s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } + s.source = { :git => 'https://github.com/flutter/engine', :tag => s.version.to_s } + s.ios.deployment_target = '8.0' + # Framework linking is handled by Flutter tooling, not CocoaPods. + # Add a placeholder to satisfy `s.dependency 'Flutter'` plugin podspecs. + s.vendored_frameworks = 'path/to/nothing' +end diff --git a/packages/share_extend/example/ios/Flutter/Release.xcconfig b/packages/share_extend/example/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..399e934 --- /dev/null +++ b/packages/share_extend/example/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/packages/share_extend/example/ios/Podfile b/packages/share_extend/example/ios/Podfile new file mode 100644 index 0000000..252d9ec --- /dev/null +++ b/packages/share_extend/example/ios/Podfile @@ -0,0 +1,41 @@ +# Uncomment this line to define a global platform for your project +platform :ios, '9.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/packages/share_extend/example/ios/Runner.xcodeproj/project.pbxproj b/packages/share_extend/example/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..94ea62e --- /dev/null +++ b/packages/share_extend/example/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,507 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 84FDDEBB9BBADAD8164AA15C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E0A688444B97628794691EEF /* Pods_Runner.framework */; }; + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; + 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 07029D33E422EE11C426D7C7 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 817ED98B236B2F6900BBAFE4 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CD456C76FAC541BD38BB2841 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + E0A688444B97628794691EEF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 84FDDEBB9BBADAD8164AA15C /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1929A27D658C0F8DBB7285DC /* Frameworks */ = { + isa = PBXGroup; + children = ( + E0A688444B97628794691EEF /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + A73596DA6A4E5A47E033894D /* Pods */, + 1929A27D658C0F8DBB7285DC /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 97C146F11CF9000F007C117D /* Supporting Files */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 817ED98B236B2F6900BBAFE4 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; + 97C146F11CF9000F007C117D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 97C146F21CF9000F007C117D /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + A73596DA6A4E5A47E033894D /* Pods */ = { + isa = PBXGroup; + children = ( + 07029D33E422EE11C426D7C7 /* Pods-Runner.debug.xcconfig */, + CD456C76FAC541BD38BB2841 /* Pods-Runner.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 41B0890A4A82A6143DF13DD5 /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + E909F93B03931C31C89F1BEB /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1010; + ORGANIZATIONNAME = "The Chromium Authors"; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + DevelopmentTeam = 67JZ7MB7A8; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 41B0890A4A82A6143DF13DD5 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + E909F93B03931C31C89F1BEB /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/BSGridCollectionViewLayout/BSGridCollectionViewLayout.framework", + "${BUILT_PRODUCTS_DIR}/BSImagePicker/BSImagePicker.framework", + "${BUILT_PRODUCTS_DIR}/BSImageView/BSImageView.framework", + "${BUILT_PRODUCTS_DIR}/image_picker/image_picker.framework", + "${BUILT_PRODUCTS_DIR}/multi_image_picker/multi_image_picker.framework", + "${BUILT_PRODUCTS_DIR}/path_provider/path_provider.framework", + "${BUILT_PRODUCTS_DIR}/share_extend/share_extend.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BSGridCollectionViewLayout.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BSImagePicker.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BSImageView.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/image_picker.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/multi_image_picker.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/share_extend.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, + 97C146F31CF9000F007C117D /* main.m in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 67JZ7MB7A8; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.zt.shareExtendExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 67JZ7MB7A8; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.zt.shareExtendExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/packages/share_extend/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/share_extend/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/packages/share_extend/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/packages/share_extend/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/share_extend/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..e4f93ed --- /dev/null +++ b/packages/share_extend/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/share_extend/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/packages/share_extend/example/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..21a3cc1 --- /dev/null +++ b/packages/share_extend/example/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/packages/share_extend/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/share_extend/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/packages/share_extend/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/share_extend/example/ios/Runner/AppDelegate.h b/packages/share_extend/example/ios/Runner/AppDelegate.h new file mode 100644 index 0000000..36e21bb --- /dev/null +++ b/packages/share_extend/example/ios/Runner/AppDelegate.h @@ -0,0 +1,6 @@ +#import +#import + +@interface AppDelegate : FlutterAppDelegate + +@end diff --git a/packages/share_extend/example/ios/Runner/AppDelegate.m b/packages/share_extend/example/ios/Runner/AppDelegate.m new file mode 100644 index 0000000..59a72e9 --- /dev/null +++ b/packages/share_extend/example/ios/Runner/AppDelegate.m @@ -0,0 +1,13 @@ +#include "AppDelegate.h" +#include "GeneratedPluginRegistrant.h" + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + [GeneratedPluginRegistrant registerWithRegistry:self]; + // Override point for customization after application launch. + return [super application:application didFinishLaunchingWithOptions:launchOptions]; +} + +@end diff --git a/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..3d43d11e66f4de3da27ed045ca4fe38ad8b48094 GIT binary patch literal 11112 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 P-1+_A+?hGkL;m(J7kc&K literal 0 HcmV?d00001 diff --git a/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..28c6bf03016f6c994b70f38d1b7346e5831b531f GIT binary patch literal 564 zcmV-40?Yl0P)Px$?ny*JR5%f>l)FnDQ543{x%ZCiu33$Wg!pQFfT_}?5Q|_VSlIbLC`dpoMXL}9 zHfd9&47Mo(7D231gb+kjFxZHS4-m~7WurTH&doVX2KI5sU4v(sJ1@T9eCIKPjsqSr z)C01LsCxk=72-vXmX}CQD#BD;Cthymh&~=f$Q8nn0J<}ZrusBy4PvRNE}+1ceuj8u z0mW5k8fmgeLnTbWHGwfKA3@PdZxhn|PypR&^p?weGftrtCbjF#+zk_5BJh7;0`#Wr zgDpM_;Ax{jO##IrT`Oz;MvfwGfV$zD#c2xckpcXC6oou4ML~ezCc2EtnsQTB4tWNg z?4bkf;hG7IMfhgNI(FV5Gs4|*GyMTIY0$B=_*mso9Ityq$m^S>15>-?0(zQ<8Qy<_TjHE33(?_M8oaM zyc;NxzRVK@DL6RJnX%U^xW0Gpg(lXp(!uK1v0YgHjs^ZXSQ|m#lV7ip7{`C_J2TxPmfw%h$|%acrYHt)Re^PB%O&&=~a zhS(%I#+V>J-vjIib^<+s%ludY7y^C(P8nmqn9fp!i+?vr`bziDE=bx`%2W#Xyrj|i z!XQ4v1%L`m{7KT7q+LZNB^h8Ha2e=`Wp65^0;J00)_^G=au=8Yo;1b`CV&@#=jIBo zjN^JNVfYSs)+kDdGe7`1&8!?MQYKS?DuHZf3iogk_%#9E|5S zWeHrmAo>P;ejX7mwq#*}W25m^ZI+{(Z8fI?4jM_fffY0nok=+88^|*_DwcW>mR#e+ zX$F_KMdb6sRz!~7KkyN0G(3XQ+;z3X%PZ4gh;n-%62U<*VUKNv(D&Q->Na@Xb&u5Q3`3DGf+a8O5x7c#7+R+EAYl@R5us)CIw z7sT@_y~Ao@uL#&^LIh&QceqiT^+lb0YbFZt_SHOtWA%mgPEKVNvVgCsXy{5+zl*X8 zCJe)Q@y>wH^>l4;h1l^Y*9%-23TSmE>q5nI@?mt%n;Sj4Qq`Z+ib)a*a^cJc%E9^J zB;4s+K@rARbcBLT5P=@r;IVnBMKvT*)ew*R;&8vu%?Z&S>s?8?)3*YawM0P4!q$Kv zMmKh3lgE~&w&v%wVzH3Oe=jeNT=n@Y6J6TdHWTjXfX~-=1A1Bw`EW8rn}MqeI34nh zexFeA?&C3B2(E?0{drE@DA2pu(A#ElY&6el60Rn|Qpn-FkfQ8M93AfWIr)drgDFEU zghdWK)^71EWCP(@(=c4kfH1Y(4iugD4fve6;nSUpLT%!)MUHs1!zJYy4y||C+SwQ! z)KM&$7_tyM`sljP2fz6&Z;jxRn{Wup8IOUx8D4uh&(=O zx-7$a;U><*5L^!%xRlw)vAbh;sdlR||& ze}8_8%)c2Fwy=F&H|LM+p{pZB5DKTx>Y?F1N%BlZkXf!}JeGuMZk~LPi7{cidvUGB zAJ4LVeNV%XO>LTrklB#^-;8nb;}6l;1oW&WS=Mz*Az!4cqqQzbOSFq`$Q%PfD7srM zpKgP-D_0XPTRX*hAqeq0TDkJ;5HB1%$3Np)99#16c{ zJImlNL(npL!W|Gr_kxl1GVmF5&^$^YherS7+~q$p zt}{a=*RiD2Ikv6o=IM1kgc7zqpaZ;OB)P!1zz*i3{U()Dq#jG)egvK}@uFLa`oyWZ zf~=MV)|yJn`M^$N%ul5);JuQvaU1r2wt(}J_Qgyy`qWQI`hEeRX0uC@c1(dQ2}=U$ tNIIaX+dr)NRWXcxoR{>fqI{SF_dm1Ylv~=3YHI)h002ovPDHLkV1g(pWS;;4 literal 0 HcmV?d00001 diff --git a/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ literal 0 HcmV?d00001 diff --git a/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 GIT binary patch literal 1716 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 literal 0 HcmV?d00001 diff --git a/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 literal 0 HcmV?d00001 diff --git a/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..75b2d164a5a98e212cca15ea7bf2ab5de5108680 GIT binary patch literal 3831 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 literal 0 HcmV?d00001 diff --git a/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/packages/share_extend/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/packages/share_extend/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/packages/share_extend/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/packages/share_extend/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/packages/share_extend/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/packages/share_extend/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/packages/share_extend/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/packages/share_extend/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/packages/share_extend/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/packages/share_extend/example/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/packages/share_extend/example/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/share_extend/example/ios/Runner/Base.lproj/Main.storyboard b/packages/share_extend/example/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/packages/share_extend/example/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/share_extend/example/ios/Runner/Info.plist b/packages/share_extend/example/ios/Runner/Info.plist new file mode 100644 index 0000000..e6c2691 --- /dev/null +++ b/packages/share_extend/example/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + share_extend_example + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + NSPhotoLibraryAddUsageDescription + App needs photo library permission for saving images + NSPhotoLibraryUsageDescription + Used to demonstrate image picker plugin + + diff --git a/packages/share_extend/example/ios/Runner/Runner-Bridging-Header.h b/packages/share_extend/example/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/packages/share_extend/example/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/packages/share_extend/example/ios/Runner/main.m b/packages/share_extend/example/ios/Runner/main.m new file mode 100644 index 0000000..dff6597 --- /dev/null +++ b/packages/share_extend/example/ios/Runner/main.m @@ -0,0 +1,9 @@ +#import +#import +#import "AppDelegate.h" + +int main(int argc, char* argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/packages/share_extend/example/lib/main.dart b/packages/share_extend/example/lib/main.dart new file mode 100644 index 0000000..b5ec2a1 --- /dev/null +++ b/packages/share_extend/example/lib/main.dart @@ -0,0 +1,123 @@ +import 'dart:async'; +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +import 'package:share_extend/share_extend.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:path_provider/path_provider.dart'; + +void main() => runApp(const MyApp()); + +class MyApp extends StatefulWidget { + const MyApp({super.key}); + + @override + State createState() => _MyAppState(); +} + +class _MyAppState extends State { + final _picker = ImagePicker(); + + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + return MaterialApp( + home: Scaffold( + appBar: AppBar( + title: const Text('Plugin example app'), + ), + body: Center( + child: Column( + children: [ + ElevatedButton( + style: ButtonStyle( + backgroundColor: + WidgetStateProperty.all(Colors.white70), + foregroundColor: WidgetStateProperty.all(Colors.black)), + onPressed: () { + ShareExtend.share("share text", "text", + sharePanelTitle: "share text title", + subject: "share text subject"); + }, + child: const Text("share text"), + ), + ElevatedButton( + style: ButtonStyle( + backgroundColor: + WidgetStateProperty.all(Colors.white70), + foregroundColor: WidgetStateProperty.all(Colors.black)), + onPressed: () async { + final res = + await _picker.pickImage(source: ImageSource.gallery); + if (res?.path != null) { + ShareExtend.share(res!.path, "image", + sharePanelTitle: "share image title", + subject: "share image subject"); + } + }, + child: const Text("share image"), + ), + ElevatedButton( + style: ButtonStyle( + backgroundColor: + WidgetStateProperty.all(Colors.white70), + foregroundColor: WidgetStateProperty.all(Colors.black)), + onPressed: () async { + final res = + await _picker.pickVideo(source: ImageSource.gallery); + if (res?.path != null) { + ShareExtend.share(res!.path, "video"); + } + }, + child: const Text("share video"), + ), + ElevatedButton( + style: ButtonStyle( + backgroundColor: + WidgetStateProperty.all(Colors.white70), + foregroundColor: WidgetStateProperty.all(Colors.black)), + onPressed: () { + _shareStorageFile(); + }, + child: const Text("share file"), + ), + ], + ), + ), + ), + ); + } + + ///share multiple images + + + Future _writeByteToImageFile(ByteData byteData) async { + Directory? dir = Platform.isAndroid + ? await getExternalStorageDirectory() + : await getApplicationDocumentsDirectory(); + File imageFile = File( + "${dir?.path}/flutter/${DateTime.now().millisecondsSinceEpoch}.png"); + imageFile.createSync(recursive: true); + imageFile.writeAsBytesSync(byteData.buffer.asUint8List(0)); + return imageFile.path; + } + + ///share the storage file + _shareStorageFile() async { + Directory? dir = Platform.isAndroid + ? await getExternalStorageDirectory() + : await getApplicationDocumentsDirectory(); + File testFile = File("${dir?.path}/flutter/test.txt"); + if (!await testFile.exists()) { + await testFile.create(recursive: true); + testFile.writeAsStringSync("test for share documents file"); + } + ShareExtend.share(testFile.path, "file"); + } +} diff --git a/packages/share_extend/example/pubspec.yaml b/packages/share_extend/example/pubspec.yaml new file mode 100644 index 0000000..a9f472f --- /dev/null +++ b/packages/share_extend/example/pubspec.yaml @@ -0,0 +1,79 @@ +name: share_extend_example +description: Demonstrates how to use the share_extend plugin. + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# Read more about versioning at semver.org. +version: 1.0.0+1 + +environment: + sdk: ">=2.17.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: any + path_provider: any + image_picker: any +# image_picker: +# git: +# url: git@github.com:miguelpruivo/plugins.git +# path: packages/image_picker +# ref: image_picker-Fix-#41046 + +dev_dependencies: + flutter_test: + sdk: flutter + + share_extend: + path: ../ + + + +# For information on the generic Dart part of this file, see the +# following page: https://www.dartlang.org/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.io/assets-and-images/#resolution-aware. + + # For details regarding adding assets from package dependencies, see + # https://flutter.io/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.io/custom-fonts/#from-packages diff --git a/packages/share_extend/example/test/widget_test.dart b/packages/share_extend/example/test/widget_test.dart new file mode 100644 index 0000000..0df88c8 --- /dev/null +++ b/packages/share_extend/example/test/widget_test.dart @@ -0,0 +1,25 @@ +// This is a basic Flutter widget test. +// To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter +// provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to +// find child widgets in the widget tree, read text, and verify that the values of widget properties +// are correct. + +//import 'package:flutter/material.dart'; +//import 'package:flutter_test/flutter_test.dart'; + +//import 'package:share_extend_example/main.dart'; + +void main() { +// testWidgets('Verify Platform version', (WidgetTester tester) async { +// // Build our app and trigger a frame. +// await tester.pumpWidget(new MyApp()); +// +// // Verify that platform version is retrieved. +// expect( +// find.byWidgetPredicate( +// (Widget widget) => +// widget is Text && widget.data.startsWith('Running on:'), +// ), +// findsOneWidget); +// }); +} diff --git a/packages/share_extend/ios/.gitignore b/packages/share_extend/ios/.gitignore new file mode 100644 index 0000000..710ec6c --- /dev/null +++ b/packages/share_extend/ios/.gitignore @@ -0,0 +1,36 @@ +.idea/ +.vagrant/ +.sconsign.dblite +.svn/ + +.DS_Store +*.swp +profile + +DerivedData/ +build/ +GeneratedPluginRegistrant.h +GeneratedPluginRegistrant.m + +.generated/ + +*.pbxuser +*.mode1v3 +*.mode2v3 +*.perspectivev3 + +!default.pbxuser +!default.mode1v3 +!default.mode2v3 +!default.perspectivev3 + +xcuserdata + +*.moved-aside + +*.pyc +*sync/ +Icon? +.tags* + +/Flutter/Generated.xcconfig diff --git a/packages/share_extend/ios/Assets/.gitkeep b/packages/share_extend/ios/Assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/packages/share_extend/ios/Classes/ShareExtendPlugin.h b/packages/share_extend/ios/Classes/ShareExtendPlugin.h new file mode 100644 index 0000000..b37955b --- /dev/null +++ b/packages/share_extend/ios/Classes/ShareExtendPlugin.h @@ -0,0 +1,4 @@ +#import + +@interface ShareExtendPlugin : NSObject +@end diff --git a/packages/share_extend/ios/Classes/ShareExtendPlugin.m b/packages/share_extend/ios/Classes/ShareExtendPlugin.m new file mode 100644 index 0000000..910f825 --- /dev/null +++ b/packages/share_extend/ios/Classes/ShareExtendPlugin.m @@ -0,0 +1,75 @@ +#import "ShareExtendPlugin.h" + +@implementation ShareExtendPlugin + ++ (void)registerWithRegistrar:(NSObject*)registrar { + FlutterMethodChannel* shareChannel = [FlutterMethodChannel + methodChannelWithName:@"com.zt.shareextend/share_extend" + binaryMessenger:[registrar messenger]]; + + [shareChannel setMethodCallHandler:^(FlutterMethodCall *call, FlutterResult result) { + if ([@"share" isEqualToString:call.method]) { + NSDictionary *arguments = [call arguments]; + NSArray *array = arguments[@"list"]; + NSString *shareType = arguments[@"type"]; + NSString *subject = arguments[@"subject"]; + + if (array.count == 0) { + result( + [FlutterError errorWithCode:@"error" message:@"Non-empty list expected" details:nil]); + return; + } + + NSNumber *originX = arguments[@"originX"]; + NSNumber *originY = arguments[@"originY"]; + NSNumber *originWidth = arguments[@"originWidth"]; + NSNumber *originHeight = arguments[@"originHeight"]; + + CGRect originRect = CGRectZero; + if (originX != nil && originY != nil && originWidth != nil && originHeight != nil) { + originRect = CGRectMake([originX doubleValue], [originY doubleValue], + [originWidth doubleValue], [originHeight doubleValue]); + } + + if ([shareType isEqualToString:@"text"]) { + [self share:array atSource:originRect withSubject:subject]; + result(nil); + } else if ([shareType isEqualToString:@"image"]) { + NSMutableArray * imageArray = [[NSMutableArray alloc] init]; + for (NSString * path in array) { + UIImage *image = [UIImage imageWithContentsOfFile:path]; + [imageArray addObject:image]; + } + [self share:imageArray atSource:originRect withSubject:subject]; + } else { + NSMutableArray * urlArray = [[NSMutableArray alloc] init]; + for (NSString * path in array) { + NSURL *url = [NSURL fileURLWithPath:path]; + [urlArray addObject:url]; + } + [self share:urlArray atSource:originRect withSubject:subject]; + result(nil); + } + } else { + result(FlutterMethodNotImplemented); + } + }]; +} + ++ (void)share:(NSArray *)sharedItems atSource:(CGRect)origin withSubject:(NSString *) subject { + UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:sharedItems applicationActivities:nil]; + + UIViewController *controller =[UIApplication sharedApplication].keyWindow.rootViewController; + activityViewController.popoverPresentationController.sourceView = controller.view; + + if (CGRectIsEmpty(origin)) { + origin = CGRectMake(0, 0, controller.view.bounds.size.width, controller.view.bounds.size.width /2); + } + activityViewController.popoverPresentationController.sourceRect = origin; + + [activityViewController setValue:subject forKey:@"subject"]; + + [controller presentViewController:activityViewController animated:YES completion:nil]; +} + +@end diff --git a/packages/share_extend/ios/share_extend.podspec b/packages/share_extend/ios/share_extend.podspec new file mode 100644 index 0000000..21f8258 --- /dev/null +++ b/packages/share_extend/ios/share_extend.podspec @@ -0,0 +1,21 @@ +# +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html +# +Pod::Spec.new do |s| + s.name = 'share_extend' + s.version = '0.0.1' + s.summary = 'A new flutter plugin project.' + s.description = <<-DESC +A new flutter plugin project. + DESC + s.homepage = 'http://example.com' + s.license = { :file => '../LICENSE' } + s.author = { 'Your Company' => 'email@example.com' } + s.source = { :path => '.' } + s.source_files = 'Classes/**/*' + s.public_header_files = 'Classes/**/*.h' + s.dependency 'Flutter' + + s.ios.deployment_target = '12.0' +end + diff --git a/packages/share_extend/lib/share_extend.dart b/packages/share_extend/lib/share_extend.dart new file mode 100644 index 0000000..1891407 --- /dev/null +++ b/packages/share_extend/lib/share_extend.dart @@ -0,0 +1,87 @@ +/// A flutter plugin to share text, image, file with system ui. +/// It is compatible with both android and ios. +/// +/// +/// A open source authorized by zhouteng [https://github.com/zhouteng0217/ShareExtend](https://github.com/zhouteng0217/ShareExtend). + +import 'dart:async'; +import 'package:flutter/services.dart'; + +/// Plugin for summoning a platform share sheet. +class ShareExtend { + /// [MethodChannel] used to communicate with the platform side. + static const MethodChannel _channel = + MethodChannel('com.zt.shareextend/share_extend'); + + /// method to share with system ui + /// It uses the ACTION_SEND Intent on Android and UIActivityViewController + /// on iOS. + /// [list] can be text or path list + /// [type] "text", "image", "audio", "video" or "file" + /// [sharePositionOrigin] only supports iPad os + /// [sharePanelTitle] only supports android (some devices may not support) + /// [subject] Intent.EXTRA_SUBJECT on Android and "subject" on iOS. + /// [extraText] only supports android for Intent.EXTRA_TEXT when sharing image or file. + /// + static Future shareMultiple(List list, String type, + {Rect? sharePositionOrigin, + String? sharePanelTitle, + String subject = "", + List? extraTexts}) { + assert(list.isNotEmpty); + return _shareInner(list, type, + sharePositionOrigin: sharePositionOrigin, + subject: subject, + sharePanelTitle: sharePanelTitle, + extraTexts: extraTexts); + } + + /// method to share with system ui + /// It uses the ACTION_SEND Intent on Android and UIActivityViewController + /// on iOS. + /// [list] can be text or path list + /// [type] "text", "image", "audio", "video" or "file" + /// [sharePositionOrigin] only supports iPad os + /// [sharePanelTitle] only supports android (some devices may not support) + /// [subject] Intent.EXTRA_SUBJECT on Android and "subject" on iOS. + /// [extraText] only supports android for Intent.EXTRA_TEXT when sharing image or file. + /// + static Future share(String text, String type, + {Rect? sharePositionOrigin, + String? sharePanelTitle, + String subject = "", + String extraText = ""}) { + assert(text.isNotEmpty); + List list = [text]; + return _shareInner( + list, + type, + sharePositionOrigin: sharePositionOrigin, + sharePanelTitle: sharePanelTitle, + subject: subject, + extraTexts: [extraText], + ); + } + + static Future _shareInner(List list, String type, + {Rect? sharePositionOrigin, + String? sharePanelTitle, + String? subject, + List? extraTexts}) { + assert(list.isNotEmpty); + final Map params = { + 'list': list, + 'type': type, + 'sharePanelTitle': sharePanelTitle, + 'subject': subject, + 'extraTexts': extraTexts + }; + if (sharePositionOrigin != null) { + params['originX'] = sharePositionOrigin.left; + params['originY'] = sharePositionOrigin.top; + params['originWidth'] = sharePositionOrigin.width; + params['originHeight'] = sharePositionOrigin.height; + } + return _channel.invokeMethod('share', params); + } +} diff --git a/packages/share_extend/pubspec.yaml b/packages/share_extend/pubspec.yaml new file mode 100644 index 0000000..6f682de --- /dev/null +++ b/packages/share_extend/pubspec.yaml @@ -0,0 +1,26 @@ +name: share_extend +description: A Flutter plugin for Android and iOS for sharing text, image, video and file with system ui. +version: 2.0.1 +author: zhouteng +homepage: https://github.com/zhouteng0217/ShareExtend + +environment: + sdk: '>=2.17.0 <4.0.0' + flutter: ">=2.12.0" + +dependencies: + flutter: + sdk: flutter + +# For information on the generic Dart part of this file, see the +# following page: https://www.dartlang.org/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + plugin: + platforms: + android: + package: com.zt.shareextend + pluginClass: ShareExtendPlugin + ios: + pluginClass: ShareExtendPlugin diff --git a/pubspec.yaml b/pubspec.yaml index 463934f..878ecfa 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -73,7 +73,8 @@ dependencies: #open_file_safe: ^3.2.3 - hyj_share_extend: ^1.0.0 + share_extend: + path: packages/share_extend universal_io: ^2.2.2 universal_html: ^2.2.4 From d3142fbd311c59164ff983d90e9d09617c7f9d31 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Tue, 10 Sep 2024 00:57:21 -0300 Subject: [PATCH 23/73] Update pubspec.yaml --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 878ecfa..f74ccb4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: sqflite: ^2.3.3+1 #^2.0.2 sqflite_common_ffi: ^2.3.3 - sqflite_common_ffi_web: ^0.4.5+2 + sqflite_common_ffi_web: ^0.4.4 responsive_framework: ^1.5.1 ###^0.2.0 From 58860d1a6906e9143be8d21c85ac42b4557e5cb7 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 20 Sep 2024 23:06:40 -0300 Subject: [PATCH 24/73] Update camera.dart --- lib/utils/camera.dart | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/utils/camera.dart b/lib/utils/camera.dart index 1a9bddb..5c19dc0 100644 --- a/lib/utils/camera.dart +++ b/lib/utils/camera.dart @@ -17,8 +17,8 @@ class CameraService { await _picker.pickImage( source: ImageSource.camera, preferredCameraDevice: CameraDevice.front, - imageQuality: 70, - maxHeight: 1080, + imageQuality: 90, + maxHeight: 1280, //imageQuality: 70, ).then((value) async { if(value != null){ @@ -46,8 +46,8 @@ class CameraService { try{ await _picker.pickImage( source: ImageSource.gallery, - imageQuality: 70, - maxHeight: 1080, + imageQuality: 90, + maxHeight: 1280, ).then((value) async { if(value != null){ if(kIsWeb){ From c312c110d08cfd44c97b3e4c6b570c9f1b15c9bd Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Sat, 21 Sep 2024 01:45:46 -0300 Subject: [PATCH 25/73] correcao lib pdf --- ios/assecontservices.podspec | 2 +- lib/helper/db_ponto.dart | 3 +- .../flutter_html_to_pdf_plus/CHANGELOG.md | 8 ++ packages/flutter_html_to_pdf_plus/LICENSE | 21 ++++ packages/flutter_html_to_pdf_plus/README.md | 80 ++++++++++++ .../analysis_options.yaml | 4 + .../android/build.gradle | 68 +++++++++++ .../android/gradle.properties | 8 ++ .../android/settings.gradle | 1 + .../android/src/main/AndroidManifest.xml | 3 + .../main/kotlin/android/print/PdfPrinter.kt | 67 ++++++++++ .../FlutterHtmlToPdfPlugin.kt | 52 ++++++++ .../HtmlToPdfConverter.kt | 88 ++++++++++++++ .../FlutterHtmlToPdfPluginTest.kt | 27 ++++ .../ios/Classes/FileHelper.swift | 12 ++ .../ios/Classes/FlutterHtmlToPdfPlugin.h | 4 + .../ios/Classes/FlutterHtmlToPdfPlugin.m | 16 +++ .../ios/Classes/PDFCreator.swift | 65 ++++++++++ .../Classes/SwiftFlutterHtmlToPdfPlugin.swift | 69 +++++++++++ .../ios/flutter_html_to_pdf_plus.podspec | 21 ++++ .../lib/flutter_html_to_pdf_plus.dart | 5 + .../lib/src/file_utils.dart | 30 +++++ .../lib/src/flutter_html_to_pdf_plus.dart | 115 ++++++++++++++++++ .../lib/src/pdf_print_configuration.dart | 45 +++++++ .../lib/src/print_config_enums.dart | 110 +++++++++++++++++ .../flutter_html_to_pdf_plus/pubspec.lock | 72 +++++++++++ .../flutter_html_to_pdf_plus/pubspec.yaml | 25 ++++ pubspec.yaml | 5 +- 28 files changed, 1022 insertions(+), 4 deletions(-) create mode 100644 packages/flutter_html_to_pdf_plus/CHANGELOG.md create mode 100644 packages/flutter_html_to_pdf_plus/LICENSE create mode 100644 packages/flutter_html_to_pdf_plus/README.md create mode 100644 packages/flutter_html_to_pdf_plus/analysis_options.yaml create mode 100644 packages/flutter_html_to_pdf_plus/android/build.gradle create mode 100644 packages/flutter_html_to_pdf_plus/android/gradle.properties create mode 100644 packages/flutter_html_to_pdf_plus/android/settings.gradle create mode 100644 packages/flutter_html_to_pdf_plus/android/src/main/AndroidManifest.xml create mode 100644 packages/flutter_html_to_pdf_plus/android/src/main/kotlin/android/print/PdfPrinter.kt create mode 100644 packages/flutter_html_to_pdf_plus/android/src/main/kotlin/com/originoss/flutter_html_to_pdf_plus/FlutterHtmlToPdfPlugin.kt create mode 100644 packages/flutter_html_to_pdf_plus/android/src/main/kotlin/com/originoss/flutter_html_to_pdf_plus/HtmlToPdfConverter.kt create mode 100644 packages/flutter_html_to_pdf_plus/android/src/test/kotlin/com/afur/flutter_html_to_pdf/FlutterHtmlToPdfPluginTest.kt create mode 100644 packages/flutter_html_to_pdf_plus/ios/Classes/FileHelper.swift create mode 100644 packages/flutter_html_to_pdf_plus/ios/Classes/FlutterHtmlToPdfPlugin.h create mode 100644 packages/flutter_html_to_pdf_plus/ios/Classes/FlutterHtmlToPdfPlugin.m create mode 100644 packages/flutter_html_to_pdf_plus/ios/Classes/PDFCreator.swift create mode 100644 packages/flutter_html_to_pdf_plus/ios/Classes/SwiftFlutterHtmlToPdfPlugin.swift create mode 100644 packages/flutter_html_to_pdf_plus/ios/flutter_html_to_pdf_plus.podspec create mode 100644 packages/flutter_html_to_pdf_plus/lib/flutter_html_to_pdf_plus.dart create mode 100644 packages/flutter_html_to_pdf_plus/lib/src/file_utils.dart create mode 100644 packages/flutter_html_to_pdf_plus/lib/src/flutter_html_to_pdf_plus.dart create mode 100644 packages/flutter_html_to_pdf_plus/lib/src/pdf_print_configuration.dart create mode 100644 packages/flutter_html_to_pdf_plus/lib/src/print_config_enums.dart create mode 100644 packages/flutter_html_to_pdf_plus/pubspec.lock create mode 100644 packages/flutter_html_to_pdf_plus/pubspec.yaml diff --git a/ios/assecontservices.podspec b/ios/assecontservices.podspec index 8fb935f..9115a4e 100644 --- a/ios/assecontservices.podspec +++ b/ios/assecontservices.podspec @@ -15,7 +15,7 @@ A new Flutter project. s.source = { :path => '.' } s.source_files = 'Classes/**/*' s.dependency 'Flutter' - s.platform = :ios, '9.0' + s.platform = :ios, '12.0' # Flutter.framework does not contain a i386 slice. s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } diff --git a/lib/helper/db_ponto.dart b/lib/helper/db_ponto.dart index b8849d8..bf9e6e1 100644 --- a/lib/helper/db_ponto.dart +++ b/lib/helper/db_ponto.dart @@ -16,11 +16,12 @@ class DBPonto{ DBPonto._internal() { if(Config.isWin) win.sqfliteFfiInit(); init(); + print('DBPonto'); } Future init() async { - versao = await getVersion(); try { + versao = await getVersion(); db; } catch (e) {} } diff --git a/packages/flutter_html_to_pdf_plus/CHANGELOG.md b/packages/flutter_html_to_pdf_plus/CHANGELOG.md new file mode 100644 index 0000000..78b6ee1 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/CHANGELOG.md @@ -0,0 +1,8 @@ +# 0.1.0 + +Initial release of this updated version of the plugin (forked from [flutter_html_to_pdf](https://github.com/afur/flutter_html_to_pdf)) + +Features: +- Added support for generating PDF from HTML templates +- Added support for displaying images in the PDF +- Added support for customizing margins, page size and orientation \ No newline at end of file diff --git a/packages/flutter_html_to_pdf_plus/LICENSE b/packages/flutter_html_to_pdf_plus/LICENSE new file mode 100644 index 0000000..75de305 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/flutter_html_to_pdf_plus/README.md b/packages/flutter_html_to_pdf_plus/README.md new file mode 100644 index 0000000..7f13923 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/README.md @@ -0,0 +1,80 @@ +# flutter_html_to_pdf_plus + +[![pub package](https://img.shields.io/pub/v/flutter_html_to_pdf_plus.svg)](https://pub.dartlang.org/packages/flutter_html_to_pdf_plus) + +Flutter plugin for generating PDF files from HTML + +### Usage + +#### From a raw HTML content + +```dart +var targetPath = "/your/sample/path"; +var targetFileName = "example_pdf_file" + +var generatedPdfFile = await FlutterHtmlToPdf.convertFromHtmlContent( + content: htmlContent, + configuration: PdfPrinterConfiguration( + targetPath: targetPath, + targetFileName: targetFileName, + margins: PdfPrinterMargins(top: 10, bottom: 10, left: 10, right: 10), + orientation: PrintOrientation.Landscape, + printSize: PrintSize.A4 + ), +); +``` + +#### From an HTML file +```dart +var file = File("/sample_path/example.html"); +var generatedPdfFile = await FlutterHtmlToPdf.convertFromHtmlFile( + htmlFile: file, + configuration: PdfPrinterConfiguration( + targetPath: targetPath, + targetFileName: targetFileName, + margins: PdfPrinterMargins(top: 10, bottom: 10, left: 10, right: 10), + orientation: PrintOrientation.Landscape, + printSize: PrintSize.A4 + ), +); +``` + +#### From an HTML file path +```dart +var filePath = "/sample_path/example.html"; +var generatedPdfFile = await FlutterHtmlToPdf.convertFromHtmlFilePath( + htmlFilePath: filePath, + configuration: PdfPrinterConfiguration( + targetPath: targetPath, + targetFileName: targetFileName, + margins: PdfPrinterMargins(top: 10, bottom: 10, left: 10, right: 10), + orientation: PrintOrientation.Landscape, + printSize: PrintSize.A4 + ), +); +``` + +> /!\ Caveats : Customization of orientation is not supported on iOS. Any config will be ignored. + +#### Images +If your want to add local image from device to your **HTML** you need to pass path to image as ***src*** value. + +```html +web-img +``` +or if you want to use the image ***File*** object +```html +web-img +``` + +Many images inside your document can significantly affect the final file size so we suggest to use [flutter_image_compress](https://github.com/OpenFlutter/flutter_image_compress) plugin to compress images before generating PDF. + +## Contributing + +If you want to contribute, please submit a [pull request](https://github.com/originoss/flutter_html_to_pdf_plus/pulls) or [create an issue](https://github.com/originoss/flutter_html_to_pdf_plus/issues). + +## Credits + +- Thanks to [Afur](https://github.com/afur) for the initial work on this plugin +- Thanks to [raister21](https://github.com/raister21) for their work on PDF Size & Orientation +- Thanks to [wiseminds](https://github.com/wiseminds) for the inspiration for margins customization diff --git a/packages/flutter_html_to_pdf_plus/analysis_options.yaml b/packages/flutter_html_to_pdf_plus/analysis_options.yaml new file mode 100644 index 0000000..a5744c1 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/analysis_options.yaml @@ -0,0 +1,4 @@ +include: package:flutter_lints/flutter.yaml + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/packages/flutter_html_to_pdf_plus/android/build.gradle b/packages/flutter_html_to_pdf_plus/android/build.gradle new file mode 100644 index 0000000..f890998 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/android/build.gradle @@ -0,0 +1,68 @@ +group 'com.originoss.flutter_html_to_pdf_plus' +version '1.0-SNAPSHOT' + +buildscript { + ext.kotlin_version = '1.7.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.3.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' + +android { + if (project.android.hasProperty("namespace")) { + namespace 'com.originoss.flutter_html_to_pdf_plus' + } + + compileSdk 34 + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + test.java.srcDirs += 'src/test/kotlin' + } + + defaultConfig { + minSdkVersion 19 + } + + dependencies { + testImplementation 'org.jetbrains.kotlin:kotlin-test' + testImplementation 'org.mockito:mockito-core:5.0.0' + } + + testOptions { + unitTests.all { + useJUnitPlatform() + + testLogging { + events "passed", "skipped", "failed", "standardOut", "standardError" + outputs.upToDateWhen {false} + showStandardStreams = true + } + } + } +} diff --git a/packages/flutter_html_to_pdf_plus/android/gradle.properties b/packages/flutter_html_to_pdf_plus/android/gradle.properties new file mode 100644 index 0000000..80db790 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/android/gradle.properties @@ -0,0 +1,8 @@ +org.gradle.jvmargs=-Xmx1536M \ +--add-exports=java.base/sun.nio.ch=ALL-UNNAMED \ +--add-opens=java.base/java.lang=ALL-UNNAMED \ +--add-opens=java.base/java.lang.reflect=ALL-UNNAMED \ +--add-opens=java.base/java.io=ALL-UNNAMED \ +--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED +android.useAndroidX=true +android.enableJetifier=true diff --git a/packages/flutter_html_to_pdf_plus/android/settings.gradle b/packages/flutter_html_to_pdf_plus/android/settings.gradle new file mode 100644 index 0000000..ee71b9b --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/android/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'flutter_html_to_pdf_plus' diff --git a/packages/flutter_html_to_pdf_plus/android/src/main/AndroidManifest.xml b/packages/flutter_html_to_pdf_plus/android/src/main/AndroidManifest.xml new file mode 100644 index 0000000..4e78de3 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/android/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + diff --git a/packages/flutter_html_to_pdf_plus/android/src/main/kotlin/android/print/PdfPrinter.kt b/packages/flutter_html_to_pdf_plus/android/src/main/kotlin/android/print/PdfPrinter.kt new file mode 100644 index 0000000..aeb9a18 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/android/src/main/kotlin/android/print/PdfPrinter.kt @@ -0,0 +1,67 @@ +package android.print + +import android.os.Build +import android.os.CancellationSignal +import android.os.ParcelFileDescriptor +import java.io.File + +class PdfPrinter(private val printAttributes: PrintAttributes) { + + interface Callback { + fun onSuccess(filePath: String) + fun onFailure() + } + + + fun print( + printAdapter: PrintDocumentAdapter, + path: File, + fileName: String, + callback: Callback + ) { + // Support for min API 16 is required + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + printAdapter.onLayout( + null, + printAttributes, + null, + object : PrintDocumentAdapter.LayoutResultCallback() { + + override fun onLayoutFinished(info: PrintDocumentInfo, changed: Boolean) { + printAdapter.onWrite(arrayOf(PageRange.ALL_PAGES), + getOutputFile(path, fileName), + CancellationSignal(), + object : PrintDocumentAdapter.WriteResultCallback() { + + override fun onWriteFinished(pages: Array) { + super.onWriteFinished(pages) + + if (pages.isEmpty()) { + callback.onFailure() + } + + File(path, fileName).let { + callback.onSuccess(it.absolutePath) + } + + } + }) + } + }, + null + ) + } + } +} + + +private fun getOutputFile(path: File, fileName: String): ParcelFileDescriptor { + if (!path.exists()) { + path.mkdirs() + } + + File(path, fileName).let { + it.createNewFile() + return ParcelFileDescriptor.open(it, ParcelFileDescriptor.MODE_READ_WRITE) + } +} diff --git a/packages/flutter_html_to_pdf_plus/android/src/main/kotlin/com/originoss/flutter_html_to_pdf_plus/FlutterHtmlToPdfPlugin.kt b/packages/flutter_html_to_pdf_plus/android/src/main/kotlin/com/originoss/flutter_html_to_pdf_plus/FlutterHtmlToPdfPlugin.kt new file mode 100644 index 0000000..9debd1f --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/android/src/main/kotlin/com/originoss/flutter_html_to_pdf_plus/FlutterHtmlToPdfPlugin.kt @@ -0,0 +1,52 @@ +package com.originoss.flutter_html_to_pdf_plus + +import android.content.Context +import androidx.annotation.NonNull + +import io.flutter.embedding.engine.plugins.FlutterPlugin +import io.flutter.plugin.common.MethodCall +import io.flutter.plugin.common.MethodChannel +import io.flutter.plugin.common.MethodChannel.MethodCallHandler +import io.flutter.plugin.common.MethodChannel.Result + +/** FlutterHtmlToPdfPlugin */ +class FlutterHtmlToPdfPlugin: FlutterPlugin, MethodCallHandler { + private lateinit var channel : MethodChannel + private lateinit var applicationContext: Context + + override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { + channel = MethodChannel(flutterPluginBinding.binaryMessenger, "flutter_html_to_pdf_plus") + channel.setMethodCallHandler(this) + + applicationContext = flutterPluginBinding.applicationContext + } + + override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) { + if (call.method == "convertHtmlToPdf") { + convertHtmlToPdf(call, result) + } else { + result.notImplemented() + } + } + + override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { + channel.setMethodCallHandler(null) + } + + private fun convertHtmlToPdf(call: MethodCall, result: Result) { + val htmlFilePath = call.argument("htmlFilePath") + val printSize = call.argument("printSize") + val orientation = call.argument("orientation") + val margins = call.argument>("margins") + + HtmlToPdfConverter().convert(htmlFilePath!!, applicationContext, printSize!!, orientation!!, margins!!, object : HtmlToPdfConverter.Callback { + override fun onSuccess(filePath: String) { + result.success(filePath) + } + + override fun onFailure() { + result.error("ERROR", "Unable to convert html to pdf document!", "") + } + }) + } +} diff --git a/packages/flutter_html_to_pdf_plus/android/src/main/kotlin/com/originoss/flutter_html_to_pdf_plus/HtmlToPdfConverter.kt b/packages/flutter_html_to_pdf_plus/android/src/main/kotlin/com/originoss/flutter_html_to_pdf_plus/HtmlToPdfConverter.kt new file mode 100644 index 0000000..600eb1f --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/android/src/main/kotlin/com/originoss/flutter_html_to_pdf_plus/HtmlToPdfConverter.kt @@ -0,0 +1,88 @@ +package com.originoss.flutter_html_to_pdf_plus + +import android.annotation.SuppressLint +import android.content.Context +import android.os.Build +import android.print.PdfPrinter +import android.print.PrintAttributes +import android.webkit.WebView +import android.webkit.WebViewClient + +import java.io.File + + +class HtmlToPdfConverter { + + interface Callback { + fun onSuccess(filePath: String) + fun onFailure() + } + + @SuppressLint("SetJavaScriptEnabled") + fun convert(filePath: String, applicationContext: Context, printSize: String, orientation: String, margins: List, callback: Callback) { + val webView = WebView(applicationContext) + val htmlContent = File(filePath).readText(Charsets.UTF_8) + webView.settings.javaScriptEnabled = true + webView.settings.javaScriptCanOpenWindowsAutomatically = true + webView.settings.allowFileAccess = true + webView.loadDataWithBaseURL(null, htmlContent, "text/HTML", "UTF-8", null) + webView.webViewClient = object : WebViewClient() { + override fun onPageFinished(view: WebView, url: String) { + super.onPageFinished(view, url) + createPdfFromWebView(webView, applicationContext, printSize, orientation, margins, callback) + } + } + } + + fun createPdfFromWebView(webView: WebView, applicationContext: Context, printSize: String, orientation: String, margins: List, callback: Callback) { + val path = applicationContext.filesDir + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + var mediaSize = PrintAttributes.MediaSize.ISO_A4 + + when (printSize) { + "A0" -> mediaSize = PrintAttributes.MediaSize.ISO_A0 + "A1" -> mediaSize = PrintAttributes.MediaSize.ISO_A1 + "A2" -> mediaSize = PrintAttributes.MediaSize.ISO_A2 + "A3" -> mediaSize = PrintAttributes.MediaSize.ISO_A3 + "A4" -> mediaSize = PrintAttributes.MediaSize.ISO_A4 + "A5" -> mediaSize = PrintAttributes.MediaSize.ISO_A5 + "A6" -> mediaSize = PrintAttributes.MediaSize.ISO_A6 + "A7" -> mediaSize = PrintAttributes.MediaSize.ISO_A7 + "A8" -> mediaSize = PrintAttributes.MediaSize.ISO_A8 + "A9" -> mediaSize = PrintAttributes.MediaSize.ISO_A9 + "A10" -> mediaSize = PrintAttributes.MediaSize.ISO_A10 + } + + when (orientation) { + "LANDSCAPE" -> mediaSize = mediaSize.asLandscape() + "PORTRAIT" -> mediaSize = mediaSize.asPortrait() + } + + val attributes = PrintAttributes.Builder() + .setMediaSize(mediaSize) + .setResolution(PrintAttributes.Resolution("pdf", "pdf", 600, 600)) + .setMinMargins(PrintAttributes.Margins(margins[0], margins[1], margins[2], margins[3])).build() + + val printer = PdfPrinter(attributes) + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + val adapter = webView.createPrintDocumentAdapter(temporaryDocumentName) + + printer.print(adapter, path, temporaryFileName, object : PdfPrinter.Callback { + override fun onSuccess(filePath: String) { + callback.onSuccess(filePath) + } + + override fun onFailure() { + callback.onFailure() + } + }) + } + } + } + + companion object { + const val temporaryDocumentName = "TemporaryDocumentName" + const val temporaryFileName = "TemporaryDocumentFile.pdf" + } +} \ No newline at end of file diff --git a/packages/flutter_html_to_pdf_plus/android/src/test/kotlin/com/afur/flutter_html_to_pdf/FlutterHtmlToPdfPluginTest.kt b/packages/flutter_html_to_pdf_plus/android/src/test/kotlin/com/afur/flutter_html_to_pdf/FlutterHtmlToPdfPluginTest.kt new file mode 100644 index 0000000..08f815f --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/android/src/test/kotlin/com/afur/flutter_html_to_pdf/FlutterHtmlToPdfPluginTest.kt @@ -0,0 +1,27 @@ +package com.originoss.flutter_html_to_pdf_plus + +import io.flutter.plugin.common.MethodCall +import io.flutter.plugin.common.MethodChannel +import kotlin.test.Test +import org.mockito.Mockito + +/* + * This demonstrates a simple unit test of the Kotlin portion of this plugin's implementation. + * + * Once you have built the plugin's example app, you can run these tests from the command + * line by running `./gradlew testDebugUnitTest` in the `example/android/` directory, or + * you can run them directly from IDEs that support JUnit such as Android Studio. + */ + +internal class FlutterHtmlToPdfPluginTest { + @Test + fun onMethodCall_getPlatformVersion_returnsExpectedValue() { + val plugin = FlutterHtmlToPdfPlugin() + + val call = MethodCall("getPlatformVersion", null) + val mockResult: MethodChannel.Result = Mockito.mock(MethodChannel.Result::class.java) + plugin.onMethodCall(call, mockResult) + + Mockito.verify(mockResult).success("Android " + android.os.Build.VERSION.RELEASE) + } +} diff --git a/packages/flutter_html_to_pdf_plus/ios/Classes/FileHelper.swift b/packages/flutter_html_to_pdf_plus/ios/Classes/FileHelper.swift new file mode 100644 index 0000000..362e791 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/ios/Classes/FileHelper.swift @@ -0,0 +1,12 @@ +import UIKit + +class FileHelper { + + /** + Creates string with content of provided file + */ + class func getContent(from filePath: String) -> String { + let fileURL = URL(fileURLWithPath: filePath) + return try! String(contentsOf: fileURL, encoding: String.Encoding.utf8) + } +} diff --git a/packages/flutter_html_to_pdf_plus/ios/Classes/FlutterHtmlToPdfPlugin.h b/packages/flutter_html_to_pdf_plus/ios/Classes/FlutterHtmlToPdfPlugin.h new file mode 100644 index 0000000..b4214c9 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/ios/Classes/FlutterHtmlToPdfPlugin.h @@ -0,0 +1,4 @@ +#import + +@interface FlutterHtmlToPdfPlugin : NSObject +@end diff --git a/packages/flutter_html_to_pdf_plus/ios/Classes/FlutterHtmlToPdfPlugin.m b/packages/flutter_html_to_pdf_plus/ios/Classes/FlutterHtmlToPdfPlugin.m new file mode 100644 index 0000000..0c5b4f7 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/ios/Classes/FlutterHtmlToPdfPlugin.m @@ -0,0 +1,16 @@ +#import "FlutterHtmlToPdfPlugin.h" +#if __has_include() +#import +#else +// Support project import fallback if the generated compatibility header +// is not copied when this plugin is created as a library. +// https://forums.swift.org/t/swift-static-libraries-dont-copy-generated-objective-c-header/19816 +#import "flutter_html_to_pdf_plus-Swift.h" +#endif + +@implementation FlutterHtmlToPdfPlugin +UIViewController *_viewController; + ++ (void)registerWithRegistrar:(NSObject*)registrar { + [SwiftFlutterHtmlToPdfPlugin registerWithRegistrar:registrar]; +}@end diff --git a/packages/flutter_html_to_pdf_plus/ios/Classes/PDFCreator.swift b/packages/flutter_html_to_pdf_plus/ios/Classes/PDFCreator.swift new file mode 100644 index 0000000..21c418f --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/ios/Classes/PDFCreator.swift @@ -0,0 +1,65 @@ +import UIKit + +class PDFCreator { + + /** + Creates a PDF using the given print formatter and saves it to the user's document directory. + - returns: The generated PDF path. + */ + class func create(printFormatter: UIPrintFormatter, width: Double, height: Double, orientation: String, margins: [Int]?) -> URL { + + // assign the print formatter to the print page renderer + let renderer = UIPrintPageRenderer() + renderer.addPrintFormatter(printFormatter, startingAtPageAt: 0) + + // assign paperRect and printableRect values + let page = CGRect(x: 0, y: 0, width: width, height: height) + let printable = CGRect(x: Double(margins![0]), y: Double(margins![1]), width: width - Double(margins![0]) - Double(margins![2]), height: height - Double(margins![1]) - Double(margins![3])) + + renderer.setValue(page, forKey: "paperRect") + renderer.setValue(printable, forKey: "printableRect") + + // create pdf context and draw each page + let pdfData = NSMutableData() + UIGraphicsBeginPDFContextToData(pdfData, .zero, nil) + + for i in 0.. [String] { + do { + let regex = try NSRegularExpression(pattern: regex) + let nsString = text as NSString + let results = regex.matches(in: text, range: NSRange(location: 0, length: nsString.length)) + return results.map { nsString.substring(with: $0.range)} + } catch let error { + print("invalid regex: \(error.localizedDescription)") + return [] + } + } +} diff --git a/packages/flutter_html_to_pdf_plus/ios/Classes/SwiftFlutterHtmlToPdfPlugin.swift b/packages/flutter_html_to_pdf_plus/ios/Classes/SwiftFlutterHtmlToPdfPlugin.swift new file mode 100644 index 0000000..44eb88b --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/ios/Classes/SwiftFlutterHtmlToPdfPlugin.swift @@ -0,0 +1,69 @@ +import Flutter +import UIKit +import WebKit + +public class SwiftFlutterHtmlToPdfPlugin: NSObject, FlutterPlugin{ + var wkWebView : WKWebView! + var urlObservation: NSKeyValueObservation? + + public static func register(with registrar: FlutterPluginRegistrar) { + let channel = FlutterMethodChannel(name: "flutter_html_to_pdf_plus", binaryMessenger: registrar.messenger()) + let instance = SwiftFlutterHtmlToPdfPlugin() + registrar.addMethodCallDelegate(instance, channel: channel) + } + + public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { + switch call.method { + case "convertHtmlToPdf": + let args = call.arguments as? [String: Any] + let htmlFilePath = args!["htmlFilePath"] as? String + let width = Double(args!["width"] as! Int) + let height = Double(args!["height"] as! Int) + let orientation = args!["orientation"] + let margins = args!["margins"] as? [Int] + + let viewControler = UIApplication.shared.delegate?.window?!.rootViewController + wkWebView = WKWebView.init(frame: CGRect(origin: CGPoint(x:0, y:0), size: CGSize(width:width, height: height))) + wkWebView.isHidden = true + wkWebView.tag = 100 + viewControler?.view.addSubview(wkWebView) + + // the `position: fixed` element not working as expected + let contentController = wkWebView.configuration.userContentController + contentController.addUserScript(WKUserScript(source: "document.documentElement.style.webkitUserSelect='none';", injectionTime: .atDocumentEnd, forMainFrameOnly: true)) + contentController.addUserScript(WKUserScript(source: "document.documentElement.style.webkitTouchCallout='none';", injectionTime: .atDocumentEnd, forMainFrameOnly: true)) + wkWebView.scrollView.bounces = false + + let htmlFileContent = FileHelper.getContent(from: htmlFilePath!) // get html content from file + wkWebView.loadHTMLString(htmlFileContent, baseURL: Bundle.main.bundleURL) // load html into hidden webview + let formatter: UIPrintFormatter = UIMarkupTextPrintFormatter(markupText: htmlFileContent) + + urlObservation = wkWebView.observe(\.isLoading, changeHandler: { (webView, change) in + // this is workaround for issue with loading local images + DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { + let convertedFileURL = PDFCreator.create(printFormatter: formatter, width: width, height: height, orientation: orientation as! String, margins: margins!) + let convertedFilePath = convertedFileURL.absoluteString.replacingOccurrences(of: "file://", with: "") // return generated pdf path + if let viewWithTag = viewControler?.view.viewWithTag(100) { + viewWithTag.removeFromSuperview() // remove hidden webview when pdf is generated + + // clear WKWebView cache + if #available(iOS 9.0, *) { + WKWebsiteDataStore.default().fetchDataRecords(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes()) { records in + records.forEach { record in + WKWebsiteDataStore.default().removeData(ofTypes: record.dataTypes, for: [record], completionHandler: {}) + } + } + } + } + + // dispose WKWebView + self.urlObservation = nil + self.wkWebView = nil + result(convertedFilePath) + } + }) + default: + result(FlutterMethodNotImplemented) + } + } +} diff --git a/packages/flutter_html_to_pdf_plus/ios/flutter_html_to_pdf_plus.podspec b/packages/flutter_html_to_pdf_plus/ios/flutter_html_to_pdf_plus.podspec new file mode 100644 index 0000000..933a741 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/ios/flutter_html_to_pdf_plus.podspec @@ -0,0 +1,21 @@ +# +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html +# +Pod::Spec.new do |s| + s.name = 'flutter_html_to_pdf_plus' + s.version = '0.0.1' + s.summary = 'A Flutter plugin for generating PDF documents from HTML code templates.' + s.description = <<-DESC +A Flutter plugin for generating PDF documents from HTML code templates + DESC + s.homepage = 'http://example.com' + s.license = { :file => '../LICENSE' } + s.author = { 'Origin OSS' => 'email@example.com' } + s.source = { :path => '.' } + s.source_files = 'Classes/**/*' + s.public_header_files = 'Classes/**/*.h' + s.dependency 'Flutter' + + s.ios.deployment_target = '8.0' +end + diff --git a/packages/flutter_html_to_pdf_plus/lib/flutter_html_to_pdf_plus.dart b/packages/flutter_html_to_pdf_plus/lib/flutter_html_to_pdf_plus.dart new file mode 100644 index 0000000..89f8254 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/lib/flutter_html_to_pdf_plus.dart @@ -0,0 +1,5 @@ +library flutter_html_to_pdf_plus; + +export 'src/flutter_html_to_pdf_plus.dart'; +export 'src/pdf_print_configuration.dart'; +export 'src/print_config_enums.dart'; diff --git a/packages/flutter_html_to_pdf_plus/lib/src/file_utils.dart b/packages/flutter_html_to_pdf_plus/lib/src/file_utils.dart new file mode 100644 index 0000000..b530867 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/lib/src/file_utils.dart @@ -0,0 +1,30 @@ +import 'dart:io'; + +class FileUtils { + static Future createFileWithStringContent( + String content, String path) async { + return await File(path).writeAsString(content); + } + + static File copyAndDeleteOriginalFile( + String generatedFilePath, String targetDirectory, String targetName) { + final fileOriginal = File(generatedFilePath); + final fileCopy = File('$targetDirectory/$targetName.pdf'); + fileCopy.writeAsBytesSync(File.fromUri(fileOriginal.uri).readAsBytesSync()); + fileOriginal.delete(); + return fileCopy; + } + + static Future appendStyleTagToHtmlFile(String htmlPath) async { + String printStyleHtml = """ + + """; + await File(htmlPath).writeAsString(printStyleHtml, mode: FileMode.append); + } +} diff --git a/packages/flutter_html_to_pdf_plus/lib/src/flutter_html_to_pdf_plus.dart b/packages/flutter_html_to_pdf_plus/lib/src/flutter_html_to_pdf_plus.dart new file mode 100644 index 0000000..99c89ef --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/lib/src/flutter_html_to_pdf_plus.dart @@ -0,0 +1,115 @@ +import 'dart:async'; +import 'dart:io'; + +import 'package:flutter/services.dart'; +import 'package:flutter_html_to_pdf_plus/src/file_utils.dart'; + +import 'pdf_print_configuration.dart'; +import 'print_config_enums.dart'; + +/// HTML to PDF Converter +class FlutterHtmlToPdf { + static const MethodChannel _channel = + MethodChannel('flutter_html_to_pdf_plus'); + + /// Creates PDF Document from HTML content + /// Can throw a [PlatformException] or (unlikely) a [MissingPluginException] converting html to pdf + static Future convertFromHtmlContent({ + required String content, + required PrintPdfConfiguration configuration, + }) async { + final File temporaryCreatedHtmlFile = + await FileUtils.createFileWithStringContent( + content, + configuration.htmlFilePath, + ); + await FileUtils.appendStyleTagToHtmlFile(temporaryCreatedHtmlFile.path); + + final String generatedPdfFilePath = await _convertFromHtmlFilePath( + temporaryCreatedHtmlFile.path, + configuration.printSize, + configuration.printOrientation, + configuration.margins, + ); + + temporaryCreatedHtmlFile.delete(); + + return FileUtils.copyAndDeleteOriginalFile( + generatedPdfFilePath, + configuration.targetDirectory, + configuration.targetName, + ); + } + + /// Creates PDF Document from File that contains HTML content + /// Can throw a [PlatformException] or (unlikely) a [MissingPluginException] converting html to pdf + static Future convertFromHtmlFile({ + required File htmlFile, + required PrintPdfConfiguration configuration, + }) async { + await FileUtils.appendStyleTagToHtmlFile(htmlFile.path); + final String generatedPdfFilePath = await _convertFromHtmlFilePath( + htmlFile.path, + configuration.printSize, + configuration.printOrientation, + configuration.margins, + ); + + return FileUtils.copyAndDeleteOriginalFile( + generatedPdfFilePath, + configuration.targetDirectory, + configuration.targetName, + ); + } + + /// Creates PDF Document from path to File that contains HTML content + /// Can throw a [PlatformException] or (unlikely) a [MissingPluginException] converting html to pdf + static Future convertFromHtmlFilePath({ + required String htmlFilePath, + required PrintPdfConfiguration configuration, + }) async { + await FileUtils.appendStyleTagToHtmlFile(htmlFilePath); + final String generatedPdfFilePath = await _convertFromHtmlFilePath( + htmlFilePath, + configuration.printSize, + configuration.printOrientation, + configuration.margins, + ); + + return FileUtils.copyAndDeleteOriginalFile( + generatedPdfFilePath, + configuration.targetDirectory, + configuration.targetName, + ); + } + + /// Assumes the invokeMethod call will return successfully + static Future _convertFromHtmlFilePath( + String htmlFilePath, + PrintSize printSize, + PrintOrientation printOrientation, + PdfPageMargin pageMargin, + ) async { + int width = printSize + .getDimensionsInPixels[printOrientation.getWidthDimensionIndex]; + int height = printSize + .getDimensionsInPixels[printOrientation.getHeightDimensionIndex]; + + return await _channel.invokeMethod( + 'convertHtmlToPdf', + { + 'htmlFilePath': htmlFilePath, + 'width': width, + 'height': height, + 'printSize': printSize.printSizeKey, + 'orientation': printOrientation.orientationKey, + 'margins': [ + pageMargin.left, + pageMargin.top, + pageMargin.right, + pageMargin.bottom, + ], + }, + ) as String; + } +} diff --git a/packages/flutter_html_to_pdf_plus/lib/src/pdf_print_configuration.dart b/packages/flutter_html_to_pdf_plus/lib/src/pdf_print_configuration.dart new file mode 100644 index 0000000..7ac3897 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/lib/src/pdf_print_configuration.dart @@ -0,0 +1,45 @@ +import 'package:flutter_html_to_pdf_plus/flutter_html_to_pdf_plus.dart'; + +class PdfPageMargin { + final int top; + final int bottom; + final int left; + final int right; + + const PdfPageMargin({ + required this.top, + required this.bottom, + required this.left, + required this.right, + }); +} + +/// Print Pdf Configuration +class PrintPdfConfiguration { + final String targetDirectory; + final String targetName; + final PdfPageMargin margins; + final PrintSize printSize; + final PrintOrientation printOrientation; + + /// `targetDirectory` is the desired path for the Pdf file. + /// + /// `targetName` is the name of the Pdf file + /// + /// `margins` is the page margin of the Pdf file + /// + /// `printSize` is the print size of the Pdf file + /// + /// `printOrientation` is the print orientation of the Pdf file + PrintPdfConfiguration({ + required this.targetDirectory, + required this.targetName, + this.margins = + const PdfPageMargin(top: 50, bottom: 50, left: 50, right: 50), + this.printSize = PrintSize.A4, + this.printOrientation = PrintOrientation.Portrait, + }); + + /// Returns the final path for temporary Html File + String get htmlFilePath => "$targetDirectory/$targetName.html"; +} diff --git a/packages/flutter_html_to_pdf_plus/lib/src/print_config_enums.dart b/packages/flutter_html_to_pdf_plus/lib/src/print_config_enums.dart new file mode 100644 index 0000000..17fe71a --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/lib/src/print_config_enums.dart @@ -0,0 +1,110 @@ +// ignore_for_file: constant_identifier_names + +enum PrintSize { + A0, + A1, + A2, + A3, + A4, + A5, + A6, + A7, + A8, + A9, + A10, +} + +extension PrintSizeExt on PrintSize { + /// Returns the printing pixel dimensions for `72 PPI` + List get getDimensionsInPixels { + switch (this) { + case PrintSize.A0: + return [2384, 3370]; + case PrintSize.A1: + return [1684, 2384]; + case PrintSize.A2: + return [1191, 1684]; + case PrintSize.A3: + return [842, 1191]; + case PrintSize.A4: + return [595, 842]; + case PrintSize.A5: + return [420, 595]; + case PrintSize.A6: + return [298, 420]; + case PrintSize.A7: + return [210, 298]; + case PrintSize.A8: + return [147, 210]; + case PrintSize.A9: + return [105, 147]; + case PrintSize.A10: + return [74, 105]; + } + } + + /// Returns Key for android implementation + String get printSizeKey { + switch (this) { + case PrintSize.A0: + return "A0"; + case PrintSize.A1: + return "A1"; + case PrintSize.A2: + return "A2"; + case PrintSize.A3: + return "A3"; + case PrintSize.A4: + return "A4"; + case PrintSize.A5: + return "A5"; + case PrintSize.A6: + return "A6"; + case PrintSize.A7: + return "A7"; + case PrintSize.A8: + return "A8"; + case PrintSize.A9: + return "A9"; + case PrintSize.A10: + return "A10"; + } + } +} + +enum PrintOrientation { + Portrait, + Landscape, +} + +extension PrintOrientationExt on PrintOrientation { + /// Returns the index for getting width of print frame from array of + int get getWidthDimensionIndex { + switch (this) { + case PrintOrientation.Landscape: + return 1; + case PrintOrientation.Portrait: + return 0; + } + } + + /// Returns the index for getting height of print frame from array of + int get getHeightDimensionIndex { + switch (this) { + case PrintOrientation.Landscape: + return 0; + case PrintOrientation.Portrait: + return 1; + } + } + + /// Returns Key for android implementation + String get orientationKey { + switch (this) { + case PrintOrientation.Landscape: + return "LANDSCAPE"; + case PrintOrientation.Portrait: + return "PORTRAIT"; + } + } +} diff --git a/packages/flutter_html_to_pdf_plus/pubspec.lock b/packages/flutter_html_to_pdf_plus/pubspec.lock new file mode 100644 index 0000000..f6593d3 --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/pubspec.lock @@ -0,0 +1,72 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + collection: + dependency: transitive + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + lints: + dependency: transitive + description: + name: lints + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + url: "https://pub.dev" + source: hosted + version: "0.11.1" + meta: + dependency: transitive + description: + name: meta + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + url: "https://pub.dev" + source: hosted + version: "1.15.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" +sdks: + dart: ">=3.3.0-0 <4.0.0" + flutter: ">=3.10.0" diff --git a/packages/flutter_html_to_pdf_plus/pubspec.yaml b/packages/flutter_html_to_pdf_plus/pubspec.yaml new file mode 100644 index 0000000..f13667d --- /dev/null +++ b/packages/flutter_html_to_pdf_plus/pubspec.yaml @@ -0,0 +1,25 @@ +name: flutter_html_to_pdf_plus +description: Flutter plugin for generating PDF documents from HTML code templates +version: 0.1.0 +homepage: https://github.com/originoss/flutter_html_to_pdf_plus + +environment: + sdk: '>=2.19.6 <4.0.0' + flutter: ">=3.10.0" + +dependencies: + flutter: + sdk: flutter + +dev_dependencies: + flutter_lints: ^4.0.0 + +flutter: + plugin: + platforms: + android: + package: com.originoss.flutter_html_to_pdf_plus + pluginClass: FlutterHtmlToPdfPlugin + ios: + pluginClass: FlutterHtmlToPdfPlugin + diff --git a/pubspec.yaml b/pubspec.yaml index f74ccb4..d7cf8e5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -60,7 +60,8 @@ dependencies: #webcontent_converter: ^0.0.7+1 #flutter_html_to_pdf: ^0.7.0 - flutter_html_to_pdf_plus: ^0.1.0 + flutter_html_to_pdf_plus: + path: packages/flutter_html_to_pdf_plus #syncfusion_flutter_pdfviewer: ^23.1.39 syncfusion_flutter_pdfviewer: ^26.2.13 @@ -92,7 +93,7 @@ dependencies: datetime_picker_formfield_new: ^2.1.0 in_app_review: ^2.0.9 - launch_app_store: ^1.1.2 + launch_app_store: ^1.1.1 #store_launcher: ^1.0.1 From 00d318ec0fa88bf1a7af480239467f7557fa1bbf Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Sat, 21 Sep 2024 02:01:47 -0300 Subject: [PATCH 26/73] Update assecontservices.podspec --- ios/assecontservices.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/assecontservices.podspec b/ios/assecontservices.podspec index 9115a4e..7edb727 100644 --- a/ios/assecontservices.podspec +++ b/ios/assecontservices.podspec @@ -15,7 +15,7 @@ A new Flutter project. s.source = { :path => '.' } s.source_files = 'Classes/**/*' s.dependency 'Flutter' - s.platform = :ios, '12.0' + s.platform = :ios, '13.0' # Flutter.framework does not contain a i386 slice. s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } From d9fa535dd8a633c18e127c9cb2078e3b5ac0d615 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Wed, 9 Oct 2024 10:33:13 -0300 Subject: [PATCH 27/73] inclusao do status da obrigacao nos detalhes --- lib/enums/obrigacao_status.dart | 23 +++++++++++++++++++ .../obrigacoes/obrigacoes_detalhes.dart | 6 ++++- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 lib/enums/obrigacao_status.dart diff --git a/lib/enums/obrigacao_status.dart b/lib/enums/obrigacao_status.dart new file mode 100644 index 0000000..c98f53f --- /dev/null +++ b/lib/enums/obrigacao_status.dart @@ -0,0 +1,23 @@ +enum ObrigacaoStatus { + Nenhum(-1, "Nenhum"), + EmAberto(0, "Em Aberto"), + Concluido(1, "Concluído"), + SemMovimentoNaoAvaliado(2, "Sem Movimento Não Avaliado"), + SemMovimentoRejeitado(3, "Sem Movimento Rejeitado"), + Provisorio(4, "Provisório"), + SemMovimento(5, "Sem Movimento"), + AguardandoAprovacao(6, "Aguardando Aprovação"), + ArquivoComDivergencia(7, "Arquivo com divergência"); + + final int value; + final String description; + + const ObrigacaoStatus(this.value, this.description); + + static ObrigacaoStatus fromInt(int value) { + return ObrigacaoStatus.values.firstWhere( + (status) => status.value == value, + orElse: () => Nenhum, + ); + } +} diff --git a/lib/model/asseweb/obrigacoes/obrigacoes_detalhes.dart b/lib/model/asseweb/obrigacoes/obrigacoes_detalhes.dart index 79e8bb0..7638bbf 100644 --- a/lib/model/asseweb/obrigacoes/obrigacoes_detalhes.dart +++ b/lib/model/asseweb/obrigacoes/obrigacoes_detalhes.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import '../../../enums/enums.dart'; +import '../../../enums/obrigacao_status.dart'; import '../../../utils/utils.dart'; @@ -20,6 +21,7 @@ class ObrigacoesDetalhesModel { this.emailEnviadoEm, this.smsEnviadoEm, this.ativo, + this.status = ObrigacaoStatus.Nenhum, }); String? obrigacaoDescricao; @@ -37,7 +39,7 @@ class ObrigacoesDetalhesModel { DateTime? smsEnviadoEm; StatusTimeLine? statusTimeLine; bool? ativo; - + ObrigacaoStatus status; factory ObrigacoesDetalhesModel.fromJson(String str) => ObrigacoesDetalhesModel.fromMap(json.decode(str)); @@ -58,6 +60,7 @@ class ObrigacoesDetalhesModel { emailEnviadoEm: json["emailEnviadoEm"] == null ? null : Validacoes.stringToDataBr(json["emailEnviadoEm"].toString()), smsEnviadoEm: json["smsEnviadoEm"] == null ? null : Validacoes.stringToDataBr(json["smsEnviadoEm"].toString()), ativo: json["ativo"], + status: ObrigacaoStatus.fromInt(int.tryParse(json["ativo"].toString()) ?? -1) , ); Map toMap() => { @@ -75,5 +78,6 @@ class ObrigacoesDetalhesModel { "emailEnviadoEm": emailEnviadoEm, "smsEnviadoEm": smsEnviadoEm, "ativo": ativo, + 'status': status.value }; } From 8adc4f8faf40d5720b808ab198938af609cb12f1 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Thu, 10 Oct 2024 14:47:05 -0300 Subject: [PATCH 28/73] Update configuracoes.dart --- lib/model/configuracoes.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/model/configuracoes.dart b/lib/model/configuracoes.dart index 73b7d82..d87e943 100644 --- a/lib/model/configuracoes.dart +++ b/lib/model/configuracoes.dart @@ -10,6 +10,7 @@ class ConfiguracoesModel { final String? apiEspelho; final String? apiBoletos; final String? apiRelatorioFechamento; + final String? apiLeituraArquivos; final String? androidAppId ; final String? iosAppId; final String? iosAppIdNum ; @@ -23,6 +24,7 @@ class ConfiguracoesModel { this.apiAsseponto, this.apiAssepontoNova, this.apiRelatorioFechamento, + this.apiLeituraArquivos, this.apiBoletos, this.apiEspelho, this.androidAppId, From 7b304162492a321a13ab5b590bd1d517ef3fcf98 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Thu, 10 Oct 2024 15:04:13 -0300 Subject: [PATCH 29/73] Update custom_livelist.dart --- lib/common/custom_livelist.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/common/custom_livelist.dart b/lib/common/custom_livelist.dart index 9d92f97..fe55e7e 100644 --- a/lib/common/custom_livelist.dart +++ b/lib/common/custom_livelist.dart @@ -13,7 +13,7 @@ class CustomLiveList extends StatefulWidget { required this.onTap, this.isList = true, this.scrollController, required this.content, this.txtListVazia}); final List list; final Widget Function(T item) content; - final Function(T item) onTap; + final Function(T item)? onTap; final Function()? endScroll; final ScrollController? scrollController; final bool isList; @@ -107,8 +107,8 @@ class _CustomLiveListState extends State> { end: Offset.zero, ).animate(animation), child: GestureDetector( - onTap: (){ - widget.onTap(item); + onTap: widget.onTap == null ? null : (){ + widget.onTap!(item); }, child: CustomListTile( padding: widget.padding, From 6668fa7df9b4aa31eaa3b05c24e884112a700da6 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Thu, 10 Oct 2024 15:07:33 -0300 Subject: [PATCH 30/73] Update custom_livelist.dart --- lib/common/custom_livelist.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/common/custom_livelist.dart b/lib/common/custom_livelist.dart index fe55e7e..568cf7d 100644 --- a/lib/common/custom_livelist.dart +++ b/lib/common/custom_livelist.dart @@ -10,7 +10,7 @@ import 'custom_load_shimmer.dart'; class CustomLiveList extends StatefulWidget { const CustomLiveList({super.key, required this.list, this.isLoad = false, this.padding, this.endScroll, - required this.onTap, this.isList = true, this.scrollController, required this.content, this.txtListVazia}); + this.onTap, this.isList = true, this.scrollController, required this.content, this.txtListVazia}); final List list; final Widget Function(T item) content; final Function(T item)? onTap; From 84db71cb56c1d8a4d0cdedb4f0ca6b3c9717f451 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Thu, 10 Oct 2024 22:46:51 -0300 Subject: [PATCH 31/73] ajuste asseweb para funcoes de aluguel e relatorio de faturamento --- lib/assecontservices.dart | 3 +- lib/common/common.dart | 3 +- lib/common/custom_alert.dart | 26 ++- lib/common/custom_date_range_selector.dart | 207 ++++++++++++++++++ lib/common/custom_livelist.dart | 60 +++-- lib/common/custom_textformfield.dart | 52 ++++- .../obrigacoes/obrigacoes_detalhes.dart | 2 +- lib/services/asseweb/usuario.dart | 4 +- .../smartphone/tela_base/custom_scaffold.dart | 17 +- lib/utils/extensions.dart | 40 ++++ lib/utils/num_inputformatter.dart | 32 +++ lib/utils/validacoes.dart | 8 +- 12 files changed, 402 insertions(+), 52 deletions(-) create mode 100644 lib/common/custom_date_range_selector.dart create mode 100644 lib/utils/num_inputformatter.dart diff --git a/lib/assecontservices.dart b/lib/assecontservices.dart index e64eafe..3ce197f 100644 --- a/lib/assecontservices.dart +++ b/lib/assecontservices.dart @@ -203,7 +203,6 @@ class Assecontservices { } } - print('init app'); runApp( MultiProvider( providers: _providers, @@ -264,7 +263,7 @@ class MyApp extends StatelessWidget { ), builder: (context, child) { final MediaQueryData data = MediaQuery.of(context); - print('builder MediaQueryData'); + return MediaQuery( data: data.copyWith(textScaler: const TextScaler.linear(1.0)), child: ResponsiveBreakpoints.builder( diff --git a/lib/common/common.dart b/lib/common/common.dart index 3e130fc..ad06f2f 100644 --- a/lib/common/common.dart +++ b/lib/common/common.dart @@ -21,4 +21,5 @@ export 'custom_filter.dart'; export 'custom_buttom.dart'; export 'actions/func_alter_user.dart'; export 'actions/func_alter_empresa.dart'; -export 'custom_load_shimmer.dart'; \ No newline at end of file +export 'custom_load_shimmer.dart'; +export 'custom_date_range_selector.dart'; \ No newline at end of file diff --git a/lib/common/custom_alert.dart b/lib/common/custom_alert.dart index db693bb..8faa0a0 100644 --- a/lib/common/custom_alert.dart +++ b/lib/common/custom_alert.dart @@ -44,7 +44,9 @@ class CustomAlert { String? txtBotaoSucess, String? txtBotaoCancel, Function? funcSucess, - Function? funcCancel}){ + Function? funcCancel, + bool quit = true, + }){ bool isDark = context.read().darkTemas; return showDialog( @@ -71,30 +73,30 @@ class CustomAlert { contentPadding: const EdgeInsets.symmetric(horizontal: 24, vertical: 5), buttonPadding: EdgeInsets.zero, actions: [ - if(txtBotaoCancel != null) ...[ + if(txtBotaoSucess != null) ...[ CustomButtom.custom( expand: true, onPressed: () async { - if(funcCancel != null) await funcCancel(); - Navigator.pop(context); + if(funcSucess != null) await funcSucess(); + if(quit) Navigator.pop(context); }, - title: txtBotaoCancel, - color: Colors.red, + title: txtBotaoSucess, + color: Config.corPri, ), const SizedBox(width: 10,), ], - if(txtBotaoSucess != null) ...[ + if(txtBotaoCancel != null) ...[ CustomButtom.custom( expand: true, onPressed: () async { - if(funcSucess != null) await funcSucess(); - Navigator.pop(context); + if(funcCancel != null) await funcCancel(); + if(quit) Navigator.pop(context); }, - title: txtBotaoSucess, - color: Config.corPri, + title: txtBotaoCancel, + color: Colors.red, ), const SizedBox(width: 10,), - ] + ], ], ); } diff --git a/lib/common/custom_date_range_selector.dart b/lib/common/custom_date_range_selector.dart new file mode 100644 index 0000000..a6102fa --- /dev/null +++ b/lib/common/custom_date_range_selector.dart @@ -0,0 +1,207 @@ +import 'package:assecontservices/assecontservices.dart'; +import 'package:flutter/material.dart'; + + +class DateRangeSelector extends StatelessWidget { + final DateTime? initialStartDate; + final DateTime? initialEndDate; + final void Function(DateTimeRange) onChanged; + + const DateRangeSelector({ + super.key, + required this.initialStartDate, + required this.initialEndDate, + required this.onChanged, + }); + + void _showDateRangePicker(BuildContext context) { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Selecionar Período'), + content: BodyDataRange( + onChanged: onChanged, + initialStartDate: initialStartDate, + initialEndDate: initialEndDate, + ), + ); + }, + ); + } + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () => _showDateRangePicker(context), + child: Padding( + padding: const EdgeInsets.all(10), + child: Text('${initialStartDate.dateFormat(format: 'MM/yyyy')} - ${initialEndDate.dateFormat(format: 'MM/yyyy')}', + style: const TextStyle(color: Colors.white), + ), + ), + ); + } +} + +class BodyDataRange extends StatefulWidget { + const BodyDataRange({super.key, this.initialStartDate, this.initialEndDate, required this.onChanged}); + final DateTime? initialStartDate; + final DateTime? initialEndDate; + final void Function(DateTimeRange) onChanged; + + @override + State createState() => _BodyDataRangeState(); +} + +class _BodyDataRangeState extends State { + DateTime? startDate; + DateTime? endDate; + final int currentYear = DateTime.now().year; + final int currentMonth = DateTime.now().month; + + @override + void initState() { + super.initState(); + startDate = widget.initialStartDate; + endDate = widget.initialEndDate; + } + + + Widget _buildDatePicker(String title, bool isStartDate) { + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(title, style: const TextStyle(fontWeight: FontWeight.bold)), + const SizedBox(height: 10), + Row( + children: [ + Expanded( + child: DropdownButton( + hint: const Text('Ano'), + value: isStartDate ? startDate?.year : endDate?.year, + onChanged: (value) { + setState(() { + if (isStartDate) { + startDate = DateTime(value!, startDate?.month ?? 1); + } else { + endDate = DateTime(value!, endDate?.month ?? 1); + } + _adjustDates(isStartDate); + }); + }, + items: List.generate( + currentYear + 1 - 2020, + (index) => DropdownMenuItem( + value: 2020 + index, + child: Text((2020 + index).toString()), + ), + ), + ), + ), + const SizedBox(width: 10), + Expanded( + child: DropdownButton( + hint: const Text('Mês'), + value: isStartDate ? startDate?.month : endDate?.month, + onChanged: (value) { + setState(() { + if (isStartDate) { + startDate = DateTime(startDate?.year ?? currentYear, value!); + } else { + endDate = DateTime(endDate?.year ?? currentYear, value!); + } + _adjustDates(isStartDate); + }); + }, + items: List.generate(12, (index) { + return DropdownMenuItem( + value: index + 1, + child: Text(DateTime(0, index + 1).dateFormat(format: 'MMMM').toUpperCase()), + ); + }), + ), + ), + ], + ), + ], + ); + } + + void _adjustDates(bool isStartDate) { + if (startDate != null && endDate != null) { + // Se 'isStartDate' for verdadeiro, estamos ajustando a data de início + if (isStartDate) { + // Ajustar a data de início se ela for posterior à data de fim + if (startDate!.isAfter(endDate!)) { + startDate = endDate; + } + + // Verificar se o intervalo é maior que 12 meses e ajustar a data de fim + int monthDifference = (endDate!.year - startDate!.year) * 12 + (endDate!.month - startDate!.month); + if (monthDifference > 12) { + endDate = startDate.addMonths(12); + } + + } else { + // Caso 'isStartDate' seja falso, ajustamos a data de fim + // Ajustar a data de fim se for anterior à data de início + if (endDate!.isBefore(startDate!)) { + endDate = startDate; + } + + // Verificar se o intervalo é maior que 12 meses e ajustar a data de início + int monthDifference = (endDate!.year - startDate!.year) * 12 + (endDate!.month - startDate!.month); + if (monthDifference > 12) { + startDate = endDate.addMonths(-12); + } + } + + // Ajustar a data de fim para não exceder o mês atual + if (endDate!.year > currentYear || (endDate!.year == currentYear && endDate!.month > currentMonth)) { + endDate = DateTime(currentYear, currentMonth); + } + + // Ajustar a data de fim para não exceder o mês atual + if (startDate!.year > currentYear || (startDate!.year == currentYear && startDate!.month > currentMonth)) { + startDate = DateTime(currentYear, currentMonth); + } + } + } + + @override + Widget build(BuildContext context) { + return SingleChildScrollView( + child: Column( + children: [ + _buildDatePicker('Início', true), + const SizedBox(height: 20), + _buildDatePicker('Fim', false), + const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text('Fechar'), + ), + TextButton( + onPressed: () { + Navigator.of(context).pop(); + // Chama o método onChanged apenas quando o botão de confirmar é clicado + if (startDate != null && endDate != null) { + widget.onChanged(DateTimeRange(start: startDate!, end: endDate!)); + } + }, + child: const Text('Confirmar'), + ), + ], + ) + ], + ), + ); + } +} diff --git a/lib/common/custom_livelist.dart b/lib/common/custom_livelist.dart index 568cf7d..d052da1 100644 --- a/lib/common/custom_livelist.dart +++ b/lib/common/custom_livelist.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:auto_animated/auto_animated.dart'; @@ -10,7 +11,9 @@ import 'custom_load_shimmer.dart'; class CustomLiveList extends StatefulWidget { const CustomLiveList({super.key, required this.list, this.isLoad = false, this.padding, this.endScroll, - this.onTap, this.isList = true, this.scrollController, required this.content, this.txtListVazia}); + this.onTap, this.isList = true, this.scrollController, required this.content, this.txtListVazia, + this.onDismissed, + }); final List list; final Widget Function(T item) content; final Function(T item)? onTap; @@ -20,6 +23,7 @@ class CustomLiveList extends StatefulWidget { final String? txtListVazia; final bool isLoad; final EdgeInsets? padding; + final Future Function(T)? onDismissed; @override State> createState() => _CustomLiveListState(); @@ -66,23 +70,25 @@ class _CustomLiveListState extends State> { isLoad: true, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 10), - child: ColumnOrRow( - isColumn: widget.isList, isWrap: true, - children: List.generate(6, - (index) => SizedBox( - width: widget.isList ? null : 80, - child: CustomListTile( - padding: widget.padding, - child: Container() - ), + child: SingleChildScrollView( + child: ColumnOrRow( + isColumn: widget.isList, isWrap: true, + children: List.generate(6, + (index) => SizedBox( + width: widget.isList ? null : 80, + child: CustomListTile( + padding: widget.padding, + child: Container() + ), + ) ) - ) + ), ), ), ) : LayoutBuilder( builder: (_, constraints){ if(widget.list.isEmpty){ - return Center(child: Text(widget.txtListVazia ?? 'Nenhum dado carregado'),); + return Center(child: Text(widget.txtListVazia ?? 'Nenhum item carregado'),); } return Padding( @@ -106,14 +112,28 @@ class _CustomLiveListState extends State> { begin: const Offset(0, -0.1), end: Offset.zero, ).animate(animation), - child: GestureDetector( - onTap: widget.onTap == null ? null : (){ - widget.onTap!(item); - }, - child: CustomListTile( - padding: widget.padding, - child: widget.content(item) - ) + child: Dismissible( + key: Key(index.toString()), + background: Container(color: Colors.red, alignment: Alignment.centerRight, + child: const Padding( + padding: EdgeInsets.all(8.0), + child: Icon(CupertinoIcons.delete, color: Colors.white), + )), + direction: widget.onDismissed == null + ? DismissDirection.none : DismissDirection.endToStart, + confirmDismiss: widget.onDismissed == null ? null : (v) async { + return await widget.onDismissed!(item); + }, + + child: GestureDetector( + onTap: widget.onTap == null ? null : (){ + widget.onTap!(item); + }, + child: CustomListTile( + padding: widget.padding, + child: widget.content(item) + ) + ), ) ), ); diff --git a/lib/common/custom_textformfield.dart b/lib/common/custom_textformfield.dart index 3c06475..dbd0372 100644 --- a/lib/common/custom_textformfield.dart +++ b/lib/common/custom_textformfield.dart @@ -13,6 +13,7 @@ import '../../utils/validacoes.dart'; import '../config.dart'; import '../utils/cpf_email_formatter.dart'; import '../utils/cpf_rg_formatter.dart'; +import '../utils/num_inputformatter.dart'; import 'custom_date_picker.dart'; @@ -53,7 +54,9 @@ class CustomTextFormField { child: Text( title, style: TextStyle( - color: txtColor, + color: context.watch().darkTemas + ? txtColor == Colors.black ? Colors.white : txtColor + : txtColor == Colors.white ? Colors.black : txtColor, fontSize: textAlign ? 18 : 14, fontWeight: FontWeight.w600), ), @@ -123,6 +126,10 @@ class CustomTextFormField { hintText: hintText ?? (type == FormType.cpf ? '000.000.000-00' + : type == FormType.dinheiro + ? 'R\$0,00' + : type == FormType.num || type == FormType.numVigula + ? '0' : type == FormType.rgcpf ? 'RG/CPF' : type == FormType.emailcpf @@ -176,7 +183,15 @@ class CustomTextFormField { FilteringTextInputFormatter.digitsOnly, DataInputFormatter(), ] - : null, + : type == FormType.dinheiro ? [ + FilteringTextInputFormatter.digitsOnly, + CentavosInputFormatter(), + ] : type == FormType.num ? [ + FilteringTextInputFormatter.digitsOnly, + ] : type == FormType.numVigula ? [ + NumInputFormatter.digitsOnly, + NumInputFormatter(), + ] : null, validator: validator ?? (type == FormType.emailcpf ? (v) { @@ -201,7 +216,28 @@ class CustomTextFormField { form.isError = false; return null; } - : type == FormType.cnpj + : type == FormType.dinheiro ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o valor'; + } + form.isError = false; + return null; + } : type == FormType.num ? (v) { + if (v == null || v == '' || !Validacoes.isNumeric(v)) { + form.isError = true; + return 'Digite numero'; + } + form.isError = false; + return null; + } : type == FormType.numVigula ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o valor'; + } + form.isError = false; + return null; + } : type == FormType.cnpj ? (v) { if (v == null || v == '') { form.isError = true; @@ -279,13 +315,10 @@ class CustomTextFormField { } : type == FormType.date ? (v) { - if (v == null || - v == '' || - v.length != 10) { + if (v == null || v == '' || v.length != 10) { form.isError = true; return 'Digite a data'; - } else if (!Validacoes - .isDate(v)) { + } else if (!Validacoes.isDate(v)) { form.isError = true; return 'Digite uma data valida'; } @@ -418,5 +451,8 @@ enum FormType { emailcpf, pass, date, + num, + numVigula, + dinheiro, text; } diff --git a/lib/model/asseweb/obrigacoes/obrigacoes_detalhes.dart b/lib/model/asseweb/obrigacoes/obrigacoes_detalhes.dart index 7638bbf..64f3398 100644 --- a/lib/model/asseweb/obrigacoes/obrigacoes_detalhes.dart +++ b/lib/model/asseweb/obrigacoes/obrigacoes_detalhes.dart @@ -60,7 +60,7 @@ class ObrigacoesDetalhesModel { emailEnviadoEm: json["emailEnviadoEm"] == null ? null : Validacoes.stringToDataBr(json["emailEnviadoEm"].toString()), smsEnviadoEm: json["smsEnviadoEm"] == null ? null : Validacoes.stringToDataBr(json["smsEnviadoEm"].toString()), ativo: json["ativo"], - status: ObrigacaoStatus.fromInt(int.tryParse(json["ativo"].toString()) ?? -1) , + status: ObrigacaoStatus.fromInt(int.tryParse(json["status"].toString()) ?? -1) , ); Map toMap() => { diff --git a/lib/services/asseweb/usuario.dart b/lib/services/asseweb/usuario.dart index 7201931..4698bcf 100644 --- a/lib/services/asseweb/usuario.dart +++ b/lib/services/asseweb/usuario.dart @@ -47,8 +47,8 @@ class UserAssewebService { Future lastcompanyupdate({required int? companyId}) async { String _metodo = '/api/ExternalLogin/lastcompanyupdate'; try{ - MyHttpResponse response = await _http.put( - url: Config.conf.apiAsseweb! + _metodo, + MyHttpResponse response = await _http.post( + url: Config.conf.apiAsseweb! + _metodo, decoder: false, body: { "id": UserAssewebManager.sUser?.login?.id, "lastCompanyId": companyId diff --git a/lib/ui/smartphone/tela_base/custom_scaffold.dart b/lib/ui/smartphone/tela_base/custom_scaffold.dart index cb21931..5a95ac3 100644 --- a/lib/ui/smartphone/tela_base/custom_scaffold.dart +++ b/lib/ui/smartphone/tela_base/custom_scaffold.dart @@ -19,7 +19,8 @@ class HomeWidget extends StatelessWidget { const HomeWidget({super.key, this.keyListMenu, required this.listMenu, this.height, required this.body, this.foto, this.dados, this.keyMenu, this.buttom, this.key1, this.key2, this.key3, this.key4, this.key5, required this.appTitle, - this.nome, this.cargo, this.onAlter, this.isListView = true, this.onFoto = true}); + this.nome, this.cargo, this.onAlter, this.isListView = true, this.onFoto = true, + }); final GlobalKey? keyListMenu; final List listMenu; @@ -41,6 +42,7 @@ class HomeWidget extends StatelessWidget { final bool onFoto; final Function()? onAlter; + @override Widget build(BuildContext context) { double h = 180 + MediaQuery.of(context).padding.top; @@ -311,7 +313,8 @@ class _HomeCalendarioWidgetState extends State { class HomeIoWidget extends StatelessWidget { const HomeIoWidget({super.key, this.globalKey, required this.height, this.onAlter, this.appbar, required this.body, this.expanAppbar, - this.appTitle, this.buttom, this.conf = false, this.home = false}); + this.appTitle, this.buttom, this.conf = false, this.home = false, this.floatingActionButtonLocation, + }); final GlobalKey? globalKey; final double height; final bool conf; @@ -322,6 +325,7 @@ class HomeIoWidget extends StatelessWidget { final Widget? expanAppbar; final String? appTitle; final Widget? buttom; + final FloatingActionButtonLocation? floatingActionButtonLocation; @override @@ -368,7 +372,8 @@ class HomeIoWidget extends StatelessWidget { ], ) ), - floatingActionButtonLocation: buttom == null ? null : FloatingActionButtonLocation.centerFloat, + floatingActionButtonLocation: buttom == null ? null + : floatingActionButtonLocation ?? FloatingActionButtonLocation.centerFloat, floatingActionButton: buttom ); } @@ -376,7 +381,8 @@ class HomeIoWidget extends StatelessWidget { class HomeWebWidget extends StatelessWidget { const HomeWebWidget({super.key, this.globalKey, this.buttom, required this.body, this.onAlter, - required this.listMenus, this.foto, this.dados, required this.appTitle, this.nome, this.cargo}); + required this.listMenus, this.foto, this.dados, required this.appTitle, this.nome, + this.cargo, }); final GlobalKey? globalKey; final Widget? buttom; final Widget body; @@ -448,7 +454,8 @@ class HomeWebWidget extends StatelessWidget { ), ], ), - floatingActionButtonLocation: buttom == null ? null : FloatingActionButtonLocation.centerFloat, + floatingActionButtonLocation: buttom == null ? null + : FloatingActionButtonLocation.centerFloat, floatingActionButton: buttom ), ), diff --git a/lib/utils/extensions.dart b/lib/utils/extensions.dart index d1101fe..b8774b9 100644 --- a/lib/utils/extensions.dart +++ b/lib/utils/extensions.dart @@ -7,6 +7,40 @@ extension FormatesDateTime on DateTime? { if(this == null ) return ''; return DateFormat(format ?? 'dd/MM/yyyy', 'pt_BR').format(this!); } + + DateTime addMonths(int monthsToAdd) { + DateTime originalDate; + if(this == null) { + originalDate = DateTime.now(); + } else { + originalDate = this!; + } + if(monthsToAdd == 0) return originalDate; + + + int newYear = originalDate.year; + int newMonth = originalDate.month + monthsToAdd; + + // Ajusta o ano e o mês caso o novo mês seja maior que 12 ou menor que 1 + while (newMonth > 12) { + newYear++; + newMonth -= 12; + } + while (newMonth < 1) { + newYear--; + newMonth += 12; + } + + int day = originalDate.day; + int maxDay = DateTime(newYear, newMonth + 1, 0).day; // Último dia do novo mês + + // Ajusta o dia caso seja maior que o último dia do novo mês + if (day > maxDay) { + day = maxDay; + } + + return DateTime(newYear, newMonth, day, originalDate.hour, originalDate.minute, originalDate.second); + } } extension FormatesDouble on double? { @@ -23,4 +57,10 @@ extension FormatesString on String? { final d = double.tryParse(this!.replaceAll('.', '').replaceAll(',', '.')); return d ?? 0; } + + DateTime? toDate() { + if(this == null) return null; + final l = this!.split('/'); + return DateTime(int.parse(l[2]), int.parse(l[1]), int.parse(l[0])); + } } \ No newline at end of file diff --git a/lib/utils/num_inputformatter.dart b/lib/utils/num_inputformatter.dart new file mode 100644 index 0000000..b262add --- /dev/null +++ b/lib/utils/num_inputformatter.dart @@ -0,0 +1,32 @@ +import 'package:flutter/services.dart'; + + + +/// Formata o valor do campo com a mascara kg,g (ex: `103,8`) +class NumInputFormatter extends TextInputFormatter { + static final TextInputFormatter digitsOnly = FilteringTextInputFormatter.deny( + RegExp(r'[^0-9,]|(?<=,)[^0-9]') + ); + + @override + TextEditingValue formatEditUpdate( + TextEditingValue oldValue, TextEditingValue newValue) { + // verifica o tamanho máximo do campo + + + var posicaoCursor = newValue.selection.end; + var substrIndex = 0; + final valorFinal = StringBuffer(); + + + + if (newValue.text.length >= substrIndex) { + valorFinal.write(newValue.text.substring(substrIndex)); + } + + return TextEditingValue( + text: valorFinal.toString(), + selection: TextSelection.collapsed(offset: posicaoCursor), + ); + } +} diff --git a/lib/utils/validacoes.dart b/lib/utils/validacoes.dart index 0c2350a..1dc395a 100644 --- a/lib/utils/validacoes.dart +++ b/lib/utils/validacoes.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'dart:core'; +import 'package:assecontservices/assecontservices.dart'; import 'package:flutter/material.dart'; @@ -522,7 +523,12 @@ class Validacoes { DateTime.parse(str); return true; } catch (e) { - return false; + try { + DateTime? date = str.toDate(); + return date != null; + } catch (e) { + return false; + } } } From c7c448fb7989ebfba6754d579f483e9ffdac0608 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:58:08 -0300 Subject: [PATCH 32/73] ajuste model obrigacoes para incluir status --- lib/model/asseweb/obrigacoes/obrigacoes.dart | 9 +++++---- lib/model/asseweb/obrigacoes/obrigacoes_home.dart | 7 ++++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/model/asseweb/obrigacoes/obrigacoes.dart b/lib/model/asseweb/obrigacoes/obrigacoes.dart index 058d3fe..4d7d04a 100644 --- a/lib/model/asseweb/obrigacoes/obrigacoes.dart +++ b/lib/model/asseweb/obrigacoes/obrigacoes.dart @@ -3,6 +3,7 @@ import 'dart:convert'; import '../../../enums/enums.dart'; +import '../../../enums/obrigacao_status.dart'; import '../../../utils/utils.dart'; class ObrigacaoModel { @@ -13,7 +14,7 @@ class ObrigacaoModel { this.descricao, this.responsavel, this.cliente, - this.status, + this.status = ObrigacaoStatus.Nenhum, this.vencimento, this.prazo, this.concluidoEm, @@ -49,7 +50,7 @@ class ObrigacaoModel { String? descricao; String? responsavel; int? cliente; - int? status; + ObrigacaoStatus status; DateTime? vencimento; DateTime? prazo; DateTime? concluidoEm; @@ -89,7 +90,7 @@ class ObrigacaoModel { descricao: json["descricao"], responsavel: json["responsavel"], cliente: json["cliente"], - status: json["status"], + status: ObrigacaoStatus.fromInt( int.tryParse(json["status"].toString()) ?? -1 ), vencimento: Validacoes.stringToDataBr(json["vencimento"].toString()), prazo: Validacoes.stringToDataBr(json["prazo"].toString()), concluidoEm: Validacoes.stringToDataBr(json["concluidoEm"].toString()), @@ -126,7 +127,7 @@ class ObrigacaoModel { "descricao": descricao, "responsavel": responsavel, "cliente": cliente, - "status": status, + "status": status.value, "vencimento": vencimento, "prazo": prazo, "concluidoEm": concluidoEm, diff --git a/lib/model/asseweb/obrigacoes/obrigacoes_home.dart b/lib/model/asseweb/obrigacoes/obrigacoes_home.dart index e7339e9..22d48d9 100644 --- a/lib/model/asseweb/obrigacoes/obrigacoes_home.dart +++ b/lib/model/asseweb/obrigacoes/obrigacoes_home.dart @@ -1,6 +1,8 @@ import 'dart:convert'; -import 'package:assecontservices/assecontservices.dart'; + +import '../../../enums/obrigacao_status.dart'; +import '../../../utils/validacoes.dart'; class ObrigacoesHomeModel { ObrigacoesHomeModel({ @@ -55,12 +57,14 @@ class ObrigacaoClientePeriodo { this.deadLine, this.finishedIn, this.completedBy, + this.status = ObrigacaoStatus.Nenhum, }); int? id; DateTime? deadLine; DateTime? finishedIn; int? completedBy; + ObrigacaoStatus status; factory ObrigacaoClientePeriodo.fromJson(String str) => ObrigacaoClientePeriodo.fromMap(json.decode(str)); @@ -69,6 +73,7 @@ class ObrigacaoClientePeriodo { deadLine: json["deadLine"] == null ? null : Validacoes.stringToDataBr( json["deadLine"].toString() ), finishedIn: json["finishedIn"] == null ? null : DateTime.parse(json["finishedIn"]), completedBy: json["completedBy"], + status: ObrigacaoStatus.fromInt( int.tryParse(json["completedBy"].toString()) ?? -1 ), ); } \ No newline at end of file From cf024c5b7e5dc01aec9e425c28a07f7e6ad20e71 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 11 Oct 2024 15:02:15 -0300 Subject: [PATCH 33/73] Update status_timeline.dart --- lib/enums/status_timeline.dart | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/lib/enums/status_timeline.dart b/lib/enums/status_timeline.dart index 14b4f5d..5cbd9b2 100644 --- a/lib/enums/status_timeline.dart +++ b/lib/enums/status_timeline.dart @@ -3,11 +3,10 @@ import '../model/model.dart'; enum StatusTimeLine{ + Nenhum(0), Disponibilizado(1), - Vizualizado(4), Email(2), - Sms(3), - Nenhum(0); + Vizualizado(3); String img(){ switch(value){ @@ -15,9 +14,8 @@ enum StatusTimeLine{ return 'assets/imagens/dispo.png'; case 2: return 'assets/imagens/email.png'; + //case 3: return 'assets/imagens/sms.png'; case 3: - return 'assets/imagens/sms.png'; - case 4: return 'assets/imagens/visualizado.png'; default: return 'assets/imagens/dispo.png'; @@ -27,9 +25,7 @@ enum StatusTimeLine{ static StatusTimeLine statusTimeLine(ObrigacoesDetalhesModel obrg) { if(obrg.visualizadoEm != null){ return StatusTimeLine.Vizualizado; - }else if(obrg.smsEnviadoEm != null){ - return StatusTimeLine.Sms; - }else if(obrg.emailEnviadoEm != null){ + } else if(obrg.emailEnviadoEm != null){ return StatusTimeLine.Email; }else if(obrg.disponivelEm != null){ return StatusTimeLine.Disponibilizado; From 279d1aa7dec5acc0ee0c68bf96412ab8645b3bdc Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 11 Oct 2024 15:29:28 -0300 Subject: [PATCH 34/73] update metode de atualizar ultima empresa --- lib/services/asseweb/senha.dart | 1 - lib/services/asseweb/usuario.dart | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/services/asseweb/senha.dart b/lib/services/asseweb/senha.dart index 4dbac3a..cb4e8eb 100644 --- a/lib/services/asseweb/senha.dart +++ b/lib/services/asseweb/senha.dart @@ -51,7 +51,6 @@ class SenhaAssewebService { headers: { 'Content-Type' : 'application/json', 'Authorization' : 'Bearer ${UserAssewebManager.sUser?.token}' - }, body: { "email": UserAssewebManager.sUser?.login?.email, diff --git a/lib/services/asseweb/usuario.dart b/lib/services/asseweb/usuario.dart index 4698bcf..6af1f41 100644 --- a/lib/services/asseweb/usuario.dart +++ b/lib/services/asseweb/usuario.dart @@ -49,6 +49,10 @@ class UserAssewebService { try{ MyHttpResponse response = await _http.post( url: Config.conf.apiAsseweb! + _metodo, decoder: false, + headers: { + 'Content-Type' : 'application/json', + 'Authorization' : 'Bearer ${UserAssewebManager.sUser?.token}' + }, body: { "id": UserAssewebManager.sUser?.login?.id, "lastCompanyId": companyId From 3b45442ae9eb9a7d0e54ffd7351a3b6d00e5ad3f Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:21:42 -0300 Subject: [PATCH 35/73] ajuste para melhoria de desempenho do app --- lib/config.dart | 2 +- .../holerite/holerite_manager.dart | 37 ++++++----- lib/helper/helper.dart | 2 +- lib/helper/validators.dart | 5 -- lib/model/holerite/holerite/holerite.dart | 38 ++++++----- lib/model/holerite/usuario/funcionarios.dart | 64 +++++++++---------- lib/model/holerite/usuario/usuario.dart | 2 +- lib/services/holerite/usuario.dart | 1 - lib/services/sqlite_ponto.dart | 7 +- lib/ui/smartphone/config/config_screen.dart | 8 ++- .../holerite/detelhes_holerite.dart | 2 +- .../holerite/graficos_holerite.dart | 20 +++--- .../smartphone/holerite/holerite_screen.dart | 6 +- lib/ui/smartphone/intro/intro_screen.dart | 16 ++--- .../tela_base/custom_menu_item.dart | 22 +++---- lib/ui/smartphone/tela_base/drawer_web.dart | 9 ++- lib/utils/cpf_email_formatter.dart | 2 - lib/utils/cpf_rg_formatter.dart | 1 - lib/utils/get_file.dart | 1 - lib/utils/url_launcher.dart | 14 ++-- 20 files changed, 125 insertions(+), 134 deletions(-) delete mode 100644 lib/helper/validators.dart diff --git a/lib/config.dart b/lib/config.dart index e9a6b3f..5924d3b 100644 --- a/lib/config.dart +++ b/lib/config.dart @@ -13,7 +13,7 @@ import 'model/model.dart'; class Config extends ChangeNotifier { Config() {_init();} - static ConfiguracoesModel conf = ConfiguracoesModel(); + static ConfiguracoesModel conf = const ConfiguracoesModel(); static final GlobalKey scaffoldKey = GlobalKey(); diff --git a/lib/controllers/holerite/holerite_manager.dart b/lib/controllers/holerite/holerite_manager.dart index d51f7f8..c967889 100644 --- a/lib/controllers/holerite/holerite_manager.dart +++ b/lib/controllers/holerite/holerite_manager.dart @@ -1,6 +1,5 @@ import 'dart:typed_data'; -import 'package:universal_io/io.dart'; import 'package:flutter/material.dart'; import '../../model/model.dart'; @@ -65,23 +64,27 @@ class HoleriteManager extends ChangeNotifier { Future listHolerite({bool isLoad = true}) async { - if(isLoad) load = true; - final result = await _service.listHolerite(_page, _pageSize); - holerites = result; - holerites!.data?.sort((a, b) { - try { - if (a.attributes!.year != b.attributes!.year) { - return b.attributes!.year!.compareTo(a.attributes!.year!); - } else { - return b.attributes!.month!.compareTo(a.attributes!.month!); + try{ + if(isLoad) load = true; + final result = await _service.listHolerite(_page, _pageSize); + holerites = result; + holerites!.data?.sort((a, b) { + try { + if (a.attributes!.year != b.attributes!.year) { + return b.attributes!.year!.compareTo(a.attributes!.year!); + } else { + return b.attributes!.month!.compareTo(a.attributes!.month!); + } + } catch (e) { + return 999; } - } catch (e) { - return 999; - } - }); - - load = false; - notifyListeners(); + }); + } catch (e) { + debugPrint(e.toString()); + }finally{ + load = false; + notifyListeners(); + } } Future newPageHolerite() async { diff --git a/lib/helper/helper.dart b/lib/helper/helper.dart index 55df559..00a216a 100644 --- a/lib/helper/helper.dart +++ b/lib/helper/helper.dart @@ -1,4 +1,4 @@ export 'db_ponto.dart'; export 'conn.dart'; -export 'validators.dart'; \ No newline at end of file + diff --git a/lib/helper/validators.dart b/lib/helper/validators.dart deleted file mode 100644 index 122dc21..0000000 --- a/lib/helper/validators.dart +++ /dev/null @@ -1,5 +0,0 @@ -bool emailValid(String email){ - final RegExp regex = RegExp( - r"^(([^<>()[\]\\.,;:\s@\']+(\.[^<>()[\]\\.,;:\s@\']+)*)|(\'.+\'))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$"); - return regex.hasMatch(email.trim().replaceAll(' ', '')); -} diff --git a/lib/model/holerite/holerite/holerite.dart b/lib/model/holerite/holerite/holerite.dart index cc7a333..abfb5b1 100644 --- a/lib/model/holerite/holerite/holerite.dart +++ b/lib/model/holerite/holerite/holerite.dart @@ -1,6 +1,4 @@ -import 'package:assecontservices/assecontservices.dart'; - import '../../../enums/holerite_tipo.dart'; @@ -8,14 +6,14 @@ class ChartPizza { final String desc; final double valor; - ChartPizza(this.desc, this.valor); + const ChartPizza(this.desc, this.valor); } class ChartColum { final int ind; final String data; final double valor; - ChartColum(this.ind, this.data, this.valor); + const ChartColum(this.ind, this.data, this.valor); } @@ -23,7 +21,7 @@ class HoleriteModel { final List? data; final MetaHolerite? meta; - HoleriteModel({ + const HoleriteModel({ this.data, this.meta, }); @@ -43,7 +41,7 @@ class DatumHolerite { final int? id; final DatumAttributes? attributes; - DatumHolerite({ + const DatumHolerite({ this.id, this.attributes, }); @@ -97,7 +95,7 @@ class DatumAttributes { final DateTime? signedAt; final FileClass? file; - DatumAttributes({ + const DatumAttributes({ this.cpf, this.name, this.office, @@ -204,7 +202,7 @@ class AttributesData { final FuncionarioResumo? funcionarioResumo; final List? funcionarioEventos; - AttributesData({ + const AttributesData({ this.cbo, this.cpf, this.reg, @@ -263,7 +261,7 @@ class FuncionarioEvento { final String? referencia; final String? vencimento; - FuncionarioEvento({ + const FuncionarioEvento({ this.codigo, this.desconto, this.descricao, @@ -305,7 +303,7 @@ class FuncionarioResumo { final double? salContribuicao; final double? totalVencimentos; - FuncionarioResumo({ + const FuncionarioResumo({ this.banco, this.conta, this.frase, @@ -363,7 +361,7 @@ class FuncionarioResumo { class FileClass { final FileData? data; - FileClass({ + const FileClass({ this.data, }); @@ -380,7 +378,7 @@ class FileData { final int? id; final DataAttributes? attributes; - FileData({ + const FileData({ this.id, this.attributes, }); @@ -415,7 +413,7 @@ class DataAttributes { final DateTime? createdAt; final DateTime? updatedAt; - DataAttributes({ + const DataAttributes({ this.name, this.alternativeText, this.caption, @@ -477,9 +475,9 @@ class DataAttributes { } class MetaHolerite { - PaginationHolerite? pagination; + final PaginationHolerite? pagination; - MetaHolerite({ + const MetaHolerite({ this.pagination, }); @@ -493,12 +491,12 @@ class MetaHolerite { } class PaginationHolerite { - int? page; - int? pageSize; - int? pageCount; - int? total; + final int? page; + final int? pageSize; + final int? pageCount; + final int? total; - PaginationHolerite({ + const PaginationHolerite({ this.page, this.pageSize, this.pageCount, diff --git a/lib/model/holerite/usuario/funcionarios.dart b/lib/model/holerite/usuario/funcionarios.dart index 877de99..cb904ea 100644 --- a/lib/model/holerite/usuario/funcionarios.dart +++ b/lib/model/holerite/usuario/funcionarios.dart @@ -1,10 +1,10 @@ class FuncionariosHoleriteModel { - List? data; - MetaFuncionarios? meta; + final List? data; + final MetaFuncionarios? meta; - FuncionariosHoleriteModel({ + const FuncionariosHoleriteModel({ this.data, this.meta, }); @@ -30,10 +30,10 @@ class FuncionariosHoleriteModel { } class DatumFuncionarios { - int? id; - AttributesFuncionarios? attributes; + final int? id; + final AttributesFuncionarios? attributes; - DatumFuncionarios({ + const DatumFuncionarios({ this.id, this.attributes, }); @@ -59,26 +59,26 @@ class DatumFuncionarios { } class AttributesFuncionarios { - String? nome; - String? cpf; - String? phone; - String? email; - int? baseSalary; - String? office; - String? sector; - String? ctps; - String? syndicate; - String? codeBank; - String? accountBank; - String? typeBank; - String? pixKeyBank; - String? agencyBank; - DateTime? createdAt; - DateTime? updatedAt; - String? reg; - bool? isPreRegistered; - - AttributesFuncionarios({ + final String? nome; + final String? cpf; + final String? phone; + final String? email; + final int? baseSalary; + final String? office; + final String? sector; + final String? ctps; + final String? syndicate; + final String? codeBank; + final String? accountBank; + final String? typeBank; + final String? pixKeyBank; + final String? agencyBank; + final DateTime? createdAt; + final DateTime? updatedAt; + final String? reg; + final bool? isPreRegistered; + + const AttributesFuncionarios({ this.nome, this.cpf, this.phone, @@ -184,9 +184,9 @@ class AttributesFuncionarios { } class MetaFuncionarios { - PaginationFuncionarios? pagination; + final PaginationFuncionarios? pagination; - MetaFuncionarios({ + const MetaFuncionarios({ this.pagination, }); @@ -207,11 +207,11 @@ class MetaFuncionarios { } class PaginationFuncionarios { - int? start; - int? limit; - int? total; + final int? start; + final int? limit; + final int? total; - PaginationFuncionarios({ + const PaginationFuncionarios({ this.start, this.limit, this.total, diff --git a/lib/model/holerite/usuario/usuario.dart b/lib/model/holerite/usuario/usuario.dart index 9cf8be1..e20ecb6 100644 --- a/lib/model/holerite/usuario/usuario.dart +++ b/lib/model/holerite/usuario/usuario.dart @@ -4,7 +4,7 @@ import '../../model.dart'; class UsuarioHoleriteModel { - String? jwt; + final String? jwt; UserHolerite? user; UsuarioHoleriteModel({ diff --git a/lib/services/holerite/usuario.dart b/lib/services/holerite/usuario.dart index 4e5462c..60d7302 100644 --- a/lib/services/holerite/usuario.dart +++ b/lib/services/holerite/usuario.dart @@ -117,7 +117,6 @@ class UserHoleriteService { }, body: body ); - print(response.data); return response.isSucess; } catch (e){ debugPrint('Erro UserHoleriteService updateUser: $e'); diff --git a/lib/services/sqlite_ponto.dart b/lib/services/sqlite_ponto.dart index 7ea4302..ebe3d24 100644 --- a/lib/services/sqlite_ponto.dart +++ b/lib/services/sqlite_ponto.dart @@ -27,8 +27,7 @@ class SqlitePontoService { Database bancoDados = await _service.db; await bancoDados.delete('users'); - await bancoDados.execute('INSERT INTO users(iduser, nome, pis, registro) VALUES ' + - dados.map((e) => e.toMap()).toList().toString().replaceAll('[', '').replaceAll(']', '') ); + await bancoDados.execute('INSERT INTO users(iduser, nome, pis, registro) VALUES ${dados.map((e) => e.toMap()).toList().toString().replaceAll('[', '').replaceAll(']', '')}' ); String sql = "SELECT * FROM users"; List _emp = await bancoDados.rawQuery(sql); if(_emp.isNotEmpty){ @@ -110,7 +109,7 @@ class SqlitePontoService { } } - deleteSalvarMarcacoes(List del, int? user) async { + Future deleteSalvarMarcacoes(List del, int? user) async { try { var bancoDados = await _service.db; String sql = "delete FROM marcacao where iduser = ?"; @@ -164,7 +163,7 @@ class SqlitePontoService { } } - deleteHistorico(int? user) async { + Future deleteHistorico(int? user) async { if(Config.conf.nomeApp == VersaoApp.PontoApp){ try{ var bancoDados = await _service.db; diff --git a/lib/ui/smartphone/config/config_screen.dart b/lib/ui/smartphone/config/config_screen.dart index 9b2f448..a38bcb0 100644 --- a/lib/ui/smartphone/config/config_screen.dart +++ b/lib/ui/smartphone/config/config_screen.dart @@ -10,8 +10,10 @@ import '../../../controllers/controllers.dart'; import '../../../../config.dart'; class ConfigScreen extends StatefulWidget { + const ConfigScreen({super.key}); + @override - _ScreenConfigState createState() => _ScreenConfigState(); + State createState() => _ScreenConfigState(); } class _ScreenConfigState extends State { @@ -79,7 +81,7 @@ class _ScreenConfigState extends State { const SizedBox(height: 8), ElevatedButton( style: const ButtonStyle( - backgroundColor: MaterialStatePropertyAll(Colors.red), + backgroundColor: WidgetStatePropertyAll(Colors.red), ), onPressed: () async { _showDeleteDialog(context); @@ -97,7 +99,7 @@ class _ScreenConfigState extends State { padding: const EdgeInsets.only(bottom: 15, right: 25), child: Row(mainAxisAlignment: MainAxisAlignment.end, children: [ - CustomText.text('Versao '+ Config.versao), + CustomText.text('Versao ${Config.versao}'), ], ), ) diff --git a/lib/ui/smartphone/holerite/detelhes_holerite.dart b/lib/ui/smartphone/holerite/detelhes_holerite.dart index 173c0e4..280e4e8 100644 --- a/lib/ui/smartphone/holerite/detelhes_holerite.dart +++ b/lib/ui/smartphone/holerite/detelhes_holerite.dart @@ -16,7 +16,7 @@ import 'graficos_holerite.dart'; class DetalhesHolerite extends StatefulWidget { DatumHolerite holerite; - DetalhesHolerite(this.holerite); + DetalhesHolerite(this.holerite, {super.key}); @override State createState() => _DetalhesHoleriteState(); diff --git a/lib/ui/smartphone/holerite/graficos_holerite.dart b/lib/ui/smartphone/holerite/graficos_holerite.dart index ee5509e..e3ce50a 100644 --- a/lib/ui/smartphone/holerite/graficos_holerite.dart +++ b/lib/ui/smartphone/holerite/graficos_holerite.dart @@ -15,18 +15,18 @@ import '../../../model/model.dart'; class GraficosHolerite extends StatefulWidget { - String? titulo; - double? totalVencimentos; - double? liquido; - double? totalDescontos; - List? listChartColum; - Function(charts.SelectionModel)? updatedChartColum; - Function()? onPressfloatingButton; - String? createDate; - bool isLoad; + final String? titulo; + final double? totalVencimentos; + final double? liquido; + final double? totalDescontos; + final List? listChartColum; + final Function(charts.SelectionModel)? updatedChartColum; + final Function()? onPressfloatingButton; + final String? createDate; + final bool isLoad; - GraficosHolerite( + const GraficosHolerite( {this.titulo, this.totalVencimentos, this.liquido, diff --git a/lib/ui/smartphone/holerite/holerite_screen.dart b/lib/ui/smartphone/holerite/holerite_screen.dart index 8e93e93..5164dfd 100644 --- a/lib/ui/smartphone/holerite/holerite_screen.dart +++ b/lib/ui/smartphone/holerite/holerite_screen.dart @@ -1,10 +1,9 @@ -import 'package:assecontservices/assecontservices.dart'; +import 'package:assecontservices/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import '../../../common/common.dart'; -import '../../../common/custom_filter.dart'; import '../../../common/custom_livelist.dart'; import '../../../helper/helper.dart'; import '../../../controllers/controllers.dart'; @@ -14,9 +13,10 @@ import '../../ui.dart'; import 'detelhes_holerite.dart'; class HoleriteScreen extends StatefulWidget { + const HoleriteScreen({super.key}); @override - _HoleriteScreenState createState() => _HoleriteScreenState(); + State createState() => _HoleriteScreenState(); } class _HoleriteScreenState extends State { diff --git a/lib/ui/smartphone/intro/intro_screen.dart b/lib/ui/smartphone/intro/intro_screen.dart index 2c06173..04e6f44 100644 --- a/lib/ui/smartphone/intro/intro_screen.dart +++ b/lib/ui/smartphone/intro/intro_screen.dart @@ -8,8 +8,10 @@ import '../../../controllers/controllers.dart'; class IntroScreen extends StatefulWidget { + const IntroScreen({super.key}); + @override - _IntroScreenState createState() => _IntroScreenState(); + State createState() => _IntroScreenState(); } class _IntroScreenState extends State { @@ -18,14 +20,12 @@ class _IntroScreenState extends State { @override void initState() { super.initState(); - Future.delayed(const Duration(milliseconds: 900), (){ - if(mounted){ + WidgetsBinding.instance.addPostFrameCallback((_) { + try { final UpdateAppManager service = UpdateAppManager(); - try { - service.checkVersion(context); - } catch (e) { - // TODO - } + service.checkVersion(context); + } catch (e) { + Navigator.pushNamedAndRemoveUntil(context, '/login', (route) => false); } }); } diff --git a/lib/ui/smartphone/tela_base/custom_menu_item.dart b/lib/ui/smartphone/tela_base/custom_menu_item.dart index bbdd9e2..95183d8 100644 --- a/lib/ui/smartphone/tela_base/custom_menu_item.dart +++ b/lib/ui/smartphone/tela_base/custom_menu_item.dart @@ -8,12 +8,12 @@ import '../../../config.dart'; import '../../../common/common.dart'; class CustomMenuItem extends StatelessWidget { - CustomMenuItem(this.icon, this.titulo, this.function, {this.isSelect = false}); + const CustomMenuItem(this.icon, this.titulo, this.function, {super.key, this.isSelect = false}); - Widget icon; - String titulo; - VoidCallback function; - bool isSelect; + final Widget icon; + final String titulo; + final VoidCallback function; + final bool isSelect; @override Widget build(BuildContext context) { @@ -43,31 +43,31 @@ class CustomMenuItem extends StatelessWidget { ), ), ), - ) : Container( + ) : SizedBox( width: 115, child: Column( children: [ InkWell( onTap: function, child: Container( - padding: EdgeInsets.all(10), + padding: const EdgeInsets.all(10), height: 70, width: 70, - decoration: BoxDecoration( + decoration: const BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(20)), color: Config.corPri ), child: IconTheme( - data: IconThemeData(color: Colors.white, size: 40), + data: const IconThemeData(color: Colors.white, size: 40), child: icon ), ), ), if(kIsWeb) - SizedBox(height: 5,), + const SizedBox(height: 5,), Padding( padding: const EdgeInsets.all(2.0), child: CustomText.text(titulo, textAlign: TextAlign.center, autoSize: true, - style: TextStyle(height: 0)), + style: const TextStyle(height: 0)), ) ], ), diff --git a/lib/ui/smartphone/tela_base/drawer_web.dart b/lib/ui/smartphone/tela_base/drawer_web.dart index 84c0d7b..f8ab7d8 100644 --- a/lib/ui/smartphone/tela_base/drawer_web.dart +++ b/lib/ui/smartphone/tela_base/drawer_web.dart @@ -1,15 +1,14 @@ -import 'package:assecontservices/assecontservices.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class DrawerWebView extends StatefulWidget { - Widget? foto; - String? titulo; - List children; + final Widget? foto; + final String? titulo; + final List children; - DrawerWebView(this.children, this.foto, this.titulo, {Key? key}) : super(key: key); + const DrawerWebView(this.children, this.foto, this.titulo, {super.key}); @override State createState() => _DrawerWebViewState(); diff --git a/lib/utils/cpf_email_formatter.dart b/lib/utils/cpf_email_formatter.dart index d44af8a..5dff48f 100644 --- a/lib/utils/cpf_email_formatter.dart +++ b/lib/utils/cpf_email_formatter.dart @@ -17,10 +17,8 @@ class CpfOrEmailFormatter extends TextInputFormatter { TextEditingValue formatEditUpdate( TextEditingValue oldValue, TextEditingValue newValue) { if (CPFValidator.isValid(newValue.text)) { - print('cpfFormatter'); return cpfFormatter.formatEditUpdate(oldValue, newValue); } else { - print('emailFormatter'); return emailFormatter.formatEditUpdate(oldValue, newValue); } } diff --git a/lib/utils/cpf_rg_formatter.dart b/lib/utils/cpf_rg_formatter.dart index 986a678..3fac370 100644 --- a/lib/utils/cpf_rg_formatter.dart +++ b/lib/utils/cpf_rg_formatter.dart @@ -1,4 +1,3 @@ -import 'package:brasil_fields/src/formatters/cnpj_input_formatter.dart'; import 'package:brasil_fields/src/formatters/compound_formatters/compound_formatter.dart'; import 'package:brasil_fields/src/formatters/cpf_input_formatter.dart'; import 'package:brasil_fields/src/interfaces/compoundable_formatter.dart'; diff --git a/lib/utils/get_file.dart b/lib/utils/get_file.dart index 746a5e8..e9c7ef1 100644 --- a/lib/utils/get_file.dart +++ b/lib/utils/get_file.dart @@ -3,7 +3,6 @@ import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:universal_io/io.dart'; import 'dart:typed_data'; -import 'package:universal_html/html.dart' as webFile; import 'package:path_provider/path_provider.dart'; diff --git a/lib/utils/url_launcher.dart b/lib/utils/url_launcher.dart index 4d3dca6..5b8129b 100644 --- a/lib/utils/url_launcher.dart +++ b/lib/utils/url_launcher.dart @@ -10,7 +10,7 @@ class UrlLauncher { try{ await launchUrl(Uri.parse(url), mode: LaunchMode.externalApplication); }catch(e){ - debugPrint('catch UrlLauncher - openUrl - ' + e.toString()); + debugPrint('catch UrlLauncher - openUrl - $e'); } } @@ -35,15 +35,15 @@ class UrlLauncher { ); await launchUrl(launchUri, mode: LaunchMode.externalApplication); }catch(e){ - debugPrint('catch UrlLauncher - openUrlHttp - ' + e.toString()); + debugPrint('catch UrlLauncher - openUrlHttp - $e'); } } static openMail(String url) async { try { - await launchUrl(Uri.parse('mailto:' + url)); + await launchUrl(Uri.parse('mailto:$url')); }catch(e){ - debugPrint('catch UrlLauncher - openMail - ' + e.toString()); + debugPrint('catch UrlLauncher - openMail - $e'); } } @@ -55,7 +55,7 @@ class UrlLauncher { ); await launchUrl(telLaunchUri); }catch(e){ - debugPrint('catch UrlLauncher - openTel - ' + e.toString()); + debugPrint('catch UrlLauncher - openTel - $e'); } } @@ -67,7 +67,7 @@ class UrlLauncher { ); await launchUrl(smsLaunchUri); }catch(e){ - debugPrint('catch UrlLauncher - openSms - ' + e.toString()); + debugPrint('catch UrlLauncher - openSms - $e'); } } @@ -75,7 +75,7 @@ class UrlLauncher { try { await launchUrl(Uri.file(filePath)); } catch(e){ - debugPrint('catch UrlLauncher - openFile - ' + e.toString()); + debugPrint('catch UrlLauncher - openFile - $e'); } } } From 7e6fffa2465c76efb83cdeb8648e5934cadfd7ba Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Thu, 21 Nov 2024 18:41:24 -0300 Subject: [PATCH 36/73] ajuste no model do holerite para validar os valores double corretamente --- lib/model/holerite/holerite/holerite.dart | 24 ++++++++------- lib/services/holerite/holerite.dart | 1 + .../smartphone/tela_base/custom_scaffold.dart | 1 + lib/utils/extensions.dart | 30 ++++++++++++++----- 4 files changed, 38 insertions(+), 18 deletions(-) diff --git a/lib/model/holerite/holerite/holerite.dart b/lib/model/holerite/holerite/holerite.dart index abfb5b1..7a0cd85 100644 --- a/lib/model/holerite/holerite/holerite.dart +++ b/lib/model/holerite/holerite/holerite.dart @@ -1,4 +1,6 @@ +import 'package:assecontservices/assecontservices.dart'; + import '../../../enums/holerite_tipo.dart'; @@ -270,11 +272,11 @@ class FuncionarioEvento { }); factory FuncionarioEvento.fromMap(Map json) => FuncionarioEvento( - codigo: json["codigo"], - desconto: json["desconto"], - descricao: json["descricao"], - referencia: json["referencia"], - vencimento: json["vencimento"], + codigo: json["codigo"]?.toString(), + desconto: json["desconto"]?.toString(), + descricao: json["descricao"]?.toString(), + referencia: json["referencia"]?.toString(), + vencimento: json["vencimento"]?.toString(), ); Map toMap() => { @@ -329,14 +331,14 @@ class FuncionarioResumo { funcao: json["funcao"], credito: json["credito"], divisao: json["divisao"], - liquido: double.parse(json["liquido"]?.replaceAll('.', '').replaceAll(',', '.') ?? '0'), + liquido: json["liquido"]?.toString().toDouble(), mesFgts: json["mesFGTS"], baseFgts: json["baseFGTS"], competencia: json["competencia"], - salarioBase: double.parse(json["salarioBase"]?.replaceAll('.', '').replaceAll(',', '.') ?? '0'), - totalDescontos: double.parse(json["totalDescontos"]?.replaceAll('.', '').replaceAll(',', '.') ?? '0'), - salContribuicao: double.parse(json["salContribuicao"]?.replaceAll('.', '').replaceAll(',', '.') ?? '0'), - totalVencimentos: double.parse(json["totalVencimentos"]?.replaceAll('.', '').replaceAll(',', '.') ?? '0'), + salarioBase: json["salarioBase"]?.toString().toDouble(), + totalDescontos: json["totalDescontos"]?.toString().toDouble(), + salContribuicao: json["salContribuicao"]?.toString().toDouble(), + totalVencimentos: json["totalVencimentos"]?.toString().toDouble(), ); Map toMap() => { @@ -443,7 +445,7 @@ class DataAttributes { hash: json["hash"], ext: json["ext"], mime: json["mime"], - size: json["size"]?.toDouble(), + size: json["size"]?.toString().toDouble(), url: json["url"], previewUrl: json["previewUrl"], provider: json["provider"], diff --git a/lib/services/holerite/holerite.dart b/lib/services/holerite/holerite.dart index c6b48bb..8611093 100644 --- a/lib/services/holerite/holerite.dart +++ b/lib/services/holerite/holerite.dart @@ -27,6 +27,7 @@ class HoleriteService { try{ if(response.isSucess) { final data = response.data; + if(data != null) { HoleriteModel? model = HoleriteModel.fromMap(data); return model; diff --git a/lib/ui/smartphone/tela_base/custom_scaffold.dart b/lib/ui/smartphone/tela_base/custom_scaffold.dart index 5a95ac3..8d48d99 100644 --- a/lib/ui/smartphone/tela_base/custom_scaffold.dart +++ b/lib/ui/smartphone/tela_base/custom_scaffold.dart @@ -339,6 +339,7 @@ class HomeIoWidget extends StatelessWidget { actions: [ actions(context, aponta: home, config: conf, onAlter: onAlter), ], + scrolledUnderElevation: 0 ), body: SizedBox( height: MediaQuery.of(context).size.height, diff --git a/lib/utils/extensions.dart b/lib/utils/extensions.dart index b8774b9..593daa5 100644 --- a/lib/utils/extensions.dart +++ b/lib/utils/extensions.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:intl/intl.dart'; @@ -51,16 +52,31 @@ extension FormatesDouble on double? { } } -extension FormatesString on String? { +extension FormatesDynamic on dynamic { double toDouble() { - if(this == null) return 0; - final d = double.tryParse(this!.replaceAll('.', '').replaceAll(',', '.')); - return d ?? 0; + try { + if(this == null) return 0; + final d = double.tryParse(this.toString().replaceAll('.', '').replaceAll(',', '.')); + return d ?? 0; + } catch (e) { + debugPrint('FormatesDynamic toDouble: $e'); + return 0; + } } DateTime? toDate() { - if(this == null) return null; - final l = this!.split('/'); - return DateTime(int.parse(l[2]), int.parse(l[1]), int.parse(l[0])); + try { + if(this == null) return null; + final l = this.toString().split('/'); + return DateTime(int.parse(l[2]), int.parse(l[1]), int.parse(l[0])); + } catch (e) { + debugPrint('FormatesDynamic toDate: $e'); + try{ + return DateTime.tryParse(this.toString()); + }catch(ex){ + debugPrint('FormatesDynamic toDate2: $ex'); + } + } + return null; } } \ No newline at end of file From 1a2f724e41c614e83d33473f523450b2f4987960 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Tue, 10 Dec 2024 14:55:37 -0300 Subject: [PATCH 37/73] ajuste no altera senha do asseweb app --- lib/controllers/asseweb/user_manager.dart | 1 + lib/services/asseweb/senha.dart | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/controllers/asseweb/user_manager.dart b/lib/controllers/asseweb/user_manager.dart index ac3fa85..9ef315e 100644 --- a/lib/controllers/asseweb/user_manager.dart +++ b/lib/controllers/asseweb/user_manager.dart @@ -51,6 +51,7 @@ class UserAssewebManager extends ChangeNotifier { memorizar() async { final prefs = await SharedPreferences.getInstance(); + Config.usenha = senha.text; await prefs.setString("user", email.text); await prefs.setString("usenha", senha.text); await prefs.setBool("autologin", status); diff --git a/lib/services/asseweb/senha.dart b/lib/services/asseweb/senha.dart index cb4e8eb..eaaf60c 100644 --- a/lib/services/asseweb/senha.dart +++ b/lib/services/asseweb/senha.dart @@ -6,7 +6,7 @@ import '../http/http.dart'; class SenhaAssewebService { - HttpCli _http = HttpCli(); + final HttpCli _http = HttpCli(); Future sendPass({String? email,}) async { String _metodo = '/api/ExternalLogin/passwordrecover'; From c97688e1fd21cf36d62f90b8d00b2637940a74c1 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Wed, 11 Dec 2024 10:47:58 -0300 Subject: [PATCH 38/73] =?UTF-8?q?ajuste=20na=20configura=C3=A7ao=20de=20se?= =?UTF-8?q?nha=20asseweb=20app?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/assecontservices.dart | 4 ---- lib/common/alterar_senha.dart | 4 ++-- lib/controllers/asseweb/senha_manager.dart | 28 ---------------------- lib/controllers/asseweb/user_manager.dart | 27 +++++++++++++++++---- lib/controllers/controllers.dart | 1 - 5 files changed, 25 insertions(+), 39 deletions(-) delete mode 100644 lib/controllers/asseweb/senha_manager.dart diff --git a/lib/assecontservices.dart b/lib/assecontservices.dart index 3ce197f..e259719 100644 --- a/lib/assecontservices.dart +++ b/lib/assecontservices.dart @@ -189,10 +189,6 @@ class Assecontservices { lazy: false, create: (_) => UserAssewebManager(), ), - if(Config.conf.nomeApp == VersaoApp.AssewebApp) - Provider( - create: (context) => SenhaAssewebManager(), - ), ]; if(providers != null){ diff --git a/lib/common/alterar_senha.dart b/lib/common/alterar_senha.dart index 8618a4a..6f71307 100644 --- a/lib/common/alterar_senha.dart +++ b/lib/common/alterar_senha.dart @@ -175,8 +175,8 @@ class _AlertSenhaState extends State { ); }); } else if(Config.conf.nomeApp == VersaoApp.AssewebApp){ - await context.read().alteracaoPass( - context, senhaNova: senhaNova.text, + await context.read().alteracaoPass( + senhaNova: senhaNova.text, ).then((value){ if(value){ Navigator.pop(context); diff --git a/lib/controllers/asseweb/senha_manager.dart b/lib/controllers/asseweb/senha_manager.dart deleted file mode 100644 index 425164a..0000000 --- a/lib/controllers/asseweb/senha_manager.dart +++ /dev/null @@ -1,28 +0,0 @@ - -import 'package:assecontservices/assecontservices.dart'; -import 'package:assecontservices/services/asseweb/senha.dart'; -import 'package:flutter/material.dart'; - -import '../../config.dart'; - -class SenhaAssewebManager { - final SenhaAssewebService _service = SenhaAssewebService(); - - - Future sendPass(String email) async { - String? result = await _service.sendPass(email: email); - return result; - } - - - Future alteracaoPass(BuildContext context, {required String senhaNova,}) async { - bool? result = await _service.alteracaoPass( senha: senhaNova,); - if(result ?? false){ - Config.usenha = senhaNova; - context.read().senha.text = senhaNova; - context.read().memorizar(); - } - return result ?? false; - } - -} \ No newline at end of file diff --git a/lib/controllers/asseweb/user_manager.dart b/lib/controllers/asseweb/user_manager.dart index 9ef315e..7a6951c 100644 --- a/lib/controllers/asseweb/user_manager.dart +++ b/lib/controllers/asseweb/user_manager.dart @@ -13,6 +13,7 @@ import '../../services/services.dart'; class UserAssewebManager extends ChangeNotifier { final UserAssewebService _service = UserAssewebService(); final BiometriaServices _serviceBio = BiometriaServices(); + final SenhaAssewebService _servicePass = SenhaAssewebService(); UserAssewebManager(){ init(); @@ -49,12 +50,30 @@ class UserAssewebManager extends ChangeNotifier { notifyListeners(); } - memorizar() async { + + Future sendPass() async { + String? result = await _servicePass.sendPass(email: email.text); + return result; + } + + + Future alteracaoPass({required String senhaNova,}) async { + bool? result = await _servicePass.alteracaoPass( senha: senhaNova,); + print(result); + if(result ?? false){ + memorizar(senhaNova); + } + return result ?? false; + } + + memorizar(String v) async { final prefs = await SharedPreferences.getInstance(); - Config.usenha = senha.text; + senha.text = v; + Config.usenha = v; await prefs.setString("user", email.text); - await prefs.setString("usenha", senha.text); + await prefs.setString("usenha", v); await prefs.setBool("autologin", status); + notifyListeners(); } Future auth(BuildContext context, {String? email, String? senha, bool bio = false}) async { @@ -83,7 +102,7 @@ class UserAssewebManager extends ChangeNotifier { user!.login?.companies?.firstWhere((e) => e.id == user?.login?.lastCompanyId) : user!.login?.companies?.firstOrNull; } - memorizar(); + memorizar(senha); notifyListeners(); return true; } diff --git a/lib/controllers/controllers.dart b/lib/controllers/controllers.dart index 1154cf2..4e56174 100644 --- a/lib/controllers/controllers.dart +++ b/lib/controllers/controllers.dart @@ -21,7 +21,6 @@ export 'tablet/config_manager.dart'; export 'tablet/historico_manager.dart'; export 'tablet/user_manager_offiline.dart'; export 'asseweb/user_manager.dart'; -export 'asseweb/senha_manager.dart'; From e745da6794a1cd8fb4dd1dca22b1e2fb83229675 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Wed, 11 Dec 2024 10:48:05 -0300 Subject: [PATCH 39/73] Update actions.dart --- lib/common/actions/actions.dart | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/common/actions/actions.dart b/lib/common/actions/actions.dart index a56b05f..2ecf36d 100644 --- a/lib/common/actions/actions.dart +++ b/lib/common/actions/actions.dart @@ -20,6 +20,7 @@ actions(BuildContext context, {bool aponta = false, bool registro = false, padding: const EdgeInsets.only(right: 5), child: PopupMenuButton( key: keyMenu, + color: context.watch().darkTemas ? null : Colors.white, itemBuilder: (context) => [ if(Config.conf.nomeApp == VersaoApp.HoleriteApp && aponta) PopupMenuItem( @@ -102,8 +103,12 @@ actions(BuildContext context, {bool aponta = false, bool registro = false, break; } }, - child: Icon(Icons.more_vert, color: !context.watch().darkTemas && aponta && kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone - ? Colors.black : Colors.white,), + child: Icon(Icons.more_vert, + color: !context.watch().darkTemas && aponta && kIsWeb + && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone + ? Colors.black : Colors.white, + ), ) ); } \ No newline at end of file From fb2bcf99e612f1963fc92c90079df43db2ce13f6 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 20 Dec 2024 17:20:18 -0300 Subject: [PATCH 40/73] =?UTF-8?q?inclus=C3=A3o=20de=20api=20para=20assinat?= =?UTF-8?q?ura=20do=20holerite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/common/custom_textformfield.dart | 3 -- .../holerite/holerite_manager.dart | 4 +-- lib/services/holerite/holerite.dart | 29 ++++++++++++++++++- .../holerite/detelhes_holerite.dart | 6 +++- .../holerite/graficos_holerite.dart | 4 +-- 5 files changed, 37 insertions(+), 9 deletions(-) diff --git a/lib/common/custom_textformfield.dart b/lib/common/custom_textformfield.dart index dbd0372..49045c5 100644 --- a/lib/common/custom_textformfield.dart +++ b/lib/common/custom_textformfield.dart @@ -306,9 +306,6 @@ class CustomTextFormField { if (v == null || v == '') { form.isError = true; return 'Digite sua senha'; - }else if (v.length < 6) { - form.isError = true; - return 'Senha deve conter no minimo 6 caracteres'; } form.isError = false; return null; diff --git a/lib/controllers/holerite/holerite_manager.dart b/lib/controllers/holerite/holerite_manager.dart index c967889..84f740c 100644 --- a/lib/controllers/holerite/holerite_manager.dart +++ b/lib/controllers/holerite/holerite_manager.dart @@ -96,9 +96,9 @@ class HoleriteManager extends ChangeNotifier { } } - Future holeriteresumoBytes(int? idholerite) async { + Future holeriteresumoBytes(int? idholerite, bool isSign, String comp) async { try { - Uint8List? result = await _service.holeriteresumoBytes(idholerite); + Uint8List? result = await _service.holeriteresumoBytes(idholerite, isSign, comp); return result; } catch (e) { debugPrint(e.toString()); diff --git a/lib/services/holerite/holerite.dart b/lib/services/holerite/holerite.dart index 8611093..d037fe5 100644 --- a/lib/services/holerite/holerite.dart +++ b/lib/services/holerite/holerite.dart @@ -51,9 +51,11 @@ class HoleriteService { return []; } - Future holeriteresumoBytes(int? id) async { + Future holeriteresumoBytes(int? id, bool isSign, String comp) async { String _api = "/holerites/generate-pdf"; try{ + if(!isSign) await holeriteAss(id, comp); + final MyHttpResponse response = await _http.post( url: Config.conf.apiHoleriteEmail! + _api, isbyte: true, headers: { @@ -77,4 +79,29 @@ class HoleriteService { } } + + Future holeriteAss(int? id, String comp) async { + String _api = "/holerites/sign-by-employee?employee=${UserHoleriteManager.funcSelect?.id}&competence=$comp"; + try{ + //print(Config.conf.apiHoleriteEmail! + _api); + //print('Bearer ${UserHoleriteManager.user?.jwt}'); + + final MyHttpResponse response = await _http.put( + url: Config.conf.apiHoleriteEmail! + _api, decoder: false, + headers: { + 'Authorization': 'Bearer ${UserHoleriteManager.user?.jwt}', + 'Content-Type': 'application/json', + }, + body: { + "isSigned": true + } + ); + //print(response.data); + //print(response.codigo); + return response.isSucess; + } catch(e){ + debugPrint(e.toString()); + return false; + } + } } \ No newline at end of file diff --git a/lib/ui/smartphone/holerite/detelhes_holerite.dart b/lib/ui/smartphone/holerite/detelhes_holerite.dart index 280e4e8..7c10893 100644 --- a/lib/ui/smartphone/holerite/detelhes_holerite.dart +++ b/lib/ui/smartphone/holerite/detelhes_holerite.dart @@ -59,7 +59,11 @@ class _DetalhesHoleriteState extends State { onPressfloatingButton: () async { try { carregar(context); - final file = await context.read().holeriteresumoBytes(widget.holerite.id); + final file = await context.read().holeriteresumoBytes( + widget.holerite.id, + widget.holerite.attributes?.isSigned ?? false, + '${widget.holerite.attributes?.month}/${widget.holerite.attributes?.year}' + ); Navigator.pop(context); if(file != null){ await Navigator.push(context, MaterialPageRoute( diff --git a/lib/ui/smartphone/holerite/graficos_holerite.dart b/lib/ui/smartphone/holerite/graficos_holerite.dart index e3ce50a..0362113 100644 --- a/lib/ui/smartphone/holerite/graficos_holerite.dart +++ b/lib/ui/smartphone/holerite/graficos_holerite.dart @@ -27,7 +27,7 @@ class GraficosHolerite extends StatefulWidget { const GraficosHolerite( - {this.titulo, + {super.key, this.titulo, this.totalVencimentos, this.liquido, this.totalDescontos, @@ -275,7 +275,7 @@ class _DetalhesHoleriteState extends State { domainFn: (ChartColum sales, _) => sales.data, measureFn: (ChartColum sales, _) => sales.valor, colorFn: (_, __) => colors.Color.fromHex( code: 'f0D47A1'), - data: widget.listChartColum!, + data: widget.listChartColum ?? [], labelAccessorFn: (ChartColum sales, _) => 'R\$${sales.valor.toInt()}', ), From 47618214877547896427ae6e9ab6eab8855faaac Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Mon, 23 Dec 2024 12:04:56 -0300 Subject: [PATCH 41/73] Update pubspec.yaml --- pubspec.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index d7cf8e5..3cf5e6c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -38,7 +38,7 @@ dependencies: #$google_maps_flutter: ^2.2.5 - url_launcher: ^6.3.0 + url_launcher: ^6.3.1 flutter_carousel_slider: ^1.1.0 @@ -64,10 +64,10 @@ dependencies: path: packages/flutter_html_to_pdf_plus #syncfusion_flutter_pdfviewer: ^23.1.39 - syncfusion_flutter_pdfviewer: ^26.2.13 + syncfusion_flutter_pdfviewer: ^28.1.35 - path_provider: ^2.1.4 - shared_preferences: ^2.3.2 + path_provider: ^2.1.5 + shared_preferences: ^2.3.3 external_path: ^2.0.1 cpf_cnpj_validator: ^2.0.0 @@ -80,7 +80,7 @@ dependencies: universal_io: ^2.2.2 universal_html: ^2.2.4 - connectivity_plus: ^6.0.5 + connectivity_plus: ^6.1.1 package_info_plus: any #^3.0.2 #^1.4.2 #device_info_plus: ^9.0.0 From 1fca1e2f97f495e30d023367a80f76547fffa38c Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Mon, 23 Dec 2024 14:57:47 -0300 Subject: [PATCH 42/73] Update http_cliente.dart --- lib/services/http/http_cliente.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/services/http/http_cliente.dart b/lib/services/http/http_cliente.dart index e50215a..d09e206 100644 --- a/lib/services/http/http_cliente.dart +++ b/lib/services/http/http_cliente.dart @@ -81,7 +81,7 @@ class HttpCli { Future post({Uri? uri, String? url, Map? headers, - Map? body, bool decoder = true, + Object? body, bool decoder = true, bool isbyte = false, int timeout = 55}) async { if(!connectionStatus.hasConnection){ From 0b057adc04a109340c104c29f2859516aae98cce Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Thu, 26 Dec 2024 20:05:06 -0300 Subject: [PATCH 43/73] Update pubspec.yaml --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 3cf5e6c..facbae2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -64,7 +64,7 @@ dependencies: path: packages/flutter_html_to_pdf_plus #syncfusion_flutter_pdfviewer: ^23.1.39 - syncfusion_flutter_pdfviewer: ^28.1.35 + syncfusion_flutter_pdfviewer: ^28.1.36 path_provider: ^2.1.5 shared_preferences: ^2.3.3 From b1bbf72b02b729b9eb2d7499538da2be2b01453b Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Thu, 26 Dec 2024 20:19:31 -0300 Subject: [PATCH 44/73] Update pubspec.yaml --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index facbae2..f2ddc84 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -64,7 +64,7 @@ dependencies: path: packages/flutter_html_to_pdf_plus #syncfusion_flutter_pdfviewer: ^23.1.39 - syncfusion_flutter_pdfviewer: ^28.1.36 + syncfusion_flutter_pdfviewer: ^26.2.13 path_provider: ^2.1.5 shared_preferences: ^2.3.3 From 5d92c8937438049f43a0f8a62a67346c72318bcb Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 27 Dec 2024 11:30:22 -0300 Subject: [PATCH 45/73] inclusao widget para selecionar data --- lib/assecontservices.dart | 3 +- lib/common/common.dart | 3 +- lib/common/custom_date_selector.dart | 141 +++++++++++++++++++++++++++ 3 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 lib/common/custom_date_selector.dart diff --git a/lib/assecontservices.dart b/lib/assecontservices.dart index e259719..49bbc93 100644 --- a/lib/assecontservices.dart +++ b/lib/assecontservices.dart @@ -246,7 +246,8 @@ class MyApp extends StatelessWidget { ), primaryColor: Config.corPribar, scaffoldBackgroundColor: kIsWeb ? Colors.grey[100] : null, - colorScheme: ThemeData(useMaterial3: true).colorScheme.copyWith(surfaceTint: Colors.white), + colorScheme: const ColorScheme.light(surfaceTint: Colors.white), + cardColor: Colors.white, appBarTheme: const AppBarTheme( centerTitle: true, titleTextStyle: TextStyle(color: kIsWeb ? Config.corPribar : Config.corPri,), diff --git a/lib/common/common.dart b/lib/common/common.dart index ad06f2f..7ae0637 100644 --- a/lib/common/common.dart +++ b/lib/common/common.dart @@ -22,4 +22,5 @@ export 'custom_buttom.dart'; export 'actions/func_alter_user.dart'; export 'actions/func_alter_empresa.dart'; export 'custom_load_shimmer.dart'; -export 'custom_date_range_selector.dart'; \ No newline at end of file +export 'custom_date_range_selector.dart'; +export 'custom_date_selector.dart'; \ No newline at end of file diff --git a/lib/common/custom_date_selector.dart b/lib/common/custom_date_selector.dart new file mode 100644 index 0000000..0bc4b06 --- /dev/null +++ b/lib/common/custom_date_selector.dart @@ -0,0 +1,141 @@ +import 'package:assecontservices/assecontservices.dart'; +import 'package:flutter/material.dart'; + + +class DateSelector extends StatelessWidget { + final DateTime? initialStartDate; + final void Function(DateTime) onChanged; + final String? title; + + const DateSelector({ + super.key, + required this.initialStartDate, + required this.onChanged, + this.title, + }); + + void _showDateRangePicker(BuildContext context) { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: Text(title ?? 'Selecionar Data'), + content: BodyData( + onChanged: onChanged, + initialStartDate: initialStartDate, + ), + ); + }, + ); + } + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () => _showDateRangePicker(context), + child: Padding( + padding: const EdgeInsets.all(10), + child: Text(initialStartDate.dateFormat(format: 'MM/yyyy'), + style: const TextStyle(color: Colors.white), + ), + ), + ); + } +} + +class BodyData extends StatefulWidget { + const BodyData({super.key, this.initialStartDate, required this.onChanged}); + final DateTime? initialStartDate; + final void Function(DateTime) onChanged; + + @override + State createState() => _BodyDataState(); +} + +class _BodyDataState extends State { + late DateTime startDate; + final int currentYear = DateTime.now().year; + final int currentMonth = DateTime.now().month; + + @override + void initState() { + super.initState(); + startDate = widget.initialStartDate ?? DateTime(DateTime.now().year, DateTime.now().month); + } + + @override + Widget build(BuildContext context) { + return SingleChildScrollView( + child: Column( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('Data', style: TextStyle(fontWeight: FontWeight.bold)), + const SizedBox(height: 10), + Row( + children: [ + Expanded( + child: DropdownButton( + hint: const Text('Ano'), + value: startDate.year , + onChanged: (value) { + setState(() { + startDate = DateTime(value!, startDate.month); + }); + }, + items: List.generate( + currentYear + 1 - 2020, + (index) => DropdownMenuItem( + value: 2020 + index, + child: Text((2020 + index).toString()), + ), + ), + ), + ), + const SizedBox(width: 10), + Expanded( + child: DropdownButton( + hint: const Text('Mês'), + value: startDate.month, + onChanged: (value) { + setState(() { + startDate = DateTime(startDate.year, value!); + }); + }, + items: List.generate(12, (index) { + return DropdownMenuItem( + value: index + 1, + child: Text(DateTime(0, index + 1).dateFormat(format: 'MMMM').toUpperCase()), + ); + }), + ), + ), + ], + ), + ], + ), + const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text('Fechar'), + ), + TextButton( + onPressed: () { + Navigator.of(context).pop(); + widget.onChanged(startDate); + }, + child: const Text('Confirmar'), + ), + ], + ) + ], + ), + ); + } +} From 263ee3d8c07b60ae9e638908f8e3fd9c50fed3e1 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Sun, 5 Jan 2025 19:41:51 -0300 Subject: [PATCH 46/73] inclusao widget para dropdown e ajuste nos forms --- lib/common/common.dart | 3 +- lib/common/custom_date_picker.dart | 2 +- lib/common/custom_date_selector.dart | 6 +- lib/common/custom_dropdown.dart | 105 ++++ lib/common/custom_textformfield.dart | 746 +++++++++++++++------------ 5 files changed, 526 insertions(+), 336 deletions(-) create mode 100644 lib/common/custom_dropdown.dart diff --git a/lib/common/common.dart b/lib/common/common.dart index 7ae0637..cfe4dfe 100644 --- a/lib/common/common.dart +++ b/lib/common/common.dart @@ -23,4 +23,5 @@ export 'actions/func_alter_user.dart'; export 'actions/func_alter_empresa.dart'; export 'custom_load_shimmer.dart'; export 'custom_date_range_selector.dart'; -export 'custom_date_selector.dart'; \ No newline at end of file +export 'custom_date_selector.dart'; +export 'custom_dropdown.dart'; \ No newline at end of file diff --git a/lib/common/custom_date_picker.dart b/lib/common/custom_date_picker.dart index 37b7391..f4aaf05 100644 --- a/lib/common/custom_date_picker.dart +++ b/lib/common/custom_date_picker.dart @@ -531,7 +531,7 @@ class _DatePickerDialogState extends State with RestorationMix child: Column( children: [ const Spacer(), - CustomTextFormField.custom( + CustomTextFormField( //controller: _controller, //isClean: true, onFieldSubmitted: (v){ diff --git a/lib/common/custom_date_selector.dart b/lib/common/custom_date_selector.dart index 0bc4b06..6c95969 100644 --- a/lib/common/custom_date_selector.dart +++ b/lib/common/custom_date_selector.dart @@ -6,12 +6,14 @@ class DateSelector extends StatelessWidget { final DateTime? initialStartDate; final void Function(DateTime) onChanged; final String? title; + final Color? textColor; const DateSelector({ super.key, required this.initialStartDate, required this.onChanged, this.title, + this.textColor = Colors.white, }); void _showDateRangePicker(BuildContext context) { @@ -35,8 +37,8 @@ class DateSelector extends StatelessWidget { onTap: () => _showDateRangePicker(context), child: Padding( padding: const EdgeInsets.all(10), - child: Text(initialStartDate.dateFormat(format: 'MM/yyyy'), - style: const TextStyle(color: Colors.white), + child: Text(initialStartDate?.dateFormat(format: 'MM/yyyy') ?? 'Selecione a competência', + style: TextStyle(color: textColor), ), ), ); diff --git a/lib/common/custom_dropdown.dart b/lib/common/custom_dropdown.dart new file mode 100644 index 0000000..f642cd1 --- /dev/null +++ b/lib/common/custom_dropdown.dart @@ -0,0 +1,105 @@ + +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +import '../config.dart'; + + +class CustomDropDown extends StatelessWidget { + const CustomDropDown({super.key, required this.onChanged, this.value, + this.items, this.width, this.suffix, + this.height, this.textAlign = false, this.isBorder = true, this.title, this.txtColor = Colors.black, + this.fillColor = Colors.white, required this.onText, this.hintText}); + final void Function(T) onChanged; + final String Function(T) onText; + final List? items; + final T? value; + final double? width; + final double? height; + final bool textAlign; + final bool isBorder; + final String? title; + final Color txtColor; + final Widget? suffix; + final Color? fillColor; + final String? hintText; + + @override + Widget build(BuildContext context) { + + return SizedBox( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: textAlign ? CrossAxisAlignment.center : CrossAxisAlignment.start, + children: [ + if (title != null) ...[ + Padding( + padding: const EdgeInsets.only(left: 5, top: 5, bottom: 5), + child: Text(title!, + style: TextStyle( + color: context.watch().darkTemas + ? txtColor == Colors.black + ? Colors.white + : txtColor + : txtColor == Colors.white + ? Colors.black + : txtColor, + fontSize: textAlign ? 18 : 14, + fontWeight: FontWeight.w600, + ), + ), + ), + ], + SizedBox( + height: height, width: width, + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Flexible( + child: DropdownButtonFormField( + isExpanded: true, + value: value, + elevation: 0, + style: const TextStyle(fontSize: 11, color: Colors.black), + iconEnabledColor: const Color(0xffB0B0B0), + padding: EdgeInsets.zero, + iconDisabledColor: const Color(0xffB0B0B0), + dropdownColor: Colors.white, + decoration: InputDecoration( + hintText: hintText ?? "Selecione", + hintStyle: const TextStyle(color: Colors.grey, fontSize: 10), + contentPadding: const EdgeInsets.only(left: 15), + fillColor: fillColor ?? Colors.white, + iconColor: const Color(0xffB0B0B0), + filled: fillColor != null, + enabledBorder: isBorder ? const OutlineInputBorder( + borderSide: BorderSide(color: Color(0xffB0B0B0)), + borderRadius: BorderRadius.all(Radius.circular(10)), // Adjust radius as needed + ) : InputBorder.none, + border: isBorder ? const OutlineInputBorder( + borderSide: BorderSide(color: Color(0xffB0B0B0)), + borderRadius: BorderRadius.all(Radius.circular(10)), // Adjust radius as needed + ) : InputBorder.none + ), + //itemHeight: height, + onChanged: (v){ + if(v != null){ + onChanged(v); + } + }, + items: items?.map((e) => DropdownMenuItem( + value: e, + child: Text(onText(e)), + )).toList() ?? [], + ), + ), + if(suffix != null) + suffix! + ], + ), + ), + ], + ), + ); + } +} diff --git a/lib/common/custom_textformfield.dart b/lib/common/custom_textformfield.dart index 49045c5..9af915a 100644 --- a/lib/common/custom_textformfield.dart +++ b/lib/common/custom_textformfield.dart @@ -17,29 +17,50 @@ import '../utils/num_inputformatter.dart'; import 'custom_date_picker.dart'; -class CustomTextFormField { - static Widget custom({ - TextEditingController? controller, - String? title, - Widget? icon, - void Function(String)? onFieldSubmitted, - void Function(DateTime)? onDateSaved, - bool textAlign = false, - bool isNext = false, - bool isBorder = true, - bool isClean = false, - String? hintText, - String? Function(String?)? validator, - FormType type = FormType.text, - double radius = 12, - double? width, - Color? txtColor = Colors.white, - FocusNode? focusNode, - }) { - return ChangeNotifierProvider( - create: (_)=> FormProvider(), - child: Consumer( - builder: (context, form, __) { +class CustomTextFormField extends StatelessWidget { + final TextEditingController? controller; + final String? title; + final Widget? icon; + final void Function(String)? onFieldSubmitted; + final void Function(DateTime)? onDateSaved; + final bool textAlign; + final bool isNext; + final bool isBorder; + final bool isClean; + final String? hintText; + final String? Function(String?)? validator; + final FormType type; + final double radius; + final double? width; + final Color? txtColor; + final FocusNode? focusNode; + + const CustomTextFormField({ + super.key, + this.controller, + this.title, + this.icon, + this.onFieldSubmitted, + this.onDateSaved, + this.textAlign = false, + this.isNext = false, + this.isBorder = true, + this.isClean = false, + this.hintText, + this.validator, + this.type = FormType.text, + this.radius = 12, + this.width, + this.txtColor = Colors.white, + this.focusNode, + }); + + @override + Widget build(BuildContext context) { + + return ChangeNotifierProvider( + create: (_) => FormProvider(), + child: Consumer(builder: (_, form, __) { return SizedBox( width: width, child: Column( @@ -52,13 +73,18 @@ class CustomTextFormField { Padding( padding: const EdgeInsets.only(left: 5, top: 5, bottom: 5), child: Text( - title, + title!, style: TextStyle( - color: context.watch().darkTemas - ? txtColor == Colors.black ? Colors.white : txtColor - : txtColor == Colors.white ? Colors.black : txtColor, - fontSize: textAlign ? 18 : 14, - fontWeight: FontWeight.w600), + color: context.watch().darkTemas + ? txtColor == Colors.black + ? Colors.white + : txtColor + : txtColor == Colors.white + ? Colors.black + : txtColor, + fontSize: textAlign ? 18 : 14, + fontWeight: FontWeight.w600, + ), ), ), TextFormField( @@ -69,55 +95,58 @@ class CustomTextFormField { onSaved: (v) { if (onDateSaved != null && v != null) { final date = v.split('/'); - onDateSaved(DateTime(int.parse(date.last), - int.parse(date[1]), int.parse(date.first))); + onDateSaved!(DateTime( + int.parse(date.last), + int.parse(date[1]), + int.parse(date.first), + )); } }, onFieldSubmitted: onFieldSubmitted, textInputAction: - isNext ? TextInputAction.next : TextInputAction.done, + isNext ? TextInputAction.next : TextInputAction.done, obscureText: type == FormType.pass, keyboardType: type == FormType.text || type == FormType.pass ? TextInputType.text : type == FormType.email || type == FormType.emailcpf - ? TextInputType.emailAddress - : TextInputType.number, + ? TextInputType.emailAddress + : TextInputType.number, decoration: InputDecoration( suffixIcon: icon ?? (!isClean ? null : IconButton( - onPressed: () { - controller?.clear(); - }, - icon: const Icon( - Icons.clear, - color: Config.corPribar, - ))), - fillColor: form.isError ? Colors.red.shade100 : Colors.white, + onPressed: () { + controller?.clear(); + }, + icon: const Icon( + Icons.clear, + color: Config.corPribar, + ), + )), + fillColor: form.isError ? Colors.red.shade50 : Colors.white, filled: true, - contentPadding: - const EdgeInsets.symmetric(horizontal: 12, vertical: 0), + contentPadding: const EdgeInsets.symmetric(horizontal: 12, vertical: 0), enabledBorder: OutlineInputBorder( borderSide: isBorder ? BorderSide(color: Colors.grey.shade300) : BorderSide.none, - borderRadius: BorderRadius.all(Radius.circular(radius)) - ), + borderRadius: BorderRadius.all(Radius.circular(radius))), border: OutlineInputBorder( borderSide: isBorder ? BorderSide(color: Colors.grey.shade300) : BorderSide.none, - borderRadius: BorderRadius.all(Radius.circular(radius)) - ), + borderRadius: BorderRadius.all(Radius.circular(radius))), focusedBorder: OutlineInputBorder( borderSide: isBorder - ? const BorderSide(color: Config.corPribar,) + ? const BorderSide( + color: Config.corPribar, + ) : BorderSide.none, - borderRadius: BorderRadius.all(Radius.circular(radius)) - ), + borderRadius: BorderRadius.all(Radius.circular(radius))), errorBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.redAccent.shade100), + borderSide: + BorderSide(color: Colors.redAccent.shade100), borderRadius: BorderRadius.all(Radius.circular(radius))), errorStyle: TextStyle( fontWeight: FontWeight.w500, @@ -128,209 +157,34 @@ class CustomTextFormField { ? '000.000.000-00' : type == FormType.dinheiro ? 'R\$0,00' - : type == FormType.num || type == FormType.numVigula + : type == FormType.num || + type == FormType.numVigula ? '0' : type == FormType.rgcpf - ? 'RG/CPF' + ? 'RG/CPF' : type == FormType.emailcpf ? 'CPF/Email' - : type == FormType.pass - ? '********' - : type == FormType.phone - ? '(11) 98888-8888' - : type == FormType.email - ? 'email@email.com' - : type == FormType.date - ? 'DD/MM/AAAA' - : type == FormType.cnpj - ? '00.000.000/0001-00' - : type == FormType.cep - ? '00000-000' - : 'Digite ${title ?? 'valor'}'), + : type == FormType.pass + ? '********' + : type == FormType.phone + ? '(11) 98888-8888' + : type == FormType.email + ? 'email@email.com' + : type == + FormType.date + ? 'DD/MM/AAAA' + : type == + FormType.cnpj + ? '00.000.000/0001-00' + : type == + FormType.cep + ? '00000-000' + : 'Digite ${title ?? 'valor'}'), hintStyle: const TextStyle(fontSize: 12, color: Colors.grey), ), - inputFormatters: type == FormType.cpf - ? [ - FilteringTextInputFormatter.digitsOnly, - CpfInputFormatter(), - ] - : type == FormType.rgcpf - ? [ - FilteringTextInputFormatter.digitsOnly, - CpfOrRGFormatter(), - ] - : type == FormType.emailcpf - ? [ - CpfOrEmailFormatter(), - ] - : type == FormType.cep - ? [ - FilteringTextInputFormatter.digitsOnly, - CepInputFormatter(), - ] - : type == FormType.cnpj - ? [ - FilteringTextInputFormatter.digitsOnly, - CnpjInputFormatter(), - ] - : type == FormType.phone - ? [ - FilteringTextInputFormatter.digitsOnly, - TelefoneInputFormatter(), - ] - : type == FormType.date - ? [ - FilteringTextInputFormatter.digitsOnly, - DataInputFormatter(), - ] - : type == FormType.dinheiro ? [ - FilteringTextInputFormatter.digitsOnly, - CentavosInputFormatter(), - ] : type == FormType.num ? [ - FilteringTextInputFormatter.digitsOnly, - ] : type == FormType.numVigula ? [ - NumInputFormatter.digitsOnly, - NumInputFormatter(), - ] : null, - validator: validator ?? - (type == FormType.emailcpf - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite o seu CPF/Email'; - } else if (!Validacoes.isCPF(v) && !Validacoes.emailValid(v)) { - form.isError = true; - return 'Digite CPF/Email valido'; - } - form.isError = false; - return null; - } : type == FormType.cpf - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite o seu CPF'; - } else if (!Validacoes.isCPF(v)) { - form.isError = true; - return 'Digite CPF valido'; - } - form.isError = false; - return null; - } - : type == FormType.dinheiro ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite o valor'; - } - form.isError = false; - return null; - } : type == FormType.num ? (v) { - if (v == null || v == '' || !Validacoes.isNumeric(v)) { - form.isError = true; - return 'Digite numero'; - } - form.isError = false; - return null; - } : type == FormType.numVigula ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite o valor'; - } - form.isError = false; - return null; - } : type == FormType.cnpj - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite o seu CNPJ'; - } else if (v.length < 18) { - form.isError = true; - return 'Digite o seu CNPJ'; - } - form.isError = false; - return null; - } - : type == FormType.cep - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite o seu CEP'; - } else if (v.length < 10) { - form.isError = true; - return 'Digite o seu CEP'; - } - form.isError = false; - return null; - } - : type == FormType.rgcpf - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite o seu documento'; - } else if (v.length == 13) { - form.isError = true; - return 'Digite o seu CPF'; - } else if (v.length < 12) { - form.isError = true; - return 'Digite o seu RG/CPF'; - } - form.isError = false; - return null; - } - : type == FormType.phone - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite o seu telefone'; - } else if (v.length < 14) { - form.isError = true; - return 'Digite o seu telefone'; - } - form.isError = false; - return null; - } - : type == FormType.email - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite seu email novo'; - } else if (!Validacoes - .emailValid(v)) { - form.isError = true; - return 'Digite email valido!'; - } - form.isError = false; - return null; - } - : type == FormType.pass - ? (v) { - if (v == null || v == '') { - form.isError = true; - return 'Digite sua senha'; - } - form.isError = false; - return null; - } - : type == FormType.date - ? (v) { - if (v == null || v == '' || v.length != 10) { - form.isError = true; - return 'Digite a data'; - } else if (!Validacoes.isDate(v)) { - form.isError = true; - return 'Digite uma data valida'; - } - form.isError = false; - return null; - } - : (v) { - if (v == null || - v == '') { - form.isError = true; - return 'Digite o $title'; - } - form.isError = false; - return null; - }), + inputFormatters: _getInputFormatters(), + validator: validator ?? _getDefaultValidator(context, form), + autovalidateMode: AutovalidateMode.onUserInteraction, ), ], ), @@ -339,91 +193,313 @@ class CustomTextFormField { ); } - static Widget date( - {required TextEditingController controller, - required String title, - bool textAlign = false, - bool isBorder = false, - Color? txtColor, - String? hintText, - double radius = 12, - double? width}) { - return Consumer( - builder: (context, form, __) { - return SizedBox( - width: width, - child: Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: textAlign - ? CrossAxisAlignment.center - : CrossAxisAlignment.start, - children: [ - Padding( - padding: - EdgeInsets.only(left: 5, top: 5, bottom: textAlign ? 5 : 0), - child: Text( - title, - style: TextStyle( - color: txtColor, + List? _getInputFormatters() { + return type == FormType.cpf + ? [ + FilteringTextInputFormatter.digitsOnly, + CpfInputFormatter(), + ] + : type == FormType.rgcpf + ? [ + FilteringTextInputFormatter.digitsOnly, + CpfOrRGFormatter(), + ] + : type == FormType.emailcpf + ? [ + CpfOrEmailFormatter(), + ] + : type == FormType.cep + ? [ + FilteringTextInputFormatter.digitsOnly, + CepInputFormatter(), + ] + : type == FormType.cnpj + ? [ + FilteringTextInputFormatter.digitsOnly, + CnpjInputFormatter(), + ] + : type == FormType.phone + ? [ + FilteringTextInputFormatter.digitsOnly, + TelefoneInputFormatter(), + ] + : type == FormType.date + ? [ + FilteringTextInputFormatter.digitsOnly, + DataInputFormatter(), + ] + : type == FormType.dinheiro ? [ + FilteringTextInputFormatter.digitsOnly, + CentavosInputFormatter(), + ] : type == FormType.num ? [ + FilteringTextInputFormatter.digitsOnly, + ] : type == FormType.numVigula ? [ + NumInputFormatter.digitsOnly, + NumInputFormatter(), + ] : null; + } + + String? Function(String?) _getDefaultValidator(BuildContext context, FormProvider form) { + return (type == FormType.emailcpf ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o seu CPF/Email'; + } else if (!Validacoes.isCPF(v) && !Validacoes.emailValid(v)) { + form.isError = true; + return 'Digite CPF/Email valido'; + } + form.isError = false; + return null; + } : type == FormType.cpf ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o seu CPF'; + } else if (!Validacoes.isCPF(v)) { + form.isError = true; + return 'Digite CPF valido'; + } + form.isError = false; + return null; + } : type == FormType.dinheiro ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o valor'; + } + form.isError = false; + return null; + } : type == FormType.num ? (v) { + if (v == null || v == '' || !Validacoes.isNumeric(v)) { + form.isError = true; + return 'Digite numero'; + } + form.isError = false; + return null; + } : type == FormType.numVigula ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o valor'; + } + form.isError = false; + return null; + } : type == FormType.cnpj ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o seu CNPJ'; + } else if (v.length < 18) { + form.isError = true; + return 'Digite o seu CNPJ'; + } + form.isError = false; + return null; + } : type == FormType.cep ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o seu CEP'; + } else if (v.length < 10) { + form.isError = true; + return 'Digite o seu CEP'; + } + form.isError = false; + return null; + } : type == FormType.rgcpf ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o seu documento'; + } else if (v.length == 13) { + form.isError = true; + return 'Digite o seu CPF'; + } else if (v.length < 12) { + form.isError = true; + return 'Digite o seu RG/CPF'; + } + form.isError = false; + return null; + } : type == FormType.phone ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o seu telefone'; + } else if (v.length < 14) { + form.isError = true; + return 'Digite o seu telefone'; + } + form.isError = false; + return null; + } : type == FormType.email ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite seu email novo'; + } else if (!Validacoes + .emailValid(v)) { + form.isError = true; + return 'Digite email valido!'; + } + form.isError = false; + return null; + } : type == FormType.pass ? (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite sua senha'; + } + form.isError = false; + return null; + } : type == FormType.date ? (v) { + if (v == null || v == '' || v.length != 10) { + form.isError = true; + return 'Digite a data'; + } else if (!Validacoes.isDate(v)) { + form.isError = true; + return 'Digite uma data valida'; + } + form.isError = false; + return null; + } : (v) { + if (v == null || v == '') { + form.isError = true; + return 'Digite o $title'; + } + form.isError = false; + return null; + }); + } +} + +class CustomDateFormField extends StatelessWidget { + final String title; + final TextEditingController? controller; + final DateTime? initDate; + final bool textAlign; + final bool isBorder; + final Color? txtColor; + final String? hintText; + final double radius; + final double? width; + final DateTime? lastDate; + final DateTime? firstDate; + final void Function(DateTime?)? onFieldSubmitted; + final void Function(DateTime?)? onChanged; + final void Function(DateTime?)? onSaved; + + const CustomDateFormField({ + super.key, + required this.title, + this.controller, + this.initDate, + this.textAlign = false, + this.isBorder = true, + this.txtColor, + this.hintText, + this.radius = 12, + this.width, + this.lastDate, + this.firstDate, + this.onFieldSubmitted, + this.onChanged, + this.onSaved, + }); + + @override + Widget build(BuildContext context) { + + return ChangeNotifierProvider( + create: (_) => FormProvider(), + child: Consumer(builder: (_, form, __) { + return SizedBox( + width: width, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: textAlign + ? CrossAxisAlignment.center + : CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(left: 5, top: 5, bottom: 5), + child: Text(title, + style: TextStyle( + color: context.watch().darkTemas + ? txtColor == Colors.black + ? Colors.white + : txtColor + : txtColor == Colors.white + ? Colors.black + : txtColor, fontSize: textAlign ? 18 : 14, - fontWeight: FontWeight.w600), + fontWeight: FontWeight.w600, + ), + ), ), - ), - DateTimeField( - format: DateFormat("dd/MM/yyyy"), - keyboardType: TextInputType.datetime, - style: const TextStyle(fontSize: 12), - controller: controller, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - DataInputFormatter(), - ], - decoration: InputDecoration( - hintText: "DD/MM/AAAA", - contentPadding: const EdgeInsets.only(left: 15, top: 6), - fillColor: form.isError ? Colors.red.shade100 : Colors.white, - filled: true, - border: OutlineInputBorder( - borderSide: isBorder - ? const BorderSide(color: Config.corPribar,) - : BorderSide.none, - borderRadius: BorderRadius.all(Radius.circular(radius))), - errorBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.redAccent.shade100), - borderRadius: BorderRadius.all(Radius.circular(radius))), - errorStyle: TextStyle( - fontWeight: FontWeight.w500, - fontSize: 11, - color: Colors.redAccent.shade100), - suffixIcon: const Icon( - Icons.calendar_month, - color: Config.corPribar, + DateTimeField( + format: DateFormat("dd/MM/yyyy"), + keyboardType: TextInputType.datetime, + style: const TextStyle(fontSize: 12, color: Colors.black), + controller: controller, + initialValue: initDate, + onFieldSubmitted: onFieldSubmitted, + onChanged: onChanged, + onSaved: onSaved, + autovalidateMode: AutovalidateMode.onUserInteraction, + inputFormatters: [ + FilteringTextInputFormatter.digitsOnly, + DataInputFormatter(), + ], + decoration: InputDecoration( + hintText: hintText ?? "DD/MM/AAAA", + hintStyle: const TextStyle(fontSize: 12, color: Colors.grey), + fillColor: form.isError ? Colors.red.shade50 : Colors.white, + filled: true, + contentPadding: const EdgeInsets.symmetric(horizontal: 12, vertical: 0), + enabledBorder: OutlineInputBorder( + borderSide: isBorder + ? BorderSide(color: Colors.grey.shade300) + : BorderSide.none, + borderRadius: BorderRadius.all(Radius.circular(radius))), + border: OutlineInputBorder( + borderSide: isBorder + ? BorderSide(color: Colors.grey.shade300) + : BorderSide.none, + borderRadius: BorderRadius.all(Radius.circular(radius))), + focusedBorder: OutlineInputBorder( + borderSide: isBorder + ? const BorderSide( + color: Config.corPribar, + ) + : BorderSide.none, + borderRadius: BorderRadius.all(Radius.circular(radius))), + errorBorder: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.redAccent.shade100), + borderRadius: BorderRadius.all(Radius.circular(radius))), + errorStyle: TextStyle( + fontWeight: FontWeight.w500, + fontSize: 11, + color: Colors.redAccent.shade100), + suffixIcon: const Icon( + Icons.calendar_month, + color: Colors.grey, + ), ), + validator: (v) { + if (v == null) { + form.isError = true; + return 'Selecione uma data'; + } + form.isError = false; + return null; + }, + onShowPicker: (context, currentValue) { + return showCustomDatePicker( + context: context, + initialEntryMode: DatePickerEntryMode.calendar, + initialDate: currentValue ?? DateTime.now(), + lastDate: lastDate ?? DateTime.now(), + firstDate: firstDate ?? DateTime(1900), + ); + }, ), - validator: (v) { - if (v == null || v == '') { - form.isError = true; - return 'Selecione sua data de aniversario'; - } - form.isError = false; - return null; - }, - onShowPicker: (context, currentValue) { - return showCustomDatePicker( - context: context, - initialEntryMode: DatePickerEntryMode.calendar, - initialDate: currentValue ?? - DateTime.now().subtract(const Duration(days: 6570)), - lastDate: DateTime.now(), - firstDate: DateTime(1900), - ); - }, - ), - ], - ), - ); - }); + ], + ), + ); + }), + ); } } @@ -431,9 +507,15 @@ class FormProvider extends ChangeNotifier { bool _isError = false; bool get isError => _isError; set isError(bool v) { - if (_isError != v) { + try { + if (_isError != v) { + WidgetsBinding.instance.addPostFrameCallback((_) { + _isError = v; + notifyListeners(); + }); + } + } catch (e) { _isError = v; - notifyListeners(); } } } From 6d447f63ccbf34db0bf2ad2615dc737a241607f5 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Wed, 22 Jan 2025 22:53:09 -0300 Subject: [PATCH 47/73] Update assecontservices.dart --- lib/assecontservices.dart | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/assecontservices.dart b/lib/assecontservices.dart index 49bbc93..6f43f4a 100644 --- a/lib/assecontservices.dart +++ b/lib/assecontservices.dart @@ -7,9 +7,7 @@ import 'package:responsive_framework/responsive_framework.dart'; import 'package:safe_device/safe_device.dart'; import 'package:device_preview/device_preview.dart'; import 'package:package_info_plus/package_info_plus.dart'; -import 'package:universal_io/io.dart' as io; -import 'common/custom_textformfield.dart'; import 'controllers/controllers.dart'; import 'services/services.dart'; import 'enums/enums.dart'; @@ -37,7 +35,7 @@ export 'package:safe_device/safe_device.dart'; class Assecontservices { - static init({required ConfiguracoesModel config, required RouteFactory rotas, + static init({required ConfiguracoesModel config, required RouteFactory rotas, NavigatorObserver? observer, List? providers, bool devicePreview = false, String? titulo, Widget? myApp}) async { //io.HttpOverrides.global = MyHttpOverrides(); @@ -204,7 +202,9 @@ class Assecontservices { providers: _providers, child: DevicePreview( enabled: devicePreview, //!kReleaseMode, - builder: (context) => myApp ?? MyApp(titulo: titulo, rotas: rotas,), // Wrap your app + builder: (context) => myApp ?? MyApp( + titulo: titulo, rotas: rotas,observer: observer + ), // Wrap your app ), ) ); @@ -215,14 +215,15 @@ class Assecontservices { class MyApp extends StatelessWidget { final String? titulo; final RouteFactory rotas; - - const MyApp({super.key, required this.titulo, required this.rotas}); + final NavigatorObserver? observer; + const MyApp({super.key, required this.titulo, required this.rotas, this.observer}); @override Widget build(BuildContext context) { return MaterialApp( title: titulo ?? 'Assecont', debugShowCheckedModeBanner: false, + navigatorObservers: observer != null ? [observer!] : [], theme: context.watch().darkTemas ? ThemeData.dark(useMaterial3: true).copyWith( floatingActionButtonTheme: const FloatingActionButtonThemeData( From bbc578b5a9273b8a1e8df0a8cf6507bc7a73e91c Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Wed, 22 Jan 2025 23:08:52 -0300 Subject: [PATCH 48/73] Update usuario.dart --- lib/services/ponto/usuario.dart | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/services/ponto/usuario.dart b/lib/services/ponto/usuario.dart index 1214081..9c359f6 100644 --- a/lib/services/ponto/usuario.dart +++ b/lib/services/ponto/usuario.dart @@ -16,7 +16,7 @@ class UserPontoService { UsuarioPonto? _user; try { final MyHttpResponse response = await _http.post( - url: Config.conf.apiAssepontoNova! + _api, timeout: 5, + url: Config.conf.apiAssepontoNova! + _api, timeout: 10, body: { "Email": email.trim().replaceAll(' ', ''), "Senha": senha.trim().replaceAll(' ', ''), @@ -30,7 +30,13 @@ class UserPontoService { UsuarioPonto user = UsuarioPonto.fromMap(json, false); return user; }else{ - throw json['StatusLogin']['Descricao']; + _user = await authOffiline( + email.trim().replaceAll(' ', ''), + senha.trim().replaceAll(' ', '') + ); + if (_user != null) { + return _user; + } } }else { _user = await authOffiline( @@ -44,7 +50,10 @@ class UserPontoService { debugPrint('${response.codigo} signInAuth'); throw "Login ou Senha Invalido"; } catch (e) { - _user = await authOffiline(email.trim().replaceAll(' ', ''), senha.trim().replaceAll(' ', '')); + _user = await authOffiline( + email.trim().replaceAll(' ', ''), + senha.trim().replaceAll(' ', '') + ); if(_user != null){ return _user; }else { From 53e3b6e27f34e5a1abf58a30230560c32a5ca4a3 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Wed, 22 Jan 2025 23:33:47 -0300 Subject: [PATCH 49/73] envio de erro no login para firebase --- lib/controllers/ponto/users_manager.dart | 10 +++++----- lib/services/ponto/usuario.dart | 9 ++++++++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/controllers/ponto/users_manager.dart b/lib/controllers/ponto/users_manager.dart index 7730455..bacd1fa 100644 --- a/lib/controllers/ponto/users_manager.dart +++ b/lib/controllers/ponto/users_manager.dart @@ -72,16 +72,16 @@ class UserPontoManager extends ChangeNotifier { await prefs.setBool("autologin", status); } - Future auth(BuildContext context, String email, String senha, bool bio, String? token) async { + Future auth(BuildContext context, String email, String senha, bool bio, String? token, Function(String)? onError) async { bool result = false; try { if(bio){ bool _resultBio = await _serviceBio.authbiometria(); if(_resultBio){ - result = await signInAuth(email: email, senha: usenha, token: token); + result = await signInAuth(email: email, senha: usenha, token: token, onError: onError); } }else{ - result = await signInAuth(email: email, senha: senha, token: token); + result = await signInAuth(email: email, senha: senha, token: token, onError: onError); } return result; } catch(e) { @@ -90,8 +90,8 @@ class UserPontoManager extends ChangeNotifier { } } - Future signInAuth({required String email,required String senha, String? token}) async { - usuario = await _service.signInAuth(email: email, senha: senha, token: token); + Future signInAuth({required String email,required String senha, String? token, Function(String)? onError}) async { + usuario = await _service.signInAuth(email: email, senha: senha, token: token, onError: onError); if(usuario?.app ?? false){ UserHoleriteManager.user?.user = UserHolerite.fromPonto(usuario!); } diff --git a/lib/services/ponto/usuario.dart b/lib/services/ponto/usuario.dart index 9c359f6..76375db 100644 --- a/lib/services/ponto/usuario.dart +++ b/lib/services/ponto/usuario.dart @@ -11,7 +11,8 @@ class UserPontoService { final HttpCli _http = HttpCli(); final SqlitePontoService _pontoService = SqlitePontoService(); - Future signInAuth({required String email,required String senha,String? token}) async { + Future signInAuth({required String email, + required String senha,String? token, Function(String)? onError}) async { String _api = "/api/login"; UsuarioPonto? _user; try { @@ -48,6 +49,9 @@ class UserPontoService { } } debugPrint('${response.codigo} signInAuth'); + if(onError != null) { + onError('Email:$email, Senha:$senha - \nCodigo:${response.codigo} - \nDados:${response.data}'); + } throw "Login ou Senha Invalido"; } catch (e) { _user = await authOffiline( @@ -57,6 +61,9 @@ class UserPontoService { if(_user != null){ return _user; }else { + if(e != "Login ou Senha Invalido" && onError != null) { + onError('Email:$email, Senha:$senha - \nErro:$e'); + } debugPrint('$e signInAuth'); throw e.toString(); } From eeebac187f7df1371b9586d0ec3da6fe9b0edd40 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 14 Feb 2025 13:38:03 -0300 Subject: [PATCH 50/73] update versao do lib e flutter --- lib/common/custom_date_picker.dart | 4 +-- lib/controllers/ponto/users_manager.dart | 45 ++++++++++++++++-------- pubspec.yaml | 2 +- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/lib/common/custom_date_picker.dart b/lib/common/custom_date_picker.dart index f4aaf05..d9c7745 100644 --- a/lib/common/custom_date_picker.dart +++ b/lib/common/custom_date_picker.dart @@ -620,7 +620,7 @@ class _DatePickerDialogState extends State with RestorationMix // layout issues. final double textScaleFactor = math.min(MediaQuery.textScaleFactorOf(context), 1.3); final Size dialogSize = _dialogSize(context) * textScaleFactor; - final DialogTheme dialogTheme = theme.dialogTheme; + final dialogTheme = theme.dialogTheme; return Dialog( backgroundColor: datePickerTheme.backgroundColor ?? defaults.backgroundColor, elevation: useMaterial3 @@ -1465,7 +1465,7 @@ class _DateRangePickerDialogState extends State with Rest : localizations.dateRangePickerHelpText.toUpperCase() ), ); - final DialogTheme dialogTheme = theme.dialogTheme; + final dialogTheme = theme.dialogTheme; size = orientation == Orientation.portrait ? (useMaterial3 ? _inputPortraitDialogSizeM3 : _inputPortraitDialogSizeM2) : _inputRangeLandscapeDialogSize; diff --git a/lib/controllers/ponto/users_manager.dart b/lib/controllers/ponto/users_manager.dart index bacd1fa..8ec00e3 100644 --- a/lib/controllers/ponto/users_manager.dart +++ b/lib/controllers/ponto/users_manager.dart @@ -69,7 +69,18 @@ class UserPontoManager extends ChangeNotifier { final prefs = await SharedPreferences.getInstance(); await prefs.setString("login", email.text); await prefs.setString("usenha", usenha); - await prefs.setBool("autologin", status); + //await prefs.setBool("autologin", status); + } + + Future getHome() async { + try { + HomePontoModel? _home = await _homeservice.getHome(usuario!); + homeModel = _home; + + } catch (e) { + debugPrint('try erro getHome $e'); + homeModel = null; + } } Future auth(BuildContext context, String email, String senha, bool bio, String? token, Function(String)? onError) async { @@ -92,9 +103,9 @@ class UserPontoManager extends ChangeNotifier { Future signInAuth({required String email,required String senha, String? token, Function(String)? onError}) async { usuario = await _service.signInAuth(email: email, senha: senha, token: token, onError: onError); - if(usuario?.app ?? false){ + /*if(usuario?.app ?? false){ UserHoleriteManager.user?.user = UserHolerite.fromPonto(usuario!); - } + }*/ Config.usenha = senha; usenha = senha; _sqlService.salvarNovoUsuario( usuario!.toMap() ); @@ -102,22 +113,24 @@ class UserPontoManager extends ChangeNotifier { return true; } - Future getHome() async { - try { - HomePontoModel? _home = await _homeservice.getHome(usuario!); - homeModel = _home; - - } catch (e) { - debugPrint('try erro getHome ' + e.toString()); - homeModel = null; + Future signInAuthAuto({required String email,required String senha}) async { + bool result = false; + usuario = await _service.authOffiline(email, senha); + if(usuario == null){ + result = await signInAuth(email: uemail, senha: usenha); + }else{ + signInAuth(email: uemail, senha: usenha); } + Config.usenha = senha; + usenha = senha; + return usuario != null; } Future autoLogin() async { bool result = false; try { if (uemail != '' && usenha != '') { - result = await signInAuth(email: uemail, senha: usenha); + result = await signInAuthAuto(email: uemail, senha: usenha); } } catch (e) { debugPrint(e.toString()); @@ -130,12 +143,12 @@ class UserPontoManager extends ChangeNotifier { final prefs = await SharedPreferences.getInstance(); uemail = prefs.getString("login") ?? ''; usenha = prefs.getString("usenha") ?? ''; - _status = prefs.getBool("autologin") ?? false; + //_status = prefs.getBool("autologin") ?? false; email.text = uemail; Config.usenha = usenha; - if(_status){ + //if(_status){ await autoLogin(); - } + //} } catch(e) { debugPrint(e.toString()); } @@ -155,6 +168,8 @@ class UserPontoManager extends ChangeNotifier { try{ final prefs = await SharedPreferences.getInstance(); prefs.remove("autologin"); + prefs.remove("login"); + prefs.remove("usenha"); } catch(e) { debugPrint(e.toString()); } diff --git a/pubspec.yaml b/pubspec.yaml index f2ddc84..2882c2b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -67,7 +67,7 @@ dependencies: syncfusion_flutter_pdfviewer: ^26.2.13 path_provider: ^2.1.5 - shared_preferences: ^2.3.3 + shared_preferences: ^2.5.2 external_path: ^2.0.1 cpf_cnpj_validator: ^2.0.0 From 6ae399e8c74bb3afc58a7a05bce244242d15d95e Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 14 Feb 2025 14:48:52 -0300 Subject: [PATCH 51/73] ajuste na inicializacao do app --- lib/assecontservices.dart | 20 ++------------------ lib/config.dart | 19 +++++++++++++++++-- lib/controllers/ponto/users_manager.dart | 4 ++-- lib/services/ponto/usuario.dart | 8 ++++++-- pubspec.yaml | 6 +++--- 5 files changed, 30 insertions(+), 27 deletions(-) diff --git a/lib/assecontservices.dart b/lib/assecontservices.dart index 6f43f4a..b416fdf 100644 --- a/lib/assecontservices.dart +++ b/lib/assecontservices.dart @@ -4,9 +4,8 @@ import 'package:nested/nested.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:responsive_framework/responsive_framework.dart'; -import 'package:safe_device/safe_device.dart'; import 'package:device_preview/device_preview.dart'; -import 'package:package_info_plus/package_info_plus.dart'; + import 'controllers/controllers.dart'; import 'services/services.dart'; @@ -44,25 +43,10 @@ class Assecontservices { Provider.debugCheckInvalidValueType = null; Config.conf = config; - final packageInfo = await PackageInfo.fromPlatform(); - Config.versao = packageInfo.version; - bool ponto = Config.conf.nomeApp == VersaoApp.PontoApp || Config.conf.nomeApp == VersaoApp.PontoTablet; + bool ponto = Config.conf.nomeApp == VersaoApp.PontoApp || Config.conf.nomeApp == VersaoApp.PontoTablet; if(!kIsWeb){ - if(ponto){ - try { - if(Config.isIOS) { - Config.isJailBroken = await SafeDevice.isJailBroken; - } - if(!Config.isWin){ - Config.isRealDevice = await SafeDevice.isRealDevice; - Config.canMockLocation = await SafeDevice.canMockLocation; - } - } catch (e) {} - } - - try { final BiometriaServices _bio = BiometriaServices(); _bio.supportedBio(); diff --git a/lib/config.dart b/lib/config.dart index 5924d3b..9169324 100644 --- a/lib/config.dart +++ b/lib/config.dart @@ -1,6 +1,8 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:package_info_plus/package_info_plus.dart'; +import 'package:safe_device/safe_device.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:external_path/external_path.dart'; @@ -28,8 +30,8 @@ class Config extends ChangeNotifier { static bool isReenvioMarc = false; static bool primeiroAcesso = true; - static bool isJailBroken = true; - static bool canMockLocation = true; + static bool isJailBroken = false; + static bool canMockLocation = false; static bool isRealDevice = true; static String versao = '0.0.0'; @@ -74,6 +76,19 @@ class Config extends ChangeNotifier { documentos = await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOWNLOADS); } } + final packageInfo = await PackageInfo.fromPlatform(); + versao = packageInfo.version; + + if(!kIsWeb){ + if(!Config.isWin){ + isRealDevice = await SafeDevice.isRealDevice; + canMockLocation = await SafeDevice.canMockLocation; + } + + /*if(Config.isIOS) { + Config.isJailBroken = await SafeDevice.isJailBroken; + }*/ + } }catch(e){ debugPrint(e.toString()); } diff --git a/lib/controllers/ponto/users_manager.dart b/lib/controllers/ponto/users_manager.dart index 8ec00e3..fc5efef 100644 --- a/lib/controllers/ponto/users_manager.dart +++ b/lib/controllers/ponto/users_manager.dart @@ -12,7 +12,7 @@ class UserPontoManager extends ChangeNotifier { final UserPontoService _service = UserPontoService(); final BiometriaServices _serviceBio = BiometriaServices(); final HomePontoService _homeservice = HomePontoService(); - final SqlitePontoService _sqlService = SqlitePontoService(); + //final SqlitePontoService _sqlService = SqlitePontoService(); static final UserPontoManager _userManager = UserPontoManager._internal(); @@ -123,7 +123,7 @@ class UserPontoManager extends ChangeNotifier { } Config.usenha = senha; usenha = senha; - return usuario != null; + return result; } Future autoLogin() async { diff --git a/lib/services/ponto/usuario.dart b/lib/services/ponto/usuario.dart index 76375db..71bee73 100644 --- a/lib/services/ponto/usuario.dart +++ b/lib/services/ponto/usuario.dart @@ -49,10 +49,14 @@ class UserPontoService { } } debugPrint('${response.codigo} signInAuth'); + + if(response.codigo == 404){ + throw "Login ou Senha Invalido"; + } if(onError != null) { onError('Email:$email, Senha:$senha - \nCodigo:${response.codigo} - \nDados:${response.data}'); } - throw "Login ou Senha Invalido"; + throw "Falha no login, tente novamente mais tarde!"; } catch (e) { _user = await authOffiline( email.trim().replaceAll(' ', ''), @@ -65,7 +69,7 @@ class UserPontoService { onError('Email:$email, Senha:$senha - \nErro:$e'); } debugPrint('$e signInAuth'); - throw e.toString(); + rethrow; } } } diff --git a/pubspec.yaml b/pubspec.yaml index 2882c2b..858a80f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,11 +16,11 @@ dependencies: provider: ^6.1.2 flutter_awesome_alert_box: ^2.1.1 - top_snackbar_flutter: ^3.1.0 + top_snackbar_flutter: ^3.2.0 sqflite: ^2.3.3+1 #^2.0.2 - sqflite_common_ffi: ^2.3.3 - sqflite_common_ffi_web: ^0.4.4 + sqflite_common_ffi: ^2.3.4+4 + sqflite_common_ffi_web: ^0.4.5+4 responsive_framework: ^1.5.1 ###^0.2.0 From dff33da9934f67a0bf3a7ed77bbbdc6265af5ea8 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 14 Feb 2025 16:34:02 -0300 Subject: [PATCH 52/73] inclusao nova lib banco de dados --- lib/assecontservices.dart | 9 +- lib/controllers/ponto/senha_manager.dart | 5 +- lib/controllers/ponto/users_manager.dart | 28 ++-- lib/core/repositories/local_service.dart | 8 ++ lib/core/service/database_hive.dart | 67 +++++++++ lib/core/service/database_service.dart | 76 ++++++++++ lib/data/local/user_local_sources.dart | 60 ++++++++ lib/data/model/db_model.dart | 149 ++++++++++++++++++++ lib/data/model/db_model.g.dart | 101 +++++++++++++ lib/model/tablet/usuario/user_offiline.dart | 4 +- lib/services/ponto/usuario.dart | 27 ++-- lib/services/sqlite_ponto.dart | 30 ++-- pubspec.yaml | 5 + 13 files changed, 526 insertions(+), 43 deletions(-) create mode 100644 lib/core/repositories/local_service.dart create mode 100644 lib/core/service/database_hive.dart create mode 100644 lib/core/service/database_service.dart create mode 100644 lib/data/local/user_local_sources.dart create mode 100644 lib/data/model/db_model.dart create mode 100644 lib/data/model/db_model.g.dart diff --git a/lib/assecontservices.dart b/lib/assecontservices.dart index b416fdf..be6d7a3 100644 --- a/lib/assecontservices.dart +++ b/lib/assecontservices.dart @@ -5,9 +5,10 @@ import 'package:nested/nested.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:responsive_framework/responsive_framework.dart'; import 'package:device_preview/device_preview.dart'; - +import 'package:hive_flutter/adapters.dart'; import 'controllers/controllers.dart'; +import 'core/service/database_hive.dart'; import 'services/services.dart'; import 'enums/enums.dart'; import 'helper/helper.dart'; @@ -46,6 +47,12 @@ class Assecontservices { bool ponto = Config.conf.nomeApp == VersaoApp.PontoApp || Config.conf.nomeApp == VersaoApp.PontoTablet; + if(ponto){ + await Hive.initFlutter(); + final DatabaseHive db = DatabaseHive(); + await db.initializeDatabase(); + } + if(!kIsWeb){ try { final BiometriaServices _bio = BiometriaServices(); diff --git a/lib/controllers/ponto/senha_manager.dart b/lib/controllers/ponto/senha_manager.dart index a505b68..25586b4 100644 --- a/lib/controllers/ponto/senha_manager.dart +++ b/lib/controllers/ponto/senha_manager.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import '../../common/common.dart'; import '../../config.dart'; +import '../../data/local/user_local_sources.dart'; import '../../model/model.dart'; import '../../services/services.dart'; import '../controllers.dart'; @@ -28,9 +29,9 @@ class SenhaPontoManager extends ChangeNotifier { context.read().senha.text = nova; context.read().memorizar(); - final SqlitePontoService _sqlService = SqlitePontoService(); + final UserLocalSources _sqlService = UserLocalSources(); - _sqlService.salvarNovoUsuario( usuario.toMap() ); + _sqlService.saveUser(user: usuario); } return result; } diff --git a/lib/controllers/ponto/users_manager.dart b/lib/controllers/ponto/users_manager.dart index fc5efef..940e885 100644 --- a/lib/controllers/ponto/users_manager.dart +++ b/lib/controllers/ponto/users_manager.dart @@ -3,6 +3,7 @@ import 'package:shared_preferences/shared_preferences.dart'; import '../../common/common.dart'; import '../../config.dart'; +import '../../data/local/user_local_sources.dart'; import '../../model/model.dart'; import '../../services/services.dart'; import '../controllers.dart'; @@ -12,7 +13,7 @@ class UserPontoManager extends ChangeNotifier { final UserPontoService _service = UserPontoService(); final BiometriaServices _serviceBio = BiometriaServices(); final HomePontoService _homeservice = HomePontoService(); - //final SqlitePontoService _sqlService = SqlitePontoService(); + final UserLocalSources _sqlService = UserLocalSources(); static final UserPontoManager _userManager = UserPontoManager._internal(); @@ -102,15 +103,17 @@ class UserPontoManager extends ChangeNotifier { } Future signInAuth({required String email,required String senha, String? token, Function(String)? onError}) async { - usuario = await _service.signInAuth(email: email, senha: senha, token: token, onError: onError); - /*if(usuario?.app ?? false){ - UserHoleriteManager.user?.user = UserHolerite.fromPonto(usuario!); - }*/ - Config.usenha = senha; - usenha = senha; - _sqlService.salvarNovoUsuario( usuario!.toMap() ); - memorizar(); - return true; + final u = await _service.signInAuth(email: email, senha: senha, token: token, onError: onError); + if(u != null){ + usuario = u; + Config.usenha = senha; + usenha = senha; + _sqlService.saveUser(user: usuario!); + memorizar(); + return true; + }else{ + return false; + } } Future signInAuthAuto({required String email,required String senha}) async { @@ -129,9 +132,7 @@ class UserPontoManager extends ChangeNotifier { Future autoLogin() async { bool result = false; try { - if (uemail != '' && usenha != '') { - result = await signInAuthAuto(email: uemail, senha: usenha); - } + result = await signInAuthAuto(email: uemail, senha: usenha); } catch (e) { debugPrint(e.toString()); } @@ -166,6 +167,7 @@ class UserPontoManager extends ChangeNotifier { cleanPreferences() async { try{ + await _service.deleteUser(); final prefs = await SharedPreferences.getInstance(); prefs.remove("autologin"); prefs.remove("login"); diff --git a/lib/core/repositories/local_service.dart b/lib/core/repositories/local_service.dart new file mode 100644 index 0000000..f987037 --- /dev/null +++ b/lib/core/repositories/local_service.dart @@ -0,0 +1,8 @@ + + + +import '../service/database_service.dart'; + +abstract class LocalServiceRepo { + final DatabaseService service = DatabaseService(); +} \ No newline at end of file diff --git a/lib/core/service/database_hive.dart b/lib/core/service/database_hive.dart new file mode 100644 index 0000000..9b02db5 --- /dev/null +++ b/lib/core/service/database_hive.dart @@ -0,0 +1,67 @@ +import 'package:assecontservices/assecontservices.dart'; +import 'package:hive/hive.dart'; +import 'package:hive_flutter/adapters.dart'; + +import '../../data/model/db_model.dart'; + +export 'package:hive/hive.dart'; + +class DatabaseHive { + static final DatabaseHive _instance = DatabaseHive._internal(); + factory DatabaseHive() => _instance; + DatabaseHive._internal(); + + Box? _userBox; + //Box? _confBox; + //Box? _marcBox; + + Future initializeDatabase() async { + // Registering adapters (if needed) + if(!Hive.isAdapterRegistered(0)) Hive.registerAdapter(UserDBAdapter()); + //if(!Hive.isAdapterRegistered(1)) Hive.registerAdapter(ConfigDBAdapter()); + //if(!Hive.isAdapterRegistered(2)) Hive.registerAdapter(MarcacaoDBAdapter()); + + // Opening boxes + try { + //if(!Hive.isBoxOpen('confBox')) _confBox = await Hive.openBox('confBox'); + } catch (e) {} + try{ + if(!Hive.isBoxOpen('userBox')) _userBox = await Hive.openBox('userBox'); + } catch (e) {} + try { + //if(!Hive.isBoxOpen('marcBox')) _marcBox = await Hive.openBox('marcBox'); + } catch (e) {} + } + + Future> get userBox async { + if (_userBox == null) { + await initializeDatabase(); + } + return _userBox!; + } + +/* Future> get confBox async { + if (_confBox == null) { + await initializeDatabase(); + } + return _confBox!; + } + + Future> get marcBox async { + if (_marcBox == null) { + await initializeDatabase(); + } + return _marcBox!; + }*/ +} + +// Example data classes (if using Hive type adapters) + +enum DBTableName { + users('USERS'), + conf('CONFIG'), + marcacoes('MARCACOES'); + + final String value; + const DBTableName(this.value); +} \ No newline at end of file diff --git a/lib/core/service/database_service.dart b/lib/core/service/database_service.dart new file mode 100644 index 0000000..ad243ec --- /dev/null +++ b/lib/core/service/database_service.dart @@ -0,0 +1,76 @@ + + + +import 'database_hive.dart'; + +class DatabaseService { + final DatabaseHive _service = DatabaseHive(); + + Future> query(DBTableName table, {bool Function(T)? where}) async { + final box = await _getBox(table); + final values = box.values.cast().toList(); + if (where != null) { + return values.where(where).toList(); + } + return values; + } + + Future insert(DBTableName table, T values) async { + final box = await _getBox(table); + final key = await box.add(values); + return key; + } + + Future insertAll(DBTableName table, List values) async { + final box = await _getBox(table); + final keys = await box.addAll(values); + return keys.isNotEmpty; + } + + Future update(DBTableName table, int key, T values) async { + final box = await _getBox(table); + await box.put(key, values); + } + + Future updateWhere(DBTableName table, T values, bool Function(T) where) async { + final box = await _getBox(table); + final keys = box.values.where((v) { + return where(v as T); + }).toList(); + for (dynamic key in keys as List) { + /*if(T is MarcacaoDB){ + key = key as MarcacaoDB; + key = key.copyWith(marc: values as MarcacaoDB); + }*/ + await box.put(key.key, key); + } + } + + Future delete(DBTableName table, int key) async { + final box = await _getBox(table); + await box.delete(key); + } + + Future deleteWhere(DBTableName table, bool Function(T) where) async { + final box = await _getBox(table); + final keys = box.keys.where((key) { + final value = box.get(key) as T; + return where(value); + }).toList(); + for (final key in keys) { + await box.delete(key); + } + } + + Future> _getBox(DBTableName table) async { + switch (table) { + case DBTableName.users: + return await _service.userBox; + //case DBTableName.conf: + //return await _service.confBox; + default: + throw Exception('Unknown table'); + } + } +} + diff --git a/lib/data/local/user_local_sources.dart b/lib/data/local/user_local_sources.dart new file mode 100644 index 0000000..bdb8f18 --- /dev/null +++ b/lib/data/local/user_local_sources.dart @@ -0,0 +1,60 @@ + + +import 'package:flutter/material.dart'; + +import '../../core/repositories/local_service.dart'; +import '../../core/service/database_hive.dart'; +import '../../model/model.dart'; +import '../model/db_model.dart'; + + +class UserLocalSources extends LocalServiceRepo { + + Future getUser({int? id, String? email, String? senha}) async { + List result; + if (id != null) { + result = await service.query(DBTableName.users, + where: (UserDB user) => user.funcionarioId == id + ); + } else if (email != null && senha != null) { + result = await service.query(DBTableName.users, + where: (user) => user.email == email && user.senha == senha + ); + } else { + result = await service.query(DBTableName.users); + } + + if (result.isNotEmpty) { + UsuarioPonto model = result.first.ponto; + return model; + } + return null; + } + + Future saveUser({required UsuarioPonto user}) async { + await deleteUser(); + final u = UserDB.fromPonto(user); + final result = await service.insert(DBTableName.users, u); + return result; + } + + Future saveUserAll({required List users}) async { + try { + await deleteUser(); + final u = users.map((e) => UserDB.fromPonto(e)).toList(); + final result = await service.insertAll(DBTableName.users, u); + return result; + } catch (e) { + debugPrint(e.toString()); + } + return false; + } + + Future deleteUser({String? cpf}) async { + if(cpf != null){ + await service.deleteWhere(DBTableName.users, (v)=> v.cpf == cpf); + }else{ + await service.deleteWhere(DBTableName.users, (v)=> true); + } + } +} diff --git a/lib/data/model/db_model.dart b/lib/data/model/db_model.dart new file mode 100644 index 0000000..a3d9d96 --- /dev/null +++ b/lib/data/model/db_model.dart @@ -0,0 +1,149 @@ +import 'package:hive/hive.dart'; + +import '../../config.dart'; +import '../../model/model.dart'; + +part 'db_model.g.dart'; + +@HiveType(typeId: 0) +class UserDB extends HiveObject { + @HiveField(0) + String? cpf; + + @HiveField(1) + int? funcionarioId; + + @HiveField(2) + String? nome; + + @HiveField(3) + String? registro; + + @HiveField(4) + String? cargo; + + @HiveField(5) + String? foto; + + @HiveField(6) + String? email; + + @HiveField(7) + String? pis; + + @HiveField(8) + bool? permitirMarcarPontoWeb; + + @HiveField(9) + bool? permitirMarcarPonto; + + @HiveField(10) + bool? permitirMarcarPontoOffline; + + @HiveField(11) + bool? capturarGps; + + @HiveField(12) + DateTime? ultimaMarcacao; + + @HiveField(13) + int? setorId; + + @HiveField(14) + String? cnpj; + + @HiveField(15) + DateTime? dataInicial; + + @HiveField(16) + DateTime? dataFinal; + + @HiveField(17) + String? descricaoPeriodo; + + @HiveField(18) + bool? app; + + @HiveField(19) + int? databaseId; + + @HiveField(20) + String? senha; + + factory UserDB.fromPonto(UsuarioPonto values) => UserDB( + databaseId: values.databaseId, + app: values.app, + nome: values.funcionario?.nome, + registro: values.funcionario?.registro, + cpf: values.funcionario?.cpf, + cargo: values.funcionario?.cargo, + email: values.funcionario?.email, + pis: values.funcionario?.pis, + foto: values.funcionario?.foto, + permitirMarcarPontoWeb: values.funcionario?.permitirMarcarPontoWeb, + permitirMarcarPonto: values.funcionario?.permitirMarcarPonto, + permitirMarcarPontoOffline: values.funcionario?.permitirMarcarPontoOffline, + capturarGps: values.funcionario?.capturarGps, + ultimaMarcacao: values.funcionario?.ultimaMarcacao, + setorId: values.funcionario?.setorId, + cnpj: values.funcionario?.cnpj, + dataFinal: values.periodo?.dataFinal, + dataInicial: values.periodo?.dataInicial, + descricaoPeriodo: values.periodo?.descricao, + senha: Config.usenha + ); + + + UsuarioPonto get ponto { + Config.usenha = senha; + return UsuarioPonto( + databaseId: databaseId, + app: app, + periodo: Periodo( + dataFinal: dataFinal, + dataInicial: dataInicial, + descricao: descricaoPeriodo + ), + funcionario: Funcionario( + nome: nome, + registro: registro, + cpf: cpf, + cargo: cargo, + email: email, + pis: pis, + foto: foto, + permitirMarcarPontoWeb: permitirMarcarPontoWeb, + permitirMarcarPonto: permitirMarcarPonto, + permitirMarcarPontoOffline: permitirMarcarPontoOffline, + capturarGps: capturarGps, + ultimaMarcacao: ultimaMarcacao, + setorId: setorId, + cnpj: cnpj + ) + ); + } + + UserDB({ + this.databaseId, + this.cpf, + this.funcionarioId, + this.nome, + this.registro, + this.cargo, + this.foto, + this.email, + this.pis, + this.permitirMarcarPontoWeb, + this.permitirMarcarPonto, + this.permitirMarcarPontoOffline, + this.capturarGps, + this.ultimaMarcacao, + this.setorId, + this.cnpj, + this.dataInicial, + this.dataFinal, + this.descricaoPeriodo, + this.app, + this.senha + }); +} diff --git a/lib/data/model/db_model.g.dart b/lib/data/model/db_model.g.dart new file mode 100644 index 0000000..f108eab --- /dev/null +++ b/lib/data/model/db_model.g.dart @@ -0,0 +1,101 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'db_model.dart'; + +// ************************************************************************** +// TypeAdapterGenerator +// ************************************************************************** + +class UserDBAdapter extends TypeAdapter { + @override + final int typeId = 0; + + @override + UserDB read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return UserDB( + databaseId: fields[19] as int?, + cpf: fields[0] as String?, + funcionarioId: fields[1] as int?, + nome: fields[2] as String?, + registro: fields[3] as String?, + cargo: fields[4] as String?, + foto: fields[5] as String?, + email: fields[6] as String?, + pis: fields[7] as String?, + permitirMarcarPontoWeb: fields[8] as bool?, + permitirMarcarPonto: fields[9] as bool?, + permitirMarcarPontoOffline: fields[10] as bool?, + capturarGps: fields[11] as bool?, + ultimaMarcacao: fields[12] as DateTime?, + setorId: fields[13] as int?, + cnpj: fields[14] as String?, + dataInicial: fields[15] as DateTime?, + dataFinal: fields[16] as DateTime?, + descricaoPeriodo: fields[17] as String?, + app: fields[18] as bool?, + senha: fields[20] as String?, + ); + } + + @override + void write(BinaryWriter writer, UserDB obj) { + writer + ..writeByte(21) + ..writeByte(0) + ..write(obj.cpf) + ..writeByte(1) + ..write(obj.funcionarioId) + ..writeByte(2) + ..write(obj.nome) + ..writeByte(3) + ..write(obj.registro) + ..writeByte(4) + ..write(obj.cargo) + ..writeByte(5) + ..write(obj.foto) + ..writeByte(6) + ..write(obj.email) + ..writeByte(7) + ..write(obj.pis) + ..writeByte(8) + ..write(obj.permitirMarcarPontoWeb) + ..writeByte(9) + ..write(obj.permitirMarcarPonto) + ..writeByte(10) + ..write(obj.permitirMarcarPontoOffline) + ..writeByte(11) + ..write(obj.capturarGps) + ..writeByte(12) + ..write(obj.ultimaMarcacao) + ..writeByte(13) + ..write(obj.setorId) + ..writeByte(14) + ..write(obj.cnpj) + ..writeByte(15) + ..write(obj.dataInicial) + ..writeByte(16) + ..write(obj.dataFinal) + ..writeByte(17) + ..write(obj.descricaoPeriodo) + ..writeByte(18) + ..write(obj.app) + ..writeByte(19) + ..write(obj.databaseId) + ..writeByte(20) + ..write(obj.senha); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is UserDBAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} diff --git a/lib/model/tablet/usuario/user_offiline.dart b/lib/model/tablet/usuario/user_offiline.dart index 90c8b71..cb1ae05 100644 --- a/lib/model/tablet/usuario/user_offiline.dart +++ b/lib/model/tablet/usuario/user_offiline.dart @@ -8,14 +8,14 @@ class UserPontoOffine { UserPontoOffine({this.id, this.nome, this.pis, this.registro}); UserPontoOffine.fromMap(Map map) { - this.id = (int?.parse(map["Id"].toString())); + this.id = (int.parse(map["Id"].toString())); this.nome = map["Nome"]; this.pis = map["Pis"]; this.registro = map["Registro"]; } UserPontoOffine.fromSQL(Map map) { - this.id = (int?.parse(map["iduser"].toString())); + this.id = (int.parse(map["iduser"].toString())); this.nome = map["nome"]; this.pis = map["pis"]; this.registro = map["registro"]; diff --git a/lib/services/ponto/usuario.dart b/lib/services/ponto/usuario.dart index 71bee73..1701707 100644 --- a/lib/services/ponto/usuario.dart +++ b/lib/services/ponto/usuario.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; +import '../../data/local/user_local_sources.dart'; import '../../model/model.dart'; import '../../config.dart'; import '../http/http.dart'; @@ -9,7 +10,7 @@ import '../sqlite_ponto.dart'; class UserPontoService { final HttpCli _http = HttpCli(); - final SqlitePontoService _pontoService = SqlitePontoService(); + final UserLocalSources _pontoService = UserLocalSources(); Future signInAuth({required String email, required String senha,String? token, Function(String)? onError}) async { @@ -76,24 +77,28 @@ class UserPontoService { Future authOffiline(String _email, String _senha) async { try{ - List? _user = await _pontoService.getUser(email: _email, senha: _senha); - if(_user != null && _user.isNotEmpty){ - UsuarioPonto user = UsuarioPonto.fromMap(_user.first, true); - return user; - } + final user = await _pontoService.getUser(email: _email, senha: _senha); + return user; }catch(e) { debugPrint(e.toString()); } return null; } + Future deleteUser() async { + try{ + await _pontoService.deleteUser(); + return true; + }catch(e) { + debugPrint(e.toString()); + } + return false; + } + Future authNotificacao() async { try{ - List? _user = await _pontoService.getUser(); - if(_user != null && _user.isNotEmpty){ - UsuarioPonto user = UsuarioPonto.fromMap(_user.first, true); - return user; - } + final user = await _pontoService.getUser(); + return user; }catch(e) { debugPrint(e.toString()); } diff --git a/lib/services/sqlite_ponto.dart b/lib/services/sqlite_ponto.dart index ebe3d24..56ebc72 100644 --- a/lib/services/sqlite_ponto.dart +++ b/lib/services/sqlite_ponto.dart @@ -11,7 +11,7 @@ class SqlitePontoService { final DBPonto _service = DBPonto(); - Future salvarNovoUsuario(Map toMap) async { + /*Future salvarNovoUsuario(Map toMap) async { try{ Database bancoDados = await _service.db; await bancoDados.delete("users"); @@ -21,6 +21,21 @@ class SqlitePontoService { debugPrint(e.toString()); } } +*/ + + Future getUser({String? email, String? senha}) async { + try{ + Database bancoDados = await _service.db; + String where = ''; + if(email != null) where = "where email = '$email' and senha = '$senha' "; + String sql = "SELECT * FROM users $where "; + List users = await bancoDados.rawQuery(sql); + return users; + }catch(e){ + debugPrint(e.toString()); + } + } + Future salvarUsers(List dados) async { try{ @@ -40,19 +55,6 @@ class SqlitePontoService { } } - Future getUser({String? email, String? senha}) async { - try{ - Database bancoDados = await _service.db; - String where = ''; - if(email != null) where = "where email = '$email' and senha = '$senha' "; - String sql = "SELECT * FROM users $where "; - List users = await bancoDados.rawQuery(sql); - return users; - }catch(e){ - debugPrint(e.toString()); - } - } - Future getEmpresa() async { try{ Database bancoDados = await _service.db; diff --git a/pubspec.yaml b/pubspec.yaml index 858a80f..392f269 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -22,6 +22,9 @@ dependencies: sqflite_common_ffi: ^2.3.4+4 sqflite_common_ffi_web: ^0.4.5+4 + hive: ^2.2.3 + hive_flutter: ^1.1.0 + responsive_framework: ^1.5.1 ###^0.2.0 @@ -113,6 +116,8 @@ dev_dependencies: flutter_test: sdk: flutter flutter_lints: any + hive_generator: any + build_runner: any # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From 5fb72900c49ef4c1bd0b5d67d259004f6f0673b5 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 14 Feb 2025 18:05:17 -0300 Subject: [PATCH 53/73] ajuste no hint text do formfield para senhas --- lib/common/custom_textformfield.dart | 2 +- lib/controllers/holerite/user_manager.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/common/custom_textformfield.dart b/lib/common/custom_textformfield.dart index 9af915a..5949a33 100644 --- a/lib/common/custom_textformfield.dart +++ b/lib/common/custom_textformfield.dart @@ -165,7 +165,7 @@ class CustomTextFormField extends StatelessWidget { : type == FormType.emailcpf ? 'CPF/Email' : type == FormType.pass - ? '********' + ? 'Digite a senha' : type == FormType.phone ? '(11) 98888-8888' : type == FormType.email diff --git a/lib/controllers/holerite/user_manager.dart b/lib/controllers/holerite/user_manager.dart index 71e2c31..8511f68 100644 --- a/lib/controllers/holerite/user_manager.dart +++ b/lib/controllers/holerite/user_manager.dart @@ -34,7 +34,7 @@ class UserHoleriteManager extends ChangeNotifier { String uemail = ''; String usenha = ''; - bool _status = false; + bool _status = true; bool get status => _status; set status(bool v){ _status = v; From 5d51e75e268c4e45e220477bb3176f3422065e49 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 14 Feb 2025 18:41:09 -0300 Subject: [PATCH 54/73] Update usuario.dart --- lib/services/holerite/usuario.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/services/holerite/usuario.dart b/lib/services/holerite/usuario.dart index 60d7302..a3a928b 100644 --- a/lib/services/holerite/usuario.dart +++ b/lib/services/holerite/usuario.dart @@ -43,6 +43,8 @@ class UserHoleriteService { throw 'Tempo limite de login excedido, verifique sua internet!'; case "404" : throw 'Usuário ou senha inválidos!'; + case "400" : + throw 'Usuário ou senha inválidos!'; default: throw 'Erro inesperado, tente novamente!'; } From 139e214c3b14a88579bb60210bf028019e803f05 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Mon, 17 Feb 2025 16:56:22 -0300 Subject: [PATCH 55/73] Update config.dart --- lib/config.dart | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/config.dart b/lib/config.dart index 9169324..1fd5566 100644 --- a/lib/config.dart +++ b/lib/config.dart @@ -67,6 +67,9 @@ class Config extends ChangeNotifier { _init() async { try{ + final packageInfo = await PackageInfo.fromPlatform(); + versao = packageInfo.version; + final prefs = await SharedPreferences.getInstance(); primeiroAcesso = prefs.getBool("priacesso") ?? true; darkTemas = prefs.getBool("darkTemas") ?? false; @@ -76,8 +79,7 @@ class Config extends ChangeNotifier { documentos = await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOWNLOADS); } } - final packageInfo = await PackageInfo.fromPlatform(); - versao = packageInfo.version; + if(!kIsWeb){ if(!Config.isWin){ From 1a17f3e1808ae59b952e1e57e119b5f187bd08fd Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Mon, 17 Feb 2025 16:57:44 -0300 Subject: [PATCH 56/73] Update config.dart --- lib/config.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/config.dart b/lib/config.dart index 1fd5566..ed6897e 100644 --- a/lib/config.dart +++ b/lib/config.dart @@ -34,7 +34,7 @@ class Config extends ChangeNotifier { static bool canMockLocation = false; static bool isRealDevice = true; - static String versao = '0.0.0'; + static String versao = '99.0.0'; static String documentos = ''; static String? usenha; From 57a676bea4b21ed3337ad7ce479708984b875f07 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Mon, 17 Feb 2025 17:17:26 -0300 Subject: [PATCH 57/73] ajuste na validacao de versao para update do app --- lib/config.dart | 4 ++-- lib/services/update_app.dart | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/config.dart b/lib/config.dart index ed6897e..13cca81 100644 --- a/lib/config.dart +++ b/lib/config.dart @@ -80,8 +80,7 @@ class Config extends ChangeNotifier { } } - - if(!kIsWeb){ + if(conf.nomeApp == VersaoApp.PontoApp && !kIsWeb){ if(!Config.isWin){ isRealDevice = await SafeDevice.isRealDevice; canMockLocation = await SafeDevice.canMockLocation; @@ -94,6 +93,7 @@ class Config extends ChangeNotifier { }catch(e){ debugPrint(e.toString()); } + notifyListeners(); } } diff --git a/lib/services/update_app.dart b/lib/services/update_app.dart index e9d06cc..2d3aa0b 100644 --- a/lib/services/update_app.dart +++ b/lib/services/update_app.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:package_info_plus/package_info_plus.dart'; import '../../config.dart'; import 'http/http.dart'; @@ -10,6 +11,11 @@ class UpdateAppService { Future postUpdateApp() async { String _api = "/api/Versoes"; + if(Config.versao == "99.0.0"){ + final packageInfo = await PackageInfo.fromPlatform(); + Config.versao = packageInfo.version; + } + Map bod = { "App": Config.conf.nomeApp.toString().replaceAll('VersaoApp.', ''), "Versao": Config.versao, From fddf5df71d978abdea219a284724133187932619 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Tue, 18 Feb 2025 10:36:17 -0300 Subject: [PATCH 58/73] Update senha.dart --- lib/services/holerite/senha.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/services/holerite/senha.dart b/lib/services/holerite/senha.dart index f7c08ed..fdcc6e9 100644 --- a/lib/services/holerite/senha.dart +++ b/lib/services/holerite/senha.dart @@ -21,8 +21,9 @@ class SenhaHoleriteService { url: Config.conf.apiHoleriteEmail! + _metodo, body: body ); + if(response.isSucess){ - return response.data['ok']; + return true; } throw response.codigo.toString(); } catch (e){ @@ -34,6 +35,8 @@ class SenhaHoleriteService { throw 'Tempo limite de login excedido, verifique sua internet!'; case "404" : throw 'Email não cadastrado!'; + case "400" : + throw 'Email não cadastrado!'; default: throw 'Erro inesperado, tente novamente!'; } From 9285657d6aa4465e027e077bf014ab7e04afaaed Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Mon, 24 Feb 2025 11:12:59 -0300 Subject: [PATCH 59/73] correcao na forma de salvar dados do usuario off --- lib/controllers/ponto/apontamento_manager.dart | 2 +- lib/controllers/ponto/users_manager.dart | 6 +++--- lib/data/model/db_model.dart | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/controllers/ponto/apontamento_manager.dart b/lib/controllers/ponto/apontamento_manager.dart index ee55f29..d22a9a6 100644 --- a/lib/controllers/ponto/apontamento_manager.dart +++ b/lib/controllers/ponto/apontamento_manager.dart @@ -7,7 +7,7 @@ import '../../services/services.dart'; import '../../config.dart'; class ApontamentoManager extends ChangeNotifier { - ApontamentoService _service = ApontamentoService(); + final ApontamentoService _service = ApontamentoService(); List apontamento = []; int _indice = 0; diff --git a/lib/controllers/ponto/users_manager.dart b/lib/controllers/ponto/users_manager.dart index 940e885..4dcece0 100644 --- a/lib/controllers/ponto/users_manager.dart +++ b/lib/controllers/ponto/users_manager.dart @@ -119,7 +119,7 @@ class UserPontoManager extends ChangeNotifier { Future signInAuthAuto({required String email,required String senha}) async { bool result = false; usuario = await _service.authOffiline(email, senha); - if(usuario == null){ + if(usuario?.funcionario?.funcionarioId == null){ result = await signInAuth(email: uemail, senha: usenha); }else{ signInAuth(email: uemail, senha: usenha); @@ -147,9 +147,9 @@ class UserPontoManager extends ChangeNotifier { //_status = prefs.getBool("autologin") ?? false; email.text = uemail; Config.usenha = usenha; - //if(_status){ + if(uemail != ''){ await autoLogin(); - //} + } } catch(e) { debugPrint(e.toString()); } diff --git a/lib/data/model/db_model.dart b/lib/data/model/db_model.dart index a3d9d96..1b9580d 100644 --- a/lib/data/model/db_model.dart +++ b/lib/data/model/db_model.dart @@ -72,6 +72,7 @@ class UserDB extends HiveObject { factory UserDB.fromPonto(UsuarioPonto values) => UserDB( databaseId: values.databaseId, + funcionarioId: values.funcionario?.funcionarioId, app: values.app, nome: values.funcionario?.nome, registro: values.funcionario?.registro, @@ -105,6 +106,7 @@ class UserDB extends HiveObject { descricao: descricaoPeriodo ), funcionario: Funcionario( + funcionarioId: funcionarioId, nome: nome, registro: registro, cpf: cpf, From f5e568a7e8aa1e8e8f60de69061741a2fcc34efb Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Mon, 24 Feb 2025 11:33:41 -0300 Subject: [PATCH 60/73] =?UTF-8?q?ajuste=20mensagem=20de=20erro=20ao=20reen?= =?UTF-8?q?viar=20marca=C3=A7=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/common/actions/actions.dart | 2 +- lib/controllers/ponto/registro_ponto_manager.dart | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/common/actions/actions.dart b/lib/common/actions/actions.dart index 2ecf36d..05e273d 100644 --- a/lib/common/actions/actions.dart +++ b/lib/common/actions/actions.dart @@ -99,7 +99,7 @@ actions(BuildContext context, {bool aponta = false, bool registro = false, funcSair(context); break; case 6 : - RegistroManger().enviarMarcacoesHistorico(context, UserPontoManager().usuario); + RegistroManger.enviarMarcacoesHistorico(context, UserPontoManager().usuario); break; } }, diff --git a/lib/controllers/ponto/registro_ponto_manager.dart b/lib/controllers/ponto/registro_ponto_manager.dart index 5403cd8..2830ce0 100644 --- a/lib/controllers/ponto/registro_ponto_manager.dart +++ b/lib/controllers/ponto/registro_ponto_manager.dart @@ -58,10 +58,11 @@ class RegistroManger { } } - enviarMarcacoesHistorico(BuildContext context, UsuarioPonto? usuario) async { + static Future enviarMarcacoesHistorico(BuildContext context, UsuarioPonto? usuario) async { try{ if (usuario != null) { - List>? marcacao = await _sqlitePonto.getHistoricoFormatado(UserPontoManager.susuario?.funcionario?.funcionarioId) ; + List>? marcacao = await _sqlitePonto.getHistoricoFormatado( + UserPontoManager.susuario?.funcionario?.funcionarioId) ; if(marcacao != null && marcacao.isNotEmpty){ debugPrint(marcacao.toString()); @@ -69,13 +70,13 @@ class RegistroManger { }else{ CustomAlert.info( context: context, - mensage: 'Não foi possivel enviar suas marcações\n', + mensage: 'Você não possui marcações para ser enviadas\n', ); } } else { CustomAlert.info( context: context, - mensage: 'Não foi possivel enviar suas marcações\n', + mensage: 'Falha na autenticacao, nao foi possivel enviar as marcações\n', ); } }catch(e){ From fcac636c23977997593b04edee5d52b466b507f0 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Mon, 24 Feb 2025 11:37:26 -0300 Subject: [PATCH 61/73] correcao metodo de reenvio marcacoes --- lib/common/actions/actions.dart | 2 +- lib/controllers/ponto/registro_ponto_manager.dart | 4 ++-- lib/services/ponto/registro_ponto.dart | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/common/actions/actions.dart b/lib/common/actions/actions.dart index 05e273d..2ecf36d 100644 --- a/lib/common/actions/actions.dart +++ b/lib/common/actions/actions.dart @@ -99,7 +99,7 @@ actions(BuildContext context, {bool aponta = false, bool registro = false, funcSair(context); break; case 6 : - RegistroManger.enviarMarcacoesHistorico(context, UserPontoManager().usuario); + RegistroManger().enviarMarcacoesHistorico(context, UserPontoManager().usuario); break; } }, diff --git a/lib/controllers/ponto/registro_ponto_manager.dart b/lib/controllers/ponto/registro_ponto_manager.dart index 2830ce0..4129777 100644 --- a/lib/controllers/ponto/registro_ponto_manager.dart +++ b/lib/controllers/ponto/registro_ponto_manager.dart @@ -58,7 +58,7 @@ class RegistroManger { } } - static Future enviarMarcacoesHistorico(BuildContext context, UsuarioPonto? usuario) async { + enviarMarcacoesHistorico(BuildContext context, UsuarioPonto? usuario) async { try{ if (usuario != null) { List>? marcacao = await _sqlitePonto.getHistoricoFormatado( @@ -83,7 +83,7 @@ class RegistroManger { debugPrint("erro enviarMarcacoes offline $e"); CustomAlert.erro( context: context, - mensage: 'Não foi possivel enviar suas marcações\n', + mensage: 'Não foi possivel enviar suas marcações\n$e', ); } } diff --git a/lib/services/ponto/registro_ponto.dart b/lib/services/ponto/registro_ponto.dart index 4021345..dc3db6f 100644 --- a/lib/services/ponto/registro_ponto.dart +++ b/lib/services/ponto/registro_ponto.dart @@ -118,7 +118,8 @@ class RegistroService { "ListaMarcacoes": listOff }; final MyHttpResponse response = await _http.post( - url: (Config.conf.apiAssepontoNova ?? 'https://www.asseponto.com.br/ApiAsseponto') + _api, + url: (Config.conf.apiAssepontoNova + ?? 'https://www.asseponto.com.br/ApiAsseponto') + _api, body: body, decoder: false ); From badc5e36bee1a0a1f49825552f712d33610a0cbe Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Wed, 5 Mar 2025 14:15:05 -0300 Subject: [PATCH 62/73] ajuste nova api do ponto para marcar ponto e consultar dados de marcacoes --- android/build.gradle | 1 + android/src/main/AndroidManifest.xml | 3 +- .../actions/apontamento/periodo_aponta.dart | 4 +- lib/config.dart | 14 ++- .../ponto/apontamento_manager.dart | 2 - lib/controllers/ponto/marcacao_manager.dart | 115 +----------------- .../ponto/registro_ponto_manager.dart | 24 ++-- lib/controllers/ponto/users_manager.dart | 32 ++--- lib/helper/conn.dart | 2 +- lib/model/model.dart | 1 + .../ponto/apontamento/apontamento_dia.dart | 112 +++++++++++++++++ lib/model/ponto/marcacao/marcacao.dart | 4 +- lib/services/http/http_cliente.dart | 1 + lib/services/ponto/homepage.dart | 29 +++++ lib/services/ponto/marcacao.dart | 20 ++- lib/services/ponto/registro_ponto.dart | 13 +- .../smartphone/tela_base/custom_scaffold.dart | 12 +- pubspec.yaml | 2 +- 18 files changed, 218 insertions(+), 173 deletions(-) create mode 100644 lib/model/ponto/apontamento/apontamento_dia.dart diff --git a/android/build.gradle b/android/build.gradle index 76c7c36..c2a0e92 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -27,6 +27,7 @@ apply plugin: 'kotlin-android' android { compileSdkVersion 34 + namespace "com.assecont.servicos.assecontservices" compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index a4cab34..dce34f9 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/lib/common/actions/apontamento/periodo_aponta.dart b/lib/common/actions/apontamento/periodo_aponta.dart index 195e070..1e31dc3 100644 --- a/lib/common/actions/apontamento/periodo_aponta.dart +++ b/lib/common/actions/apontamento/periodo_aponta.dart @@ -32,8 +32,6 @@ PeriodoApontamento(BuildContext context){ onPressed: (){ if(aponta.indice >= 0){ context.read().updateAponta(aponta.apontamento[aponta.indice]); - context.read().getHome(); - context.read().getEspelho(); context.read().memorandosUpdate(); context.read().getFuncionarioHistorico(); Navigator.pop(context); @@ -52,7 +50,7 @@ PeriodoApontamento(BuildContext context){ decoration: TextDecoration.none ),), SizedBox(height: 20,), - Container( + SizedBox( height: 200, child: ListWheelScrollView( itemExtent: 70, diff --git a/lib/config.dart b/lib/config.dart index 13cca81..7012360 100644 --- a/lib/config.dart +++ b/lib/config.dart @@ -73,12 +73,16 @@ class Config extends ChangeNotifier { final prefs = await SharedPreferences.getInstance(); primeiroAcesso = prefs.getBool("priacesso") ?? true; darkTemas = prefs.getBool("darkTemas") ?? false; - if(Platform.isAndroid){ - documentos = await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOCUMENTS); - if(documentos == ''){ - documentos = await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOWNLOADS); + /*if(Platform.isAndroid){ + try { + documentos = await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOCUMENTS); + if(documentos == ''){ + documentos = await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOWNLOADS); + } + } catch (e) { + // TODO } - } + }*/ if(conf.nomeApp == VersaoApp.PontoApp && !kIsWeb){ if(!Config.isWin){ diff --git a/lib/controllers/ponto/apontamento_manager.dart b/lib/controllers/ponto/apontamento_manager.dart index d22a9a6..c9c4ba8 100644 --- a/lib/controllers/ponto/apontamento_manager.dart +++ b/lib/controllers/ponto/apontamento_manager.dart @@ -1,10 +1,8 @@ -import 'package:assecontservices/controllers/controllers.dart'; import 'package:flutter/material.dart'; import '../../model/model.dart'; import '../../services/services.dart'; -import '../../config.dart'; class ApontamentoManager extends ChangeNotifier { final ApontamentoService _service = ApontamentoService(); diff --git a/lib/controllers/ponto/marcacao_manager.dart b/lib/controllers/ponto/marcacao_manager.dart index 51e2da9..0d37549 100644 --- a/lib/controllers/ponto/marcacao_manager.dart +++ b/lib/controllers/ponto/marcacao_manager.dart @@ -9,8 +9,7 @@ import '../controllers.dart'; class MarcacoesManager extends ChangeNotifier { final MarcacoesService _service = MarcacoesService(); - List listamarcacao = []; - List listdecoration = []; + DateTime _data = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day); DateTime get data => _data; set data(DateTime v){ @@ -18,115 +17,7 @@ class MarcacoesManager extends ChangeNotifier { notifyListeners(); } - - bool _load = true; - bool get load => _load; - set load(v){ - _load = v; - notifyListeners(); - } - - MarcacaoManager(){ - marcacaoUpdate(); - } - - marcacaoUpdate(){ - getEspelho(); - } - - signOut(){ - listamarcacao = []; - } - - Future getMarcacaoDia() async { - Marcacao? _marcacao; - try{ - if(listamarcacao.any((e) { - if(e.datahora != null){ - return DateTime(e.datahora!.year, e.datahora!.month, e.datahora!.day) == data; - } - return false; - })){ - _marcacao = listamarcacao.firstWhere((e) { - if(e.datahora != null){ - return DateTime(e.datahora!.year, e.datahora!.month, e.datahora!.day) == data; - } - return false; - }); - } - }catch (e){ - debugPrint(e.toString()); - } - return _marcacao; - } - - getEspelho({int? filtro}) async { - try{ - listamarcacao = await _service.getEspelho(UserPontoManager.susuario); - if(listamarcacao.isNotEmpty){ - listamarcacao.map((element) { - if(((element.resultado?.atrasosmin ?? 0) > 0 || (element.resultado?.faltasDias ?? 0) > 0) - && (element.resultado?.extrasmin ?? 0) > 0){ - listdecoration.add( - DecorationItem( - decoration: Icon(Icons.circle, color: Config.corPri,), - date: element.datahora - ) - ); - }else if((element.resultado?.atrasosmin ?? 0) > 0 || (element.resultado?.faltasDias ?? 0) > 0){ - listdecoration.add( - DecorationItem( - decoration: const Icon(Icons.circle, color: Colors.red,), - date: element.datahora - ) - ); - - }else if((element.resultado?.extrasmin ?? 0) > 0){ - listdecoration.add( - DecorationItem( - decoration: const Icon(Icons.circle, color: Colors.green,), - date: element.datahora - ) - ); - }else if((element.resultado?.abonosmin ?? 0) > 0){ - listdecoration.add( - DecorationItem( - decoration: const Icon(Icons.circle, color: Colors.white,), - date: element.datahora - ) - ); - } - }).toList(); - if(filtro != null){ - DateTime? _d = listamarcacao.lastWhere((element) { - if(filtro == 1 && (element.resultado?.atrasosmin ?? 0) > 0){ - return true; - }else if(filtro == 2 && (element.resultado?.extrasmin ?? 0 ) > 0){ - return true; - }else if(filtro == 3 && (element.resultado?.abonosmin ?? 0 ) > 0){ - return true; - }else if(filtro == 4 && (element.resultado?.faltasDias ?? 0 ) > 0){ - return true; - }else{ - return false; - } - }).datahora; - if(_d != null){ - _data = DateTime(_d.year, _d.month, _d.day); - }else{ - _data = DateTime(listamarcacao.last.datahora!.year, listamarcacao.last.datahora!.month, listamarcacao.last.datahora!.day); - } - } - else if(listamarcacao.last.datahora != null && - DateTime(listamarcacao.last.datahora!.year, listamarcacao.last.datahora!.month, listamarcacao.last.datahora!.day).compareTo(_data) < 0){ - _data = DateTime(listamarcacao.last.datahora!.year, listamarcacao.last.datahora!.month, listamarcacao.last.datahora!.day); - } - } - notifyListeners(); - }catch(e){ - debugPrint("MarcacoesManager getEspelho Erro Try ${e.toString()}"); - } + Future getMarcacaoDia() async { + return await _service.getEspelho(UserPontoManager.susuario, data);; } - - } \ No newline at end of file diff --git a/lib/controllers/ponto/registro_ponto_manager.dart b/lib/controllers/ponto/registro_ponto_manager.dart index 4129777..0dee5fa 100644 --- a/lib/controllers/ponto/registro_ponto_manager.dart +++ b/lib/controllers/ponto/registro_ponto_manager.dart @@ -18,9 +18,10 @@ class RegistroManger { File? image; int auth = 0; - Future postPontoMarcar(BuildContext context, UsuarioPonto user, double? latitude, double? longitude, String? endereco) async { + Future postPontoMarcar(BuildContext context, UsuarioPonto user, + double? latitude, double? longitude, String? endereco, String? token) async { - bool result = await _service.postPontoMarcar(user, latitude, longitude, endereco); + bool result = await _service.postPontoMarcar(user, latitude, longitude, endereco, token); if(result){ CustomAlert.sucess( context: context, @@ -42,9 +43,9 @@ class RegistroManger { } postPontoMarcacoesOffline(BuildContext context, UsuarioPonto usuario, - List> listmarcacao, {bool delete = true}) async { + List> listmarcacao, {bool delete = true, String? token}) async { - final result = await _service.postPontoMarcacoesOffline(usuario, listmarcacao, delete: delete); + final result = await _service.postPontoMarcacoesOffline(usuario, listmarcacao, delete: delete, token: token); if(result == MarcacaoOffStatus.Erro){ CustomAlert.erro( context: context, @@ -58,7 +59,7 @@ class RegistroManger { } } - enviarMarcacoesHistorico(BuildContext context, UsuarioPonto? usuario) async { + enviarMarcacoesHistorico(BuildContext context, UsuarioPonto? usuario, {String? token}) async { try{ if (usuario != null) { List>? marcacao = await _sqlitePonto.getHistoricoFormatado( @@ -66,7 +67,7 @@ class RegistroManger { if(marcacao != null && marcacao.isNotEmpty){ debugPrint(marcacao.toString()); - postPontoMarcacoesOffline(context, usuario, marcacao, delete: false); + postPontoMarcacoesOffline(context, usuario, marcacao, delete: false, token: token ); }else{ CustomAlert.info( context: context, @@ -88,8 +89,8 @@ class RegistroManger { } } - enviarMarcacoes() async { - debugPrint('enviarMarcacoes off ' + (Config.isReenvioMarc ? '45 dias' : '1 dia')); + enviarMarcacoes({String? token}) async { + debugPrint('enviarMarcacoes off ${Config.isReenvioMarc ? '45 dias' : '1 dia'}'); try{ List>? marcacao = await ( Config.isReenvioMarc ? _sqlitePonto.getHistoricoFormatado(UserPontoManager.susuario?.funcionario?.funcionarioId) @@ -98,7 +99,8 @@ class RegistroManger { final result = await _service.postPontoMarcacoesOffline( UserPontoManager.susuario, marcacao, - delete: !Config.isReenvioMarc + delete: !Config.isReenvioMarc, + token: token ); if(result == MarcacaoOffStatus.Sucess){ debugPrint('sucess'); @@ -116,7 +118,7 @@ class RegistroManger { } } - enviarMarcacoesNotificacao() async { + enviarMarcacoesNotificacao({required String? token}) async { try{ final _user = await UserPontoService().authNotificacao(); @@ -124,7 +126,7 @@ class RegistroManger { if(marcacao != null && marcacao.isNotEmpty) { final result = await _service.postPontoMarcacoesOffline( UserPontoManager.susuario, marcacao, - delete: false + delete: false, token: token ); if(result == MarcacaoOffStatus.Sucess){ debugPrint('enviarMarcacoesNotificacao sucess'); diff --git a/lib/controllers/ponto/users_manager.dart b/lib/controllers/ponto/users_manager.dart index 4dcece0..338f8a0 100644 --- a/lib/controllers/ponto/users_manager.dart +++ b/lib/controllers/ponto/users_manager.dart @@ -52,13 +52,24 @@ class UserPontoManager extends ChangeNotifier { notifyListeners(); } - HomePontoModel? _homeModel; - HomePontoModel? get homeModel => _homeModel; - set homeModel(HomePontoModel? valor){ - _homeModel = valor; + HomePontoModel? _expediente; + HomePontoModel? get expediente => _expediente; + set expediente(HomePontoModel? valor){ + _expediente = valor; notifyListeners(); } + Future geExpedientes() async { + _expediente = null; + try { + HomePontoModel? _home = await _homeservice.getExpedientes(usuario!); + expediente = _home; + } catch (e) { + debugPrint('try erro getHome $e'); + expediente = null; + } + } + bool _regButtom = false; bool get regButtom => _regButtom; set regButtom(bool valor){ @@ -73,17 +84,6 @@ class UserPontoManager extends ChangeNotifier { //await prefs.setBool("autologin", status); } - Future getHome() async { - try { - HomePontoModel? _home = await _homeservice.getHome(usuario!); - homeModel = _home; - - } catch (e) { - debugPrint('try erro getHome $e'); - homeModel = null; - } - } - Future auth(BuildContext context, String email, String senha, bool bio, String? token, Function(String)? onError) async { bool result = false; try { @@ -158,8 +158,8 @@ class UserPontoManager extends ChangeNotifier { signOut() { cleanPreferences(); usuario = null; - homeModel = null; _status = false; + _expediente = null; uemail = ''; usenha = ''; Config.usenha = ''; diff --git a/lib/helper/conn.dart b/lib/helper/conn.dart index 0870ee7..34610fb 100644 --- a/lib/helper/conn.dart +++ b/lib/helper/conn.dart @@ -31,7 +31,7 @@ class ConnectionStatusSingleton { if (Config.conf.nomeApp == VersaoApp.PontoApp || Config.conf.nomeApp == VersaoApp.PontoTablet) { Timer.periodic(const Duration(minutes: 1), (T) async { - debugPrint('Timer ${T.tick} ' + hasConnection.toString()); + debugPrint('Timer ${T.tick} $hasConnection'); if (hasConnection) { await RegistroManger().enviarMarcacoes(); } diff --git a/lib/model/model.dart b/lib/model/model.dart index b98b12a..a70067a 100644 --- a/lib/model/model.dart +++ b/lib/model/model.dart @@ -8,6 +8,7 @@ export 'tablet/historico_marcacoes/historico_marcacoes_model.dart'; export 'tablet/usuario/user_offiline.dart'; export 'ponto/apontamento/apontamento.dart'; +export 'ponto/apontamento/apontamento_dia.dart'; export 'ponto/banco_horas/banco_horas.dart'; export 'ponto/home/home_model.dart'; export 'ponto/marcacao/marcacao.dart'; diff --git a/lib/model/ponto/apontamento/apontamento_dia.dart b/lib/model/ponto/apontamento/apontamento_dia.dart new file mode 100644 index 0000000..c50c17d --- /dev/null +++ b/lib/model/ponto/apontamento/apontamento_dia.dart @@ -0,0 +1,112 @@ + +// To parse this JSON data, do +// +// final apontamentoDiaModel = apontamentoDiaModelFromMap(jsonString); + +import 'dart:convert'; + +ApontamentoDiaModel apontamentoDiaModelFromMap(String str) => ApontamentoDiaModel.fromMap(json.decode(str)); + +String apontamentoDiaModelToMap(ApontamentoDiaModel data) => json.encode(data.toMap()); + +class ApontamentoDiaModel { + final List? marcacoes; + final List? marcacoesInvalidas; + final String? expediente; + final String? trabalhar; + final String? extras; + final String? extrasFolga; + final String? desconto; + final String? adcNot; + final String? abono; + final String? falta; + + const ApontamentoDiaModel({ + this.marcacoes, + this.marcacoesInvalidas, + this.expediente, + this.trabalhar, + this.extras, + this.extrasFolga, + this.desconto, + this.adcNot, + this.abono, + this.falta, + }); + + factory ApontamentoDiaModel.fromMap(Map json) => ApontamentoDiaModel( + marcacoes: json["Marcacoes"] == null ? [] : List.from(json["Marcacoes"]!.map((x) => MarcacoeDia.fromMap(x))), + marcacoesInvalidas: json["MarcacoesInvalidas"] == null ? [] : List.from(json["MarcacoesInvalidas"]!.map((x) => MarcacoeDia.fromMap(x))), + expediente: json["Expediente"], + trabalhar: json["Trabalhar"], + extras: json["Extras"], + extrasFolga: json["ExtrasFolga"], + desconto: json["Desconto"], + adcNot: json["AdcNot"], + abono: json["Abono"], + falta: json["Falta"], + ); + + Map toMap() => { + "Marcacoes": marcacoes == null ? [] : List.from(marcacoes!.map((x) => x.toMap())), + "MarcacoesInvalidas": marcacoesInvalidas == null ? [] : List.from(marcacoesInvalidas!.map((x) => x.toMap())), + "Expediente": expediente, + "Trabalhar": trabalhar, + "Extras": extras, + "ExtrasFolga": extrasFolga, + "Desconto": desconto, + "AdcNot": adcNot, + "Falta": falta, + "Abono": abono, + }; +} + +class MarcacoeDia { + final String? horario; + final MarcacaoStatus status; + + const MarcacoeDia({ + this.horario, + this.status = MarcacaoStatus.none, + }); + + factory MarcacoeDia.fromMap(Map json) => MarcacoeDia( + horario: json["Horario"], + status: MarcacaoStatus.fromInt(int.tryParse(json["Status"].toString()) ?? 0) , + ); + + Map toMap() => { + "Horario": horario, + "Status": status.value, + }; +} + + +enum MarcacaoStatus { + none(0, ""), + entradaOk(1, "Entrada"), + saidaOk(2, "Saída"), + foraFaixa(3, "Fora do Intervalo Permitido"), + crachaInvalido(4, "Crachá Inválido"), + desconsiderado(5, "Desconsiderada"), + preAssinalado(6, "Pré-Assinalada no Intervalo"), + jaImportada(7, "Já Importada"), + pisInvalido(8, "Pis Inválido"), + inclusaoFolga(9, "Incluída em Folga"), + foraPerimetroOnline(10, "Fora do Perímetro Online"), + foraPerimetroOffline(11, "Fora do Perímetro Offline"), + cpfInvalido(12, "CPF Inválido"), + erro(20, "Erro"); + + final int value; + final String description; + + const MarcacaoStatus(this.value, this.description); + + static MarcacaoStatus fromInt(int value) { + return MarcacaoStatus.values.firstWhere( + (e) => e.value == value, + orElse: () => MarcacaoStatus.none, + ); + } +} diff --git a/lib/model/ponto/marcacao/marcacao.dart b/lib/model/ponto/marcacao/marcacao.dart index 86a4b7e..f2539a8 100644 --- a/lib/model/ponto/marcacao/marcacao.dart +++ b/lib/model/ponto/marcacao/marcacao.dart @@ -100,7 +100,7 @@ class Marcacao { datahora = DateTime.tryParse(map["datahora"].toString()); latitude = map["latitude"] == null ? null : double.tryParse(map["latitude"]); longitude = map["longitude"] == null ? null : double.tryParse(map["longitude"]); - endereco = map["Endereco"] == null ? null : map["Endereco"].toString(); + endereco = map["Endereco"]?.toString(); } Marcacao.fromReSql(Map map) { @@ -108,7 +108,7 @@ class Marcacao { datahora = DateTime.tryParse(map["Marcacao"].toString()); latitude = map["Latitude"] == null ? null : double.tryParse(map["Latitude"]); longitude = map["Longitude"] == null ? null : double.tryParse(map["Longitude"]); - endereco = map["Endereco"] == null ? null : map["Endereco"].toString(); + endereco = map["Endereco"]?.toString(); } Map toMap() { diff --git a/lib/services/http/http_cliente.dart b/lib/services/http/http_cliente.dart index d09e206..071cca4 100644 --- a/lib/services/http/http_cliente.dart +++ b/lib/services/http/http_cliente.dart @@ -92,6 +92,7 @@ class HttpCli { ); } + print(body); try { final http.Response response = await http.post( uri ?? Uri.parse(url ?? ''), diff --git a/lib/services/ponto/homepage.dart b/lib/services/ponto/homepage.dart index 40950a3..6c3f5cb 100644 --- a/lib/services/ponto/homepage.dart +++ b/lib/services/ponto/homepage.dart @@ -37,4 +37,33 @@ class HomePontoService { debugPrint("HomePontoService getHome erro ${e.toString()}"); } } + + + Future getExpedientes(UsuarioPonto user) async { + String _api = "/api/apontamento/expedientes"; + try{ + final MyHttpResponse response = await _http.post( + url: Config.conf.apiAssepontoNova! + _api, + body: { + "User": { + "UserId": user.funcionario?.funcionarioId.toString(), + "Database": user.databaseId.toString() + }, + "Periodo": { + "DataInicial": DateFormat('yyyy-MM-dd').format(user.periodo!.dataInicial!), + "DataFinal": DateFormat('yyyy-MM-dd').format(user.periodo!.dataFinal!) + } + } + ); + + if(response.isSucess){ + Map dadosJson = response.data; + HomePontoModel homeModel = HomePontoModel.fromMap(dadosJson); + return homeModel; + } + } catch(e){ + debugPrint("HomePontoService getHome erro ${e.toString()}"); + } + } + } \ No newline at end of file diff --git a/lib/services/ponto/marcacao.dart b/lib/services/ponto/marcacao.dart index 6cdc76b..380267f 100644 --- a/lib/services/ponto/marcacao.dart +++ b/lib/services/ponto/marcacao.dart @@ -3,6 +3,7 @@ import 'package:intl/intl.dart'; import '../../model/model.dart'; import '../../config.dart'; +import '../../model/ponto/apontamento/apontamento_dia.dart'; import '../http/http.dart'; @@ -10,38 +11,33 @@ class MarcacoesService { final HttpCli _http = HttpCli(); - Future> getEspelho(UsuarioPonto? user) async { + Future getEspelho(UsuarioPonto? user, DateTime data) async { if(user != null){ - String _api = "/api/apontamento/Marcacoes"; + String _api = "/api/apontamento/dia"; final MyHttpResponse response = await _http.post( url: Config.conf.apiAssepontoNova! + _api, body: { "User": { "UserId": user.funcionario?.funcionarioId.toString(), - "Database": user.databaseId.toString() + "Database": user.databaseId.toString(), }, "Periodo": { - "DataInicial": DateFormat('yyyy-MM-dd').format(user.periodo!.dataInicial!), - "DataFinal": DateFormat('yyyy-MM-dd').format(user.periodo!.dataFinal!) + "DataInicial": DateFormat('yyyy-MM-dd').format(data), } } ); + print(response.data); try{ if(response.isSucess){ var dadosJson = response.data; - List temp = dadosJson['Apontamento']; - if(temp.isNotEmpty){ - List listaTemporaria = []; - listaTemporaria = temp.map((e) => Marcacao.fromMap(e)).toList(); - return listaTemporaria; - } + final model = ApontamentoDiaModel.fromMap(dadosJson); + return model; } }catch(e){ debugPrint("MarcacoesService getEspelho Erro Try ${e.toString()}"); } } - return []; } diff --git a/lib/services/ponto/registro_ponto.dart b/lib/services/ponto/registro_ponto.dart index dc3db6f..1e75a91 100644 --- a/lib/services/ponto/registro_ponto.dart +++ b/lib/services/ponto/registro_ponto.dart @@ -16,7 +16,7 @@ class RegistroService { final SqlitePontoService _sqlitePonto = SqlitePontoService(); - Future postPontoMarcar(UsuarioPonto user, double? latitude, double? longitude, String? endereco) async { + Future postPontoMarcar(UsuarioPonto user, double? latitude, double? longitude, String? endereco, String? token) async { String _api = "/api/marcacao/verificarMarcacoesFuncionario"; @@ -28,6 +28,9 @@ class RegistroService { "UserId": user.funcionario?.funcionarioId.toString(), "Database": user.databaseId.toString(), "Origem": kIsWeb ? 4 : 3, + "setorId": user.funcionario?.setorId, + "Email": user.funcionario?.email, + "Token": token, "ListaMarcacoes": [ { "Latitude": latitude, @@ -105,7 +108,7 @@ class RegistroService { } Future postPontoMarcacoesOffline(UsuarioPonto? usuario, - List> listOff, {bool delete = false}) async { + List> listOff, {bool delete = false, String? token}) async { String _api = "/api/marcacao/verificarMarcacoesFuncionario"; if(usuario?.databaseId != null){ @@ -115,11 +118,13 @@ class RegistroService { "Database": "${usuario!.databaseId}", "UserId": usuario.funcionario?.funcionarioId.toString(), "Origem": kIsWeb ? 4 : 7, + "setorId": usuario.funcionario?.setorId, + "Email": usuario.funcionario?.email, + "Token": token, "ListaMarcacoes": listOff }; final MyHttpResponse response = await _http.post( - url: (Config.conf.apiAssepontoNova - ?? 'https://www.asseponto.com.br/ApiAsseponto') + _api, + url: Config.conf.apiAssepontoNova! + _api, body: body, decoder: false ); diff --git a/lib/ui/smartphone/tela_base/custom_scaffold.dart b/lib/ui/smartphone/tela_base/custom_scaffold.dart index 8d48d99..06c47b2 100644 --- a/lib/ui/smartphone/tela_base/custom_scaffold.dart +++ b/lib/ui/smartphone/tela_base/custom_scaffold.dart @@ -244,8 +244,16 @@ class _HomeCalendarioWidgetState extends State { @override void initState() { + if(widget.dataInit != null){ - widget.controller.jumpToDate(widget.dataInit!); + if(widget.dataMax != null){ + DateTime data = widget.dataInit!.isBefore(widget.dataMax!) ? widget.dataInit! : widget.dataMax!; + + print(data); + widget.controller.jumpToDate(data); + }else{ + widget.controller.jumpToDate(widget.dataInit!); + } } super.initState(); } @@ -267,7 +275,7 @@ class _HomeCalendarioWidgetState extends State { backgroundColor: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? Config.corPribar : Colors.transparent, - minDate: widget.dataMin ?? DateTime(2020), + minDate: widget.dataMin ?? DateTime(2019,12,29), maxDate: widget.dataMax ?? DateTime(DateTime.now().year + 1), dateStyle: TextStyle(color: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile && !ResponsiveBreakpoints.of(context).isPhone ? Config.corPri : Colors.white,), diff --git a/pubspec.yaml b/pubspec.yaml index 392f269..2d2dbbb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -95,7 +95,7 @@ dependencies: brasil_fields: ^1.15.0 datetime_picker_formfield_new: ^2.1.0 - in_app_review: ^2.0.9 + in_app_review: ^2.0.10 launch_app_store: ^1.1.1 #store_launcher: ^1.0.1 From 564181945f765cbd6e5da8c9c55918949ea64722 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Wed, 5 Mar 2025 14:45:33 -0300 Subject: [PATCH 63/73] Update registro_ponto_manager.dart --- lib/controllers/ponto/registro_ponto_manager.dart | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/controllers/ponto/registro_ponto_manager.dart b/lib/controllers/ponto/registro_ponto_manager.dart index 0dee5fa..54e6cdf 100644 --- a/lib/controllers/ponto/registro_ponto_manager.dart +++ b/lib/controllers/ponto/registro_ponto_manager.dart @@ -116,6 +116,8 @@ class RegistroManger { }catch(e){ debugPrint("erro enviarMarcacoes offline ${e.toString()}"); } + + deleteHistorico(); } enviarMarcacoesNotificacao({required String? token}) async { @@ -140,8 +142,10 @@ class RegistroManger { } deleteHistorico() async { - if(!Config.isReenvioMarc){ - _sqlitePonto.deleteHistorico(UserPontoManager.susuario?.funcionario?.funcionarioId); - } + try { + if(!Config.isReenvioMarc){ + _sqlitePonto.deleteHistorico(UserPontoManager.susuario?.funcionario?.funcionarioId); + } + } catch (e) {} } } \ No newline at end of file From a3a00afba9e85722804d982a090cbea35585e68a Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Wed, 5 Mar 2025 16:53:59 -0300 Subject: [PATCH 64/73] ajuste nos actions da tela inicial --- lib/common/actions/actions.dart | 35 ++++++++++--------- lib/services/ponto/registro_ponto.dart | 2 -- .../smartphone/tela_base/custom_scaffold.dart | 13 ++++--- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/lib/common/actions/actions.dart b/lib/common/actions/actions.dart index 2ecf36d..96a2371 100644 --- a/lib/common/actions/actions.dart +++ b/lib/common/actions/actions.dart @@ -15,62 +15,63 @@ import 'func_review.dart'; actions(BuildContext context, {bool aponta = false, bool registro = false, bool config = false, Function()? onAlter, GlobalKey? keyMenu, GlobalKey? key1, - GlobalKey? key2, GlobalKey? key3, GlobalKey? key4, GlobalKey? key5}){ + GlobalKey? key2, GlobalKey? key3, GlobalKey? key4, GlobalKey? key5, GlobalKey? key6}){ + return Padding( padding: const EdgeInsets.only(right: 5), child: PopupMenuButton( key: keyMenu, color: context.watch().darkTemas ? null : Colors.white, itemBuilder: (context) => [ - if(Config.conf.nomeApp == VersaoApp.HoleriteApp && aponta) + if(Config.conf.nomeApp == VersaoApp.HoleriteApp && aponta) ...[ PopupMenuItem( key: key1, value: 0, child: CustomText.text("Alterar Usuario"), ), - if(Config.conf.nomeApp == VersaoApp.AssewebApp && aponta) + ] else if(Config.conf.nomeApp == VersaoApp.AssewebApp && aponta) ...[ PopupMenuItem( key: key1, value: 0, child: CustomText.text("Alterar Empresa"), ), - if(Config.conf.nomeApp == VersaoApp.PontoApp && aponta && !registro) + ] else if(Config.conf.nomeApp == VersaoApp.PontoApp && aponta ) ...[ PopupMenuItem( key: key1, value: 1, child: CustomText.text("Apontamento"), ), - if(Config.conf.nomeApp != VersaoApp.PontoApp || !registro) - PopupMenuItem( - key: key2, - value: 2, - child: CustomText.text("Alterar Senha"), - ), + ], if(Config.conf.nomeApp == VersaoApp.PontoApp && registro) PopupMenuItem( - key: key1, + key: key2, value: 6, child: CustomText.text("Reenviar Marcações"), ), + if(Config.conf.nomeApp != VersaoApp.PontoTablet ) + PopupMenuItem( + key: key3, + value: 2, + child: CustomText.text("Alterar Senha"), + ), + if(!config) PopupMenuItem( - key: key3 , + key: key4 , value: 3, child: CustomText.text("Configurações"), ), - if(!kIsWeb && !Config.isWin && !registro) + if(!kIsWeb && !Config.isWin) PopupMenuItem( - key: key4 , + key: key5 , value: 4, child: CustomText.text("Avaliar App"), ), - if(!registro) PopupMenuItem( - key: key5 , + key: key6 , value: 5, child: CustomText.text("Sair"), ), - ], //initialValue: intvalue, offset: const Offset(10,5), diff --git a/lib/services/ponto/registro_ponto.dart b/lib/services/ponto/registro_ponto.dart index 1e75a91..0c3a126 100644 --- a/lib/services/ponto/registro_ponto.dart +++ b/lib/services/ponto/registro_ponto.dart @@ -19,8 +19,6 @@ class RegistroService { Future postPontoMarcar(UsuarioPonto user, double? latitude, double? longitude, String? endereco, String? token) async { String _api = "/api/marcacao/verificarMarcacoesFuncionario"; - - DateTime now = DateTime.now(); final MyHttpResponse response = await _http.post( url: Config.conf.apiAssepontoNova! + _api, decoder: false, timeout: 8, diff --git a/lib/ui/smartphone/tela_base/custom_scaffold.dart b/lib/ui/smartphone/tela_base/custom_scaffold.dart index 06c47b2..3462a45 100644 --- a/lib/ui/smartphone/tela_base/custom_scaffold.dart +++ b/lib/ui/smartphone/tela_base/custom_scaffold.dart @@ -17,9 +17,10 @@ import 'drawer_web.dart'; class HomeWidget extends StatelessWidget { const HomeWidget({super.key, this.keyListMenu, required this.listMenu, - this.height, required this.body, this.foto, this.dados, this.keyMenu, this.buttom, - this.key1, this.key2, this.key3, this.key4, this.key5, required this.appTitle, - this.nome, this.cargo, this.onAlter, this.isListView = true, this.onFoto = true, + this.height, required this.body, this.foto, this.dados, this.keyMenu, + this.key1, this.key2, this.key3, this.key4, this.key5, this.key6, + required this.appTitle, this.nome, this.cargo, this.onAlter, this.buttom, + this.isListView = true, this.onFoto = true, this.showRegistro = false }); final GlobalKey? keyListMenu; @@ -36,10 +37,12 @@ class HomeWidget extends StatelessWidget { final GlobalKey? key3; final GlobalKey? key4; final GlobalKey? key5; + final GlobalKey? key6; final String appTitle; final String? nome; final String? cargo; final bool onFoto; + final bool showRegistro; final Function()? onAlter; @@ -124,7 +127,9 @@ class HomeWidget extends StatelessWidget { key3: key3, key4: key4, key5: key5, - onAlter: onAlter + key6: key6, + onAlter: onAlter, + registro: showRegistro ), ], ), From 6ebb023d3d48af8ccd9ee9b7d105171e501b6a66 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 4 Apr 2025 11:34:25 -0300 Subject: [PATCH 65/73] Update holerite_tipo.dart --- lib/enums/holerite_tipo.dart | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/enums/holerite_tipo.dart b/lib/enums/holerite_tipo.dart index 8f1f907..0fe57aa 100644 --- a/lib/enums/holerite_tipo.dart +++ b/lib/enums/holerite_tipo.dart @@ -10,7 +10,8 @@ enum HoleriteTipo SegundaDecimo(5), PLR(6), Abono(7), - Domestica(7); + Domestica(8), + ReciboComplementar(9); final int value; @@ -34,6 +35,8 @@ enum HoleriteTipo return 'Recibo de Abono'; case 8: return 'Recibo de Domestica'; + case 9: + return 'Recibo Complementar'; default: return 'Recibo de Salário'; } @@ -59,6 +62,8 @@ enum HoleriteTipo return Abono; case 8: return Domestica; + case 9: + return ReciboComplementar; default: return Nenhum; } From 48f62e3d36303afda388d5cb3af89baac13d3ca0 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 4 Apr 2025 16:59:24 -0300 Subject: [PATCH 66/73] Update custom_snackbar.dart --- lib/common/custom_snackbar.dart | 38 ++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/lib/common/custom_snackbar.dart b/lib/common/custom_snackbar.dart index cafccb8..18c9d82 100644 --- a/lib/common/custom_snackbar.dart +++ b/lib/common/custom_snackbar.dart @@ -90,26 +90,34 @@ class CustomSnackbar { } static home(String text, Color cor){ - ScaffoldMessenger.of(Config.scaffoldKey.currentContext!).showSnackBar(SnackBar( - backgroundColor: cor, - duration: const Duration(seconds: 3), - content: CustomText.text(text, style: const TextStyle(color: Colors.white),), - )); + if(Config.scaffoldKey.currentContext != null && Config.scaffoldKey.currentContext!.mounted){ + ScaffoldMessenger.of(Config.scaffoldKey.currentContext!).showSnackBar(SnackBar( + backgroundColor: cor, + duration: const Duration(seconds: 3), + content: CustomText.text(text, style: const TextStyle(color: Colors.white),), + )); + } } static scaffoldKey(GlobalKey scaffoldKey, String text, Color cor, ){ - ScaffoldMessenger.of(scaffoldKey.currentContext!).showSnackBar(SnackBar( - backgroundColor: cor, - duration: const Duration(seconds: 3), - content: CustomText.text(text, style: const TextStyle(color: Colors.white),), - )); + if(scaffoldKey.currentContext != null && scaffoldKey.currentContext!.mounted){ + ScaffoldMessenger.of(scaffoldKey.currentContext!).showSnackBar(SnackBar( + backgroundColor: cor, + duration: const Duration(seconds: 3), + content: CustomText.text(text, style: const TextStyle(color: Colors.white),), + )); + } + } static context(BuildContext context, String text, Color cor){ - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - backgroundColor: cor, - duration: const Duration(seconds: 3), - content: CustomText.text(text, style: const TextStyle(color: Colors.white),), - )); + if(context.mounted){ + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + backgroundColor: cor, + duration: const Duration(seconds: 3), + content: CustomText.text(text, style: const TextStyle(color: Colors.white),), + )); + } + } } \ No newline at end of file From 6a548d8d8b411f6229a592e712dd44632e8261ab Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Fri, 4 Apr 2025 17:44:53 -0300 Subject: [PATCH 67/73] Update holerite_screen.dart --- lib/ui/smartphone/holerite/holerite_screen.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ui/smartphone/holerite/holerite_screen.dart b/lib/ui/smartphone/holerite/holerite_screen.dart index 5164dfd..d8d5051 100644 --- a/lib/ui/smartphone/holerite/holerite_screen.dart +++ b/lib/ui/smartphone/holerite/holerite_screen.dart @@ -59,7 +59,8 @@ class _HoleriteScreenState extends State { return ListTile( leading: Text('${item.attributes?.month ?? ''}\n${item.attributes?.year ?? ''}', textAlign: TextAlign.center,), - title: Text(item.attributes?.type.toName ?? ''), + title: Text(item.attributes?.type.toName ?? '', + style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold),), subtitle: Text(item.attributes?.data?.funcionarioResumo?.liquido?.real() ?? '0'), ); }, From f1f38ed5b146c62bb3ef9af4663753cc8a42e39b Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Tue, 22 Apr 2025 18:41:26 -0300 Subject: [PATCH 68/73] =?UTF-8?q?ajuste=20na=20verifica=C3=A7=C3=A3o=20da?= =?UTF-8?q?=20extens=C3=A3o=20dos=20arquivos=20baixados?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/common/heros_file.dart | 31 ++++++++++++++++++---------- lib/services/http/http_cliente.dart | 32 ++++++++++++++++++++--------- lib/utils/get_file.dart | 2 +- 3 files changed, 43 insertions(+), 22 deletions(-) diff --git a/lib/common/heros_file.dart b/lib/common/heros_file.dart index 5eb1cce..3897c94 100644 --- a/lib/common/heros_file.dart +++ b/lib/common/heros_file.dart @@ -8,6 +8,7 @@ import 'package:flutter/rendering.dart'; import 'package:path_provider/path_provider.dart'; +import 'package:photo_view/photo_view.dart'; import 'package:responsive_framework/responsive_framework.dart'; import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart'; import 'package:universal_io/io.dart'; @@ -26,7 +27,8 @@ class FileHero extends StatefulWidget { final String? html; final String name; final Widget? menu; - const FileHero(this.name, {super.key, this.menu, this.file,this.memori, this.html}); + final bool isImage; + const FileHero(this.name, {super.key, this.isImage = false, this.menu, this.file,this.memori, this.html}); @override State createState() => _FileHeroState(); @@ -106,26 +108,29 @@ class _FileHeroState extends State { onPressed: () async { if(kIsWeb){ if(widget.memori != null){ - salvarArquivo(widget.memori!, "${widget.name}.pdf"); + salvarArquivo(widget.memori!, "${widget.name}.${widget.isImage ? 'jpg' : 'pdf'}"); } }else if(widget.file != null){ ExternalShare.shareFile( path: widget.file!.path, - titulo: "Enviar PDF", - nomeFile: "${widget.name}.pdf", - tipo: SheredType.pdf, + titulo: "Enviar ${widget.isImage ? 'jpg' : 'pdf'}", + nomeFile: "${widget.name}.${widget.isImage ? 'jpg' : 'pdf'}", + tipo: widget.isImage ? SheredType.image : SheredType.pdf, ); }else{ carregar(context); Uint8List? rawPath = widget.memori ?? await _capturePng(); Navigator.pop(context); if(rawPath != null){ - final file = await CustomFile.fileTemp('pdf', memori: rawPath, nome: widget.name); + final file = await CustomFile.fileTemp( + widget.isImage ? 'jpg' : 'pdf', + memori: rawPath, nome: widget.name + ); ExternalShare.shareFile( path: file.path, - titulo: "Enviar PDF", - nomeFile: "${widget.name}.pdf", - tipo: SheredType.pdf, + titulo: "Enviar ${widget.isImage ? 'jpg' : 'pdf'}", + nomeFile: "${widget.name}.${widget.isImage ? 'jpg' : 'pdf'}", + tipo: widget.isImage ? SheredType.image : SheredType.pdf, ); } } @@ -145,8 +150,12 @@ class _FileHeroState extends State { margin: widget.menu != null ? const EdgeInsets.only(bottom: 120) : null, alignment: Alignment.center, color: Colors.black, - child: widget.memori != null ? SfPdfViewer.memory(widget.memori!, ) : - widget.file == null ? Container() : SfPdfViewer.file(widget.file!), + child: widget.memori != null ? widget.isImage ? PhotoView( + imageProvider: MemoryImage(widget.memori!) + ) : SfPdfViewer.memory(widget.memori!, ) : + widget.file == null ? Container() : widget.isImage ? PhotoView( + imageProvider: FileImage(widget.file!) + ) : SfPdfViewer.file(widget.file!), ), if(widget.menu != null) ...[ diff --git a/lib/services/http/http_cliente.dart b/lib/services/http/http_cliente.dart index 071cca4..46362ca 100644 --- a/lib/services/http/http_cliente.dart +++ b/lib/services/http/http_cliente.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'dart:convert'; import 'package:assecontservices/services/http/http_response.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import "package:http/http.dart" as http; @@ -37,19 +38,26 @@ class HttpCli { try{ if(response.statusCode >= 200 && response.statusCode < 300){ var result = bits ? response.bodyBytes : decoder ? json.decode(response.body) : response.body; + + final String? content = response.headers['content-disposition'] ?? + response.request?.url.path.split(".").last; + return MyHttpResponse( isSucess: true, codigo: 200, data: result, - extencao: !response.headers.containsKey('content-disposition') ? null : - response.headers['content-disposition']!.contains('html') ? 'html' : - response.headers['content-disposition']!.contains('pdf') ? 'pdf' : - response.headers['content-disposition']!.contains('txt') ? 'txt' : - response.headers['content-disposition']!.contains('xlsx') ? 'xlsx' : - response.headers['content-disposition']!.contains('xls') ? 'xls' : - response.headers['content-disposition']!.contains('docx') ? 'docx' : - response.headers['content-disposition']!.contains('doc') ? 'doc' : - response.headers['content-disposition']!.contains('json') ? 'json' : null + extencao: content == null ? null : + content.contains('html') ? 'html' : + content.contains('pdf') ? 'pdf' : + content.contains('txt') ? 'txt' : + content.contains('xlsx') ? 'xlsx' : + content.contains('xls') ? 'xls' : + content.contains('docx') ? 'docx' : + content.contains('doc') ? 'doc' : + content.contains('json') ? 'json' : + content.contains('jpg') ? 'jpg' : + content.contains('jpeg') ? 'jpg' : + content.contains('png') ? 'png' : content ); } else { @@ -92,7 +100,11 @@ class HttpCli { ); } - print(body); + if (kDebugMode) { + print(uri ?? Uri.parse(url ?? '')); + print(jsonEncode(body)); + } + try { final http.Response response = await http.post( uri ?? Uri.parse(url ?? ''), diff --git a/lib/utils/get_file.dart b/lib/utils/get_file.dart index e9c7ef1..53a15cf 100644 --- a/lib/utils/get_file.dart +++ b/lib/utils/get_file.dart @@ -21,7 +21,7 @@ class CustomFile { var tempDir = await getTemporaryDirectory(); - File file = await File('${tempDir.path}/${name}.${responseData.extencao ?? 'jpg'}').writeAsBytes( + File file = await File('${tempDir.path}/${name}.${responseData.extencao ?? 'pdf'}').writeAsBytes( buffer.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes)); return file; } From 62bc31d33230e661933fb608d9cc3e31d3ed80f7 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Tue, 29 Apr 2025 14:38:57 -0300 Subject: [PATCH 69/73] Update usuario.dart --- lib/services/holerite/usuario.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/services/holerite/usuario.dart b/lib/services/holerite/usuario.dart index a3a928b..347f9fe 100644 --- a/lib/services/holerite/usuario.dart +++ b/lib/services/holerite/usuario.dart @@ -23,7 +23,7 @@ class UserHoleriteService { body: { "identifier": _email, "password": senha, - //"Token": token + "token": token } ); From af407fa4d797e525f757c5d9f19ba2213c54fbad Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Tue, 5 Aug 2025 23:34:21 -0300 Subject: [PATCH 70/73] alteracao de modal de senha --- lib/common/actions/actions.dart | 8 ++++++-- lib/ui/smartphone/tela_base/custom_scaffold.dart | 8 +++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/common/actions/actions.dart b/lib/common/actions/actions.dart index 96a2371..ac6aa40 100644 --- a/lib/common/actions/actions.dart +++ b/lib/common/actions/actions.dart @@ -14,7 +14,7 @@ import 'func_review.dart'; actions(BuildContext context, {bool aponta = false, bool registro = false, - bool config = false, Function()? onAlter, GlobalKey? keyMenu, GlobalKey? key1, + bool config = false, Function()? onAlter, Function()? modalPass, GlobalKey? keyMenu, GlobalKey? key1, GlobalKey? key2, GlobalKey? key3, GlobalKey? key4, GlobalKey? key5, GlobalKey? key6}){ return Padding( @@ -88,7 +88,11 @@ actions(BuildContext context, {bool aponta = false, bool registro = false, funcAponta(context); break; case 2 : - await AlterarSenhaModal(context); + if(modalPass != null) { + await modalPass(); + } else { + await AlterarSenhaModal(context); + } break; case 3 : funcConfig(context); diff --git a/lib/ui/smartphone/tela_base/custom_scaffold.dart b/lib/ui/smartphone/tela_base/custom_scaffold.dart index 3462a45..170f6f3 100644 --- a/lib/ui/smartphone/tela_base/custom_scaffold.dart +++ b/lib/ui/smartphone/tela_base/custom_scaffold.dart @@ -20,7 +20,8 @@ class HomeWidget extends StatelessWidget { this.height, required this.body, this.foto, this.dados, this.keyMenu, this.key1, this.key2, this.key3, this.key4, this.key5, this.key6, required this.appTitle, this.nome, this.cargo, this.onAlter, this.buttom, - this.isListView = true, this.onFoto = true, this.showRegistro = false + this.isListView = true, this.onFoto = true, this.showRegistro = false, + this.modalPass }); final GlobalKey? keyListMenu; @@ -44,7 +45,7 @@ class HomeWidget extends StatelessWidget { final bool onFoto; final bool showRegistro; final Function()? onAlter; - + final Function()? modalPass; @override Widget build(BuildContext context) { @@ -129,7 +130,8 @@ class HomeWidget extends StatelessWidget { key5: key5, key6: key6, onAlter: onAlter, - registro: showRegistro + registro: showRegistro, + modalPass: modalPass ), ], ), From 0eae1549663d097cba4e74ca0afabf7700234c6a Mon Sep 17 00:00:00 2001 From: Gabriel Mattos Date: Thu, 21 Aug 2025 16:36:23 -0300 Subject: [PATCH 71/73] Update custom_scaffold.dart --- .../smartphone/tela_base/custom_scaffold.dart | 219 ++++++++++-------- 1 file changed, 116 insertions(+), 103 deletions(-) diff --git a/lib/ui/smartphone/tela_base/custom_scaffold.dart b/lib/ui/smartphone/tela_base/custom_scaffold.dart index 170f6f3..b9f466c 100644 --- a/lib/ui/smartphone/tela_base/custom_scaffold.dart +++ b/lib/ui/smartphone/tela_base/custom_scaffold.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -345,52 +346,58 @@ class HomeIoWidget extends StatelessWidget { @override Widget build(BuildContext context) { - return Scaffold( - key: globalKey, - appBar: appTitle == null || kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone && appTitle != 'Configurações' ? null : AppBar( - title: CustomText.text(appTitle, style: const TextStyle(fontSize: 16), textAlign: TextAlign.center), - centerTitle: true, - actions: [ - actions(context, aponta: home, config: conf, onAlter: onAlter), - ], - scrolledUnderElevation: 0 - ), - body: SizedBox( - height: MediaQuery.of(context).size.height, - width: double.infinity, - child: Column( - children: [ - Stack( - children: [ - Container( - height: height, - width: MediaQuery.of(context).size.width, - decoration: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone ? null - : BoxDecoration( - color: context.watch().darkTemas ? - Theme.of(context).appBarTheme.backgroundColor : Config.corPribar, - borderRadius: const BorderRadius.only( - bottomRight: Radius.circular(45), - bottomLeft: Radius.circular(45), - ) - ), - child: appbar - ), - if(expanAppbar != null) - expanAppbar! - ], - ), - Expanded( - child: body - ), - ], - ) - ), - floatingActionButtonLocation: buttom == null ? null - : floatingActionButtonLocation ?? FloatingActionButtonLocation.centerFloat, - floatingActionButton: buttom + return SafeArea( + bottom: Platform.isAndroid, + left: false, + right: false, + top: false, + child: Scaffold( + key: globalKey, + appBar: appTitle == null || kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone && appTitle != 'Configurações' ? null : AppBar( + title: CustomText.text(appTitle, style: const TextStyle(fontSize: 16), textAlign: TextAlign.center), + centerTitle: true, + actions: [ + actions(context, aponta: home, config: conf, onAlter: onAlter), + ], + scrolledUnderElevation: 0 + ), + body: SizedBox( + height: MediaQuery.of(context).size.height, + width: double.infinity, + child: Column( + children: [ + Stack( + children: [ + Container( + height: height, + width: MediaQuery.of(context).size.width, + decoration: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone ? null + : BoxDecoration( + color: context.watch().darkTemas ? + Theme.of(context).appBarTheme.backgroundColor : Config.corPribar, + borderRadius: const BorderRadius.only( + bottomRight: Radius.circular(45), + bottomLeft: Radius.circular(45), + ) + ), + child: appbar + ), + if(expanAppbar != null) + expanAppbar! + ], + ), + Expanded( + child: body + ), + ], + ) + ), + floatingActionButtonLocation: buttom == null ? null + : floatingActionButtonLocation ?? FloatingActionButtonLocation.centerFloat, + floatingActionButton: buttom + ), ); } } @@ -413,69 +420,75 @@ class HomeWebWidget extends StatelessWidget { @override Widget build(BuildContext context) { - return Scaffold( - key: globalKey, - body: Row( - mainAxisSize: MainAxisSize.max, - children: [ - Card( - margin: EdgeInsets.zero, - elevation: 4, - child: Container( - width: 180, height: double.infinity, - color: Theme.of(context).appBarTheme.backgroundColor, - child: DrawerWebView(listMenus, foto, appTitle ) + return SafeArea( + bottom: Platform.isAndroid, + left: false, + right: false, + top: false, + child: Scaffold( + key: globalKey, + body: Row( + mainAxisSize: MainAxisSize.max, + children: [ + Card( + margin: EdgeInsets.zero, + elevation: 4, + child: Container( + width: 180, height: double.infinity, + color: Theme.of(context).appBarTheme.backgroundColor, + child: DrawerWebView(listMenus, foto, appTitle ) + ), ), - ), - Expanded( - child: Scaffold( - body: Column( - children: [ - Container( - decoration: BoxDecoration( - color: context.watch().darkTemas - ? Theme.of(context).appBarTheme.backgroundColor : Colors.white, - boxShadow: const [ - BoxShadow( - color: Colors.grey, - offset: Offset(5.5, 0), // Ajuste a sombra vertical aqui - blurRadius: 4, // Ajuste a intensidade da sombra aqui - ), - ], - ), - margin: EdgeInsets.zero, - child: Padding( - padding: const EdgeInsets.only(top: 10, left: 20, right: 10, bottom: 10), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - CustomText.text(nome, - style: const TextStyle(fontSize: 20), textAlign: TextAlign.center), - CustomText.text(cargo, - style: const TextStyle(fontSize: 10), textAlign: TextAlign.center), - ], + Expanded( + child: Scaffold( + body: Column( + children: [ + Container( + decoration: BoxDecoration( + color: context.watch().darkTemas + ? Theme.of(context).appBarTheme.backgroundColor : Colors.white, + boxShadow: const [ + BoxShadow( + color: Colors.grey, + offset: Offset(5.5, 0), // Ajuste a sombra vertical aqui + blurRadius: 4, // Ajuste a intensidade da sombra aqui ), - - actions(context, aponta: true, onAlter: onAlter), ], ), + margin: EdgeInsets.zero, + child: Padding( + padding: const EdgeInsets.only(top: 10, left: 20, right: 10, bottom: 10), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + CustomText.text(nome, + style: const TextStyle(fontSize: 20), textAlign: TextAlign.center), + CustomText.text(cargo, + style: const TextStyle(fontSize: 10), textAlign: TextAlign.center), + ], + ), + + actions(context, aponta: true, onAlter: onAlter), + ], + ), + ), ), - ), - Expanded( - child: body - ), - ], - ), - floatingActionButtonLocation: buttom == null ? null - : FloatingActionButtonLocation.centerFloat, - floatingActionButton: buttom + Expanded( + child: body + ), + ], + ), + floatingActionButtonLocation: buttom == null ? null + : FloatingActionButtonLocation.centerFloat, + floatingActionButton: buttom + ), ), - ), - ], + ], + ), ), ); } From 74a390042e1866b1d5d3785717aa502710967a61 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos Date: Thu, 21 Aug 2025 16:42:29 -0300 Subject: [PATCH 72/73] Update custom_scaffold.dart --- .../smartphone/tela_base/custom_scaffold.dart | 50 +++++++++---------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/lib/ui/smartphone/tela_base/custom_scaffold.dart b/lib/ui/smartphone/tela_base/custom_scaffold.dart index b9f466c..64fcbc2 100644 --- a/lib/ui/smartphone/tela_base/custom_scaffold.dart +++ b/lib/ui/smartphone/tela_base/custom_scaffold.dart @@ -362,37 +362,33 @@ class HomeIoWidget extends StatelessWidget { ], scrolledUnderElevation: 0 ), - body: SizedBox( - height: MediaQuery.of(context).size.height, - width: double.infinity, - child: Column( + body: Column( + children: [ + Stack( children: [ - Stack( - children: [ - Container( - height: height, - width: MediaQuery.of(context).size.width, - decoration: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile - && !ResponsiveBreakpoints.of(context).isPhone ? null - : BoxDecoration( - color: context.watch().darkTemas ? - Theme.of(context).appBarTheme.backgroundColor : Config.corPribar, - borderRadius: const BorderRadius.only( - bottomRight: Radius.circular(45), - bottomLeft: Radius.circular(45), - ) - ), - child: appbar + Container( + height: height, + width: MediaQuery.of(context).size.width, + decoration: kIsWeb && !ResponsiveBreakpoints.of(context).isMobile + && !ResponsiveBreakpoints.of(context).isPhone ? null + : BoxDecoration( + color: context.watch().darkTemas ? + Theme.of(context).appBarTheme.backgroundColor : Config.corPribar, + borderRadius: const BorderRadius.only( + bottomRight: Radius.circular(45), + bottomLeft: Radius.circular(45), + ) ), - if(expanAppbar != null) - expanAppbar! - ], - ), - Expanded( - child: body + child: appbar ), + if(expanAppbar != null) + expanAppbar! ], - ) + ), + Expanded( + child: body + ), + ], ), floatingActionButtonLocation: buttom == null ? null : floatingActionButtonLocation ?? FloatingActionButtonLocation.centerFloat, From de4515d934416f7d738167d9618a593ea4bc37a4 Mon Sep 17 00:00:00 2001 From: Gabriel Mattos <43770191+pretolio@users.noreply.github.com> Date: Sat, 30 Aug 2025 18:01:46 -0300 Subject: [PATCH 73/73] ajuste controller do app tablet --- lib/assecontservices.dart | 29 +++++---------- lib/common/actions/actions.dart | 2 +- lib/controllers/ponto/camera_manager.dart | 2 +- lib/controllers/ponto/marcacao_manager.dart | 2 +- lib/controllers/ponto/memorando_manager.dart | 4 +-- lib/controllers/ponto/users_manager.dart | 35 ++++++++++++++++++- lib/controllers/tablet/config_manager.dart | 29 +++++++++++++++ lib/controllers/tablet/empresa_manager.dart | 12 +++++-- .../tablet/user_manager_offiline.dart | 2 +- lib/data/local/user_local_sources.dart | 12 +++++++ lib/helper/db_ponto.dart | 24 +++++++++---- lib/model/tablet/empresa/empresa.dart | 4 +-- lib/model/tablet/usuario/user_offiline.dart | 2 +- lib/services/http/http_cliente.dart | 7 +++- lib/services/ponto/apontamento.dart | 3 +- lib/services/ponto/bancohoras.dart | 3 +- lib/services/ponto/foto.dart | 3 +- lib/services/ponto/homepage.dart | 5 +-- lib/services/ponto/marcacao.dart | 3 +- lib/services/ponto/memorando.dart | 7 ++-- lib/services/ponto/registro_ponto.dart | 15 ++++---- lib/services/sqlite_ponto.dart | 2 +- lib/services/tablet/empresa.dart | 10 +++--- lib/services/tablet/usuario_codigo.dart | 17 +++++---- lib/services/tablet/usuario_offiline.dart | 2 +- .../smartphone/tela_base/custom_scaffold.dart | 21 ++++++++--- 26 files changed, 180 insertions(+), 77 deletions(-) diff --git a/lib/assecontservices.dart b/lib/assecontservices.dart index be6d7a3..cf2e4f6 100644 --- a/lib/assecontservices.dart +++ b/lib/assecontservices.dart @@ -73,15 +73,15 @@ class Assecontservices { ), - if(Config.conf.nomeApp != VersaoApp.AssewebApp) + if(Config.conf.nomeApp != VersaoApp.AssewebApp) ...[ ChangeNotifierProvider( create: (_)=> HoleriteManager(), ), - if(Config.conf.nomeApp != VersaoApp.AssewebApp) ChangeNotifierProvider( lazy: false, create: (_)=> UserHoleriteManager(), ), + ], if(Config.conf.nomeApp == VersaoApp.HoleriteApp) ChangeNotifierProvider( @@ -89,87 +89,76 @@ class Assecontservices { ), - if(Config.conf.nomeApp == VersaoApp.PontoTablet) + if(Config.conf.nomeApp == VersaoApp.PontoTablet) ...[ ChangeNotifierProvider( lazy: false, create: (_)=> ConfigTabletManager(), ), - if(Config.conf.nomeApp == VersaoApp.PontoTablet) ChangeNotifierProvider( lazy: false, create: (_)=> EmpresaPontoManager(), ), - if(Config.conf.nomeApp == VersaoApp.PontoTablet) Provider( lazy: true, create: (_)=> UserPontoOffilineManager(), ), - if(Config.conf.nomeApp == VersaoApp.PontoTablet) + ChangeNotifierProvider( lazy: true, create: (_)=> HistoricoManager(), ), + ], + ///--------------------------------------------------------------------/// - if(ponto) + if(ponto) ...[ ChangeNotifierProvider( lazy: false, create: (_)=> UserPontoManager(), ), - - if(ponto) Provider( lazy: false, create: (_)=> DBPonto(), ), - - if(ponto) ChangeNotifierProvider( create: (_)=> ComprovanteManagger(), ), - if(ponto) ChangeNotifierProvider( lazy: true, create: (_)=> BancoHorasManager(), ), - if(ponto) ChangeNotifierProvider( lazy: true, create: (_)=> MemorandosManager(), ), - if(ponto) ChangeNotifierProvider( //lazy: true, create: (_)=> EspelhoManager(), ), - if(ponto) ChangeNotifierProvider( lazy: true, create: (_)=> MarcacoesManager(), ), - if(ponto) ChangeNotifierProvider( lazy: true, create: (_)=> ApontamentoManager(), ), - if(ponto) Provider( lazy: true, create: (_)=> RegistroManger(), ), - if(ponto) ChangeNotifierProvider( create: (_)=> GetHora(), ), - if(ponto) ChangeNotifierProvider( lazy: false, create: (_)=> CameraPontoManager(), ), - if(ponto) ChangeNotifierProvider( lazy: true, create: (_)=> SenhaPontoManager(), ), + ], + ///-----------asseweb--------------/// diff --git a/lib/common/actions/actions.dart b/lib/common/actions/actions.dart index ac6aa40..2d696be 100644 --- a/lib/common/actions/actions.dart +++ b/lib/common/actions/actions.dart @@ -104,7 +104,7 @@ actions(BuildContext context, {bool aponta = false, bool registro = false, funcSair(context); break; case 6 : - RegistroManger().enviarMarcacoesHistorico(context, UserPontoManager().usuario); + RegistroManger().enviarMarcacoesHistorico(context, UserPontoManager.susuario); break; } }, diff --git a/lib/controllers/ponto/camera_manager.dart b/lib/controllers/ponto/camera_manager.dart index f91cf43..0b6eae1 100644 --- a/lib/controllers/ponto/camera_manager.dart +++ b/lib/controllers/ponto/camera_manager.dart @@ -9,7 +9,7 @@ import '../../services/ponto/foto.dart'; class CameraPontoManager extends ChangeNotifier { final CameraPontoService _service = CameraPontoService(); - Future setPhoto(UsuarioPonto user, List img, String? faceId) async { + Future setPhoto(UsuarioPonto user, Uint8List img, String? faceId) async { bool result = await _service.setPhoto(user, img, faceId); return result; } diff --git a/lib/controllers/ponto/marcacao_manager.dart b/lib/controllers/ponto/marcacao_manager.dart index 0d37549..8b65726 100644 --- a/lib/controllers/ponto/marcacao_manager.dart +++ b/lib/controllers/ponto/marcacao_manager.dart @@ -18,6 +18,6 @@ class MarcacoesManager extends ChangeNotifier { } Future getMarcacaoDia() async { - return await _service.getEspelho(UserPontoManager.susuario, data);; + return await _service.getEspelho(UserPontoManager.susuario, data); } } \ No newline at end of file diff --git a/lib/controllers/ponto/memorando_manager.dart b/lib/controllers/ponto/memorando_manager.dart index 8b49e23..db08d91 100644 --- a/lib/controllers/ponto/memorando_manager.dart +++ b/lib/controllers/ponto/memorando_manager.dart @@ -59,9 +59,9 @@ class MemorandosManager extends ChangeNotifier { TextEditingController(text: DateFormat("dd/MM/yyyy").format(DateTime.now())); memorandosUpdate(){ - if(UserPontoManager().usuario != null){ + if(UserPontoManager.susuario != null){ getMemorandos( - UserPontoManager().usuario!, + UserPontoManager.susuario!, UserPontoManager.susuario!.periodo!.dataInicial!, UserPontoManager.susuario!.periodo!.dataFinal! ); diff --git a/lib/controllers/ponto/users_manager.dart b/lib/controllers/ponto/users_manager.dart index 338f8a0..1269938 100644 --- a/lib/controllers/ponto/users_manager.dart +++ b/lib/controllers/ponto/users_manager.dart @@ -4,6 +4,7 @@ import 'package:shared_preferences/shared_preferences.dart'; import '../../common/common.dart'; import '../../config.dart'; import '../../data/local/user_local_sources.dart'; +import '../../enums/versao_app.dart'; import '../../model/model.dart'; import '../../services/services.dart'; import '../controllers.dart'; @@ -14,6 +15,7 @@ class UserPontoManager extends ChangeNotifier { final BiometriaServices _serviceBio = BiometriaServices(); final HomePontoService _homeservice = HomePontoService(); final UserLocalSources _sqlService = UserLocalSources(); + final UsuarioPontoCodigoService _serviceCodigo = UsuarioPontoCodigoService(); static final UserPontoManager _userManager = UserPontoManager._internal(); @@ -36,6 +38,13 @@ class UserPontoManager extends ChangeNotifier { notifyListeners(); } + bool _load = false; + bool get load => _load; + set load(bool v){ + _load = v; + notifyListeners(); + } + static UsuarioPonto? susuario; UsuarioPonto? get usuario => susuario; set usuario(UsuarioPonto? valor){ @@ -116,6 +125,30 @@ class UserPontoManager extends ChangeNotifier { } } + Future signInAuthCodigo(int databaseId, String cnpj, String codigo, + Function? onSucess, Function(String)? onError) async { + try { + final u = await _serviceCodigo.verificarcodigo( + databaseId, + cnpj, + codigo + ); + if(u != null){ + usuario = u; + _sqlService.saveUserTablet(user: usuario!); + if(onSucess != null) onSucess(); + return true; + }else{ + usuario = null; + if(onError != null) onError('Código inválido!'); + return false; + } + } catch (e) { + if(onError != null) onError(e.toString()); + return false; + } + } + Future signInAuthAuto({required String email,required String senha}) async { bool result = false; usuario = await _service.authOffiline(email, senha); @@ -156,7 +189,7 @@ class UserPontoManager extends ChangeNotifier { } signOut() { - cleanPreferences(); + if(Config.conf.nomeApp != VersaoApp.PontoTablet) cleanPreferences(); usuario = null; _status = false; _expediente = null; diff --git a/lib/controllers/tablet/config_manager.dart b/lib/controllers/tablet/config_manager.dart index e94035b..ffe6e0e 100644 --- a/lib/controllers/tablet/config_manager.dart +++ b/lib/controllers/tablet/config_manager.dart @@ -25,6 +25,35 @@ class ConfigTabletManager extends ChangeNotifier { status: ConfigBackup.Semanal, hora: '23:00', local: Config.documentos); Timer? timer; + + static int convertStatusInt(ConfigBackup? status){ + switch (status) { + case ConfigBackup.Diario : + return 1; + case ConfigBackup.Semanal : + return 2; + case ConfigBackup.Mensal : + return 3; + default : + return 2; + } + } + + static ConfigBackup convertStatusEnum(int? status){ + switch (status) { + case 1 : + return ConfigBackup.Diario; + case 2 : + return ConfigBackup.Semanal; + case 3 : + return ConfigBackup.Mensal; + default : + return ConfigBackup.Semanal; + } + } + + + initConfig(EmpresaPontoModel empresa) async { try{ List? config = await _sqlitePonto.initConfig(); diff --git a/lib/controllers/tablet/empresa_manager.dart b/lib/controllers/tablet/empresa_manager.dart index c28825c..acb8681 100644 --- a/lib/controllers/tablet/empresa_manager.dart +++ b/lib/controllers/tablet/empresa_manager.dart @@ -13,8 +13,8 @@ class EmpresaPontoManager extends ChangeNotifier { static EmpresaPontoModel? empresa; static bool autologin = false; - final TextEditingController email = TextEditingController(text: kReleaseMode ? '' : 'reginal@assecont.com.br'); - final TextEditingController senha = TextEditingController(text: kReleaseMode ? '' : '1'); + final TextEditingController email = TextEditingController(text: kReleaseMode ? '' : 'rilda@assecont.com.br'); + final TextEditingController senha = TextEditingController(text: kReleaseMode ? '' : 'ponto'); bool _load = false; bool get load => _load; set load(bool v){ @@ -50,14 +50,20 @@ class EmpresaPontoManager extends ChangeNotifier { ); } - Future signIn(String email, String pass) async { + Future signIn(String email, String pass, {Function? onSuccess, Function? onError}) async { try{ empresa = await _service.signIn(email, pass); if(empresa != null){ UserPontoOffilineManager().getFuncionariosTablet(empresa!); + if(onSuccess != null) onSuccess(); + }else{ + if(onError != null) onError('Nenhum usuário encontrado!'); + return; } notifyListeners(); + } catch (e){ + if(onError != null) onError(e); debugPrint("Erro Try verificarcodigo $e"); } } diff --git a/lib/controllers/tablet/user_manager_offiline.dart b/lib/controllers/tablet/user_manager_offiline.dart index ebe7c08..3e1c71a 100644 --- a/lib/controllers/tablet/user_manager_offiline.dart +++ b/lib/controllers/tablet/user_manager_offiline.dart @@ -5,7 +5,7 @@ import '../../services/services.dart'; import '../controllers.dart'; class UserPontoOffilineManager { - UserPontoOffilineServices _services = UserPontoOffilineServices(); + final UserPontoOffilineServices _services = UserPontoOffilineServices(); final SqlitePontoService _sqlitePonto = SqlitePontoService(); UserOffilineManager(){ diff --git a/lib/data/local/user_local_sources.dart b/lib/data/local/user_local_sources.dart index bdb8f18..a06e3eb 100644 --- a/lib/data/local/user_local_sources.dart +++ b/lib/data/local/user_local_sources.dart @@ -38,6 +38,18 @@ class UserLocalSources extends LocalServiceRepo { return result; } + Future saveUserTablet({required UsuarioPonto user}) async { + if(user.funcionario?.funcionarioId != null){ + final existUser = await getUser(id: user.funcionario!.funcionarioId); + if(existUser == null) { + final u = UserDB.fromPonto(user); + final result = await service.insert(DBTableName.users, u); + return result; + } + } + return 0; + } + Future saveUserAll({required List users}) async { try { await deleteUser(); diff --git a/lib/helper/db_ponto.dart b/lib/helper/db_ponto.dart index bf9e6e1..3f4ab09 100644 --- a/lib/helper/db_ponto.dart +++ b/lib/helper/db_ponto.dart @@ -16,7 +16,6 @@ class DBPonto{ DBPonto._internal() { if(Config.isWin) win.sqfliteFfiInit(); init(); - print('DBPonto'); } Future init() async { @@ -166,21 +165,34 @@ class DBPonto{ Future inicializarDB(int v, {bool init = false}) async { if(kIsWeb){ var factory = databaseFactoryFfiWeb; - Database db = await factory.openDatabase(Config.conf.nomeApp == VersaoApp.PontoApp ? "pontoapp2.db" : "pontotab.db", + Database db = await factory.openDatabase( + Config.conf.nomeApp == VersaoApp.PontoApp ? "pontoapp2.db" : "pontotab.db", options: OpenDatabaseOptions(onCreate: _criardb, version: v, onUpgrade: _onUpgrade)); return db; }else { - final camilhodb = Config.isWin ? await win.databaseFactoryFfi.getDatabasesPath() : await getDatabasesPath(); - final localdb = join(camilhodb, Config.conf.nomeApp == VersaoApp.PontoApp ? "pontoapp2.db" : "pontotab.db"); + final camilhodb = Config.isWin + ? await win.databaseFactoryFfi.getDatabasesPath() + : await getDatabasesPath(); + + final localdb = join(camilhodb, + Config.conf.nomeApp == VersaoApp.PontoApp ? "pontoapp2.db" : "pontotab.db" + ); if(Config.isWin){ DatabaseFactory databaseFactory = win.databaseFactoryFfi; Database db = await databaseFactory.openDatabase(localdb, - options: OpenDatabaseOptions(onCreate: _criardb, version: v, onUpgrade: init ? null : _onUpgrade)); + options: OpenDatabaseOptions( + onCreate: _criardb, version: v, + onUpgrade: init ? null : _onUpgrade + ) + ); return db; } else{ - Database db = await openDatabase(localdb, version: v, onCreate: _criardb , onUpgrade: init ? null : _onUpgrade); + Database db = await openDatabase( + localdb, version: v, onCreate: _criardb , + onUpgrade: init ? null : _onUpgrade + ); return db; } } diff --git a/lib/model/tablet/empresa/empresa.dart b/lib/model/tablet/empresa/empresa.dart index 6573855..f97cbf0 100644 --- a/lib/model/tablet/empresa/empresa.dart +++ b/lib/model/tablet/empresa/empresa.dart @@ -12,8 +12,8 @@ class EmpresaPontoModel { EmpresaPontoModel.fromJson(Map map, String senha, String email) { this.nome = map["Nome"]; - this.database = map["Database"]; - this.cnpj = map["Cnpj"]; + this.database = map["DatabaseId"]; + this.cnpj = map["CNPJ"]; this.ativado = map["Tablet"].toString() == 'true'; this.email = email; this.senha = senha; diff --git a/lib/model/tablet/usuario/user_offiline.dart b/lib/model/tablet/usuario/user_offiline.dart index cb1ae05..e820262 100644 --- a/lib/model/tablet/usuario/user_offiline.dart +++ b/lib/model/tablet/usuario/user_offiline.dart @@ -15,7 +15,7 @@ class UserPontoOffine { } UserPontoOffine.fromSQL(Map map) { - this.id = (int.parse(map["iduser"].toString())); + this.id = (int.parse(map["userId"].toString())); this.nome = map["nome"]; this.pis = map["pis"]; this.registro = map["registro"]; diff --git a/lib/services/http/http_cliente.dart b/lib/services/http/http_cliente.dart index 46362ca..74232a1 100644 --- a/lib/services/http/http_cliente.dart +++ b/lib/services/http/http_cliente.dart @@ -23,6 +23,10 @@ class HttpCli { data: 'Falha de conexão com internet' ); } + + if (kDebugMode) { + print(Uri.parse(url ?? '')); + } try { final http.Response response = await http.get( Uri.parse(url), @@ -41,7 +45,7 @@ class HttpCli { final String? content = response.headers['content-disposition'] ?? response.request?.url.path.split(".").last; - + debugPrint('Sucesso no post'); return MyHttpResponse( isSucess: true, codigo: 200, @@ -121,6 +125,7 @@ class HttpCli { try{ if(response.statusCode >= 200 && response.statusCode < 300){ final result = isbyte ? response.bodyBytes : decoder ? json.decode(response.body) : response.body; + debugPrint('Sucesso no post'); return MyHttpResponse( isSucess: true, codigo: 200, diff --git a/lib/services/ponto/apontamento.dart b/lib/services/ponto/apontamento.dart index 0dd3719..3a343bc 100644 --- a/lib/services/ponto/apontamento.dart +++ b/lib/services/ponto/apontamento.dart @@ -1,3 +1,4 @@ +import 'package:assecontservices/controllers/tablet/empresa_manager.dart'; import 'package:flutter/material.dart'; @@ -18,7 +19,7 @@ class ApontamentoService { body: { "User": { "UserId": user?.funcionario?.funcionarioId.toString(), - "Database": user?.databaseId.toString() + "Database": user?.databaseId?.toString() ?? EmpresaPontoManager.empresa?.database, } } ); diff --git a/lib/services/ponto/bancohoras.dart b/lib/services/ponto/bancohoras.dart index 4b6ade8..a5c0a75 100644 --- a/lib/services/ponto/bancohoras.dart +++ b/lib/services/ponto/bancohoras.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; +import '../../controllers/tablet/empresa_manager.dart'; import '../../model/model.dart'; import '../../config.dart'; import '../http/http.dart'; @@ -18,7 +19,7 @@ class BancoHorasService { body: { "User": { "UserId": user.funcionario?.funcionarioId.toString(), - "Database": user.databaseId.toString() + "Database": user.databaseId?.toString() ?? EmpresaPontoManager.empresa?.database, }, "Periodo": { "DataInicial": DateFormat('yyyy-MM-dd').format(user.periodo!.dataInicial!), diff --git a/lib/services/ponto/foto.dart b/lib/services/ponto/foto.dart index 05823d1..a4d0cf0 100644 --- a/lib/services/ponto/foto.dart +++ b/lib/services/ponto/foto.dart @@ -3,6 +3,7 @@ import 'dart:convert'; import 'dart:typed_data'; import 'package:flutter/material.dart'; +import '../../controllers/tablet/empresa_manager.dart'; import '../../model/model.dart'; import '../../config.dart'; import '../http/http.dart'; @@ -17,7 +18,7 @@ class CameraPontoService { body: { "user":{ "UserId": user.funcionario?.funcionarioId.toString(), - "Database": user.databaseId.toString(), + "Database": user.databaseId?.toString() ?? EmpresaPontoManager.empresa?.database, "Array": img }, } diff --git a/lib/services/ponto/homepage.dart b/lib/services/ponto/homepage.dart index 6c3f5cb..de2688c 100644 --- a/lib/services/ponto/homepage.dart +++ b/lib/services/ponto/homepage.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; +import '../../controllers/tablet/empresa_manager.dart'; import '../../model/model.dart'; import '../../config.dart'; import '../http/http.dart'; @@ -19,7 +20,7 @@ class HomePontoService { body: { "User": { "UserId": user.funcionario?.funcionarioId.toString(), - "Database": user.databaseId.toString() + "Database": user.databaseId?.toString() ?? EmpresaPontoManager.empresa?.database, }, "Periodo": { "DataInicial": DateFormat('yyyy-MM-dd').format(user.periodo!.dataInicial!), @@ -47,7 +48,7 @@ class HomePontoService { body: { "User": { "UserId": user.funcionario?.funcionarioId.toString(), - "Database": user.databaseId.toString() + "Database": user.databaseId?.toString() ?? EmpresaPontoManager.empresa?.database, }, "Periodo": { "DataInicial": DateFormat('yyyy-MM-dd').format(user.periodo!.dataInicial!), diff --git a/lib/services/ponto/marcacao.dart b/lib/services/ponto/marcacao.dart index 380267f..dca85ab 100644 --- a/lib/services/ponto/marcacao.dart +++ b/lib/services/ponto/marcacao.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; +import '../../controllers/tablet/empresa_manager.dart'; import '../../model/model.dart'; import '../../config.dart'; import '../../model/ponto/apontamento/apontamento_dia.dart'; @@ -19,7 +20,7 @@ class MarcacoesService { body: { "User": { "UserId": user.funcionario?.funcionarioId.toString(), - "Database": user.databaseId.toString(), + "Database": user.databaseId?.toString() ?? EmpresaPontoManager.empresa?.database, }, "Periodo": { "DataInicial": DateFormat('yyyy-MM-dd').format(data), diff --git a/lib/services/ponto/memorando.dart b/lib/services/ponto/memorando.dart index 228475c..92b0ea9 100644 --- a/lib/services/ponto/memorando.dart +++ b/lib/services/ponto/memorando.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; +import '../../controllers/tablet/empresa_manager.dart'; import '../../model/model.dart'; import '../../config.dart'; import '../http/http.dart'; @@ -20,7 +21,7 @@ class MemorandosServices { body = { "user": { "UserId": usuario.funcionario?.funcionarioId.toString(), - "Database": usuario.databaseId.toString() + "Database": usuario.databaseId?.toString() ?? EmpresaPontoManager.empresa?.database, }, "data": "${data}", "tipo": tipo, @@ -35,7 +36,7 @@ class MemorandosServices { body = { "user": { "UserId": usuario.funcionario?.funcionarioId.toString(), - "Database": usuario.databaseId.toString() + "Database": usuario.databaseId?.toString() ?? EmpresaPontoManager.empresa?.database, }, "data": "${data}", "tipo": tipo, @@ -71,7 +72,7 @@ class MemorandosServices { body: { "User": { "UserId": usuario?.funcionario?.funcionarioId.toString(), - "Database": usuario?.databaseId.toString() + "Database": usuario?.databaseId?.toString() ?? EmpresaPontoManager.empresa?.database, }, "Periodo": { "DataInicial": DateFormat('yyyy-MM-dd').format(inicio), diff --git a/lib/services/ponto/registro_ponto.dart b/lib/services/ponto/registro_ponto.dart index 0c3a126..3330921 100644 --- a/lib/services/ponto/registro_ponto.dart +++ b/lib/services/ponto/registro_ponto.dart @@ -3,6 +3,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import '../../controllers/tablet/empresa_manager.dart'; import '../../enums/enums.dart'; import '../../model/model.dart'; import '../../config.dart'; @@ -24,12 +25,12 @@ class RegistroService { url: Config.conf.apiAssepontoNova! + _api, decoder: false, timeout: 8, body: { "UserId": user.funcionario?.funcionarioId.toString(), - "Database": user.databaseId.toString(), + "Database": user.databaseId?.toString() ?? EmpresaPontoManager.empresa?.database, "Origem": kIsWeb ? 4 : 3, "setorId": user.funcionario?.setorId, "Email": user.funcionario?.email, - "Token": token, - "ListaMarcacoes": [ + if(token != null) "Token": token, + if(latitude != null) "ListaMarcacoes": [ { "Latitude": latitude, "Longitude": longitude, @@ -113,11 +114,11 @@ class RegistroService { try{ final body = { - "Database": "${usuario!.databaseId}", - "UserId": usuario.funcionario?.funcionarioId.toString(), + "Database": "${usuario?.databaseId?.toString() ?? EmpresaPontoManager.empresa?.database}", + "UserId": usuario?.funcionario?.funcionarioId.toString(), "Origem": kIsWeb ? 4 : 7, - "setorId": usuario.funcionario?.setorId, - "Email": usuario.funcionario?.email, + "setorId": usuario?.funcionario?.setorId, + "Email": usuario?.funcionario?.email, "Token": token, "ListaMarcacoes": listOff }; diff --git a/lib/services/sqlite_ponto.dart b/lib/services/sqlite_ponto.dart index 56ebc72..37acfaf 100644 --- a/lib/services/sqlite_ponto.dart +++ b/lib/services/sqlite_ponto.dart @@ -42,7 +42,7 @@ class SqlitePontoService { Database bancoDados = await _service.db; await bancoDados.delete('users'); - await bancoDados.execute('INSERT INTO users(iduser, nome, pis, registro) VALUES ${dados.map((e) => e.toMap()).toList().toString().replaceAll('[', '').replaceAll(']', '')}' ); + await bancoDados.execute('INSERT INTO users(userId, nome, pis, registro) VALUES ${dados.map((e) => e.toMap()).toList().toString().replaceAll('[', '').replaceAll(']', '')}' ); String sql = "SELECT * FROM users"; List _emp = await bancoDados.rawQuery(sql); if(_emp.isNotEmpty){ diff --git a/lib/services/tablet/empresa.dart b/lib/services/tablet/empresa.dart index e2f6d5c..10858e4 100644 --- a/lib/services/tablet/empresa.dart +++ b/lib/services/tablet/empresa.dart @@ -24,19 +24,19 @@ class EmpresaPontoService { } Future signIn(String email, String pass) async { - String _api = "/api/database/GetDatabaseGestor"; + String _api = "/api/emp/login"; try{ final response = await _http.post( - url: Config.conf.apiAsseponto! + _api, + url: Config.conf.apiAssepontoNova! + _api, body: { - "email": email, - "pass": pass + "Email": email, + "Senha": pass } ); if(response.isSucess){ Map dadosJson = response.data; - if(dadosJson.isNotEmpty && dadosJson.containsKey('Database')){ + if(dadosJson.isNotEmpty){ EmpresaPontoModel empresa = EmpresaPontoModel.fromJson(dadosJson, pass, email); if(empresa.ativado ?? false){ bool result = await salvarEmpresa(empresa); diff --git a/lib/services/tablet/usuario_codigo.dart b/lib/services/tablet/usuario_codigo.dart index b3a0f1f..e049d6f 100644 --- a/lib/services/tablet/usuario_codigo.dart +++ b/lib/services/tablet/usuario_codigo.dart @@ -9,23 +9,22 @@ import '../http/http.dart'; class UsuarioPontoCodigoService { final HttpCli _http = HttpCli(); - verificarcodigo(EmpresaPontoModel empresa, String codigo, int tipo) async { - String _api = "/api/funcionario/RegistroLogin"; + Future verificarcodigo(int database, String cnpj, String codigo) async { + String _api = "/api/codigo"; UsuarioPonto? user; try{ final MyHttpResponse response = await _http.post( - url: Config.conf.apiAsseponto! + _api, + url: Config.conf.apiAssepontoNova! + _api, body: { - "database": empresa.database.toString(), - "registro": codigo + "database": database, + "cnpj": cnpj, + "cod": codigo } ); if(response.isSucess){ - Map dadosJson = response.data ; - if(dadosJson.toString() != "Registro inálido" && dadosJson.containsKey('Id')){ - user = UsuarioPonto.fromMapTab(dadosJson, codigo); - } + Map dadosJson = response.data ; + user = UsuarioPonto.fromMap(dadosJson, false); }else{ user = await verificarCodigoOff(codigo); } diff --git a/lib/services/tablet/usuario_offiline.dart b/lib/services/tablet/usuario_offiline.dart index 42780a6..b30e4aa 100644 --- a/lib/services/tablet/usuario_offiline.dart +++ b/lib/services/tablet/usuario_offiline.dart @@ -22,7 +22,7 @@ class UserPontoOffilineServices { ); if (response.isSucess) { List dadosJson = response.data; - if (dadosJson.isNotEmpty && dadosJson.first.containsKey('Id')) { + if (dadosJson.isNotEmpty) { List listUsers = dadosJson.map((e) => UserPontoOffine.fromMap(e)).toList(); _sqlitePonto.salvarUsers(listUsers); return listUsers; diff --git a/lib/ui/smartphone/tela_base/custom_scaffold.dart b/lib/ui/smartphone/tela_base/custom_scaffold.dart index 64fcbc2..1d20773 100644 --- a/lib/ui/smartphone/tela_base/custom_scaffold.dart +++ b/lib/ui/smartphone/tela_base/custom_scaffold.dart @@ -230,7 +230,7 @@ class HomeWidget extends StatelessWidget { class HomeCalendarioWidget extends StatefulWidget { const HomeCalendarioWidget({super.key, this.globalKey, required this.funcData, - required this.controller, required this.body, required this.listdecoration, + required this.controller, required this.body, required this.listdecoration, this.showActions = true, required this.appTitle, this.buttom, this.dataInit, this.dataMin, this.dataMax}); final GlobalKey? globalKey; @@ -243,6 +243,7 @@ class HomeCalendarioWidget extends StatefulWidget { final DateTime? dataInit; final DateTime? dataMin; final DateTime? dataMax; + final showActions; @override State createState() => _HomeCalendarioWidgetState(); @@ -273,6 +274,7 @@ class _HomeCalendarioWidgetState extends State { body: widget.body, appTitle: widget.appTitle, height: 110, + showActions: widget.showActions, buttom: widget.buttom, appbar: CalendarWeek( controller: widget.controller, @@ -328,7 +330,7 @@ class _HomeCalendarioWidgetState extends State { class HomeIoWidget extends StatelessWidget { const HomeIoWidget({super.key, this.globalKey, required this.height, - this.onAlter, this.appbar, required this.body, this.expanAppbar, + this.onAlter, this.appbar, required this.body, this.expanAppbar, this.showActions = true, this.appTitle, this.buttom, this.conf = false, this.home = false, this.floatingActionButtonLocation, }); final GlobalKey? globalKey; @@ -341,6 +343,7 @@ class HomeIoWidget extends StatelessWidget { final Widget? expanAppbar; final String? appTitle; final Widget? buttom; + final bool showActions; final FloatingActionButtonLocation? floatingActionButtonLocation; @@ -357,10 +360,18 @@ class HomeIoWidget extends StatelessWidget { && !ResponsiveBreakpoints.of(context).isPhone && appTitle != 'Configurações' ? null : AppBar( title: CustomText.text(appTitle, style: const TextStyle(fontSize: 16), textAlign: TextAlign.center), centerTitle: true, - actions: [ + backgroundColor: context.watch().darkTemas + ? Theme.of(context).appBarTheme.backgroundColor : Config.corPribar, + foregroundColor: context.watch().darkTemas + ? Theme.of(context).appBarTheme.backgroundColor : Config.corPribar, + shadowColor: context.watch().darkTemas + ? Theme.of(context).appBarTheme.backgroundColor : Config.corPribar, + surfaceTintColor: context.watch().darkTemas + ? Theme.of(context).appBarTheme.backgroundColor : Config.corPribar, + actions: showActions ? [ actions(context, aponta: home, config: conf, onAlter: onAlter), - ], - scrolledUnderElevation: 0 + ] : null, + scrolledUnderElevation: 0, elevation: 0, ), body: Column( children: [

|e)p{$DLXai>WUD3Xb} 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 diff --git a/example/assets/imagens/assecont.png b/example/assets/imagens/assecont.png deleted file mode 100644 index b6971a899e087f4fb5ef3cf6a8814bee65fcf6e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2634 zcmV-Q3bpl#P)da_9$KOuk8J03DxXb`^#3d&x%nLdWBYU zxud<4rfEI*p3LiawsSM{-p<>7o8-3hfyv#yH{Un!$9KN-{eEZO3-Ns)ESBAXW1o^` zw_ugkvTI0PtrPvtCnm}OPy~PsZfXNS?Tat2t|*l)77au9Ss%ZBoGE7$0H&3l0Gj|% zx%2r;b!CsmA~AF~z!`(OGX~SnSn#`C(#{wxoShyoD1sJ?#8BOUvtP)S;RcvhcBnAR znpd`3ECNGw1D==-hJWUdrj?y~PJVvrQdPUh@}38V>IS5s0x3ubw%e>!p7`>(wXT*> zhN7&$y?Z=QD9jNG5Tm3Cg_?3Oiv<~qvXYcvCn+ELD6_vS8t8W zW%=vbjM9K*WT0+|jh-z4IM0=~7m2w6zyIbK@}M!s0xEwSEC^!4mj+{y}8}-8XLV1gTvR3 z0I=gVT1v&8GIDzxCVrZxt(A_~Fk1MdY18C9W#eFUo`QTveqO!WjKjbI)>9{PNd;A5 zoH%@XZQ%SXbxX{pr~rVg?0lDHR!8@Ms9UO{eAtYf2LJ`G@c7_rxY8_4X0hWn6juk^ zDu>+DsB<)FbH3v>Dv}KQJIsaK#P*cMM%bB(SfY$ow@vDnxBltcL@@F#uo>ny>-@`vBkw_HM?cI2_{dTv1t_LtGZ+58*LS2yR4K zcmRtUnHg3eEt*J8kXsVv@H|hTr30)hQWuoY!)rPuoZ}3hr=dA5P3{D9BPgw-j{BVn+p<3Uy=)QKOciA(GM*vY)w$@>YGNJbtm6(q@I>XfK`VuoReJSg6bJ+|V znuk36%f)?eE^GQAhDF@=T}^}?2CuiN3oba4@^jys`;u`w2bWzo$bt-_aD&DgUHS^J zoZ$ymVN{?0LAHMT_tyuy0WlN^(3d^Ph7W$-BP2?E~doa{3u|VN8)?-RI z&7xZjN}94C%l?)EGxqZ+bxWJ5{LKhucVk4^93CX~qeO9E*t}-b;IZ8RLY+FH4qU@> z^iMyI_s$ju6K5nveHo)zUP9@3jT%O`OH!R#OzUi5XXt`K$1%a*15_%exMx`4VLB%s z!8NgP*NRw{_0K;UA9VR&QpBCv;sFG+Y~?VkCPcUjIE1$_7g|IglPBNPsDL}7TC})z zjP!YZ{!W^U$IDATV>jaNgMO@DT$#jt(6|^|*7K)w8RGag;`neK6!-k8oRKSl!!aKw zD`ARi3R5hmglIYQn7id@127i!piB|-kld1|H7-p*Yk7I@HBJZaN5*(L-!L#%)&!UT zB~@zeS}v|tNc4jmsJIn$DZs=^VYDtPsQA$jz)6X?*TrSyC?1zF=^Wimg|a6Zl3R7< z{VbO!4pfK(a2=I2aU%1PI)?QILR{t2)fX+6)`RRW zyJ`kKa}lF(7SymPyeahT49bg{0@2E`hc%0-D(-8xaLCO|ay4Q9B&Mp`!nOj+@EkQy zWd$w;Dkz@CnAC-HW?7X5yvHrw^lwjPb*MkI?@(QS)xUD(6N|+SsF&W1t(rWklH)TB4>bC$uFlNapRdBRT|MDp)|dDJcls!1L7l zkHQ+$DZxUnV9{P9x&Q@9rj0T!O(*Ow?hZQ-&HW2qI4-32c-z|R3su$&k51(Agp*My zRLTMKdpIWnT z#EvN10E^JX@{z%+?_0jIs`!DN!>0m2v--?~*%}5Gyf6jkK5?_R3Xz5XG(*Z1gN9}J7uFSd*Z z+5n63(&H1RuiCPilFGq5SCzb2Qg}Z%%J(k0_pOB`t}P=#sIoFv&h9Uu|EPO~g)Ky` z=kK_9Rjk=xf0@hUOo#3R4)Y)X#+uEsjyRFZ%2_$PUz|nR$lqZeI1Pgfk525Ef%@1z s;n@bu=wScvR?DtI8(>*1*Bt=xe{Uqx$!|mahX4Qo07*qoM6N<$f-`v!QUCw| diff --git a/example/assets/imagens/bompacredito.jpg b/example/assets/imagens/bompacredito.jpg deleted file mode 100644 index 2b64edcca11337fb0bd89761a7704e19c3c0d572..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77892 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 diff --git a/example/assets/imagens/check.png b/example/assets/imagens/check.png deleted file mode 100644 index 26073faf99153da7e0e607b3af05ae315f446c28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14609 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 Y8Kn&Si5HcE>x&TKw8^O#x~|v$ANF%)qyPW_ diff --git a/example/assets/imagens/dispo.png b/example/assets/imagens/dispo.png deleted file mode 100644 index a2a06a586db0e263a268cf6e87c4cdcaadd1e2af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35985 zcmcJ&2Y?mT8TP+`9hG83Kv~xnMY%A&prA8%=E{N~A}DsI0t)Q1th8W)fC?(8V8M=H zub3zxHi)2N?=7NY?`SO8{eEYG)%+die-ppYBm`mSo-^mX^?9H7y)y^&KXixf+HY4; zQL#f!Z*L&~U&H_UY_k==uK!?SJ^#0DUGHPYR#ddyN&K%_#bsBttEf259x-T0!;pT5 z^@wUmbqnI!FzGg7R2@HEQE|}06Y7HKl%%0DOoojZ-Lq=ly$@DZj);3!9j*71`qdSa z;Ujuas!xub)PGPk>6FNhs}Al}dC-I&e88xrA*h@%YUJp#Jtp+5YW&?dwfZ>iG0-b*T#J9}Sv9<&p{_^w?&HUg?>1iTR$D);yKLKbcS-54C2y0Jm=vl>1H@w2Ax~7jEJ$B;xnIAlM(8Ri=`@m#u?Wy%q;*U#4H|)J>vAW^4 z4Ygy3*KTHSO@I9#JB*{I1?x_&AK7?3anwB-nT+DI$MUms^c~hM>G3u8l{e6U+J0e*JpXj2_z%jE<5TuV)pT>Na9T+#`^cSTa?span`?&=pNC z*hVN7?9jHgC^0274jcEy^ImOqsyGSp{06a&Ya>3R=`?$oRw^s99T!4dOA4m0#Rc0k zje??TsT78(DHK5*2%mO%{RlKC82S586}yW0#KZ^_S&q#@XlO*Txb=<48VwId4@)qd-K)gQbQdOO!=-fp|K8Vc_q|DG z9Hd#?=GcwL;0D8*4y2c)_^QV*wpDUe$(D;nQ?ZJUWShRF7Y%*GS|dmN?unwR7E6jD z%XX=#Yo03?OPE~8FnrtgJ@t=I$huLqikfLiwp1)CiXoNEqOQ8G>Ux%=IT=rwj$JZT z$5#}kWIK{!8kX*uN>TRol4{BsPgsWSs`C4mn@ru5ST%!DerzAc$0N7gJ=!|WP=+?8VKuEgQ0PEoTo&WJZR zIc>vne7RK2ctVw3-I8_HkUh(Gi>fUtG7_MfuBI5eoN*tj>PV%MZtI4lII4lDn4V&p zmgVylm;c9Isai?ZEMC`B5M8^d7@C5aMxI>--=86goRXuMmW-sDC52PgRmJc%*;W;= zq?=mC8m^)Hnk{LXZfRU5;^bO}CHb0WII3g+@d>d91;I6S89h>M*|03jQ593tJ`GI-qUS0ll*8~nQ!Uw^!fR-fX{fsAdKqh|hOXgu3`uh|O*NI0=ae`l!$NIsC*wUd z*HRUqYc|x9AyzX~*DRV&Np%dQSNY=_x-2e)%@m6~p`#nB;c2SQPaCpiW!$-LxRO-F zl-Qc9da5Mbl3Oxlwd9r%A1mWMbj#Om%}^X)b5vh9QF=sKm=sTQQJRchd9p97p6)9} z#g-)rUA570uTe&HL;B+rhQfPeL=;&@?a+3|R=7>amTgOyvUJeU+@j_ihKt=o(D{vA za*KxLx`tGhVk|=f;+U0Ir8 z^07tTMH{q|qI;6%^BGpLlirPl!_%P6-&A!`-)>Zu5D&nAJZ#gq)O<7 zYAYqw3gc2TP%%}Ke4hQ|8kj-MANs1Gw3_T=g?+`tK;ol}l9nM?I2;V3VLBL5O;bvW zsqiPl;u@-=XK571tR$5%Q=X%my23T1uyRq>-C|MZB>uQ78{gz|V_XX^kehTo-78wc zugQv~Wt^_fwVA$$w5uh>k&Bw4nx^4-mZ$1IW-nt6&n&ryrAZ~$DRKiC#Uk6pOZmdE zW<7z!Fnp|zCab>ZIg+O;SStk+FJwRC37@U|`1@k9Xye6@Vqxl4hmY_|R@NFNTo|Hl zDyECu^mIaGq`)DTFci=I16=lgmSc<-7dA`IkX4osto2h8n0om~- z+b=mq&tgTP^tx1(GW5fdO|vMOzM@*5s~NI|ea9?Xs^QD7rDQ!}IlkrNxn<$>OEMBz zBp@+`7iFc4vvRP_3NL~+$Fj?|i}FdTj8jC_ai4!YU020D>Il4N>G%almUzf28m4da z$9l#Zu5G)>u4a`y4Fj+FvSqlKIbHQ}aY{xc<6>k`Q(_%mmmJk|IAYHuXhJy%PW+5r z5xqI=+(JW3Cc{;UPZJeg-OP)9@fTjFKg1=!fh1B^Gzo zBEhR(R2|R5%E>HP!iY;*@8Rn@ALqDS9RHC?zidYYe#pPV-(|c<$x$R3zouIrznX^5 zqcYabC?SYuhU^wqY@243ikhyQT$|^sc8N>$aiO*@XUHybG=9UeN-k2QnAjALC|j2K zag7VjINhRC!u+@{7p;mwS;Uzo372W{0ajM*Bc3R__&ZYBL+4!yO?ph zMZz|n(^PyUgpiNxu_ar#Bs@@2&3q5;Ol1#HgTUd9Gkio&y%0yg6?1XM9rk!ygo@6>6e#-S##UgN! zkQo_$_idITT>0ajdoqcQqT*vkT!vxOxonanRdUE)^b8&JRCI|{N>dHVFmSlCN_bVo z>RAr9HzQ_1^SEYR*lJyt3`tdeNisdvWnTnk8M5mcy31d%DbC4v$tX0{k|k9H%Bt^X z*mlqMZA~#{)0MdlO*d6jvMiHe028b_8Pe{##LgZW9sx1;f-u>RTN2*Nw%klB>S4&x z3>SxE5Lt1ol5RO(vBWx-ZDvTj=kc0s#!@l8JWG;?dEgoyyaIVb#(iK)aI&gPrs|>d zwoQ(t8lbg!bUjBCZa!m;5)q;yxe}MCNq&+1tLT}y zUp#_dlCpM1bd1&2NH|a|d|^>G6!K0BtA|`?JmHghl#puz7o9sH*42oui$31Q*K|MQ zJ$#WpU<4KNCX6ESi$l(Z8D)EHH|q&gCu1fjC*+n5Uf7mA*TRXiD2_108=wb-Et-TM zM=FR;NYqP?YoU;`rTQ73lYCi1Rb5@>h18;jk&;Uq_6vD-?5s$JJ1g?8x`@nl$0efF z$Ro%?xF5V$#u~&Qw#qiJ@I0Y#nI=J*rx$qvdD}JffVX8 zpBL*vRQA4t*fva4DQK}K6*zybUL8NI(f)Gfd&}~kRFd8GKo3a)WWT{5^`-&|) zNX(RDm-IqxBVU#s#f3NqF1745lTb~_h_pdZS?=_J5((RbP8w%J&@!A$V(z*LM@nfnyR6h z5c8Dnhg36(IWU_V99k%+npz0bB*ntwn5e@^Qu#hj4WuL@J1Stti~>+uP@qT<7YxqO z4iRFMpj_QX?P5C$(}G3{vO!is#qC0x7-<@ZhcMp}xQwh9(#RUr;EvtSEXf;&&sNJl}fjF>lDx78>$wIq%TQG}(5WX>zp z5ZC}Il{DKjl(cMnuf{~KK~kx&jCU#sEbWI#YARLnTl%hn-Hglm?BBxpo8$eL9M$@~kvS{eqClHjAt zm3u8!B7l{o5UH_NkR%Zo#xbvqc#r{MbG3|oCtJRBDODp2cNSYJ##Ou{E;}OHv|`N& z5;c&^)Gnn|Vh)uo7Hq zL6=mbXG6#Y05+-~1D;AT2T*owqT8m#RYFCOBOC}3RDp0653VU%6cL1JQrW&k4^X-& z5r#ptiJnCapr8iAQ${9sG78I%0rXfSU<(s`T4)udRNSK`&Pz)q%6)obl`pFX_?QML z!97NeG1H&OVF2UhL`tLrsex7?JcoP{C`5=>pct?)QtIR7$~{@JLZC%VZsLcq(ZpXN zx=o0qVWDk13CjO0B5yk|Z9xhNQAKh-0s*#3_@hSR{Nl3n4r;JbpoC#TGE%dU3VpOf z^f4iK40RJwEl7#*9dRTT;#9E-5|R5fE&IG8Q;qdl!q)}}Mud=& zPZEiV6gQCxh|AY)s7Z0ghom!F+#cTXxbs3F^b4sY$D#2&$6UME|^JRD0mUA%~<5hB3(mNerYqB}wd)|?a7QhMh*g)^&@_iaGwURVOsj_Zj<++7G zPlSavBm%GqGgh{IS&1BmBD_?>h!YpFiG^q6vtS;Oho(`Sf%#?IRa*u2QV7S%-4kK& z|3vO?lXryp`a)y|B5fD?7!W-HjiU2vObM}U-3}nEkQNx+V-N}A7-w&Q!I&Y@C-k)R zzc~9qW*dmR(4j_|Ae12EKvq@4=~S~2{c>eBFr067G&699i*s=%wL&u z*>WFH$hUxDNLt9K8qc00C;=U06>1M*ESGO5IC_}_mJ5-MlZ*v!g5eL~5h_ulLt%)^ z*KIHZU~Upw@Gnd3>reQOfVejaOyX!0zs;oz9DqD6j_fco2h6utM?-9TP6C^8$1xf0E5tD~{1lWm$VnY$F zP{aTLXyijt3Q|O_R(^aR>M1r^3?Fb+z`lY2KLolLL^|d= zDL;;muy^20xQ!TK6e1BQqyc7ys|9Z|;hEZH%U7fZ7MX_#mqb`1v>f?TG57P91(_hYV2H$z%>@NO3zGVT zidtN@-zFk~@*;(WM3@M$e++d5LPws2N}36Trm}5etdY7(Qe5EF1L4z%3sW+01A#Tu zSPfLE?ASMkcczD=p$TtABEu~Ni2||%P%gMj2_=Yf&z{SY6(dT7{c6;qKViRO+fHR{ zF}tymdzE_xWx!(K;}S5d;J>h|F%)VYaGeB*&84cKRwpK+t7GV6J=KEpv9uU-XLI=Y zG*d&tMLwhhVVMNx08oIp<)2pq(<1>&F83Z&>;T1^v;aUW45E;)AhHXHd`!Io zzN}O>{*_V;7U@DE25sa5MB;}kVpmmIQ?vmD<>%WJ24yKy0bNWyKcqPFG?I4eLuqQ7 zR4aJVvfq(2)*=N%Y6RjFgs;V^iM*B^LNy~+>qq?wAZOE)tjNm8#QLY*vqj~|O(%0Y- z+fajfHyc`!N8akgrN|;pG(KhmnL-rxU<+B$!l2=rFd%6-fcXud#ox?o#UfNt=+w4v zlsrKq(FA)Et~lT}2kLC*F}O$)lpzOWhN60Z ze9NXMp&`>9L0n0`PdMT-0yt_pKR~1FJ zILv#RVv`-K)QC(pon`=>h=hLv6;)!H&>b39&WRZmw#loA#PJ;(IEhGZ@f|67JdAyk zp$r$)v~!SWE5?%=R8~cW1M?8$EjS9Q0FKI@EzK~H3~l{O7tvis}f+bVul1o zX%c3H?@eplv6P71hUzV*mIe{tTO=ib5HV3R)&9JlyNW`ikOsjCi{z`W<(FIs>NX5d zDm)qL-n1@sPWX(pEBq#%mIFP!RD#i@WawbilkiI+?m%eOj7EKeN&|xtl3-&8j+=8* zFi-#2CmqA~fR>^E`M|yowxR^2=#}7i7qejCrrk!Ssgm`e!^oAKa69-{1O;iN>`wJP zSBE2;Dkb5YX@=a1NYbE%=qRQgBO16%Im7NZtxc)a4n?pmDpX(vq_N0A zFz2)q6+n%uRt$HmAT_4Z0yGFvQ5&oi)^A2A^xN8$Btx*s(1^o=N*v022V^$^oqsWv zPl!u7YvU)$)`W*7=^)&}2Ev@Akk!bO!C9C&?=4GU8ZmYxl>id}Fabjob`emI(J-Z= zB)a*vv6Lj$HhQ3t-f0%thAmP>>c|$Dr4g!OMo6>iy+Ok`GcZMqXo~1VB&{a;BuZ{7 zK)-=T<*W_+R8VAz+MzJB6Ad~jP8ivP$S&nRse&m{m7{VZVS&in!jw`2VHhwjT=Y11 zT}>u_CxS~u+zs#?@(Ra+R0sxpU_cx)GN9nMs`3BM8yniZ&Ka1pa}B25WS3afXBRbU4vd8 zpT?{W{t=p`SCV|lmNK1|TF(0dw3;vx0h(zWpdyH0rYcT&3nCA{hazznF=Ep#!5QaL z=x6YMv$$eS)uHLe&+~2ywmp(;Dup19f<(c(0v6CDoQq;{cTtXy0E;q0f(T$jq6yLk zYyw<6ieOYbf=H(Nl5^G=bpt~1Z?`0(7`h>82P3FbGeW$k_qFJ#acP^-=v5NB1j~%B z0nr!-pViNxasKus=>z0KpesWM@g~s)wFP=rBH%!BV8EHp%azCyL`X^9%Qg#u`PdJ# zN%1@4;wT_^&XEqnOPz*5(vuAVwB;idt^_nr4KD%~^Ddp18K0-NHHp@5G(N z6r-b508AiXRPgO6lB`6P&79~#i4(X^)KB4L37$}6#6(7mTQXtMy1a=fLJw+-FcD@?r zcr{LxeM^ck(dfMnsRyW^r*(x;J*1eHRdQ}RF(5m`p^s*hrIl#I^XSErXqKaeYx6gy zQa#b5I4LA4W+M_)8Ssp_DHU26oi>&h=EMP%cZpJvF<1{I?xL8+zwrxtt;GhIWL8^R z)2=OI=Ljocb8v!U3S^ux(g7wCmqY_jm<99x_H;nSj(Q*vP=r$^KBq_z76chkqywTq zGv~c+8dGi6r%?;fK)gv8i$#AHbbXp*%^V*={~b*cQ14A=!;^R>^qD?ST51(L$LbN; zk{hB_zsncF(rEqEE!qcj^oeq_BsZQ9bTd?mJQa!_DG*16N)W|l6+oL#3I;9-!<>)B-P20kY?&= z;M1gEgm(xTbz2?UHEgWBr-48zqv8_b$U#>jY6|55k3l^L$4modoB@b7y*ETVN}g#! zrzj+taiRi>xDjpPAz(8Rq367Jnh*n%uaZ_!dJuJ8k^zd&6kh-eE#QTmY?ru&t_CEU zm;ibh41YWvNh?txc(nxGE31uk)6QwNVP)9-5o~;8jk|vW^(DFpYNK%ks(c&ziy=mtx z9+QC(+f)08^DM9iWEMbF4S_d8DnmIt7p=x7wL3015k)saBq7SDnhQouu1?U9_cWm) z;dlWCK6wRfEToRDq~O==n<|KrlTT>|7D$HylL}xOP(Vb=81aBNlA}Z;Bg@*-A^K1{lnbh)v| zn{bR?J)brkCJHdvAgd{^NkW1MW(p=ivoYQfIE9}Kp+}PoGl?LusNU!7n5zXZ5=1f5 zZmI>8KV|$pB(~6!17fkPQdiU3K>9Jdi;qSh$bbYY!&PC2Al<-Qf)|~$b`0lDICn5Z zDr|yc20IxdX#)QVnwLb0G3RNx_5#`~XzLaUnN?ZC_6vS2}^7%B<0 zPcT0n+7nC($qKP27?aKKnoK*@Ej*7Bf)kjH*o;I0kZ=L+{M9i*8eRG;Y1apO&ATb85OgZjySE`rp-Ga7 z0j@-wIQX5LqZPC<@`EKRb@Z!~6VXI2G2g)f4da}YoM=i%c>l*WT{_E|gVYo)lkw6= z$=Czhw6#(xN1i=&m7su1Y$M`NudV3tWsC#EJ}`TEPntgE845eZm%OJ#$0Rc&C@*Px z$;mxi${V5!_xHOkFFyxxr=u_ixS_lz;vaMu&+5O zN(l7A;)S%l6%@7t;h(6`$lG}u;QUEQsAv#M2#W_v3OXiaU#h}XTe8}~n$}K5$qDu* zSQB_MSUM3w4B1YGU>KSb9EY43#E|HN2Uqi$*CD()=}-}kV&(+x{gRcVOUSM)3uY`Z zGIm6v zii~6s^C*}jlDA_;j!9O*yaK{{n03%N#qd7FBee;pEK|wbu@W=}8wJ2MNE;B^2}J0J zLbPc7P8rUS7bzOF{$m#@)s_rVg0+hR%_;drPh?_wQ4?b?j3kDP)L8ifGlsB0Fahe$ zj$wtv2+Hwjw1rv}&=Bb$0e6OV0nG=LFg4+y(txT&YL0K9?-ni;fmRsP-T<;>g4NYQ7F zR5+qMmYP}QicMN!F#LfK;6L(amtqSgX{F?6HL*86S!6bwM*#kNTttkc(CPp8vdY&@ zPZDK`x9v6GCXh zVaSmbQL;@W5@anRKmj=~F3C7D5y_awcG z*lxJPqH;*GMkFN=vPt~5H)}97s6a9;24wal_V=?Z7QvN z0_iGA2y3$e(PZA5W#vT5CQgAQ zjeOOh=0I)>(QK$a^4xP zU8;asngK-wG8bY46DUc>tSBOKmDD`hV%m>Em6FkS1Vym3nEq8VxOM<~C{SL`y7;)p zwrcP>5$Uon&_A#%?iHMys#YE%O)F5$Bu&C|Xo8?l0*OaUpcW(oD`ntkn3G4D0Om~U z070kOO2qn&86<4%2oO`Wv;)89?3@`QAu%S?9SBZX8_Nr_j|IXk#Y|;^R-X5Cm|%pk zUx1>*+kwegqLBiDRpAAYMC4h5G!~d45i{g&L6+p@VcQ8p0aJA07vOI-eU{2REq-aVLOx@tm{X)MAe9I( z@0|_0u&JO?{=~JzL?@q$p=pN^&43`=4ByF#!=Tvxuj|s>&yXf25c;@Rd<7&+vV$Un za$Qf?a(sp5VkBtMp%rk0L_+hknE$3TLl#a_j>To19CO^5DMu+w_(YdZX!xa!>XIEs zx8>L^>PZO@EU;V*iGVT_R)i@lXj8((iv;K^4VMTaXC@fLI z%o--JNuPi|i5by-3Ory7f)yy-njk1jnnCDBU2XF_C$=Nsqa05$j2J(~SI|)>hAbuY zRzS}rKFNEU&Wngdj3(bu(D?~?DGGtEkRHHEGw5^5c^W574-)p84iUkn1S{YXJ_kIO zRMKEjN6yo9pv%mM!rT!YP$edQ6jM6X#_U&AuEM;XgI2?ra$s!}1{~Kq9d&&s|HswAUK@vF)W15+|4yRqz^_UsF z`BM_}6XBO2gujb_s3Ve?84e7JoF~EUZKf|1EivVrHMvg!H@M0~Ff=9PJn4z)l?Icp zH?ApIE@h!P4hO^V21kZe%L!SwD09N}Va_BTAZtWn)2)=4u1=QMw5DLkmFR&m7z;`t z#O8O)7X1I*jNmD39~S(Rx_t|Hy93 zW2m_%BjXL1hN|E0lTqzdg82puBrxYaZIDnVMZ-_G8>2HKA12}|OuT2PWu8rj2 zOzWom$Et}*p7fSbr7npl zK@Kbiw1Xl-!~?y~iQAc>$>e%dOf+R!GWUs^F!fR?sz7Q?v)ue{8D&iH%JGGK*hPi3ZoL;oe2E{Zp> z7!R6rLXa7O{1rx^|Ce<&#=aVGAE;6Ox48jkgrXl4aA|#O#B;b`XqpW2P!WhcmN4yL z*i}a9qgsvlf7#pzk1;;1fedU|lfaybq#!DM!G(zd-24eqmW8frh{>;XYmren*m?S# zKq^czP9*0^Myiq|2~LQRc&r|Hl_E38mvOErLe7&egnoUu_=w!XXe7-(QoYHe4m8l=)&~#Z#g*^7>^8HnK8Wl2AjZB!g5n2C{e@C<5h_7q+#?#(|fuG zGvUSeVwik^4rjOdvn|;c9b!zk*(eEQh-FG&$z?)L5u!4cWJV1$)1C?0OfF%lFOS3_32Dq*&Kg+X^d#S?!aZm-^!=9%BW9RLV!{@qTg2#3Q4h6g z)F28531nb5mCYQqBTxXK(ii}-v8P=OMgy7$;$g&xAgOWXImjtV4b>{pC{@%@DQ1gG zNMrZD7z>XWQ$gGO4F#%B6dH+%52T393naIMKMcSY&^KYw^Nn6$t*{=gJwUpYD(5F0cV?T3pk1Mp^9vw zGw?K-TEKwBoQg7JKhcB= z+zfarSd*f5MePsir9J{U$u|saer*s;7>1y?Otk}|N`;mHuZd=ADyu+cl!Ee}rWHGd zF35M@A#jb@FN9B8e#m-Yl1B_6%X=EB5_LYR361@UG-om*6VcNcBnU!Ck7~}-kaS{t z-5G4ke!&IE7sW(3lEyTlc9!4g6H;NNbd7q!+!J(5(Y}VR3bkif%;7cib`E!)LCy^0 zWJnTv$=Xol;Mg*y6Ad>4fYzLylhs8`Yz7;I+XY3M8Uq@Ou%}S443d03r%J%|?*OhM zU;y701G`nM&6FVQgiM_k(lcexoVAf^B1nck(KRN9`+>zU2nIXBxMze7=qV>ZpwAw* zK7b7cG-j?fVrIfVk{!X9V;CD1*v+ra#-LA&83#1)iM|jllNblUTvRGaVysVIUkLd# zMQPrf8We*d;ZOtgLCacb>RXefBHLI)(%1Vr;x z&V7S2F&PlBErp1^ah#i|DM73TTfo9m>BxC+1B8!ZRsa}+L751=jsfR%v{2ioyC3b% zIrE6pCLUW>3LR>r{VLl7!+gHPWc5kAh0Dco(&v9{Wk}v zq%E5o5cRAC(j)wHF>EBlva2*9tMHj3Dax@96ugM#1!^Z$EBjrw~j)H5F@8C#(*;T1>OXA zDEf1Ao@SgOWL;Jauqd#S8Y|l%%T$G!mxp)FtBA!k5yI2Qu7&6&fDnFxayl#ur*Pm=Ub2xJR!(~C#6CI*BA-=IdR00_YhoXhl>NbCBv`*2pgWD4wqOjK3dE_>2Xq~(KlIB0&8K;?1_wT(KMeO75&B@Fgdd}% ziTEQ1G`+$*%-Ok^#ZGgESPau>2%J*7}03u$T`(v@s$lYY&yTG#|a(dAqpz+N(da7Q<;}B}+^Wu-domhL11Wf6M9h{KuYJk2-1aZ0Hu zaSJ9HjijRWol*w2oF+l2;yI^Axe}+xj6WknznNu0&_hG z-ZSnSk~w4GgfAgg0CC4VLmtoTo~PK3*%#A)Oc@^#!4~4HFUTz5YBPsa1VnkKMyQ0{ zWG0&!;7IWnR9}Wom@t4NgqtSF9lyJ=?&2$UH+)lW_x!KaZT!jKegF5S@8=!pmBeo+ zZ2C5H{-x>r(38=8mv24acHZrkL+4ji?D$KK=M0+g+GocfQ@8UYyLUe8jF~Im`)B8e zXGRCkZu_Qx!Mw-T_POGg$1Zy4@Pn?MFtgLZiT&S`YX-kMu|AdF}hJ);Fvlx$e^^KE3s>11{Wu&^LoSjqUyO zN5B61%MX|BQnBdmt!^DNZF-05!Sk-Qw>;{RVb_f7(Xzw!$rgwAUGe#8GcG-5!i4>= z{MTFO#EU0Py=mCwwO{YLih5a&$)g0X)jOt;2-C8|KY%1_a8Lw(_^cDxog28 zPyW5K%f)A$b=~&MFKqMf+dXP7*>%kUyPfpVo6VkW*zxrhn$@}OTRUDmXle7BTl+Sf zv-SN8o#E@oxx=pBy8kyz*ABX)!{lo&Eo^uE!3*x%{>~W#S9aZM&g|+BVt1c2AKIzU zw1caPSMR;WzLTz~TlQv)VO!m|f6Wb(PI#-;(9&36JI`1!aT|2%x`Lvq0?Ym!8)j6uW zW8@x>59-_J(tA7Hd2O$|uARMSpSEM{S^KSAz2|OY9=z(h&X2vYrux;bYC1Q2ZBF%* zYvx@4`SllQhpgVK(z~FYKePUuuF1K|c{TOhjz8ccbH+(`9<%4tXV)CodthPas_N1H z>vNXP`((tfyIlI}Dol=%%I7G^_p6Lf0<0jy3nNubAKM{Yf|c@Ot0yh%>^0GrG@dec^T5v>_Mo zaQk)JZu|Ww&o-?6%k_OftbXp^Zx;0bcxaEA?zw&UoYhr7vCYIO-j$!;GWw3A4;kpR z?mR1=b@|%!cmMkP!+Ldk{-V`iP4D{Tnt>mV-b)?7FjNkobM#sFwX8p9fqeGIH=f)k zX+O8>73tPn9zFbuV+LRIcK`PKeZKwI=WTcTan;4Wdsp84=H4Ifcgf8QAAV@&lYJM= z?LF=7SLSy-(K2^@=CxLfey&#Yq#l{PN~48(u!T&3)U{ z9o=*Jp4FqSYO_nffmg<9&1tuefBun$%|F@wi{ZN-_3k9=sZ$PK*D(9g{Xdwrs`{E; zy1Y_(bjP9ZoHAkUNi$NfWncTU>37xacg}GCptIJ!y2D%j2As3q4Nt7;x6|CWU%74h z$xFv6AAR4h{}to^`D))^qM3shFW$fHlqo;Gd|J(vexoL=J;vK3ynM$~-D8K<&6Z#wGe=_8#UXO0;7)S4r|`M&zOMRh&y zxOrj6F3m=Kyx{l|=X`T*$Kd;q&b_n$+ts@qv-89I?bvGCk}Y0$-#F`U6BPAthYwzL z?ag!KC%c@pq`F)G+g4t?%L_B_sl2jP_fxMvZqcJ&`oQ8Ip)&W^r{`Whw%u{xZr|+F z`?p(k-q7jS?Q_WIZ~kmA-?!c4@7I5Q+EL+iH?J5sv+JjYTl}^iUYS$bx9f)$#@DC3 zGV9HA*L?qE^{DWs8J(w1-f2~z$)A7n%0r*scW(PGhrZciueQsFK6hJv<>*VAwHjA3 z^RU|&-yA;IZ{@q)?)zeDW%Y5}ZxNkS+4-CGqi%S*_Vvqmn|u7e_5p{r9dqafJ{-1Zg(|UJBspkWi&s^Pkrx|D8d&DK%o&DoqMh&{6?J1AVy>LkD zHb;H_{5xs8N@4D$Djx`2%cyi}+4!iUC^UYUU4mIokwO7BrSC45{v+VA9)w6DV zv10bL0d20V?$+Xh3l7}&-FvR6xNgztUN_v^?e)1&Ui#UVy#$%{=jt&F+P_q>bawTwOOCDjVBa@-x4828icZU#z1Fkh5r4vMk9TUj^uvl{ z()KeC>9g%QbJrg8g)iNH=I&Kzd{OoA!irZeFAnc<)=dklroT7i!ZYfuW*5|TeBSDP z$!`@E!D1gr1Ii} zA8Ba#y2W>&{`1;FJ5@v_HX^%=kZIPSukn*CAZC8 zI&boY=YQR*bL$Qb!^05^SA0`id)42XAM{dbm-QWwczyN6c9;M2-_LY;bn%*NjAgf; zIk^4D>mIqP_U(7nZ`br|_xc0Vq9yBEzxUJGqbDuC%6a1D4#yXdnAmB|lBc_TSzUM5 zkr!6KS+`sK?d?lucj|k_B=3N&e)@9mwB*Ud=6vV8{b;iNRqKY1{9#FpwQ=jOW{h9e zW9!0$@64}Wf5z~)u3G!UITyUUN3Rwi-9Nt2YR)!`_gZ{MagQ;}9{J^$YU7Msx*pYU z{|4Rc-uaR)HMgC6<4XrV`%SNp7F{=Y>CSKc{gBW8`D&HpoOtU_D?VHc^=6Elk z^1vR`hCSWkx?!D>zm~h!U$=)B{e!&M({fUQl`^%i~Cfu>*-Gg3Vf9^+% zraw}>;G#1Z4r;gf#{t!6fAPt`mnrxB+G6KxiftAj>%Q^xuWnm+uiMRcepz_Wy!ifq z9kJU9umLv+jRq#VrlpYCc(W{Uvryb+7xU&#-?PdDGmV zYOd^m@(UxXPJ3-=-QntKSKW8$8@|f{M;vy0Y0T1P zv#&d-dw6-b^QP9n_;|%9@~^KY#+RLEtWLT#duHleKfgJD(Ol!wbq(+IJnrn1FSqY| z=D?XPPB^#Ap;E8=&#U_KwA1!?Z#>ZT_UZL<&($ldPkR5v+p9ms8h$`j5&zCbhl(%^&67XI(w$tCP>3vF8t6R!aRk zy}r%!wQsa~?w22jPWsgx+`INgH+;EpzCSQNcb`{ZntbzJuf5>hcGCQZ&MzK3^^7OS z+;G!TRkx4Za#eiqIZqulZX0XGGkaZI^}_CbCXbffX^T%D{93xc+G^hAi@w%jXTLK~ zdFr{{FKc`5s*2{X>^(bLvue?9lZyR6Y`JXy!5^M^)$odgrj2U-%ZG;V_dfrx&%LzW*}+@y@7l2aE?@2auaAy>?X|7WES+$o zR}3co>y|->Jz%&eQKY6m?1_zr^(`|FY&ZmaIM3XWjyLtC7s9&&59o38J;x`*Zys^5iC3WkY_I#wqNHL@2?pCajSLnAAjNc=a;VoYyzQ7fmKfobuX`PNXW_AU_`i*1tAChejJri` z_uxg%dyPM^*OK*ZuYB{Wwdc%TcID{Xr+l;jZGEdBtzYw5$KLlIwaZ*@(jv2yTTs4i zSY?cp4Z_b~@-z30k z^T*#g@}pVTwJcdJA2_A$xmTaIyUEwxd-&y-cAZu|s>A$Qx0#b$yxi{C7p^;G=VkZZ-}LHgs z|9bsLb1xit(^qx%?|s|+!q-lBFJ5{73VWXS_ve&b?|7|qw`aFI?CCcyuBtJsFMa!l zdyaf~Sl?ZjefIF8*}bO@Xx{eHdyXCQ+_cBW6&{)TN_{lvjWv%sFB%v388`caZf_s3 z^FHI3?f&_G$E4N$K04va54+wr@;tBRL2XsK<;^eMThMF#PTu*W{yL&6YJ1+Ucg}qL z{)$uTx9T(Z!pFPl13p^Uym#jhe!cG8o=Yx#Y(`DXQ}1lUOC)yHCZhk6ze$$5$V@{`g~0Q0|y`*C$;by6=I*er>k;v8xCE^N1flp0Ml5pG^)P z|NI8~>u>h2+1)>N%a`LmJ$GMjp7q@1fd|Yz$ey;~`q#d>D>(6_&Oh>1_TLY){hMyu zujb^HN6$}tZLLq2t~z-@!%ce{ACFmd>jUb6mmGJ%)2~fg^W*jd`ma0nolmBiy^n4G bQ>*p=Q2u)4GsCa0;GY`5zjwPkbn5>BcXiCB diff --git a/example/assets/imagens/email.png b/example/assets/imagens/email.png deleted file mode 100644 index c9f379f9252c50c1586ccc057c51894d559812c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35417 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 X=SlmW_vR@r_)q_EP%zK??b-haVJ7ug diff --git a/example/assets/imagens/ic_launcher.png b/example/assets/imagens/ic_launcher.png deleted file mode 100644 index 2faeb6ee86b763d86298dd6edec83a6a54406b92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30435 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