diff --git a/.gitignore b/.gitignore index 6f88aa4..b263275 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,6 @@ **/*.g.dart **/*.gr.dart **/*.freezed.dart -**/*.pb.dart -**/*.pbenum.dart -**/*.pbgrpc.dart -**/*.pbjson.dart -**/gen/ .vscode/ diff --git a/.metadata b/.metadata index ddd7794..3f9327e 100644 --- a/.metadata +++ b/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled. version: - revision: 135454af32477f815a7525073027a3ff9eff1bfd + revision: d3d8effc686d73e0114d71abdcccef63fa1f25d2 channel: stable project_type: app @@ -13,14 +13,11 @@ project_type: app migration: platforms: - platform: root - create_revision: 135454af32477f815a7525073027a3ff9eff1bfd - base_revision: 135454af32477f815a7525073027a3ff9eff1bfd - - platform: android - create_revision: 135454af32477f815a7525073027a3ff9eff1bfd - base_revision: 135454af32477f815a7525073027a3ff9eff1bfd + create_revision: d3d8effc686d73e0114d71abdcccef63fa1f25d2 + base_revision: d3d8effc686d73e0114d71abdcccef63fa1f25d2 - platform: ios - create_revision: 135454af32477f815a7525073027a3ff9eff1bfd - base_revision: 135454af32477f815a7525073027a3ff9eff1bfd + create_revision: d3d8effc686d73e0114d71abdcccef63fa1f25d2 + base_revision: d3d8effc686d73e0114d71abdcccef63fa1f25d2 # User provided section diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig index 592ceee..ec97fc6 100644 --- a/ios/Flutter/Debug.xcconfig +++ b/ios/Flutter/Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig index 592ceee..c4855bf 100644 --- a/ios/Flutter/Release.xcconfig +++ b/ios/Flutter/Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 0000000..fdcc671 --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,44 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '11.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__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 0000000..0f52be8 --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,23 @@ +PODS: + - Flutter (1.0.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + +DEPENDENCIES: + - Flutter (from `Flutter`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + +EXTERNAL SOURCES: + Flutter: + :path: Flutter + path_provider_foundation: + :path: ".symlinks/plugins/path_provider_foundation/darwin" + +SPEC CHECKSUMS: + Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 + path_provider_foundation: eaf5b3e458fc0e5fbb9940fb09980e853fe058b8 + +PODFILE CHECKSUM: 70d9d25280d0dd177a5f637cdb0f0b0b12c6a189 + +COCOAPODS: 1.11.3 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index f58dea2..3384aa5 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -8,13 +8,26 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 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 */; }; + 9A55328F2A619C2AE02F0992 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 133090672066DBC4EE44F094 /* Pods_Runner.framework */; }; + 9E53C56BF02ED27082FEE096 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BF7C9413C20A933F57CFF20 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -29,9 +42,17 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 133090672066DBC4EE44F094 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 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 = ""; }; + 18BB303A170F07C1C8E84881 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 1BF7C9413C20A933F57CFF20 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 36882341CDCDA04C85CE83DF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 44BBE519B7F14EC576D7B83B /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 4A552DC1066B1990B268B7AC /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; 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 = ""; }; @@ -42,6 +63,8 @@ 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 = ""; }; + A217006FD70F89590E906B06 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + F8F760CD5358E82C1803F2E5 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -49,12 +72,29 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 9A55328F2A619C2AE02F0992 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9DE218DEF1724912C2459389 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9E53C56BF02ED27082FEE096 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -72,6 +112,9 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + A5F27AED4AA516DB2BDCE67C /* Pods */, + DF13037DC33160F5198CCA43 /* Frameworks */, ); sourceTree = ""; }; @@ -79,6 +122,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -98,19 +142,63 @@ path = Runner; sourceTree = ""; }; + A5F27AED4AA516DB2BDCE67C /* Pods */ = { + isa = PBXGroup; + children = ( + F8F760CD5358E82C1803F2E5 /* Pods-Runner.debug.xcconfig */, + A217006FD70F89590E906B06 /* Pods-Runner.release.xcconfig */, + 18BB303A170F07C1C8E84881 /* Pods-Runner.profile.xcconfig */, + 44BBE519B7F14EC576D7B83B /* Pods-RunnerTests.debug.xcconfig */, + 36882341CDCDA04C85CE83DF /* Pods-RunnerTests.release.xcconfig */, + 4A552DC1066B1990B268B7AC /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + DF13037DC33160F5198CCA43 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 133090672066DBC4EE44F094 /* Pods_Runner.framework */, + 1BF7C9413C20A933F57CFF20 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + AD2B6F8FF97B26D0B57C50A6 /* [CP] Check Pods Manifest.lock */, + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + 9DE218DEF1724912C2459389 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + A7B13D7FACDCB6BCE57DE976 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 3A89D934B810D1527AB33EC7 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -130,6 +218,10 @@ LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -150,11 +242,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -169,6 +269,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 3A89D934B810D1527AB33EC7 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -200,9 +317,61 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + A7B13D7FACDCB6BCE57DE976 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + 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; + }; + AD2B6F8FF97B26D0B57C50A6 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-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; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -214,6 +383,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -298,7 +475,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.road.runner.roadRunner; + PRODUCT_BUNDLE_IDENTIFIER = com.road.client; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -306,6 +483,56 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 44BBE519B7F14EC576D7B83B /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.road.client.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 36882341CDCDA04C85CE83DF /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.road.client.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4A552DC1066B1990B268B7AC /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.road.client.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -427,7 +654,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.road.runner.roadRunner; + PRODUCT_BUNDLE_IDENTIFIER = com.road.client; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -450,7 +677,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.road.runner.roadRunner; + PRODUCT_BUNDLE_IDENTIFIER = com.road.client; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -461,6 +688,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index c87d15a..e42adcb 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -37,6 +37,17 @@ + + + + + + diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png index 178f02a..dc9ada4 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 3311b80..7353c41 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index d936780..797d452 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f352b7c..6ed2d93 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 7ba8b6c..4cd7b00 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index 012185d..fe73094 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index 7b75919..321773c 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index d936780..797d452 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index 52233b4..502f463 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index 29d1c22..0ec3034 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png deleted file mode 100644 index f8c2951..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png deleted file mode 100644 index 133f02d..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png deleted file mode 100644 index 45d37ad..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png deleted file mode 100644 index f8cc2a1..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 29d1c22..0ec3034 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 0c537d8..e9f5fea 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png deleted file mode 100644 index 8aea135..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png deleted file mode 100644 index b574e6f..0000000 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png and /dev/null differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index d900047..84ac32a 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 8086e2a..8953cba 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 0aacba7..0467bf1 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index cbb7436..e683051 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -5,7 +5,7 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName - Road Runner + Client CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -13,7 +13,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - road_runner + client CFBundlePackageType APPL CFBundleShortVersionString @@ -31,6 +31,8 @@ UISupportedInterfaceOrientations UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad diff --git a/ios/RunnerTests/RunnerTests.swift b/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..86a7c3b --- /dev/null +++ b/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/lib/application/auth/sign_in_form_bloc/sign_in_form_bloc.dart b/lib/application/auth/sign_in_form_bloc/sign_in_form_bloc.dart new file mode 100644 index 0000000..be8d1f9 --- /dev/null +++ b/lib/application/auth/sign_in_form_bloc/sign_in_form_bloc.dart @@ -0,0 +1,176 @@ +import 'package:bloc/bloc.dart'; +import 'package:flutter/foundation.dart'; +import 'package:fpdart/fpdart.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:users_repository/users_repository.dart'; + +import '../../../domain/auth/auth_failure.dart'; +import '../../../domain/auth/value_objects.dart'; +import '../../../domain/cache/access_token.dart'; +import '../../../domain/cache/cache_repository_i.dart'; +import '../../../domain/cache/refresh_token.dart'; +import '../../../domain/core/extensions.dart'; + +part 'sign_in_form_bloc.freezed.dart'; +part 'sign_in_form_event.dart'; +part 'sign_in_form_state.dart'; + +class SignInFormBloc extends Bloc { + SignInFormBloc(this._usersRepository, this._cacheRepository) + : super(SignInFormState.initial()) { + on((event, emit) { + emit(state.copyWith( + emailAddress: EmailAddress(event.email), + )); + }); + + on((event, emit) { + emit(state.copyWith( + password: Password(event.password), + )); + }); + + on((event, emit) { + emit(state.copyWith( + username: Username(event.username), + )); + }); + + on((event, emit) async { + emit(state.copyWith( + isSubmitting: true, + authResult: none(), + )); + + final isUsernameValid = state.username.isValid(); + final isPasswordValid = state.password.isValid(); + + if (!isUsernameValid || !isPasswordValid) { + emit(state.copyWith( + authResult: some(left(const AuthFailure.invalidEmailOrPassword())), + isSubmitting: false, + showValidatorMessages: true, + )); + return; + } + + final result = await _loginAndSaveUser( + state.username.getOrCrash(), + state.password.getOrCrash(), + ); + + emit(state.copyWith( + authResult: some(result), + isSubmitting: false, + )); + }); + + on((event, emit) async { + emit(state.copyWith( + authResult: none(), + isSubmitting: true, + )); + + final isEmailValid = state.emailAddress.isValid(); + final isPasswordValid = state.password.isValid(); + final isUsernameValid = state.username.isValid(); + + if (!isUsernameValid || !isPasswordValid || !isEmailValid) { + emit(state.copyWith( + authResult: some(left(const AuthFailure.invalidRegistrationInput())), + isSubmitting: false, + showValidatorMessages: true, + )); + return; + } + + final result = await _usersRepository.createUser( + email: state.emailAddress.getOrCrash(), + password: state.password.getOrCrash(), + username: state.username.getOrCrash(), + ); + + emit(state.copyWith( + isSubmitting: false, + )); + + if (result.isLeft()) { + emit(state.copyWith( + authResult: some(left(const AuthFailure.serverError())), + )); + return; + } + + final response = result.forceRight(); + + if (response.status != Status.SUCCESS) { + emit(state.copyWith( + authResult: some(left(const AuthFailure.invalidEmailOrPassword())), + )); + return; + } + + // login user + + emit(state.copyWith( + authResult: some(right(unit)), + )); + }); + } + + final UsersRepositoryI _usersRepository; + final CacheRepositoryI _cacheRepository; + + Future> _loginAndSaveUser( + String username, String password) async { + final result = await _usersRepository.loginUser( + username: username, + password: password, + ); + + if (result.isLeft()) { + return left(const AuthFailure.serverError()); + } + + final response = result.forceRight(); + + if (response.status != Status.SUCCESS) { + return left(const AuthFailure.invalidEmailOrPassword()); + } + + await _cacheRepository.saveTokens( + accessToken: AccessToken(token: response.jwtToken), + refreshToken: RefreshToken(token: response.refreshToken), + ); + + await _cacheRepository.saveUserFromDTO(response.userDTO); + + return right(unit); + } + + @override + void onTransition(Transition transition) { + super.onTransition(transition); + debugPrint(transition.toString()); + } + + @override + void onChange(Change change) { + super.onChange(change); + debugPrint(change.toString()); + debugPrint(change.currentState.toString()); + debugPrint(change.nextState.toString()); + } + + @override + void onError(Object error, StackTrace stackTrace) { + super.onError(error, stackTrace); + debugPrint(error.toString()); + } + + @override + void onEvent(SignInFormEvent event) { + super.onEvent(event); + debugPrint(event.toString()); + } +} diff --git a/lib/application/auth/sign_in_form_bloc/sign_in_form_event.dart b/lib/application/auth/sign_in_form_bloc/sign_in_form_event.dart new file mode 100644 index 0000000..3980e46 --- /dev/null +++ b/lib/application/auth/sign_in_form_bloc/sign_in_form_event.dart @@ -0,0 +1,17 @@ +part of 'sign_in_form_bloc.dart'; + +@freezed +class SignInFormEvent with _$SignInFormEvent { + const factory SignInFormEvent.emailChanged(String email) = EmailChanged; + + const factory SignInFormEvent.passwordChanged(String password) = + PasswordChanged; + + const factory SignInFormEvent.usernameChanged(String username) = + UsernameChanged; + + const factory SignInFormEvent.signInWithEmailAndPasswordPressed() = + SignInWithEmailAndPasswordPressed; + + const factory SignInFormEvent.signUpPressed() = SignUpPressed; +} diff --git a/lib/application/auth/sign_in_form_bloc/sign_in_form_state.dart b/lib/application/auth/sign_in_form_bloc/sign_in_form_state.dart new file mode 100644 index 0000000..6d89ee2 --- /dev/null +++ b/lib/application/auth/sign_in_form_bloc/sign_in_form_state.dart @@ -0,0 +1,22 @@ +part of 'sign_in_form_bloc.dart'; + +@freezed +class SignInFormState with _$SignInFormState { + factory SignInFormState({ + required EmailAddress emailAddress, + required Password password, + required Username username, + required bool showValidatorMessages, + required bool isSubmitting, + required Option> authResult, + }) = _SignInFormState; + + factory SignInFormState.initial() => SignInFormState( + emailAddress: EmailAddress(''), + password: Password(''), + username: Username(''), + isSubmitting: false, + showValidatorMessages: false, + authResult: none(), + ); +} diff --git a/lib/application/auth/user_bloc/user_bloc.dart b/lib/application/auth/user_bloc/user_bloc.dart new file mode 100644 index 0000000..4c607fb --- /dev/null +++ b/lib/application/auth/user_bloc/user_bloc.dart @@ -0,0 +1,63 @@ +import 'package:bloc/bloc.dart'; +import 'package:fpdart/fpdart.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; + +import '../../../domain/auth/user.dart'; +import '../../../domain/core/extensions.dart'; +import '../../../infrastructure/cache_repository.dart'; + +part 'user_bloc.freezed.dart'; +part 'user_event.dart'; +part 'user_state.dart'; + +class UserBloc extends Bloc { + UserBloc(this._cacheRepository) : super(UserState.initial()) { + on((event, emit) async { + emit(state.copyWith( + isCheckingAuthStatus: some(true), + )); + + // check token in cache? mock for now + final accessToken = await _cacheRepository.retrieveAccessToken(); + + if (accessToken.isNone()) { + emit(state.copyWith( + isCheckingAuthStatus: some(false), + )); + return; + } + + final user = await _cacheRepository.retrieveUser(); + + if (user.isNone()) { + emit(state.copyWith( + isCheckingAuthStatus: some(false), + user: none(), + )); + return; + } + + final _user = user.forceSome(); + + emit(state.copyWith( + isCheckingAuthStatus: some(false), + user: some(_user), + )); + }); + + on((event, emit) { + emit(state.copyWith( + user: some(event.user), + )); + }); + + on((event, emit) { + // TODO remove token from cache + emit(state.copyWith( + user: none(), + )); + }); + } + + final CacheRepository _cacheRepository; +} diff --git a/lib/application/auth/user_bloc/user_event.dart b/lib/application/auth/user_bloc/user_event.dart new file mode 100644 index 0000000..48806bd --- /dev/null +++ b/lib/application/auth/user_bloc/user_event.dart @@ -0,0 +1,10 @@ +part of 'user_bloc.dart'; + +@freezed +class UserEvent with _$UserEvent { + const factory UserEvent.authCheckRequested() = AuthCheckRequested; + + const factory UserEvent.signedOut() = SignedOut; + + const factory UserEvent.loggedIn(User user) = LoggedIn; +} diff --git a/lib/application/auth/user_bloc/user_state.dart b/lib/application/auth/user_bloc/user_state.dart new file mode 100644 index 0000000..4f04522 --- /dev/null +++ b/lib/application/auth/user_bloc/user_state.dart @@ -0,0 +1,14 @@ +part of 'user_bloc.dart'; + +@freezed +class UserState with _$UserState { + factory UserState({ + required Option user, + required Option isCheckingAuthStatus, + }) = _UserState; + + factory UserState.initial() => UserState( + user: none(), + isCheckingAuthStatus: none(), + ); +} diff --git a/lib/domain/auth/auth_failure.dart b/lib/domain/auth/auth_failure.dart new file mode 100644 index 0000000..78802d6 --- /dev/null +++ b/lib/domain/auth/auth_failure.dart @@ -0,0 +1,31 @@ +import 'package:flutter/cupertino.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; + +import '../../utils/extensions.dart'; + +part 'auth_failure.freezed.dart'; + +@freezed +sealed class AuthFailure with _$AuthFailure { + const factory AuthFailure.cancelledByUser() = CancelledByUser; + + const factory AuthFailure.serverError() = ServerError; + + const factory AuthFailure.emailAlreadyInUse() = EmailAlreadyInUse; + + const factory AuthFailure.invalidEmailOrPassword() = InvalidEmailOrPassword; + + const factory AuthFailure.invalidRegistrationInput() = InvalidEmail; +} + +extension AuthFailureX on AuthFailure { + String message(BuildContext context) { + return when( + cancelledByUser: () => context.l10n.authCancelledByUser, + serverError: () => context.l10n.authServerError, + emailAlreadyInUse: () => context.l10n.authEmailAlreadyInUse, + invalidEmailOrPassword: () => context.l10n.authInvalidEmailOrPassword, + invalidRegistrationInput: () => context.l10n.authInvalidRegistrationInput, + ); + } +} diff --git a/lib/domain/auth/user.dart b/lib/domain/auth/user.dart new file mode 100644 index 0000000..37188f6 --- /dev/null +++ b/lib/domain/auth/user.dart @@ -0,0 +1,30 @@ +import 'package:hive/hive.dart'; +import 'package:users_repository/users_repository.dart'; + +part 'user.g.dart'; + +@HiveType(typeId: 3) +class User { + User({ + required this.id, + required this.username, + required this.email, + }); + + factory User.fromDTO(UserDTO userDTO) { + return User( + id: userDTO.id, + username: userDTO.username, + email: userDTO.email, + ); + } + + @HiveField(0) + final String id; + + @HiveField(1) + final String username; + + @HiveField(2) + final String email; +} diff --git a/lib/domain/auth/value_objects.dart b/lib/domain/auth/value_objects.dart new file mode 100644 index 0000000..936669c --- /dev/null +++ b/lib/domain/auth/value_objects.dart @@ -0,0 +1,43 @@ +import 'package:fpdart/fpdart.dart'; + +import '../core/value_failure.dart'; +import '../core/value_objects.dart'; +import '../core/value_validators.dart'; + +class EmailAddress extends ValueObject { + factory EmailAddress(String input) { + return EmailAddress._( + validateEmailAddress(input), + ); + } + + const EmailAddress._(this.value); + @override + final Either, String> value; +} + +class Password extends ValueObject { + factory Password(String input) { + return Password._( + validatePassword(input), + ); + } + + const Password._(this.value); + + @override + final Either, String> value; +} + +class Username extends ValueObject { + factory Username(String input) { + return Username._( + validateUsername(input), + ); + } + + const Username._(this.value); + + @override + final Either, String> value; +} diff --git a/lib/domain/cache/access_token.dart b/lib/domain/cache/access_token.dart new file mode 100644 index 0000000..62fe3c1 --- /dev/null +++ b/lib/domain/cache/access_token.dart @@ -0,0 +1,11 @@ +import 'package:hive/hive.dart'; + +part 'access_token.g.dart'; + +@HiveType(typeId: 0) +class AccessToken { + AccessToken({required this.token}); + + @HiveField(0) + final String token; +} diff --git a/lib/domain/cache/cache_repository_i.dart b/lib/domain/cache/cache_repository_i.dart new file mode 100644 index 0000000..1250ad9 --- /dev/null +++ b/lib/domain/cache/cache_repository_i.dart @@ -0,0 +1,29 @@ +import 'package:fpdart/fpdart.dart'; +import 'package:users_repository/users_repository.dart'; + +import '../auth/user.dart'; +import 'access_token.dart'; +import 'refresh_token.dart'; + +abstract class CacheRepositoryI { + Future saveAccessToken(AccessToken token); + + Future saveRefreshToken(RefreshToken token); + + Future saveTokens({ + required AccessToken accessToken, + required RefreshToken refreshToken, + }); + + Future> retrieveAccessToken(); + + Future> retrieveRefreshToken(); + + Future saveUserFromDTO(UserDTO userDTO); + + Future> retrieveUser(); + + Future deleteToken(String key); + + void initAdapters(); +} diff --git a/lib/domain/cache/refresh_token.dart b/lib/domain/cache/refresh_token.dart new file mode 100644 index 0000000..01d24fe --- /dev/null +++ b/lib/domain/cache/refresh_token.dart @@ -0,0 +1,11 @@ +import 'package:hive/hive.dart'; + +part 'refresh_token.g.dart'; + +@HiveType(typeId: 1) +class RefreshToken { + RefreshToken({required this.token}); + + @HiveField(0) + final String token; +} diff --git a/lib/domain/core/errors.dart b/lib/domain/core/errors.dart new file mode 100644 index 0000000..d362be0 --- /dev/null +++ b/lib/domain/core/errors.dart @@ -0,0 +1,16 @@ +import 'value_failure.dart'; + +class UnAuthenticatedError extends Error {} + +class UnexpectedValueError extends Error { + UnexpectedValueError(this.valueFailure); + + final ValueFailure valueFailure; + + @override + String toString() { + const explanation = 'Encountered a ValueFailure at an unrecoverable point.'; + + return Error.safeToString('$explanation Failure was: $valueFailure'); + } +} diff --git a/lib/domain/core/extensions.dart b/lib/domain/core/extensions.dart new file mode 100644 index 0000000..02affe3 --- /dev/null +++ b/lib/domain/core/extensions.dart @@ -0,0 +1,19 @@ +import 'package:fpdart/fpdart.dart'; + +extension ForceLeft on Either { + L forceLeft() { + return fold((l) => l, (r) => throw AssertionError()); + } +} + +extension ForceRight on Either { + R forceRight() { + return fold((l) => throw AssertionError(), (r) => r); + } +} + +extension ForceSome on Option { + T forceSome() { + return fold(() => throw AssertionError(), (t) => t); + } +} diff --git a/lib/domain/core/value_failure.dart b/lib/domain/core/value_failure.dart new file mode 100644 index 0000000..83751af --- /dev/null +++ b/lib/domain/core/value_failure.dart @@ -0,0 +1,21 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; +part 'value_failure.freezed.dart'; + +@freezed +class ValueFailure with _$ValueFailure { + const factory ValueFailure.empty({ + required T failedValue, + }) = Empty; + + const factory ValueFailure.invalidEmail({ + required T failedValue, + }) = InvalidEmail; + + const factory ValueFailure.invalidPassword({ + required T failedValue, + }) = InvalidPassword; + + const factory ValueFailure.invalidUsername({ + required T failedValue, + }) = InvalidUsername; +} diff --git a/lib/domain/core/value_objects.dart b/lib/domain/core/value_objects.dart new file mode 100644 index 0000000..4b193e6 --- /dev/null +++ b/lib/domain/core/value_objects.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; +import 'package:fpdart/fpdart.dart'; +import 'errors.dart'; +import 'value_failure.dart'; + +@immutable +abstract class ValueObject { + const ValueObject(); + Either, T> get value; + + T getOrCrash() { + return value.fold( + (l) => throw UnexpectedValueError(l), + id, + ); + } + + bool isValid() => value.isRight(); + + @override + bool operator ==(covariant ValueObject other) { + if (identical(this, other)) { + return true; + } + + return other.value == value; + } + + @override + int get hashCode => value.hashCode; + + @override + String toString() => 'ValueObject(value: $value)'; +} diff --git a/lib/domain/core/value_validators.dart b/lib/domain/core/value_validators.dart new file mode 100644 index 0000000..1937320 --- /dev/null +++ b/lib/domain/core/value_validators.dart @@ -0,0 +1,39 @@ +import 'package:fpdart/fpdart.dart'; +import 'value_failure.dart'; + +Either, String> validateStringNotEmpty(String input) { + if (input.isNotEmpty) { + return right(input); + } else { + return left(ValueFailure.empty(failedValue: input)); + } +} + +Either, String> validateEmailAddress(String input) { + final valid = input.length > 3 && input.contains('@'); + + if (valid) { + return right(input); + } else { + return left(ValueFailure.invalidEmail(failedValue: input)); + } +} + +Either, String> validatePassword(String input) { + final regex = + RegExp(r'^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\W)(?!.* ).{8,16}$'); + + if (regex.hasMatch(input)) { + return right(input); + } else { + return left(ValueFailure.invalidPassword(failedValue: input)); + } +} + +Either, String> validateUsername(String input) { + if (input.length >= 6 && input.length < 20) { + return right(input); + } else { + return left(ValueFailure.invalidUsername(failedValue: input)); + } +} diff --git a/lib/gen/assets.gen.dart b/lib/gen/assets.gen.dart new file mode 100644 index 0000000..e43c986 --- /dev/null +++ b/lib/gen/assets.gen.dart @@ -0,0 +1,114 @@ +/// GENERATED CODE - DO NOT MODIFY BY HAND +/// ***************************************************** +/// FlutterGen +/// ***************************************************** + +// coverage:ignore-file +// ignore_for_file: type=lint +// ignore_for_file: directives_ordering,unnecessary_import,implicit_dynamic_list_literal,deprecated_member_use + +import 'package:flutter/widgets.dart'; + +class $AssetsImagesGen { + const $AssetsImagesGen(); + + /// File path: assets/images/app_icon.png + AssetGenImage get appIcon => + const AssetGenImage('assets/images/app_icon.png'); + + /// File path: assets/images/app_logo.png + AssetGenImage get appLogo => + const AssetGenImage('assets/images/app_logo.png'); + + /// File path: assets/images/google_maps_mock.png + AssetGenImage get googleMapsMock => + const AssetGenImage('assets/images/google_maps_mock.png'); + + /// File path: assets/images/splash_screen.png + AssetGenImage get splashScreen => + const AssetGenImage('assets/images/splash_screen.png'); + + /// List of all assets + List get values => + [appIcon, appLogo, googleMapsMock, splashScreen]; +} + +class Assets { + Assets._(); + + static const $AssetsImagesGen images = $AssetsImagesGen(); +} + +class AssetGenImage { + const AssetGenImage(this._assetName); + + final String _assetName; + + Image image({ + Key? key, + AssetBundle? bundle, + ImageFrameBuilder? frameBuilder, + ImageErrorWidgetBuilder? errorBuilder, + String? semanticLabel, + bool excludeFromSemantics = false, + double? scale, + double? width, + double? height, + Color? color, + Animation? opacity, + BlendMode? colorBlendMode, + BoxFit? fit, + AlignmentGeometry alignment = Alignment.center, + ImageRepeat repeat = ImageRepeat.noRepeat, + Rect? centerSlice, + bool matchTextDirection = false, + bool gaplessPlayback = false, + bool isAntiAlias = false, + String? package, + FilterQuality filterQuality = FilterQuality.low, + int? cacheWidth, + int? cacheHeight, + }) { + return Image.asset( + _assetName, + key: key, + bundle: bundle, + frameBuilder: frameBuilder, + errorBuilder: errorBuilder, + semanticLabel: semanticLabel, + excludeFromSemantics: excludeFromSemantics, + scale: scale, + width: width, + height: height, + color: color, + opacity: opacity, + colorBlendMode: colorBlendMode, + fit: fit, + alignment: alignment, + repeat: repeat, + centerSlice: centerSlice, + matchTextDirection: matchTextDirection, + gaplessPlayback: gaplessPlayback, + isAntiAlias: isAntiAlias, + package: package, + filterQuality: filterQuality, + cacheWidth: cacheWidth, + cacheHeight: cacheHeight, + ); + } + + ImageProvider provider({ + AssetBundle? bundle, + String? package, + }) { + return AssetImage( + _assetName, + bundle: bundle, + package: package, + ); + } + + String get path => _assetName; + + String get keyName => _assetName; +} diff --git a/lib/infrastructure/cache_repository.dart b/lib/infrastructure/cache_repository.dart new file mode 100644 index 0000000..d496408 --- /dev/null +++ b/lib/infrastructure/cache_repository.dart @@ -0,0 +1,101 @@ +import 'package:fpdart/fpdart.dart'; +import 'package:hive_flutter/hive_flutter.dart'; +import 'package:users_repository/src/gen/proto/v1/users.pb.dart'; + +import '../domain/auth/user.dart'; +import '../domain/cache/access_token.dart'; +import '../domain/cache/cache_repository_i.dart'; +import '../domain/cache/refresh_token.dart'; + +class CacheRepository implements CacheRepositoryI { + @override + Future deleteToken(String key) { + // TODO: implement deleteAuthData + throw UnimplementedError(); + } + + @override + void initAdapters() { + Hive + ..registerAdapter(AccessTokenAdapter()) + ..registerAdapter(RefreshTokenAdapter()) + ..registerAdapter(UserAdapter()); + } + + @override + Future saveAccessToken(AccessToken token) async { + final box = await Hive.openBox(_accessTokenBox); + await box.put(_accessTokenKey, token); + } + + @override + Future saveRefreshToken(RefreshToken token) async { + final box = await Hive.openBox(_refreshTokenBox); + await box.put(_refreshTokenKey, token); + } + + @override + Future> retrieveAccessToken() async { + final box = await Hive.openBox(_accessTokenBox); + + final accessToken = box.get(_accessTokenKey); + + if (accessToken == null) { + return none(); + } + + return some(accessToken); + } + + @override + Future> retrieveRefreshToken() async { + final box = await Hive.openBox(_refreshTokenBox); + final refreshToken = box.get(_refreshTokenKey); + + if (refreshToken == null) { + return none(); + } + + return some(refreshToken); + } + + @override + Future saveTokens({ + required AccessToken accessToken, + required RefreshToken refreshToken, + }) async { + await saveAccessToken(accessToken); + await saveRefreshToken(refreshToken); + } + + @override + Future> retrieveUser() async { + final box = await Hive.openBox(_usersBox); + + final user = box.get(_userKey); + + if (user == null) { + return none(); + } + + return some(user); + } + + @override + Future saveUserFromDTO(UserDTO userDTO) async { + final box = await Hive.openBox(_usersBox); + await box.put(_userKey, User.fromDTO(userDTO)); + } + + final String _accessTokenKey = 'access_token'; + + final String _refreshTokenKey = 'refresh_token'; + + final String _accessTokenBox = 'access_tokens'; + + final String _refreshTokenBox = 'refresh_tokens'; + + final String _usersBox = 'users'; + + final String _userKey = 'user'; +} diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index ea51202..903b830 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -30,6 +30,7 @@ "resetPasswordInfo": "Enter your email address and we'll send you a link to reset your password", "resetPasswordSubmit": "Reset password", "email": "Email", + "username": "Username", "password": "Password", "firstName": "First name", "lastName": "Last name", @@ -39,6 +40,16 @@ "genderOther": "Other", "dateOfBirth": "Date of birth", "driverYes": "I'm a driver", - "driverNo": "I'm a passenger" - -} \ No newline at end of file + "driverNo": "I'm a passenger", + "authCancelledByUser": "Cancelled by user", + "authServerError": "Server error", + "authEmailAlreadyInUse": "Email already in use", + "authInvalidEmailOrPassword": "Invalid email or password", + "authInvalidRegistrationInput": "Please, enter correct input", + "formInvalidPassword": "Invalid password", + "formInvalidEmail": "Invalid email", + "formInvalidUsername": "Invalid username", + "formInvalidPasswordExplanation": "Password should contains 8-16 characters, one uppercase and lowercase letter and one special character", + "formInvalidEmailExplanation": "Please, enter correct email", + "formInvalidUsernameExplanation": "Username should contains 6-20 characters" +} diff --git a/lib/l10n/app_pl.arb b/lib/l10n/app_pl.arb index 612499d..bad5d05 100644 --- a/lib/l10n/app_pl.arb +++ b/lib/l10n/app_pl.arb @@ -24,6 +24,7 @@ "resetPasswordInfo": "Wpisz swój adres e-mail, a my wyślemy Ci link do zresetowania hasła", "resetPasswordSubmit": "Zresetuj hasło", "email": "Adres e-mail", + "username": "Nazwa użytkownika", "password": "Hasło", "firstName": "Imię", "lastName": "Nazwisko", @@ -34,5 +35,16 @@ "dateOfBirth": "Data urodzenia", "driver": "Jesteś kierowcą?", "driverYes": "Jestem kierowcą", - "driverNo": "Jestem pasażerem" + "driverNo": "Jestem pasażerem", + "authCancelledByUser": "Logowanie zostało anulowane przez użytkownika", + "authServerError": "Wystąpił błąd serwera", + "authEmailAlreadyInUse": "Ten email jest już używany przez innego użytkownika", + "authInvalidEmailOrPassword": "Niepoprawny email lub hasło", + "authInvalidRegistrationInput": "Proszę, wprowadź poprawne dane", + "formInvalidPassword": "Niepoprawne hasło", + "formInvalidEmail": "Niepoprawny email", + "formInvalidUsername": "Niepoprawna nazwa użytkownika", + "formInvalidPasswordExplanation": "Hasło powinno zawierać 8-16 liter, przynajmniej jedną małą i wielką literę, znak specjalny oraz cyfrę", + "formInvalidEmailExplanation": "Proszę, wprowadź poprawny adres email", + "formInvalidUsernameExplanation": "Nazwa użytkownika powinna zawierać 6-20 liter" } diff --git a/lib/main.dart b/lib/main.dart index b9f9d36..32a15c4 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,10 @@ import 'package:flutter/cupertino.dart'; +import 'package:hive_flutter/hive_flutter.dart'; import 'presentation/core/my_app_widget.dart'; -void main() { +Future main() async { WidgetsFlutterBinding.ensureInitialized(); + + await Hive.initFlutter(); runApp(MyAppWidget()); } diff --git a/lib/presentation/core/constants/decorations.dart b/lib/presentation/core/constants/decorations.dart index c2d1344..fac616c 100644 --- a/lib/presentation/core/constants/decorations.dart +++ b/lib/presentation/core/constants/decorations.dart @@ -6,15 +6,21 @@ InputDecoration getInputDecoration({ String hintText = '', Widget? prefixIcon, Widget? suffixIcon, + bool showValidatorMessages = true, }) { + final outlineInputBorder = OutlineInputBorder( + borderRadius: BorderRadius.circular(formFieldRadius), + borderSide: const BorderSide(color: Color.fromARGB(255, 198, 53, 42))); return InputDecoration( suffixIcon: suffixIcon, prefixIcon: prefixIcon, hintText: hintText, filled: true, + errorStyle: showValidatorMessages ? null : const TextStyle(fontSize: 0), + focusedErrorBorder: outlineInputBorder, + errorBorder: outlineInputBorder, border: OutlineInputBorder( - borderRadius: BorderRadius.circular(formFieldRadius), - borderSide: BorderSide.none, - ), + borderRadius: BorderRadius.circular(formFieldRadius), + borderSide: BorderSide.none), ); } diff --git a/lib/presentation/core/my_app_widget.dart b/lib/presentation/core/my_app_widget.dart index c5af064..9feca52 100644 --- a/lib/presentation/core/my_app_widget.dart +++ b/lib/presentation/core/my_app_widget.dart @@ -5,6 +5,8 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:users_repository/users_repository.dart'; +import '../../application/auth/user_bloc/user_bloc.dart'; +import '../../infrastructure/cache_repository.dart'; import '../router/router.dart'; class MyAppWidget extends StatelessWidget { @@ -12,9 +14,23 @@ class MyAppWidget extends StatelessWidget { @override Widget build(BuildContext context) { - return RepositoryProvider( - create: (context) => UsersRepository(), - child: _MyAppRouter(_appRouter), + return MultiRepositoryProvider( + providers: [ + RepositoryProvider( + create: (context) => CacheRepository()..initAdapters(), + lazy: false, + ), + RepositoryProvider( + create: (context) => UsersRepository(), + ), + ], + child: BlocProvider( + create: (context) => UserBloc(context.read()) + ..add( + const UserEvent.authCheckRequested(), + ), + child: _MyAppRouter(_appRouter), + ), ); } } @@ -35,7 +51,7 @@ class _MyAppRouter extends StatelessWidget { ), themeMode: ThemeMode.dark, debugShowCheckedModeBanner: false, - title: 'Road Runner', + title: 'Via Go', routerDelegate: router.delegate(), routeInformationParser: router.defaultRouteParser(), localizationsDelegates: const [ diff --git a/lib/presentation/core/widgets/authentication/form/text_fields/custom_text_form_field.dart b/lib/presentation/core/widgets/authentication/form/text_fields/custom_text_form_field.dart deleted file mode 100644 index 9edfe8c..0000000 --- a/lib/presentation/core/widgets/authentication/form/text_fields/custom_text_form_field.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import '../../../../constants/decorations.dart'; - -class CustomTextFormField extends StatelessWidget { - const CustomTextFormField({ - Key? key, - this.controller, - this.keyboardType, - required this.hintText, - this.prefixIcon, - this.suffixIcon, - this.obscureText = false, - this.onTap, - this.readOnly = false, - }) : super(key: key); - - final TextEditingController? controller; - final TextInputType? keyboardType; - final String hintText; - final Widget? prefixIcon; - final Widget? suffixIcon; - final bool obscureText; - final Function()? onTap; - final bool readOnly; - - @override - Widget build(BuildContext context) { - return TextFormField( - controller: controller, - obscureText: obscureText, - decoration: getInputDecoration( - hintText: hintText, - prefixIcon: prefixIcon, - suffixIcon: suffixIcon, - ), - keyboardType: keyboardType, - onTap: onTap, - readOnly: readOnly, - ); - } - - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties - ..add(StringProperty('hintText', hintText)) - ..add(DiagnosticsProperty('keyboardType', keyboardType)) - ..add(DiagnosticsProperty('obscureText', obscureText)) - ..add(ObjectFlagProperty.has('onTap', onTap)) - ..add(DiagnosticsProperty('readOnly', readOnly)) - ..add(DiagnosticsProperty( - 'controller', controller)); - } -} diff --git a/lib/presentation/core/widgets/authentication/form/text_fields/date_field.dart b/lib/presentation/core/widgets/authentication/form/text_fields/date_field.dart index d6a353e..dc78a95 100644 --- a/lib/presentation/core/widgets/authentication/form/text_fields/date_field.dart +++ b/lib/presentation/core/widgets/authentication/form/text_fields/date_field.dart @@ -3,8 +3,8 @@ import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import '../../../../../../utils/extensions.dart'; +import '../../../../constants/decorations.dart'; import '../../../default_padding.dart'; -import 'custom_text_form_field.dart'; class DateField extends StatefulWidget { const DateField({ @@ -21,10 +21,12 @@ class _DateFieldState extends State { @override Widget build(BuildContext context) { return DefaultPadding( - child: CustomTextFormField( + child: TextFormField( + decoration: getInputDecoration( + prefixIcon: const Icon(Icons.calendar_today), + hintText: context.l10n.dateOfBirth, + ), controller: dateInput, - prefixIcon: const Icon(Icons.calendar_today), - hintText: context.l10n.dateOfBirth, readOnly: true, onTap: () async { final pickedDate = await showDatePicker( diff --git a/lib/presentation/core/widgets/authentication/form/text_fields/email_form_field.dart b/lib/presentation/core/widgets/authentication/form/text_fields/email_form_field.dart index d2da22d..fc6fa4b 100644 --- a/lib/presentation/core/widgets/authentication/form/text_fields/email_form_field.dart +++ b/lib/presentation/core/widgets/authentication/form/text_fields/email_form_field.dart @@ -1,17 +1,43 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import '../../../../../../application/auth/sign_in_form_bloc/sign_in_form_bloc.dart'; import '../../../../../../utils/extensions.dart'; -import 'custom_text_form_field.dart'; +import '../../../../constants/decorations.dart'; class EmailFormField extends StatelessWidget { const EmailFormField({super.key}); @override Widget build(BuildContext context) { - return CustomTextFormField( - prefixIcon: const Icon(Icons.email), - hintText: context.l10n.email, - keyboardType: TextInputType.emailAddress, + return BlocBuilder( + builder: (context, state) { + return TextFormField( + autovalidateMode: AutovalidateMode.onUserInteraction, + decoration: getInputDecoration( + prefixIcon: const Icon(Icons.email), + hintText: context.l10n.email, + showValidatorMessages: state.emailAddress.value.fold( + (f) => state.showValidatorMessages, + (_) => false, + ), + ), + keyboardType: TextInputType.emailAddress, + onChanged: (value) { + context + .read() + .add(SignInFormEvent.emailChanged(value)); + }, + validator: (_) => + context.read().state.emailAddress.value.fold( + (f) => f.maybeMap( + invalidEmail: (_) => context.l10n.formInvalidEmail, + orElse: () => null, + ), + (_) => null, + ), + ); + }, ); } } diff --git a/lib/presentation/core/widgets/authentication/form/text_fields/name_form_field.dart b/lib/presentation/core/widgets/authentication/form/text_fields/name_form_field.dart index 0fa3f1d..141873f 100644 --- a/lib/presentation/core/widgets/authentication/form/text_fields/name_form_field.dart +++ b/lib/presentation/core/widgets/authentication/form/text_fields/name_form_field.dart @@ -2,23 +2,26 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import '../../../../../../utils/extensions.dart'; +import '../../../../constants/decorations.dart'; import '../../../default_padding.dart'; -import 'custom_text_form_field.dart'; class NameFormField extends StatelessWidget { const NameFormField({ super.key, this.firstName = true, }); + final bool firstName; @override Widget build(BuildContext context) { return DefaultPadding( - child: CustomTextFormField( - hintText: firstName ? context.l10n.firstName : context.l10n.lastName, + child: TextFormField( + decoration: getInputDecoration( + hintText: firstName ? context.l10n.firstName : context.l10n.lastName, + prefixIcon: const Icon(Icons.person), + ), keyboardType: TextInputType.name, - prefixIcon: const Icon(Icons.person), ), ); } diff --git a/lib/presentation/core/widgets/authentication/form/text_fields/password_form_field.dart b/lib/presentation/core/widgets/authentication/form/text_fields/password_form_field.dart index 08ef358..41bdcf3 100644 --- a/lib/presentation/core/widgets/authentication/form/text_fields/password_form_field.dart +++ b/lib/presentation/core/widgets/authentication/form/text_fields/password_form_field.dart @@ -1,52 +1,69 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import '../../../../../../application/auth/sign_in_form_bloc/sign_in_form_bloc.dart'; import '../../../../../../utils/extensions.dart'; -import 'custom_text_form_field.dart'; +import '../../../../constants/decorations.dart'; class PasswordFormField extends StatefulWidget { const PasswordFormField({ super.key, - this.onPressed, }); - final Function()? onPressed; @override State createState() => _PasswordFormFieldState(); - @override - void debugFillProperties(DiagnosticPropertiesBuilder properties) { - super.debugFillProperties(properties); - properties.add(ObjectFlagProperty.has('onPressed', onPressed)); - } } class _PasswordFormFieldState extends State { - bool _obscureText = true; + bool obscure = true; @override Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - CustomTextFormField( - hintText: context.l10n.password, - keyboardType: TextInputType.visiblePassword, - prefixIcon: const Icon(Icons.lock), - suffixIcon: IconButton( - onPressed: () => setState(() => _obscureText = !_obscureText), - icon: _obscureText - ? const Icon(Icons.visibility_off) - : const Icon(Icons.visibility), + return BlocBuilder( + builder: (context, state) { + return TextFormField( + autovalidateMode: AutovalidateMode.onUserInteraction, + decoration: getInputDecoration( + hintText: context.l10n.password, + prefixIcon: const Icon(Icons.lock), + suffixIcon: IconButton( + icon: obscure + ? const Icon(Icons.visibility_off) + : const Icon(Icons.visibility), + onPressed: () => setState(() => obscure = !obscure), + ), + showValidatorMessages: state.password.value.fold( + (f) => state.showValidatorMessages, + (_) => false, + ), ), - obscureText: _obscureText, - ), - if (widget.onPressed != null) - TextButton( - onPressed: widget.onPressed, - child: Text( - context.l10n.authForgotPassword, - style: const TextStyle(fontWeight: FontWeight.bold), - )) - ], + autocorrect: false, + obscureText: obscure, + onChanged: (value) => context.read().add( + SignInFormEvent.passwordChanged(value), + ), + onEditingComplete: () => { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(context.l10n.formInvalidPasswordExplanation)), + ), + }, + validator: (_) => + context.read().state.password.value.fold( + (l) => l.maybeMap( + invalidPassword: (_) => context.l10n.formInvalidPassword, + orElse: () => null, + ), + (_) => null, + ), + ); + }, ); } + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + properties.add(DiagnosticsProperty('obscure', obscure)); + } } diff --git a/lib/presentation/core/widgets/authentication/form/text_fields/username_form_field.dart b/lib/presentation/core/widgets/authentication/form/text_fields/username_form_field.dart new file mode 100644 index 0000000..7d057ee --- /dev/null +++ b/lib/presentation/core/widgets/authentication/form/text_fields/username_form_field.dart @@ -0,0 +1,40 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +import '../../../../../../application/auth/sign_in_form_bloc/sign_in_form_bloc.dart'; +import '../../../../../../utils/extensions.dart'; +import '../../../../constants/decorations.dart'; + +class UsernameFormField extends StatelessWidget { + const UsernameFormField({super.key}); + @override + Widget build(BuildContext context) { + return BlocBuilder( + builder: (context, state) { + return TextFormField( + autovalidateMode: AutovalidateMode.onUserInteraction, + decoration: getInputDecoration( + prefixIcon: const Icon(Icons.person), + hintText: context.l10n.username, + showValidatorMessages: state.username.value.fold( + (f) => state.showValidatorMessages, + (_) => false, + ), + ), + keyboardType: TextInputType.name, + onChanged: (value) { + context + .read() + .add(SignInFormEvent.usernameChanged(value)); + }, + validator: (_) => state.username.value.fold( + (f) => f.maybeMap( + invalidUsername: (_) => context.l10n.formInvalidUsername, + orElse: () => null, + ), + (_) => null, + )); + }, + ); + } +} diff --git a/lib/presentation/pages/home_page/home_page_view.dart b/lib/presentation/pages/home_page/home_page_view.dart index 9105f4f..13218d8 100644 --- a/lib/presentation/pages/home_page/home_page_view.dart +++ b/lib/presentation/pages/home_page/home_page_view.dart @@ -1,7 +1,4 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:users_repository/users_repository.dart'; import '../../core/widgets/bottom_navbar/bottom_navbar.dart'; import 'widgets/ex_widgets.dart'; @@ -11,23 +8,11 @@ class HomePageView extends StatelessWidget { @override Widget build(BuildContext context) { - return Scaffold( + return const Scaffold( body: Stack( children: [ - const MapLocation(), - const BottomNavBar(), - Center( - child: ElevatedButton( - onPressed: () async { - final _result = - await context.read().getUser('antek'); - final result = _result.getOrElse((l) => GetUserResponse()); - if (kDebugMode) { - debugPrint(result.toString()); - } - }, - child: const Text('click me')), - ) + MapLocation(), + BottomNavBar(), ], ), ); diff --git a/lib/presentation/pages/login_page/login_page.dart b/lib/presentation/pages/login_page/login_page.dart index a33f20a..82f803f 100644 --- a/lib/presentation/pages/login_page/login_page.dart +++ b/lib/presentation/pages/login_page/login_page.dart @@ -1,5 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:users_repository/users_repository.dart'; +import '../../../application/auth/sign_in_form_bloc/sign_in_form_bloc.dart'; +import '../../../infrastructure/cache_repository.dart'; import 'login_page_view.dart'; class LoginPage extends StatelessWidget { @@ -7,6 +11,12 @@ class LoginPage extends StatelessWidget { @override Widget build(BuildContext context) { - return const LoginPageView(); + return BlocProvider( + create: (context) => SignInFormBloc( + context.read(), + context.read(), + ), + child: const LoginPageView(), + ); } } diff --git a/lib/presentation/pages/login_page/login_page_view.dart b/lib/presentation/pages/login_page/login_page_view.dart index 239f8c0..2a9a95b 100644 --- a/lib/presentation/pages/login_page/login_page_view.dart +++ b/lib/presentation/pages/login_page/login_page_view.dart @@ -1,9 +1,16 @@ +import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import '../../../application/auth/sign_in_form_bloc/sign_in_form_bloc.dart'; +import '../../../domain/auth/auth_failure.dart'; +import '../../../domain/core/extensions.dart'; import '../../../utils/extensions.dart'; import '../../core/widgets/authentication/app_logo.dart'; import '../../core/widgets/authentication/page_title.dart'; import '../../core/widgets/default_padding.dart'; +import '../../router/router.dart'; +import 'widgets/auth_snackbar.dart'; import 'widgets/sign_in_form.dart'; class LoginPageView extends StatelessWidget { @@ -12,19 +19,59 @@ class LoginPageView extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - resizeToAvoidBottomInset: false, - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const AppLogo(), - DefaultPadding( - child: PageTitle(title: context.l10n.authLoginHeading), - ), - const SizedBox(height: 20), - const SignInForm(), - ], - )), + body: BlocConsumer( + listenWhen: (previous, current) { + if (previous.authResult.isNone() && current.authResult.isSome()) { + return true; + } + + return false; + }, + listener: (context, state) { + state.authResult.fold(() => null, (result) { + if (result.isRight()) { + context.router.popForced(); + context.router.push(const HomeRoute()); + return; + } + + final failure = result.forceLeft(); + + ScaffoldMessenger.of(context).showSnackBar( + authSnackBar( + content: failure.message(context), + ), + ); + }); + }, + builder: (context, state) { + if (state.isSubmitting) { + return const Center(child: CircularProgressIndicator()); + } + return SingleChildScrollView( + physics: const ClampingScrollPhysics(), + child: ConstrainedBox( + constraints: BoxConstraints( + minWidth: MediaQuery.of(context).size.width, + minHeight: MediaQuery.of(context).size.height, + ), + child: IntrinsicHeight( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const AppLogo(), + DefaultPadding( + child: PageTitle(title: context.l10n.authLoginHeading), + ), + const SizedBox(height: 20), + const SignInForm(), + ], + ), + ), + ), + ); + }, + ), ); } } diff --git a/lib/presentation/pages/login_page/widgets/auth_snackbar.dart b/lib/presentation/pages/login_page/widgets/auth_snackbar.dart new file mode 100644 index 0000000..8421e20 --- /dev/null +++ b/lib/presentation/pages/login_page/widgets/auth_snackbar.dart @@ -0,0 +1,6 @@ +import 'package:flutter/material.dart'; + +SnackBar authSnackBar({required String content}) => SnackBar( + content: Text(content), + duration: const Duration(seconds: 3), + ); diff --git a/lib/presentation/pages/login_page/widgets/sign_in_form.dart b/lib/presentation/pages/login_page/widgets/sign_in_form.dart index 7cd744e..9f6b32f 100644 --- a/lib/presentation/pages/login_page/widgets/sign_in_form.dart +++ b/lib/presentation/pages/login_page/widgets/sign_in_form.dart @@ -1,12 +1,12 @@ -import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import '../../../../application/auth/sign_in_form_bloc/sign_in_form_bloc.dart'; import '../../../../utils/extensions.dart'; - import '../../../core/widgets/authentication/form/form_submit_buton.dart'; import '../../../core/widgets/authentication/form/switch_form_button.dart'; -import '../../../core/widgets/authentication/form/text_fields/email_form_field.dart'; import '../../../core/widgets/authentication/form/text_fields/password_form_field.dart'; +import '../../../core/widgets/authentication/form/text_fields/username_form_field.dart'; import '../../../core/widgets/default_padding.dart'; import '../../../router/router.dart'; @@ -20,21 +20,22 @@ class SignInForm extends StatelessWidget { return Form( child: Column(children: [ const DefaultPadding( - child: EmailFormField(), + child: UsernameFormField(), ), - DefaultPadding( - child: PasswordFormField( - onPressed: () => context.router.push(const ResetPasswordRoute()), - ), + const DefaultPadding( + child: PasswordFormField(), ), const SizedBox( height: 20, ), DefaultPadding( child: FormSubmitButton( - buttonText: context.l10n.authSignIn, - onPressed: () {}, - ), + buttonText: context.l10n.authSignIn, + onPressed: () { + context.read().add( + const SignInFormEvent.signInWithEmailAndPasswordPressed(), + ); + }), ), const SizedBox( height: 30, diff --git a/lib/presentation/pages/profile_page/widgets/greeting.dart b/lib/presentation/pages/profile_page/widgets/greeting.dart index da66a03..c0ca074 100644 --- a/lib/presentation/pages/profile_page/widgets/greeting.dart +++ b/lib/presentation/pages/profile_page/widgets/greeting.dart @@ -1,6 +1,10 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import '../../../../application/auth/user_bloc/user_bloc.dart'; +import '../../../../domain/core/extensions.dart'; import '../../../../utils/extensions.dart'; +import 'header.dart'; class Greeting extends StatelessWidget { const Greeting({Key? key}) : super(key: key); @@ -12,28 +16,19 @@ class Greeting extends StatelessWidget { top: context.screenSize.height * 0.1, bottom: context.screenSize.height * 0.05, ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - context.l10n.unauthorizedGreeting, - style: const TextStyle( - fontSize: 24, - fontWeight: FontWeight.w600, - ), - ), - const Divider( - height: 10, - ), - Text( - context.l10n.unauthorizedFeaturesInfo, - style: TextStyle( - fontSize: 16, - color: Colors.grey.withOpacity(0.9), - ), - ), - ], - ), + child: BlocBuilder(builder: (context, state) { + if (state.user.isNone()) { + return Header( + greetingText: context.l10n.unauthorizedGreeting, + featuresInfoText: context.l10n.unauthorizedFeaturesInfo, + ); + } + final user = state.user.forceSome(); + return Header( + greetingText: 'Witaj ${user.username}', + featuresInfoText: '', + ); + }), ); } } diff --git a/lib/presentation/pages/profile_page/widgets/header.dart b/lib/presentation/pages/profile_page/widgets/header.dart new file mode 100644 index 0000000..9595b03 --- /dev/null +++ b/lib/presentation/pages/profile_page/widgets/header.dart @@ -0,0 +1,47 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + +class Header extends StatelessWidget { + const Header({ + required this.greetingText, + required this.featuresInfoText, + Key? key, + }) : super(key: key); + + final String greetingText; + final String featuresInfoText; + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + greetingText, + style: const TextStyle( + fontSize: 24, + fontWeight: FontWeight.w600, + ), + ), + const Divider( + height: 10, + ), + Text( + featuresInfoText, + style: TextStyle( + fontSize: 16, + color: Colors.grey.withOpacity(0.9), + ), + ), + ], + ); + } + + @override + void debugFillProperties(DiagnosticPropertiesBuilder properties) { + super.debugFillProperties(properties); + properties + ..add(StringProperty('greetingText', greetingText)) + ..add(StringProperty('featuresInfoText', featuresInfoText)); + } +} diff --git a/lib/presentation/pages/register_page/register_page.dart b/lib/presentation/pages/register_page/register_page.dart index 27fcc1c..6c14665 100644 --- a/lib/presentation/pages/register_page/register_page.dart +++ b/lib/presentation/pages/register_page/register_page.dart @@ -1,5 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:users_repository/users_repository.dart'; +import '../../../application/auth/sign_in_form_bloc/sign_in_form_bloc.dart'; +import '../../../infrastructure/cache_repository.dart'; import 'register_page_view.dart'; class RegisterPage extends StatelessWidget { @@ -7,6 +11,12 @@ class RegisterPage extends StatelessWidget { @override Widget build(BuildContext context) { - return const RegisterPageView(); + return BlocProvider( + create: (context) => SignInFormBloc( + context.read(), + context.read(), + ), + child: const RegisterPageView(), + ); } } diff --git a/lib/presentation/pages/register_page/register_page_view.dart b/lib/presentation/pages/register_page/register_page_view.dart index 823f866..567dbd6 100644 --- a/lib/presentation/pages/register_page/register_page_view.dart +++ b/lib/presentation/pages/register_page/register_page_view.dart @@ -1,9 +1,16 @@ +import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import '../../../application/auth/sign_in_form_bloc/sign_in_form_bloc.dart'; +import '../../../domain/auth/auth_failure.dart'; +import '../../../domain/core/extensions.dart'; import '../../../utils/extensions.dart'; import '../../core/widgets/authentication/app_logo.dart'; import '../../core/widgets/authentication/page_title.dart'; import '../../core/widgets/default_padding.dart'; +import '../../router/router.dart'; +import '../login_page/widgets/auth_snackbar.dart'; import 'widgets/sign_up_form.dart'; class RegisterPageView extends StatelessWidget { @@ -12,19 +19,55 @@ class RegisterPageView extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - resizeToAvoidBottomInset: false, - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const AppLogo(), - DefaultPadding( - child: PageTitle(title: context.l10n.authRegisterHeading), + body: BlocConsumer( + listenWhen: (previous, current) { + if (previous.authResult.isNone() && current.authResult.isSome()) { + return true; + } + + return false; + }, + listener: (context, state) { + state.authResult.fold(() => null, (result) { + if (result.isRight()) { + context.router.popForced(); + context.router.push(const HomeRoute()); + return; + } + + final failure = result.forceLeft(); + + ScaffoldMessenger.of(context).showSnackBar( + authSnackBar( + content: failure.message(context), + ), + ); + }); + }, + builder: (context, state) { + return SingleChildScrollView( + physics: const ClampingScrollPhysics(), + child: ConstrainedBox( + constraints: BoxConstraints( + minWidth: MediaQuery.of(context).size.width, + minHeight: MediaQuery.of(context).size.height, + ), + child: IntrinsicHeight( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const AppLogo(), + DefaultPadding( + child: PageTitle(title: context.l10n.authRegisterHeading), + ), + const SizedBox(height: 20), + const SignUpForm(), + ], + ), + ), ), - const SizedBox(height: 20), - const SignUpForm(), - ], - ), + ); + }, ), ); } diff --git a/lib/presentation/pages/register_page/widgets/sign_up_form.dart b/lib/presentation/pages/register_page/widgets/sign_up_form.dart index 7f3fc6f..97a1b18 100644 --- a/lib/presentation/pages/register_page/widgets/sign_up_form.dart +++ b/lib/presentation/pages/register_page/widgets/sign_up_form.dart @@ -1,11 +1,14 @@ -import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import '../../../../application/auth/sign_in_form_bloc/sign_in_form_bloc.dart'; import '../../../../utils/extensions.dart'; import '../../../core/widgets/authentication/form/form_submit_buton.dart'; import '../../../core/widgets/authentication/form/switch_form_button.dart'; import '../../../core/widgets/authentication/form/text_fields/email_form_field.dart'; +import '../../../core/widgets/authentication/form/text_fields/password_form_field.dart'; +import '../../../core/widgets/authentication/form/text_fields/username_form_field.dart'; import '../../../core/widgets/default_padding.dart'; import '../../../router/router.dart'; @@ -19,15 +22,23 @@ class SignUpForm extends StatelessWidget { return Form( child: Column( children: [ + const DefaultPadding( + child: UsernameFormField(), + ), const DefaultPadding( child: EmailFormField(), ), + const DefaultPadding( + child: PasswordFormField(), + ), const SizedBox( height: 20, ), DefaultPadding( child: FormSubmitButton( - onPressed: () => context.router.push(const VerificationRoute()), + onPressed: () => context.read().add( + const SignUpPressed(), + ), buttonText: context.l10n.authSignUp, ), ), diff --git a/lib/presentation/pages/splash_page/splash_page_view.dart b/lib/presentation/pages/splash_page/splash_page_view.dart index 2b77451..b7b0ff3 100644 --- a/lib/presentation/pages/splash_page/splash_page_view.dart +++ b/lib/presentation/pages/splash_page/splash_page_view.dart @@ -1,5 +1,8 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:fpdart/fpdart.dart'; +import '../../../application/auth/user_bloc/user_bloc.dart'; import '../../../gen/assets.gen.dart'; import '../../router/router.dart'; @@ -9,15 +12,26 @@ class SplashPageView extends StatelessWidget { @override Widget build(BuildContext context) { - return SafeArea( - child: Scaffold( - backgroundColor: const Color(0xffC7AEAE), - body: InkWell( - onTap: () { - context.router.popForced(); - context.router.push(const HomeRoute()); - }, - child: Padding( + return BlocListener( + listener: (context, state) { + if (state.isCheckingAuthStatus.isNone()) { + return; + } + final isChecking = state.isCheckingAuthStatus.getOrElse(() => false); + if (isChecking) { + return; + } + + if (state.user.isSome()) { + context.router.replace(const HomeRoute()); + } else { + context.router.replace(const LoginRoute()); + } + }, + child: SafeArea( + child: Scaffold( + backgroundColor: const Color(0xffC7AEAE), + body: Padding( padding: const EdgeInsets.all(10), child: Assets.images.splashScreen.image( fit: BoxFit.fill, diff --git a/lib/utils/extensions.dart b/lib/utils/extensions.dart index e7ff58d..247d0d9 100644 --- a/lib/utils/extensions.dart +++ b/lib/utils/extensions.dart @@ -4,7 +4,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; export 'package:flutter_gen/gen_l10n/app_localizations.dart'; extension AppLocalizationsX on BuildContext { - AppLocalizations get l10n => AppLocalizations.of(this); + AppLocalizations get l10n => AppLocalizations.of(this) as AppLocalizations; } extension MediaQueryX on BuildContext { diff --git a/packages/users_repository/lib/src/domain/core/typedefs.dart b/packages/users_repository/lib/src/domain/core/typedefs.dart index d691ec2..4fc467e 100644 --- a/packages/users_repository/lib/src/domain/core/typedefs.dart +++ b/packages/users_repository/lib/src/domain/core/typedefs.dart @@ -1,6 +1,3 @@ -import 'package:fpdart/fpdart.dart'; -import '../../gen/proto/users.pb.dart'; -import '../users/call_failure.dart'; -typedef CallResult = Either; +// typedef CallResult = Either; diff --git a/packages/users_repository/lib/src/domain/users/users_repository_i.dart b/packages/users_repository/lib/src/domain/users/users_repository_i.dart index cb7dc88..fdfc67d 100644 --- a/packages/users_repository/lib/src/domain/users/users_repository_i.dart +++ b/packages/users_repository/lib/src/domain/users/users_repository_i.dart @@ -1,6 +1,34 @@ -import '../core/typedefs.dart'; +import 'package:fpdart/fpdart.dart'; + +import '../../../users_repository.dart'; +import '../../gen/proto/v1/users.pbgrpc.dart'; +import 'call_failure.dart'; abstract class UsersRepositoryI { - Future getUser(String username); - Future updateUser(String username); + Future> getUser({ + required String username, + }); + + Future> updateUser({ + required String username, + }); + + Future> createUser({ + required String username, + required String password, + required String email, + }); + + Future> deleteUser({ + required String username, + }); + + Future> loginUser({ + required String username, + required String password, + }); + + Future> logoutUser({ + required String id, + }); } diff --git a/packages/users_repository/lib/src/gen/proto/helper.txt b/packages/users_repository/lib/src/gen/proto/helper.txt deleted file mode 100644 index 90942fa..0000000 --- a/packages/users_repository/lib/src/gen/proto/helper.txt +++ /dev/null @@ -1 +0,0 @@ -this file just makes sure that the directory goes to github diff --git a/packages/users_repository/lib/src/gen/proto/users.pb.dart b/packages/users_repository/lib/src/gen/proto/users.pb.dart deleted file mode 100644 index 7df7d41..0000000 --- a/packages/users_repository/lib/src/gen/proto/users.pb.dart +++ /dev/null @@ -1,1129 +0,0 @@ -/// -// Generated code. Do not modify. -// source: users.proto -// -// @dart = 2.12 -// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name - -import 'dart:core' as $core; - -import 'package:protobuf/protobuf.dart' as $pb; - -class GetUserRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'GetUserRequest', - package: const $pb.PackageName( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'users'), - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'username') - ..hasRequiredFields = false; - - GetUserRequest._() : super(); - factory GetUserRequest({ - $core.String? username, - }) { - final _result = create(); - if (username != null) { - _result.username = username; - } - return _result; - } - factory GetUserRequest.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory GetUserRequest.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - GetUserRequest clone() => GetUserRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - GetUserRequest copyWith(void Function(GetUserRequest) updates) => - super.copyWith((message) => updates(message as GetUserRequest)) - as GetUserRequest; // ignore: deprecated_member_use - $pb.BuilderInfo get info_ => _i; - @$core.pragma('dart2js:noInline') - static GetUserRequest create() => GetUserRequest._(); - GetUserRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); - @$core.pragma('dart2js:noInline') - static GetUserRequest getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); - static GetUserRequest? _defaultInstance; - - @$pb.TagNumber(1) - $core.String get username => $_getSZ(0); - @$pb.TagNumber(1) - set username($core.String v) { - $_setString(0, v); - } - - @$pb.TagNumber(1) - $core.bool hasUsername() => $_has(0); - @$pb.TagNumber(1) - void clearUsername() => clearField(1); -} - -class GetUserResponse extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'GetUserResponse', - package: const $pb.PackageName( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'users'), - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'id') - ..aOS( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'username') - ..aOS( - 3, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'email') - ..aOS( - 4, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'code') - ..aOS( - 5, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'message') - ..hasRequiredFields = false; - - GetUserResponse._() : super(); - factory GetUserResponse({ - $core.String? id, - $core.String? username, - $core.String? email, - $core.String? code, - $core.String? message, - }) { - final _result = create(); - if (id != null) { - _result.id = id; - } - if (username != null) { - _result.username = username; - } - if (email != null) { - _result.email = email; - } - if (code != null) { - _result.code = code; - } - if (message != null) { - _result.message = message; - } - return _result; - } - factory GetUserResponse.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory GetUserResponse.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - GetUserResponse clone() => GetUserResponse()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - GetUserResponse copyWith(void Function(GetUserResponse) updates) => - super.copyWith((message) => updates(message as GetUserResponse)) - as GetUserResponse; // ignore: deprecated_member_use - $pb.BuilderInfo get info_ => _i; - @$core.pragma('dart2js:noInline') - static GetUserResponse create() => GetUserResponse._(); - GetUserResponse createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); - @$core.pragma('dart2js:noInline') - static GetUserResponse getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); - static GetUserResponse? _defaultInstance; - - @$pb.TagNumber(1) - $core.String get id => $_getSZ(0); - @$pb.TagNumber(1) - set id($core.String v) { - $_setString(0, v); - } - - @$pb.TagNumber(1) - $core.bool hasId() => $_has(0); - @$pb.TagNumber(1) - void clearId() => clearField(1); - - @$pb.TagNumber(2) - $core.String get username => $_getSZ(1); - @$pb.TagNumber(2) - set username($core.String v) { - $_setString(1, v); - } - - @$pb.TagNumber(2) - $core.bool hasUsername() => $_has(1); - @$pb.TagNumber(2) - void clearUsername() => clearField(2); - - @$pb.TagNumber(3) - $core.String get email => $_getSZ(2); - @$pb.TagNumber(3) - set email($core.String v) { - $_setString(2, v); - } - - @$pb.TagNumber(3) - $core.bool hasEmail() => $_has(2); - @$pb.TagNumber(3) - void clearEmail() => clearField(3); - - @$pb.TagNumber(4) - $core.String get code => $_getSZ(3); - @$pb.TagNumber(4) - set code($core.String v) { - $_setString(3, v); - } - - @$pb.TagNumber(4) - $core.bool hasCode() => $_has(3); - @$pb.TagNumber(4) - void clearCode() => clearField(4); - - @$pb.TagNumber(5) - $core.String get message => $_getSZ(4); - @$pb.TagNumber(5) - set message($core.String v) { - $_setString(4, v); - } - - @$pb.TagNumber(5) - $core.bool hasMessage() => $_has(4); - @$pb.TagNumber(5) - void clearMessage() => clearField(5); -} - -class DeleteUserRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'DeleteUserRequest', - package: const $pb.PackageName( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'users'), - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'id') - ..hasRequiredFields = false; - - DeleteUserRequest._() : super(); - factory DeleteUserRequest({ - $core.String? id, - }) { - final _result = create(); - if (id != null) { - _result.id = id; - } - return _result; - } - factory DeleteUserRequest.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory DeleteUserRequest.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - DeleteUserRequest clone() => DeleteUserRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - DeleteUserRequest copyWith(void Function(DeleteUserRequest) updates) => - super.copyWith((message) => updates(message as DeleteUserRequest)) - as DeleteUserRequest; // ignore: deprecated_member_use - $pb.BuilderInfo get info_ => _i; - @$core.pragma('dart2js:noInline') - static DeleteUserRequest create() => DeleteUserRequest._(); - DeleteUserRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); - @$core.pragma('dart2js:noInline') - static DeleteUserRequest getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); - static DeleteUserRequest? _defaultInstance; - - @$pb.TagNumber(1) - $core.String get id => $_getSZ(0); - @$pb.TagNumber(1) - set id($core.String v) { - $_setString(0, v); - } - - @$pb.TagNumber(1) - $core.bool hasId() => $_has(0); - @$pb.TagNumber(1) - void clearId() => clearField(1); -} - -class DeleteUserResponse extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'DeleteUserResponse', - package: const $pb.PackageName( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'users'), - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'code') - ..aOS( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'message') - ..hasRequiredFields = false; - - DeleteUserResponse._() : super(); - factory DeleteUserResponse({ - $core.String? code, - $core.String? message, - }) { - final _result = create(); - if (code != null) { - _result.code = code; - } - if (message != null) { - _result.message = message; - } - return _result; - } - factory DeleteUserResponse.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory DeleteUserResponse.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - DeleteUserResponse clone() => DeleteUserResponse()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - DeleteUserResponse copyWith(void Function(DeleteUserResponse) updates) => - super.copyWith((message) => updates(message as DeleteUserResponse)) - as DeleteUserResponse; // ignore: deprecated_member_use - $pb.BuilderInfo get info_ => _i; - @$core.pragma('dart2js:noInline') - static DeleteUserResponse create() => DeleteUserResponse._(); - DeleteUserResponse createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); - @$core.pragma('dart2js:noInline') - static DeleteUserResponse getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); - static DeleteUserResponse? _defaultInstance; - - @$pb.TagNumber(1) - $core.String get code => $_getSZ(0); - @$pb.TagNumber(1) - set code($core.String v) { - $_setString(0, v); - } - - @$pb.TagNumber(1) - $core.bool hasCode() => $_has(0); - @$pb.TagNumber(1) - void clearCode() => clearField(1); - - @$pb.TagNumber(2) - $core.String get message => $_getSZ(1); - @$pb.TagNumber(2) - set message($core.String v) { - $_setString(1, v); - } - - @$pb.TagNumber(2) - $core.bool hasMessage() => $_has(1); - @$pb.TagNumber(2) - void clearMessage() => clearField(2); -} - -class CreateUserRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'CreateUserRequest', - package: const $pb.PackageName( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'users'), - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'username') - ..aOS( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'email') - ..aOS( - 3, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'password') - ..hasRequiredFields = false; - - CreateUserRequest._() : super(); - factory CreateUserRequest({ - $core.String? username, - $core.String? email, - $core.String? password, - }) { - final _result = create(); - if (username != null) { - _result.username = username; - } - if (email != null) { - _result.email = email; - } - if (password != null) { - _result.password = password; - } - return _result; - } - factory CreateUserRequest.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory CreateUserRequest.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - CreateUserRequest clone() => CreateUserRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - CreateUserRequest copyWith(void Function(CreateUserRequest) updates) => - super.copyWith((message) => updates(message as CreateUserRequest)) - as CreateUserRequest; // ignore: deprecated_member_use - $pb.BuilderInfo get info_ => _i; - @$core.pragma('dart2js:noInline') - static CreateUserRequest create() => CreateUserRequest._(); - CreateUserRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); - @$core.pragma('dart2js:noInline') - static CreateUserRequest getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); - static CreateUserRequest? _defaultInstance; - - @$pb.TagNumber(1) - $core.String get username => $_getSZ(0); - @$pb.TagNumber(1) - set username($core.String v) { - $_setString(0, v); - } - - @$pb.TagNumber(1) - $core.bool hasUsername() => $_has(0); - @$pb.TagNumber(1) - void clearUsername() => clearField(1); - - @$pb.TagNumber(2) - $core.String get email => $_getSZ(1); - @$pb.TagNumber(2) - set email($core.String v) { - $_setString(1, v); - } - - @$pb.TagNumber(2) - $core.bool hasEmail() => $_has(1); - @$pb.TagNumber(2) - void clearEmail() => clearField(2); - - @$pb.TagNumber(3) - $core.String get password => $_getSZ(2); - @$pb.TagNumber(3) - set password($core.String v) { - $_setString(2, v); - } - - @$pb.TagNumber(3) - $core.bool hasPassword() => $_has(2); - @$pb.TagNumber(3) - void clearPassword() => clearField(3); -} - -class CreateUserResponse extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'CreateUserResponse', - package: const $pb.PackageName( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'users'), - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'code') - ..aOS( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'message') - ..hasRequiredFields = false; - - CreateUserResponse._() : super(); - factory CreateUserResponse({ - $core.String? code, - $core.String? message, - }) { - final _result = create(); - if (code != null) { - _result.code = code; - } - if (message != null) { - _result.message = message; - } - return _result; - } - factory CreateUserResponse.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory CreateUserResponse.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - CreateUserResponse clone() => CreateUserResponse()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - CreateUserResponse copyWith(void Function(CreateUserResponse) updates) => - super.copyWith((message) => updates(message as CreateUserResponse)) - as CreateUserResponse; // ignore: deprecated_member_use - $pb.BuilderInfo get info_ => _i; - @$core.pragma('dart2js:noInline') - static CreateUserResponse create() => CreateUserResponse._(); - CreateUserResponse createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); - @$core.pragma('dart2js:noInline') - static CreateUserResponse getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); - static CreateUserResponse? _defaultInstance; - - @$pb.TagNumber(1) - $core.String get code => $_getSZ(0); - @$pb.TagNumber(1) - set code($core.String v) { - $_setString(0, v); - } - - @$pb.TagNumber(1) - $core.bool hasCode() => $_has(0); - @$pb.TagNumber(1) - void clearCode() => clearField(1); - - @$pb.TagNumber(2) - $core.String get message => $_getSZ(1); - @$pb.TagNumber(2) - set message($core.String v) { - $_setString(1, v); - } - - @$pb.TagNumber(2) - $core.bool hasMessage() => $_has(1); - @$pb.TagNumber(2) - void clearMessage() => clearField(2); -} - -class LoginUserRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'LoginUserRequest', - package: const $pb.PackageName( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'users'), - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'username') - ..aOS( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'password') - ..hasRequiredFields = false; - - LoginUserRequest._() : super(); - factory LoginUserRequest({ - $core.String? username, - $core.String? password, - }) { - final _result = create(); - if (username != null) { - _result.username = username; - } - if (password != null) { - _result.password = password; - } - return _result; - } - factory LoginUserRequest.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory LoginUserRequest.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - LoginUserRequest clone() => LoginUserRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - LoginUserRequest copyWith(void Function(LoginUserRequest) updates) => - super.copyWith((message) => updates(message as LoginUserRequest)) - as LoginUserRequest; // ignore: deprecated_member_use - $pb.BuilderInfo get info_ => _i; - @$core.pragma('dart2js:noInline') - static LoginUserRequest create() => LoginUserRequest._(); - LoginUserRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); - @$core.pragma('dart2js:noInline') - static LoginUserRequest getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); - static LoginUserRequest? _defaultInstance; - - @$pb.TagNumber(1) - $core.String get username => $_getSZ(0); - @$pb.TagNumber(1) - set username($core.String v) { - $_setString(0, v); - } - - @$pb.TagNumber(1) - $core.bool hasUsername() => $_has(0); - @$pb.TagNumber(1) - void clearUsername() => clearField(1); - - @$pb.TagNumber(2) - $core.String get password => $_getSZ(1); - @$pb.TagNumber(2) - set password($core.String v) { - $_setString(1, v); - } - - @$pb.TagNumber(2) - $core.bool hasPassword() => $_has(1); - @$pb.TagNumber(2) - void clearPassword() => clearField(2); -} - -class LoginUserResponse extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'LoginUserResponse', - package: const $pb.PackageName( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'users'), - createEmptyInstance: create) - ..aOB( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'success') - ..aOS( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'message') - ..hasRequiredFields = false; - - LoginUserResponse._() : super(); - factory LoginUserResponse({ - $core.bool? success, - $core.String? message, - }) { - final _result = create(); - if (success != null) { - _result.success = success; - } - if (message != null) { - _result.message = message; - } - return _result; - } - factory LoginUserResponse.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory LoginUserResponse.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - LoginUserResponse clone() => LoginUserResponse()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - LoginUserResponse copyWith(void Function(LoginUserResponse) updates) => - super.copyWith((message) => updates(message as LoginUserResponse)) - as LoginUserResponse; // ignore: deprecated_member_use - $pb.BuilderInfo get info_ => _i; - @$core.pragma('dart2js:noInline') - static LoginUserResponse create() => LoginUserResponse._(); - LoginUserResponse createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); - @$core.pragma('dart2js:noInline') - static LoginUserResponse getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); - static LoginUserResponse? _defaultInstance; - - @$pb.TagNumber(1) - $core.bool get success => $_getBF(0); - @$pb.TagNumber(1) - set success($core.bool v) { - $_setBool(0, v); - } - - @$pb.TagNumber(1) - $core.bool hasSuccess() => $_has(0); - @$pb.TagNumber(1) - void clearSuccess() => clearField(1); - - @$pb.TagNumber(2) - $core.String get message => $_getSZ(1); - @$pb.TagNumber(2) - set message($core.String v) { - $_setString(1, v); - } - - @$pb.TagNumber(2) - $core.bool hasMessage() => $_has(1); - @$pb.TagNumber(2) - void clearMessage() => clearField(2); -} - -class UpdateUserRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'UpdateUserRequest', - package: const $pb.PackageName( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'users'), - createEmptyInstance: create) - ..aOS( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'username') - ..aOS( - 3, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'email') - ..aOS( - 4, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'password') - ..aOS( - 5, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'id') - ..hasRequiredFields = false; - - UpdateUserRequest._() : super(); - factory UpdateUserRequest({ - $core.String? username, - $core.String? email, - $core.String? password, - $core.String? id, - }) { - final _result = create(); - if (username != null) { - _result.username = username; - } - if (email != null) { - _result.email = email; - } - if (password != null) { - _result.password = password; - } - if (id != null) { - _result.id = id; - } - return _result; - } - factory UpdateUserRequest.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory UpdateUserRequest.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - UpdateUserRequest clone() => UpdateUserRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - UpdateUserRequest copyWith(void Function(UpdateUserRequest) updates) => - super.copyWith((message) => updates(message as UpdateUserRequest)) - as UpdateUserRequest; // ignore: deprecated_member_use - $pb.BuilderInfo get info_ => _i; - @$core.pragma('dart2js:noInline') - static UpdateUserRequest create() => UpdateUserRequest._(); - UpdateUserRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); - @$core.pragma('dart2js:noInline') - static UpdateUserRequest getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); - static UpdateUserRequest? _defaultInstance; - - @$pb.TagNumber(2) - $core.String get username => $_getSZ(0); - @$pb.TagNumber(2) - set username($core.String v) { - $_setString(0, v); - } - - @$pb.TagNumber(2) - $core.bool hasUsername() => $_has(0); - @$pb.TagNumber(2) - void clearUsername() => clearField(2); - - @$pb.TagNumber(3) - $core.String get email => $_getSZ(1); - @$pb.TagNumber(3) - set email($core.String v) { - $_setString(1, v); - } - - @$pb.TagNumber(3) - $core.bool hasEmail() => $_has(1); - @$pb.TagNumber(3) - void clearEmail() => clearField(3); - - @$pb.TagNumber(4) - $core.String get password => $_getSZ(2); - @$pb.TagNumber(4) - set password($core.String v) { - $_setString(2, v); - } - - @$pb.TagNumber(4) - $core.bool hasPassword() => $_has(2); - @$pb.TagNumber(4) - void clearPassword() => clearField(4); - - @$pb.TagNumber(5) - $core.String get id => $_getSZ(3); - @$pb.TagNumber(5) - set id($core.String v) { - $_setString(3, v); - } - - @$pb.TagNumber(5) - $core.bool hasId() => $_has(3); - @$pb.TagNumber(5) - void clearId() => clearField(5); -} - -class UpdateUserResponse extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'UpdateUserResponse', - package: const $pb.PackageName( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'users'), - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'code') - ..aOS( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'message') - ..hasRequiredFields = false; - - UpdateUserResponse._() : super(); - factory UpdateUserResponse({ - $core.String? code, - $core.String? message, - }) { - final _result = create(); - if (code != null) { - _result.code = code; - } - if (message != null) { - _result.message = message; - } - return _result; - } - factory UpdateUserResponse.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory UpdateUserResponse.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - UpdateUserResponse clone() => UpdateUserResponse()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - UpdateUserResponse copyWith(void Function(UpdateUserResponse) updates) => - super.copyWith((message) => updates(message as UpdateUserResponse)) - as UpdateUserResponse; // ignore: deprecated_member_use - $pb.BuilderInfo get info_ => _i; - @$core.pragma('dart2js:noInline') - static UpdateUserResponse create() => UpdateUserResponse._(); - UpdateUserResponse createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); - @$core.pragma('dart2js:noInline') - static UpdateUserResponse getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); - static UpdateUserResponse? _defaultInstance; - - @$pb.TagNumber(1) - $core.String get code => $_getSZ(0); - @$pb.TagNumber(1) - set code($core.String v) { - $_setString(0, v); - } - - @$pb.TagNumber(1) - $core.bool hasCode() => $_has(0); - @$pb.TagNumber(1) - void clearCode() => clearField(1); - - @$pb.TagNumber(2) - $core.String get message => $_getSZ(1); - @$pb.TagNumber(2) - set message($core.String v) { - $_setString(1, v); - } - - @$pb.TagNumber(2) - $core.bool hasMessage() => $_has(1); - @$pb.TagNumber(2) - void clearMessage() => clearField(2); -} - -class LogoutUserRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'LogoutUserRequest', - package: const $pb.PackageName( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'users'), - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'id') - ..hasRequiredFields = false; - - LogoutUserRequest._() : super(); - factory LogoutUserRequest({ - $core.String? id, - }) { - final _result = create(); - if (id != null) { - _result.id = id; - } - return _result; - } - factory LogoutUserRequest.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory LogoutUserRequest.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - LogoutUserRequest clone() => LogoutUserRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - LogoutUserRequest copyWith(void Function(LogoutUserRequest) updates) => - super.copyWith((message) => updates(message as LogoutUserRequest)) - as LogoutUserRequest; // ignore: deprecated_member_use - $pb.BuilderInfo get info_ => _i; - @$core.pragma('dart2js:noInline') - static LogoutUserRequest create() => LogoutUserRequest._(); - LogoutUserRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); - @$core.pragma('dart2js:noInline') - static LogoutUserRequest getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); - static LogoutUserRequest? _defaultInstance; - - @$pb.TagNumber(1) - $core.String get id => $_getSZ(0); - @$pb.TagNumber(1) - set id($core.String v) { - $_setString(0, v); - } - - @$pb.TagNumber(1) - $core.bool hasId() => $_has(0); - @$pb.TagNumber(1) - void clearId() => clearField(1); -} - -class LogoutUserResponse extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'LogoutUserResponse', - package: const $pb.PackageName( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'users'), - createEmptyInstance: create) - ..aOB( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'success') - ..aOS( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'message') - ..hasRequiredFields = false; - - LogoutUserResponse._() : super(); - factory LogoutUserResponse({ - $core.bool? success, - $core.String? message, - }) { - final _result = create(); - if (success != null) { - _result.success = success; - } - if (message != null) { - _result.message = message; - } - return _result; - } - factory LogoutUserResponse.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory LogoutUserResponse.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - LogoutUserResponse clone() => LogoutUserResponse()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - LogoutUserResponse copyWith(void Function(LogoutUserResponse) updates) => - super.copyWith((message) => updates(message as LogoutUserResponse)) - as LogoutUserResponse; // ignore: deprecated_member_use - $pb.BuilderInfo get info_ => _i; - @$core.pragma('dart2js:noInline') - static LogoutUserResponse create() => LogoutUserResponse._(); - LogoutUserResponse createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); - @$core.pragma('dart2js:noInline') - static LogoutUserResponse getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); - static LogoutUserResponse? _defaultInstance; - - @$pb.TagNumber(1) - $core.bool get success => $_getBF(0); - @$pb.TagNumber(1) - set success($core.bool v) { - $_setBool(0, v); - } - - @$pb.TagNumber(1) - $core.bool hasSuccess() => $_has(0); - @$pb.TagNumber(1) - void clearSuccess() => clearField(1); - - @$pb.TagNumber(2) - $core.String get message => $_getSZ(1); - @$pb.TagNumber(2) - set message($core.String v) { - $_setString(1, v); - } - - @$pb.TagNumber(2) - $core.bool hasMessage() => $_has(1); - @$pb.TagNumber(2) - void clearMessage() => clearField(2); -} diff --git a/packages/users_repository/lib/src/gen/proto/users.pbenum.dart b/packages/users_repository/lib/src/gen/proto/users.pbenum.dart deleted file mode 100644 index d45a5b2..0000000 --- a/packages/users_repository/lib/src/gen/proto/users.pbenum.dart +++ /dev/null @@ -1,6 +0,0 @@ -/// -// Generated code. Do not modify. -// source: users.proto -// -// @dart = 2.12 -// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name diff --git a/packages/users_repository/lib/src/gen/proto/v1/users.pb.dart b/packages/users_repository/lib/src/gen/proto/v1/users.pb.dart new file mode 100644 index 0000000..b37d085 --- /dev/null +++ b/packages/users_repository/lib/src/gen/proto/v1/users.pb.dart @@ -0,0 +1,908 @@ +/// +// Generated code. Do not modify. +// source: users.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +import 'dart:core' as $core; + +import 'package:protobuf/protobuf.dart' as $pb; + +import 'users.pbenum.dart'; + +export 'users.pbenum.dart'; + +class UserDTO extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'UserDTO', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'users.v1'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'username') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'email') + ..hasRequiredFields = false + ; + + UserDTO._() : super(); + factory UserDTO({ + $core.String? id, + $core.String? username, + $core.String? email, + }) { + final _result = create(); + if (id != null) { + _result.id = id; + } + if (username != null) { + _result.username = username; + } + if (email != null) { + _result.email = email; + } + return _result; + } + factory UserDTO.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory UserDTO.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + UserDTO clone() => UserDTO()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + UserDTO copyWith(void Function(UserDTO) updates) => super.copyWith((message) => updates(message as UserDTO)) as UserDTO; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static UserDTO create() => UserDTO._(); + UserDTO createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static UserDTO getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static UserDTO? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get id => $_getSZ(0); + @$pb.TagNumber(1) + set id($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(1) + void clearId() => clearField(1); + + @$pb.TagNumber(2) + $core.String get username => $_getSZ(1); + @$pb.TagNumber(2) + set username($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasUsername() => $_has(1); + @$pb.TagNumber(2) + void clearUsername() => clearField(2); + + @$pb.TagNumber(3) + $core.String get email => $_getSZ(2); + @$pb.TagNumber(3) + set email($core.String v) { $_setString(2, v); } + @$pb.TagNumber(3) + $core.bool hasEmail() => $_has(2); + @$pb.TagNumber(3) + void clearEmail() => clearField(3); +} + +class GetUserRequest extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GetUserRequest', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'users.v1'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'username') + ..hasRequiredFields = false + ; + + GetUserRequest._() : super(); + factory GetUserRequest({ + $core.String? username, + }) { + final _result = create(); + if (username != null) { + _result.username = username; + } + return _result; + } + factory GetUserRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory GetUserRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + GetUserRequest clone() => GetUserRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GetUserRequest copyWith(void Function(GetUserRequest) updates) => super.copyWith((message) => updates(message as GetUserRequest)) as GetUserRequest; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static GetUserRequest create() => GetUserRequest._(); + GetUserRequest createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static GetUserRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GetUserRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get username => $_getSZ(0); + @$pb.TagNumber(1) + set username($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasUsername() => $_has(0); + @$pb.TagNumber(1) + void clearUsername() => clearField(1); +} + +class GetUserResponse extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GetUserResponse', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'users.v1'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'username') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'email') + ..e(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'status', $pb.PbFieldType.OE, defaultOrMaker: Status.SUCCESS, valueOf: Status.valueOf, enumValues: Status.values) + ..aOS(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'message') + ..hasRequiredFields = false + ; + + GetUserResponse._() : super(); + factory GetUserResponse({ + $core.String? id, + $core.String? username, + $core.String? email, + Status? status, + $core.String? message, + }) { + final _result = create(); + if (id != null) { + _result.id = id; + } + if (username != null) { + _result.username = username; + } + if (email != null) { + _result.email = email; + } + if (status != null) { + _result.status = status; + } + if (message != null) { + _result.message = message; + } + return _result; + } + factory GetUserResponse.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory GetUserResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + GetUserResponse clone() => GetUserResponse()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GetUserResponse copyWith(void Function(GetUserResponse) updates) => super.copyWith((message) => updates(message as GetUserResponse)) as GetUserResponse; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static GetUserResponse create() => GetUserResponse._(); + GetUserResponse createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static GetUserResponse getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GetUserResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get id => $_getSZ(0); + @$pb.TagNumber(1) + set id($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(1) + void clearId() => clearField(1); + + @$pb.TagNumber(2) + $core.String get username => $_getSZ(1); + @$pb.TagNumber(2) + set username($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasUsername() => $_has(1); + @$pb.TagNumber(2) + void clearUsername() => clearField(2); + + @$pb.TagNumber(3) + $core.String get email => $_getSZ(2); + @$pb.TagNumber(3) + set email($core.String v) { $_setString(2, v); } + @$pb.TagNumber(3) + $core.bool hasEmail() => $_has(2); + @$pb.TagNumber(3) + void clearEmail() => clearField(3); + + @$pb.TagNumber(4) + Status get status => $_getN(3); + @$pb.TagNumber(4) + set status(Status v) { setField(4, v); } + @$pb.TagNumber(4) + $core.bool hasStatus() => $_has(3); + @$pb.TagNumber(4) + void clearStatus() => clearField(4); + + @$pb.TagNumber(5) + $core.String get message => $_getSZ(4); + @$pb.TagNumber(5) + set message($core.String v) { $_setString(4, v); } + @$pb.TagNumber(5) + $core.bool hasMessage() => $_has(4); + @$pb.TagNumber(5) + void clearMessage() => clearField(5); +} + +class DeleteUserRequest extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DeleteUserRequest', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'users.v1'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id') + ..hasRequiredFields = false + ; + + DeleteUserRequest._() : super(); + factory DeleteUserRequest({ + $core.String? id, + }) { + final _result = create(); + if (id != null) { + _result.id = id; + } + return _result; + } + factory DeleteUserRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory DeleteUserRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + DeleteUserRequest clone() => DeleteUserRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + DeleteUserRequest copyWith(void Function(DeleteUserRequest) updates) => super.copyWith((message) => updates(message as DeleteUserRequest)) as DeleteUserRequest; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static DeleteUserRequest create() => DeleteUserRequest._(); + DeleteUserRequest createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static DeleteUserRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static DeleteUserRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get id => $_getSZ(0); + @$pb.TagNumber(1) + set id($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(1) + void clearId() => clearField(1); +} + +class DeleteUserResponse extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DeleteUserResponse', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'users.v1'), createEmptyInstance: create) + ..e(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'status', $pb.PbFieldType.OE, defaultOrMaker: Status.SUCCESS, valueOf: Status.valueOf, enumValues: Status.values) + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'message') + ..hasRequiredFields = false + ; + + DeleteUserResponse._() : super(); + factory DeleteUserResponse({ + Status? status, + $core.String? message, + }) { + final _result = create(); + if (status != null) { + _result.status = status; + } + if (message != null) { + _result.message = message; + } + return _result; + } + factory DeleteUserResponse.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory DeleteUserResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + DeleteUserResponse clone() => DeleteUserResponse()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + DeleteUserResponse copyWith(void Function(DeleteUserResponse) updates) => super.copyWith((message) => updates(message as DeleteUserResponse)) as DeleteUserResponse; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static DeleteUserResponse create() => DeleteUserResponse._(); + DeleteUserResponse createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static DeleteUserResponse getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static DeleteUserResponse? _defaultInstance; + + @$pb.TagNumber(1) + Status get status => $_getN(0); + @$pb.TagNumber(1) + set status(Status v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasStatus() => $_has(0); + @$pb.TagNumber(1) + void clearStatus() => clearField(1); + + @$pb.TagNumber(2) + $core.String get message => $_getSZ(1); + @$pb.TagNumber(2) + set message($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasMessage() => $_has(1); + @$pb.TagNumber(2) + void clearMessage() => clearField(2); +} + +class CreateUserRequest extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'CreateUserRequest', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'users.v1'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'username') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'email') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'password') + ..hasRequiredFields = false + ; + + CreateUserRequest._() : super(); + factory CreateUserRequest({ + $core.String? username, + $core.String? email, + $core.String? password, + }) { + final _result = create(); + if (username != null) { + _result.username = username; + } + if (email != null) { + _result.email = email; + } + if (password != null) { + _result.password = password; + } + return _result; + } + factory CreateUserRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory CreateUserRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + CreateUserRequest clone() => CreateUserRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + CreateUserRequest copyWith(void Function(CreateUserRequest) updates) => super.copyWith((message) => updates(message as CreateUserRequest)) as CreateUserRequest; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static CreateUserRequest create() => CreateUserRequest._(); + CreateUserRequest createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static CreateUserRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static CreateUserRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get username => $_getSZ(0); + @$pb.TagNumber(1) + set username($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasUsername() => $_has(0); + @$pb.TagNumber(1) + void clearUsername() => clearField(1); + + @$pb.TagNumber(2) + $core.String get email => $_getSZ(1); + @$pb.TagNumber(2) + set email($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasEmail() => $_has(1); + @$pb.TagNumber(2) + void clearEmail() => clearField(2); + + @$pb.TagNumber(3) + $core.String get password => $_getSZ(2); + @$pb.TagNumber(3) + set password($core.String v) { $_setString(2, v); } + @$pb.TagNumber(3) + $core.bool hasPassword() => $_has(2); + @$pb.TagNumber(3) + void clearPassword() => clearField(3); +} + +class CreateUserResponse extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'CreateUserResponse', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'users.v1'), createEmptyInstance: create) + ..e(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'status', $pb.PbFieldType.OE, defaultOrMaker: Status.SUCCESS, valueOf: Status.valueOf, enumValues: Status.values) + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'message') + ..hasRequiredFields = false + ; + + CreateUserResponse._() : super(); + factory CreateUserResponse({ + Status? status, + $core.String? message, + }) { + final _result = create(); + if (status != null) { + _result.status = status; + } + if (message != null) { + _result.message = message; + } + return _result; + } + factory CreateUserResponse.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory CreateUserResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + CreateUserResponse clone() => CreateUserResponse()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + CreateUserResponse copyWith(void Function(CreateUserResponse) updates) => super.copyWith((message) => updates(message as CreateUserResponse)) as CreateUserResponse; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static CreateUserResponse create() => CreateUserResponse._(); + CreateUserResponse createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static CreateUserResponse getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static CreateUserResponse? _defaultInstance; + + @$pb.TagNumber(1) + Status get status => $_getN(0); + @$pb.TagNumber(1) + set status(Status v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasStatus() => $_has(0); + @$pb.TagNumber(1) + void clearStatus() => clearField(1); + + @$pb.TagNumber(2) + $core.String get message => $_getSZ(1); + @$pb.TagNumber(2) + set message($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasMessage() => $_has(1); + @$pb.TagNumber(2) + void clearMessage() => clearField(2); +} + +class LoginUserRequest extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'LoginUserRequest', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'users.v1'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'username') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'password') + ..hasRequiredFields = false + ; + + LoginUserRequest._() : super(); + factory LoginUserRequest({ + $core.String? username, + $core.String? password, + }) { + final _result = create(); + if (username != null) { + _result.username = username; + } + if (password != null) { + _result.password = password; + } + return _result; + } + factory LoginUserRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory LoginUserRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + LoginUserRequest clone() => LoginUserRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + LoginUserRequest copyWith(void Function(LoginUserRequest) updates) => super.copyWith((message) => updates(message as LoginUserRequest)) as LoginUserRequest; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static LoginUserRequest create() => LoginUserRequest._(); + LoginUserRequest createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static LoginUserRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static LoginUserRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get username => $_getSZ(0); + @$pb.TagNumber(1) + set username($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasUsername() => $_has(0); + @$pb.TagNumber(1) + void clearUsername() => clearField(1); + + @$pb.TagNumber(2) + $core.String get password => $_getSZ(1); + @$pb.TagNumber(2) + set password($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasPassword() => $_has(1); + @$pb.TagNumber(2) + void clearPassword() => clearField(2); +} + +class LoginUserResponse extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'LoginUserResponse', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'users.v1'), createEmptyInstance: create) + ..e(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'status', $pb.PbFieldType.OE, defaultOrMaker: Status.SUCCESS, valueOf: Status.valueOf, enumValues: Status.values) + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'message') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'jwtToken') + ..aOS(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'refreshToken') + ..aOM(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'userDTO', protoName: 'userDTO', subBuilder: UserDTO.create) + ..hasRequiredFields = false + ; + + LoginUserResponse._() : super(); + factory LoginUserResponse({ + Status? status, + $core.String? message, + $core.String? jwtToken, + $core.String? refreshToken, + UserDTO? userDTO, + }) { + final _result = create(); + if (status != null) { + _result.status = status; + } + if (message != null) { + _result.message = message; + } + if (jwtToken != null) { + _result.jwtToken = jwtToken; + } + if (refreshToken != null) { + _result.refreshToken = refreshToken; + } + if (userDTO != null) { + _result.userDTO = userDTO; + } + return _result; + } + factory LoginUserResponse.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory LoginUserResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + LoginUserResponse clone() => LoginUserResponse()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + LoginUserResponse copyWith(void Function(LoginUserResponse) updates) => super.copyWith((message) => updates(message as LoginUserResponse)) as LoginUserResponse; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static LoginUserResponse create() => LoginUserResponse._(); + LoginUserResponse createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static LoginUserResponse getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static LoginUserResponse? _defaultInstance; + + @$pb.TagNumber(1) + Status get status => $_getN(0); + @$pb.TagNumber(1) + set status(Status v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasStatus() => $_has(0); + @$pb.TagNumber(1) + void clearStatus() => clearField(1); + + @$pb.TagNumber(2) + $core.String get message => $_getSZ(1); + @$pb.TagNumber(2) + set message($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasMessage() => $_has(1); + @$pb.TagNumber(2) + void clearMessage() => clearField(2); + + @$pb.TagNumber(3) + $core.String get jwtToken => $_getSZ(2); + @$pb.TagNumber(3) + set jwtToken($core.String v) { $_setString(2, v); } + @$pb.TagNumber(3) + $core.bool hasJwtToken() => $_has(2); + @$pb.TagNumber(3) + void clearJwtToken() => clearField(3); + + @$pb.TagNumber(4) + $core.String get refreshToken => $_getSZ(3); + @$pb.TagNumber(4) + set refreshToken($core.String v) { $_setString(3, v); } + @$pb.TagNumber(4) + $core.bool hasRefreshToken() => $_has(3); + @$pb.TagNumber(4) + void clearRefreshToken() => clearField(4); + + @$pb.TagNumber(5) + UserDTO get userDTO => $_getN(4); + @$pb.TagNumber(5) + set userDTO(UserDTO v) { setField(5, v); } + @$pb.TagNumber(5) + $core.bool hasUserDTO() => $_has(4); + @$pb.TagNumber(5) + void clearUserDTO() => clearField(5); + @$pb.TagNumber(5) + UserDTO ensureUserDTO() => $_ensure(4); +} + +class UpdateUserRequest extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'UpdateUserRequest', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'users.v1'), createEmptyInstance: create) + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'username') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'email') + ..aOS(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'password') + ..aOS(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id') + ..hasRequiredFields = false + ; + + UpdateUserRequest._() : super(); + factory UpdateUserRequest({ + $core.String? username, + $core.String? email, + $core.String? password, + $core.String? id, + }) { + final _result = create(); + if (username != null) { + _result.username = username; + } + if (email != null) { + _result.email = email; + } + if (password != null) { + _result.password = password; + } + if (id != null) { + _result.id = id; + } + return _result; + } + factory UpdateUserRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory UpdateUserRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + UpdateUserRequest clone() => UpdateUserRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + UpdateUserRequest copyWith(void Function(UpdateUserRequest) updates) => super.copyWith((message) => updates(message as UpdateUserRequest)) as UpdateUserRequest; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static UpdateUserRequest create() => UpdateUserRequest._(); + UpdateUserRequest createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static UpdateUserRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static UpdateUserRequest? _defaultInstance; + + @$pb.TagNumber(2) + $core.String get username => $_getSZ(0); + @$pb.TagNumber(2) + set username($core.String v) { $_setString(0, v); } + @$pb.TagNumber(2) + $core.bool hasUsername() => $_has(0); + @$pb.TagNumber(2) + void clearUsername() => clearField(2); + + @$pb.TagNumber(3) + $core.String get email => $_getSZ(1); + @$pb.TagNumber(3) + set email($core.String v) { $_setString(1, v); } + @$pb.TagNumber(3) + $core.bool hasEmail() => $_has(1); + @$pb.TagNumber(3) + void clearEmail() => clearField(3); + + @$pb.TagNumber(4) + $core.String get password => $_getSZ(2); + @$pb.TagNumber(4) + set password($core.String v) { $_setString(2, v); } + @$pb.TagNumber(4) + $core.bool hasPassword() => $_has(2); + @$pb.TagNumber(4) + void clearPassword() => clearField(4); + + @$pb.TagNumber(5) + $core.String get id => $_getSZ(3); + @$pb.TagNumber(5) + set id($core.String v) { $_setString(3, v); } + @$pb.TagNumber(5) + $core.bool hasId() => $_has(3); + @$pb.TagNumber(5) + void clearId() => clearField(5); +} + +class UpdateUserResponse extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'UpdateUserResponse', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'users.v1'), createEmptyInstance: create) + ..e(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'status', $pb.PbFieldType.OE, defaultOrMaker: Status.SUCCESS, valueOf: Status.valueOf, enumValues: Status.values) + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'message') + ..hasRequiredFields = false + ; + + UpdateUserResponse._() : super(); + factory UpdateUserResponse({ + Status? status, + $core.String? message, + }) { + final _result = create(); + if (status != null) { + _result.status = status; + } + if (message != null) { + _result.message = message; + } + return _result; + } + factory UpdateUserResponse.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory UpdateUserResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + UpdateUserResponse clone() => UpdateUserResponse()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + UpdateUserResponse copyWith(void Function(UpdateUserResponse) updates) => super.copyWith((message) => updates(message as UpdateUserResponse)) as UpdateUserResponse; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static UpdateUserResponse create() => UpdateUserResponse._(); + UpdateUserResponse createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static UpdateUserResponse getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static UpdateUserResponse? _defaultInstance; + + @$pb.TagNumber(1) + Status get status => $_getN(0); + @$pb.TagNumber(1) + set status(Status v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasStatus() => $_has(0); + @$pb.TagNumber(1) + void clearStatus() => clearField(1); + + @$pb.TagNumber(2) + $core.String get message => $_getSZ(1); + @$pb.TagNumber(2) + set message($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasMessage() => $_has(1); + @$pb.TagNumber(2) + void clearMessage() => clearField(2); +} + +class LogoutUserRequest extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'LogoutUserRequest', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'users.v1'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id') + ..hasRequiredFields = false + ; + + LogoutUserRequest._() : super(); + factory LogoutUserRequest({ + $core.String? id, + }) { + final _result = create(); + if (id != null) { + _result.id = id; + } + return _result; + } + factory LogoutUserRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory LogoutUserRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + LogoutUserRequest clone() => LogoutUserRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + LogoutUserRequest copyWith(void Function(LogoutUserRequest) updates) => super.copyWith((message) => updates(message as LogoutUserRequest)) as LogoutUserRequest; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static LogoutUserRequest create() => LogoutUserRequest._(); + LogoutUserRequest createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static LogoutUserRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static LogoutUserRequest? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get id => $_getSZ(0); + @$pb.TagNumber(1) + set id($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(1) + void clearId() => clearField(1); +} + +class LogoutUserResponse extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'LogoutUserResponse', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'users.v1'), createEmptyInstance: create) + ..e(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'status', $pb.PbFieldType.OE, defaultOrMaker: Status.SUCCESS, valueOf: Status.valueOf, enumValues: Status.values) + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'message') + ..hasRequiredFields = false + ; + + LogoutUserResponse._() : super(); + factory LogoutUserResponse({ + Status? status, + $core.String? message, + }) { + final _result = create(); + if (status != null) { + _result.status = status; + } + if (message != null) { + _result.message = message; + } + return _result; + } + factory LogoutUserResponse.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory LogoutUserResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + LogoutUserResponse clone() => LogoutUserResponse()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + LogoutUserResponse copyWith(void Function(LogoutUserResponse) updates) => super.copyWith((message) => updates(message as LogoutUserResponse)) as LogoutUserResponse; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static LogoutUserResponse create() => LogoutUserResponse._(); + LogoutUserResponse createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static LogoutUserResponse getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static LogoutUserResponse? _defaultInstance; + + @$pb.TagNumber(1) + Status get status => $_getN(0); + @$pb.TagNumber(1) + set status(Status v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasStatus() => $_has(0); + @$pb.TagNumber(1) + void clearStatus() => clearField(1); + + @$pb.TagNumber(2) + $core.String get message => $_getSZ(1); + @$pb.TagNumber(2) + set message($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasMessage() => $_has(1); + @$pb.TagNumber(2) + void clearMessage() => clearField(2); +} + diff --git a/packages/users_repository/lib/src/gen/proto/v1/users.pbenum.dart b/packages/users_repository/lib/src/gen/proto/v1/users.pbenum.dart new file mode 100644 index 0000000..9004a1c --- /dev/null +++ b/packages/users_repository/lib/src/gen/proto/v1/users.pbenum.dart @@ -0,0 +1,26 @@ +/// +// Generated code. Do not modify. +// source: users.proto +// +// @dart = 2.12 +// ignore_for_file: annotate_overrides,camel_case_types,constant_identifier_names,directives_ordering,library_prefixes,non_constant_identifier_names,prefer_final_fields,return_of_invalid_type,unnecessary_const,unnecessary_import,unnecessary_this,unused_import,unused_shown_name + +// ignore_for_file: UNDEFINED_SHOWN_NAME +import 'dart:core' as $core; +import 'package:protobuf/protobuf.dart' as $pb; + +class Status extends $pb.ProtobufEnum { + static const Status SUCCESS = Status._(0, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'SUCCESS'); + static const Status ERROR = Status._(1, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'ERROR'); + + static const $core.List values = [ + SUCCESS, + ERROR, + ]; + + static final $core.Map<$core.int, Status> _byValue = $pb.ProtobufEnum.initByValue(values); + static Status? valueOf($core.int value) => _byValue[value]; + + const Status._($core.int v, $core.String n) : super(v, n); +} + diff --git a/packages/users_repository/lib/src/gen/proto/users.pbgrpc.dart b/packages/users_repository/lib/src/gen/proto/v1/users.pbgrpc.dart similarity index 96% rename from packages/users_repository/lib/src/gen/proto/users.pbgrpc.dart rename to packages/users_repository/lib/src/gen/proto/v1/users.pbgrpc.dart index 7d02d51..f980b24 100644 --- a/packages/users_repository/lib/src/gen/proto/users.pbgrpc.dart +++ b/packages/users_repository/lib/src/gen/proto/v1/users.pbgrpc.dart @@ -16,37 +16,37 @@ export 'users.pb.dart'; class UsersClient extends $grpc.Client { static final _$createUser = $grpc.ClientMethod<$0.CreateUserRequest, $0.CreateUserResponse>( - '/users.Users/CreateUser', + '/users.v1.Users/CreateUser', ($0.CreateUserRequest value) => value.writeToBuffer(), ($core.List<$core.int> value) => $0.CreateUserResponse.fromBuffer(value)); static final _$getUser = $grpc.ClientMethod<$0.GetUserRequest, $0.GetUserResponse>( - '/users.Users/GetUser', + '/users.v1.Users/GetUser', ($0.GetUserRequest value) => value.writeToBuffer(), ($core.List<$core.int> value) => $0.GetUserResponse.fromBuffer(value)); static final _$updateUser = $grpc.ClientMethod<$0.UpdateUserRequest, $0.UpdateUserResponse>( - '/users.Users/UpdateUser', + '/users.v1.Users/UpdateUser', ($0.UpdateUserRequest value) => value.writeToBuffer(), ($core.List<$core.int> value) => $0.UpdateUserResponse.fromBuffer(value)); static final _$deleteUser = $grpc.ClientMethod<$0.DeleteUserRequest, $0.DeleteUserResponse>( - '/users.Users/DeleteUser', + '/users.v1.Users/DeleteUser', ($0.DeleteUserRequest value) => value.writeToBuffer(), ($core.List<$core.int> value) => $0.DeleteUserResponse.fromBuffer(value)); static final _$loginUser = $grpc.ClientMethod<$0.LoginUserRequest, $0.LoginUserResponse>( - '/users.Users/LoginUser', + '/users.v1.Users/LoginUser', ($0.LoginUserRequest value) => value.writeToBuffer(), ($core.List<$core.int> value) => $0.LoginUserResponse.fromBuffer(value)); static final _$logoutUser = $grpc.ClientMethod<$0.LogoutUserRequest, $0.LogoutUserResponse>( - '/users.Users/LogoutUser', + '/users.v1.Users/LogoutUser', ($0.LogoutUserRequest value) => value.writeToBuffer(), ($core.List<$core.int> value) => $0.LogoutUserResponse.fromBuffer(value)); @@ -93,7 +93,7 @@ class UsersClient extends $grpc.Client { } abstract class UsersServiceBase extends $grpc.Service { - $core.String get $name => 'users.Users'; + $core.String get $name => 'users.v1.Users'; UsersServiceBase() { $addMethod($grpc.ServiceMethod<$0.CreateUserRequest, $0.CreateUserResponse>( diff --git a/packages/users_repository/lib/src/gen/proto/users.pbjson.dart b/packages/users_repository/lib/src/gen/proto/v1/users.pbjson.dart similarity index 59% rename from packages/users_repository/lib/src/gen/proto/users.pbjson.dart rename to packages/users_repository/lib/src/gen/proto/v1/users.pbjson.dart index 2003773..d39ad13 100644 --- a/packages/users_repository/lib/src/gen/proto/users.pbjson.dart +++ b/packages/users_repository/lib/src/gen/proto/v1/users.pbjson.dart @@ -8,7 +8,29 @@ import 'dart:core' as $core; import 'dart:convert' as $convert; import 'dart:typed_data' as $typed_data; +@$core.Deprecated('Use statusDescriptor instead') +const Status$json = const { + '1': 'Status', + '2': const [ + const {'1': 'SUCCESS', '2': 0}, + const {'1': 'ERROR', '2': 1}, + ], +}; + +/// Descriptor for `Status`. Decode as a `google.protobuf.EnumDescriptorProto`. +final $typed_data.Uint8List statusDescriptor = $convert.base64Decode('CgZTdGF0dXMSCwoHU1VDQ0VTUxAAEgkKBUVSUk9SEAE='); +@$core.Deprecated('Use userDTODescriptor instead') +const UserDTO$json = const { + '1': 'UserDTO', + '2': const [ + const {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'}, + const {'1': 'username', '3': 2, '4': 1, '5': 9, '10': 'username'}, + const {'1': 'email', '3': 3, '4': 1, '5': 9, '10': 'email'}, + ], +}; +/// Descriptor for `UserDTO`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List userDTODescriptor = $convert.base64Decode('CgdVc2VyRFRPEg4KAmlkGAEgASgJUgJpZBIaCgh1c2VybmFtZRgCIAEoCVIIdXNlcm5hbWUSFAoFZW1haWwYAyABKAlSBWVtYWls'); @$core.Deprecated('Use getUserRequestDescriptor instead') const GetUserRequest$json = const { '1': 'GetUserRequest', @@ -18,8 +40,7 @@ const GetUserRequest$json = const { }; /// Descriptor for `GetUserRequest`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List getUserRequestDescriptor = $convert.base64Decode( - 'Cg5HZXRVc2VyUmVxdWVzdBIaCgh1c2VybmFtZRgBIAEoCVIIdXNlcm5hbWU='); +final $typed_data.Uint8List getUserRequestDescriptor = $convert.base64Decode('Cg5HZXRVc2VyUmVxdWVzdBIaCgh1c2VybmFtZRgBIAEoCVIIdXNlcm5hbWU='); @$core.Deprecated('Use getUserResponseDescriptor instead') const GetUserResponse$json = const { '1': 'GetUserResponse', @@ -27,14 +48,13 @@ const GetUserResponse$json = const { const {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'}, const {'1': 'username', '3': 2, '4': 1, '5': 9, '10': 'username'}, const {'1': 'email', '3': 3, '4': 1, '5': 9, '10': 'email'}, - const {'1': 'code', '3': 4, '4': 1, '5': 9, '10': 'code'}, + const {'1': 'status', '3': 4, '4': 1, '5': 14, '6': '.users.v1.Status', '10': 'status'}, const {'1': 'message', '3': 5, '4': 1, '5': 9, '10': 'message'}, ], }; /// Descriptor for `GetUserResponse`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List getUserResponseDescriptor = $convert.base64Decode( - 'Cg9HZXRVc2VyUmVzcG9uc2USDgoCaWQYASABKAlSAmlkEhoKCHVzZXJuYW1lGAIgASgJUgh1c2VybmFtZRIUCgVlbWFpbBgDIAEoCVIFZW1haWwSEgoEY29kZRgEIAEoCVIEY29kZRIYCgdtZXNzYWdlGAUgASgJUgdtZXNzYWdl'); +final $typed_data.Uint8List getUserResponseDescriptor = $convert.base64Decode('Cg9HZXRVc2VyUmVzcG9uc2USDgoCaWQYASABKAlSAmlkEhoKCHVzZXJuYW1lGAIgASgJUgh1c2VybmFtZRIUCgVlbWFpbBgDIAEoCVIFZW1haWwSKAoGc3RhdHVzGAQgASgOMhAudXNlcnMudjEuU3RhdHVzUgZzdGF0dXMSGAoHbWVzc2FnZRgFIAEoCVIHbWVzc2FnZQ=='); @$core.Deprecated('Use deleteUserRequestDescriptor instead') const DeleteUserRequest$json = const { '1': 'DeleteUserRequest', @@ -44,20 +64,18 @@ const DeleteUserRequest$json = const { }; /// Descriptor for `DeleteUserRequest`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List deleteUserRequestDescriptor = - $convert.base64Decode('ChFEZWxldGVVc2VyUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQ='); +final $typed_data.Uint8List deleteUserRequestDescriptor = $convert.base64Decode('ChFEZWxldGVVc2VyUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQ='); @$core.Deprecated('Use deleteUserResponseDescriptor instead') const DeleteUserResponse$json = const { '1': 'DeleteUserResponse', '2': const [ - const {'1': 'code', '3': 1, '4': 1, '5': 9, '10': 'code'}, + const {'1': 'status', '3': 1, '4': 1, '5': 14, '6': '.users.v1.Status', '10': 'status'}, const {'1': 'message', '3': 2, '4': 1, '5': 9, '10': 'message'}, ], }; /// Descriptor for `DeleteUserResponse`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List deleteUserResponseDescriptor = $convert.base64Decode( - 'ChJEZWxldGVVc2VyUmVzcG9uc2USEgoEY29kZRgBIAEoCVIEY29kZRIYCgdtZXNzYWdlGAIgASgJUgdtZXNzYWdl'); +final $typed_data.Uint8List deleteUserResponseDescriptor = $convert.base64Decode('ChJEZWxldGVVc2VyUmVzcG9uc2USKAoGc3RhdHVzGAEgASgOMhAudXNlcnMudjEuU3RhdHVzUgZzdGF0dXMSGAoHbWVzc2FnZRgCIAEoCVIHbWVzc2FnZQ=='); @$core.Deprecated('Use createUserRequestDescriptor instead') const CreateUserRequest$json = const { '1': 'CreateUserRequest', @@ -69,20 +87,18 @@ const CreateUserRequest$json = const { }; /// Descriptor for `CreateUserRequest`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List createUserRequestDescriptor = $convert.base64Decode( - 'ChFDcmVhdGVVc2VyUmVxdWVzdBIaCgh1c2VybmFtZRgBIAEoCVIIdXNlcm5hbWUSFAoFZW1haWwYAiABKAlSBWVtYWlsEhoKCHBhc3N3b3JkGAMgASgJUghwYXNzd29yZA=='); +final $typed_data.Uint8List createUserRequestDescriptor = $convert.base64Decode('ChFDcmVhdGVVc2VyUmVxdWVzdBIaCgh1c2VybmFtZRgBIAEoCVIIdXNlcm5hbWUSFAoFZW1haWwYAiABKAlSBWVtYWlsEhoKCHBhc3N3b3JkGAMgASgJUghwYXNzd29yZA=='); @$core.Deprecated('Use createUserResponseDescriptor instead') const CreateUserResponse$json = const { '1': 'CreateUserResponse', '2': const [ - const {'1': 'code', '3': 1, '4': 1, '5': 9, '10': 'code'}, + const {'1': 'status', '3': 1, '4': 1, '5': 14, '6': '.users.v1.Status', '10': 'status'}, const {'1': 'message', '3': 2, '4': 1, '5': 9, '10': 'message'}, ], }; /// Descriptor for `CreateUserResponse`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List createUserResponseDescriptor = $convert.base64Decode( - 'ChJDcmVhdGVVc2VyUmVzcG9uc2USEgoEY29kZRgBIAEoCVIEY29kZRIYCgdtZXNzYWdlGAIgASgJUgdtZXNzYWdl'); +final $typed_data.Uint8List createUserResponseDescriptor = $convert.base64Decode('ChJDcmVhdGVVc2VyUmVzcG9uc2USKAoGc3RhdHVzGAEgASgOMhAudXNlcnMudjEuU3RhdHVzUgZzdGF0dXMSGAoHbWVzc2FnZRgCIAEoCVIHbWVzc2FnZQ=='); @$core.Deprecated('Use loginUserRequestDescriptor instead') const LoginUserRequest$json = const { '1': 'LoginUserRequest', @@ -93,20 +109,21 @@ const LoginUserRequest$json = const { }; /// Descriptor for `LoginUserRequest`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List loginUserRequestDescriptor = $convert.base64Decode( - 'ChBMb2dpblVzZXJSZXF1ZXN0EhoKCHVzZXJuYW1lGAEgASgJUgh1c2VybmFtZRIaCghwYXNzd29yZBgCIAEoCVIIcGFzc3dvcmQ='); +final $typed_data.Uint8List loginUserRequestDescriptor = $convert.base64Decode('ChBMb2dpblVzZXJSZXF1ZXN0EhoKCHVzZXJuYW1lGAEgASgJUgh1c2VybmFtZRIaCghwYXNzd29yZBgCIAEoCVIIcGFzc3dvcmQ='); @$core.Deprecated('Use loginUserResponseDescriptor instead') const LoginUserResponse$json = const { '1': 'LoginUserResponse', '2': const [ - const {'1': 'success', '3': 1, '4': 1, '5': 8, '10': 'success'}, + const {'1': 'status', '3': 1, '4': 1, '5': 14, '6': '.users.v1.Status', '10': 'status'}, const {'1': 'message', '3': 2, '4': 1, '5': 9, '10': 'message'}, + const {'1': 'jwt_token', '3': 3, '4': 1, '5': 9, '10': 'jwtToken'}, + const {'1': 'refresh_token', '3': 4, '4': 1, '5': 9, '10': 'refreshToken'}, + const {'1': 'userDTO', '3': 5, '4': 1, '5': 11, '6': '.users.v1.UserDTO', '10': 'userDTO'}, ], }; /// Descriptor for `LoginUserResponse`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List loginUserResponseDescriptor = $convert.base64Decode( - 'ChFMb2dpblVzZXJSZXNwb25zZRIYCgdzdWNjZXNzGAEgASgIUgdzdWNjZXNzEhgKB21lc3NhZ2UYAiABKAlSB21lc3NhZ2U='); +final $typed_data.Uint8List loginUserResponseDescriptor = $convert.base64Decode('ChFMb2dpblVzZXJSZXNwb25zZRIoCgZzdGF0dXMYASABKA4yEC51c2Vycy52MS5TdGF0dXNSBnN0YXR1cxIYCgdtZXNzYWdlGAIgASgJUgdtZXNzYWdlEhsKCWp3dF90b2tlbhgDIAEoCVIIand0VG9rZW4SIwoNcmVmcmVzaF90b2tlbhgEIAEoCVIMcmVmcmVzaFRva2VuEisKB3VzZXJEVE8YBSABKAsyES51c2Vycy52MS5Vc2VyRFRPUgd1c2VyRFRP'); @$core.Deprecated('Use updateUserRequestDescriptor instead') const UpdateUserRequest$json = const { '1': 'UpdateUserRequest', @@ -119,20 +136,18 @@ const UpdateUserRequest$json = const { }; /// Descriptor for `UpdateUserRequest`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List updateUserRequestDescriptor = $convert.base64Decode( - 'ChFVcGRhdGVVc2VyUmVxdWVzdBIaCgh1c2VybmFtZRgCIAEoCVIIdXNlcm5hbWUSFAoFZW1haWwYAyABKAlSBWVtYWlsEhoKCHBhc3N3b3JkGAQgASgJUghwYXNzd29yZBIOCgJpZBgFIAEoCVICaWQ='); +final $typed_data.Uint8List updateUserRequestDescriptor = $convert.base64Decode('ChFVcGRhdGVVc2VyUmVxdWVzdBIaCgh1c2VybmFtZRgCIAEoCVIIdXNlcm5hbWUSFAoFZW1haWwYAyABKAlSBWVtYWlsEhoKCHBhc3N3b3JkGAQgASgJUghwYXNzd29yZBIOCgJpZBgFIAEoCVICaWQ='); @$core.Deprecated('Use updateUserResponseDescriptor instead') const UpdateUserResponse$json = const { '1': 'UpdateUserResponse', '2': const [ - const {'1': 'code', '3': 1, '4': 1, '5': 9, '10': 'code'}, + const {'1': 'status', '3': 1, '4': 1, '5': 14, '6': '.users.v1.Status', '10': 'status'}, const {'1': 'message', '3': 2, '4': 1, '5': 9, '10': 'message'}, ], }; /// Descriptor for `UpdateUserResponse`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List updateUserResponseDescriptor = $convert.base64Decode( - 'ChJVcGRhdGVVc2VyUmVzcG9uc2USEgoEY29kZRgBIAEoCVIEY29kZRIYCgdtZXNzYWdlGAIgASgJUgdtZXNzYWdl'); +final $typed_data.Uint8List updateUserResponseDescriptor = $convert.base64Decode('ChJVcGRhdGVVc2VyUmVzcG9uc2USKAoGc3RhdHVzGAEgASgOMhAudXNlcnMudjEuU3RhdHVzUgZzdGF0dXMSGAoHbWVzc2FnZRgCIAEoCVIHbWVzc2FnZQ=='); @$core.Deprecated('Use logoutUserRequestDescriptor instead') const LogoutUserRequest$json = const { '1': 'LogoutUserRequest', @@ -142,17 +157,15 @@ const LogoutUserRequest$json = const { }; /// Descriptor for `LogoutUserRequest`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List logoutUserRequestDescriptor = - $convert.base64Decode('ChFMb2dvdXRVc2VyUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQ='); +final $typed_data.Uint8List logoutUserRequestDescriptor = $convert.base64Decode('ChFMb2dvdXRVc2VyUmVxdWVzdBIOCgJpZBgBIAEoCVICaWQ='); @$core.Deprecated('Use logoutUserResponseDescriptor instead') const LogoutUserResponse$json = const { '1': 'LogoutUserResponse', '2': const [ - const {'1': 'success', '3': 1, '4': 1, '5': 8, '10': 'success'}, + const {'1': 'status', '3': 1, '4': 1, '5': 14, '6': '.users.v1.Status', '10': 'status'}, const {'1': 'message', '3': 2, '4': 1, '5': 9, '10': 'message'}, ], }; /// Descriptor for `LogoutUserResponse`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List logoutUserResponseDescriptor = $convert.base64Decode( - 'ChJMb2dvdXRVc2VyUmVzcG9uc2USGAoHc3VjY2VzcxgBIAEoCFIHc3VjY2VzcxIYCgdtZXNzYWdlGAIgASgJUgdtZXNzYWdl'); +final $typed_data.Uint8List logoutUserResponseDescriptor = $convert.base64Decode('ChJMb2dvdXRVc2VyUmVzcG9uc2USKAoGc3RhdHVzGAEgASgOMhAudXNlcnMudjEuU3RhdHVzUgZzdGF0dXMSGAoHbWVzc2FnZRgCIAEoCVIHbWVzc2FnZQ=='); diff --git a/packages/users_repository/lib/src/infrastructure/users_repository.dart b/packages/users_repository/lib/src/infrastructure/users_repository.dart index 9ffa10a..606c1dc 100644 --- a/packages/users_repository/lib/src/infrastructure/users_repository.dart +++ b/packages/users_repository/lib/src/infrastructure/users_repository.dart @@ -2,25 +2,61 @@ import 'package:flutter/foundation.dart'; import 'package:fpdart/fpdart.dart'; import 'package:grpc/grpc.dart'; -import '../domain/core/typedefs.dart'; import '../domain/users/call_failure.dart'; import '../domain/users/users_repository_i.dart'; -import '../gen/proto/users.pbgrpc.dart'; +import '../gen/proto/v1/users.pbgrpc.dart'; + +/* +class MyChannelCredentials extends ChannelCredentials { + MyChannelCredentials({ + Uint8List? trustedRoots, + this.certificateChain, + this.privateKey, + String? authority, + BadCertificateHandler? onBadCertificate, + }) : super.secure( + certificates: trustedRoots, + authority: authority, + onBadCertificate: onBadCertificate); + final Uint8List? certificateChain; + final Uint8List? privateKey; -class UsersRepository implements UsersRepositoryI { @override - Future getUser(String username) async { - final channel = ClientChannel( - '192.168.0.100', + SecurityContext get securityContext { + final ctx = super.securityContext; + if (certificateChain != null) { + ctx!.useCertificateChainBytes(certificateChain as List); + } + if (privateKey != null) { + ctx!.usePrivateKeyBytes(privateKey as List); + } + return ctx!; + } +} + + */ + +class UsersRepository implements UsersRepositoryI { + ClientChannel _createChannel() { + return ClientChannel( + '127.0.0.1', port: 50051, options: ChannelOptions( credentials: const ChannelCredentials.insecure(), - codecRegistry: - CodecRegistry(codecs: const [GzipCodec(), IdentityCodec()]), + codecRegistry: CodecRegistry( + codecs: const [GzipCodec(), IdentityCodec()], + ), ), ); + } + @override + Future> getUser({ + required String username, + }) async { + final channel = _createChannel(); final client = UsersClient(channel); + try { final response = await client.getUser( GetUserRequest()..username = username, @@ -38,8 +74,85 @@ class UsersRepository implements UsersRepositoryI { } @override - Future updateUser(String username) { + Future> updateUser({ + required String username, + }) { // TODO: implement updateUser throw UnimplementedError(); } + + @override + Future> createUser({ + required String username, + required String password, + required String email, + }) async { + final channel = _createChannel(); + final client = UsersClient(channel); + + try { + final response = await compute( + client.createUser, + CreateUserRequest( + username: username, + password: password, + email: email, + ), + ); + + await channel.shutdown(); + return right(response); + } on GrpcError catch (err) { + if (kDebugMode) { + debugPrint(err.toString()); + } + return left(const CallFailure.serverError()); + } finally { + await channel.shutdown(); + } + } + + @override + Future> deleteUser({ + required String username, + }) { + // TODO: implement deleteUser + throw UnimplementedError(); + } + + @override + Future> loginUser({ + required String username, + required String password, + }) async { + final channel = _createChannel(); + final client = UsersClient(channel); + + try { + final response = await compute( + client.loginUser, + LoginUserRequest( + username: username, + password: password, + ), + ); + + return right(response); + } on GrpcError catch (err) { + if (kDebugMode) { + debugPrint(err.toString()); + } + return left(const CallFailure.serverError()); + } finally { + await channel.shutdown(); + } + } + + @override + Future> logoutUser({ + required String id, + }) { + // TODO: implement logoutUser + throw UnimplementedError(); + } } diff --git a/packages/users_repository/lib/users_repository.dart b/packages/users_repository/lib/users_repository.dart index e4c4244..6619dba 100644 --- a/packages/users_repository/lib/users_repository.dart +++ b/packages/users_repository/lib/users_repository.dart @@ -1,4 +1,5 @@ library users_repository; -export 'src/gen/proto/users.pb.dart'; +export 'src/domain/users/users_repository_i.dart'; +export 'src/gen/proto/v1/users.pb.dart'; export 'src/infrastructure/users_repository.dart'; diff --git a/packages/users_repository/pubspec.lock b/packages/users_repository/pubspec.lock index be02c41..f81b456 100644 --- a/packages/users_repository/pubspec.lock +++ b/packages/users_repository/pubspec.lock @@ -5,34 +5,34 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "98d1d33ed129b372846e862de23a0fc365745f4d7b5e786ce667fcbbb7ac5c07" + sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a url: "https://pub.dev" source: hosted - version: "55.0.0" + version: "61.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "881348aed9b0b425882c97732629a6a31093c8ff20fc4b3b03fb9d3d50a3a126" + sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 url: "https://pub.dev" source: hosted - version: "5.7.1" + version: "5.13.0" archive: dependency: transitive description: name: archive - sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d + sha256: "0c8368c9b3f0abbc193b9d6133649a614204b528982bebc7026372d61677ce3a" url: "https://pub.dev" source: hosted - version: "3.3.6" + version: "3.3.7" args: dependency: transitive description: name: args - sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" + sha256: c372bb384f273f0c2a8aaaa226dad84dc27c8519a691b888725dec59518ad53a url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" async: dependency: transitive description: @@ -53,10 +53,10 @@ packages: dependency: transitive description: name: build - sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + sha256: "43865b79fbb78532e4bff7c33087aa43b1d488c4fdef014eaef568af6d8016dc" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.4.0" build_config: dependency: transitive description: @@ -69,10 +69,10 @@ packages: dependency: transitive description: name: build_daemon - sha256: "757153e5d9cd88253cb13f28c2fb55a537dc31fefd98137549895b5beb7c6169" + sha256: "5f02d73eb2ba16483e693f80bee4f088563a820e47d1027d4cdfe62b5bb43e65" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "4.0.0" build_resolvers: dependency: transitive description: @@ -85,18 +85,18 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: a3335cae313ea41f193e5637f98185e5cb37b3fde2c5c4654ac546b8164e59ac + sha256: "220ae4553e50d7c21a17c051afc7b183d28a24a420502e842f303f8e4e6edced" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.4" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" + sha256: "88a57f2ac99849362e73878334caa9f06ee25f31d2adced882b8337838c84e1e" url: "https://pub.dev" source: hosted - version: "7.2.7" + version: "7.2.9" built_collection: dependency: transitive description: @@ -109,10 +109,10 @@ packages: dependency: transitive description: name: built_value - sha256: "31b7c748fd4b9adf8d25d72a4c4a59ef119f12876cf414f94f8af5131d5fa2b0" + sha256: "7dd62d9faf105c434f3d829bbe9c4be02ec67f5ed94832222116122df67c5452" url: "https://pub.dev" source: hosted - version: "8.4.4" + version: "8.6.0" characters: dependency: transitive description: @@ -125,10 +125,10 @@ packages: dependency: transitive description: name: checked_yaml - sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" clock: dependency: transitive description: @@ -149,10 +149,10 @@ packages: dependency: transitive description: name: collection - sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 url: "https://pub.dev" source: hosted - version: "1.17.1" + version: "1.17.2" convert: dependency: transitive description: @@ -165,10 +165,10 @@ packages: dependency: transitive description: name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" cupertino_icons: dependency: "direct main" description: @@ -181,10 +181,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "5be16bf1707658e4c03078d4a9b90208ded217fb02c163e207d334082412f2fb" + sha256: f4f1f73ab3fd2afcbcca165ee601fe980d966af6a21b5970c6c9376955c528ad url: "https://pub.dev" source: hosted - version: "2.2.5" + version: "2.3.1" fake_async: dependency: transitive description: @@ -197,10 +197,10 @@ packages: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" fixnum: dependency: transitive description: @@ -239,10 +239,10 @@ packages: dependency: "direct dev" description: name: freezed - sha256: e819441678f1679b719008ff2ff0ef045d66eed9f9ec81166ca0d9b02a187454 + sha256: "2edb9ef971d0f803860ecd9084afd48c717d002141ad77b69be3e976bee7190e" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.3.4" freezed_annotation: dependency: "direct main" description: @@ -263,26 +263,26 @@ packages: dependency: transitive description: name: glob - sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" googleapis_auth: dependency: transitive description: name: googleapis_auth - sha256: "127b1bbd32170ab8312f503bd57f1d654d8e4039ddfbc63c027d3f7ade0eff74" + sha256: af7c3a3edf9d0de2e1e0a77e994fae0a581c525fa7012af4fa0d4a52ed9484da url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.4.1" graphs: dependency: transitive description: name: graphs - sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 + sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.1" grpc: dependency: "direct main" description: @@ -295,10 +295,10 @@ packages: dependency: transitive description: name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" url: "https://pub.dev" source: hosted - version: "0.13.5" + version: "0.13.6" http2: dependency: transitive description: @@ -343,42 +343,42 @@ packages: dependency: transitive description: name: json_annotation - sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 url: "https://pub.dev" source: hosted - version: "4.8.0" + version: "4.8.1" lints: dependency: transitive description: name: lints - sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" + sha256: "6b0206b0bf4f04961fc5438198ccb3a885685cd67d4d4a32cc20ad7f8adbe015" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.0" logging: dependency: transitive description: name: logging - sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.0" matcher: dependency: transitive description: name: matcher - sha256: c94db23593b89766cda57aab9ac311e3616cf87c6fa4e9749df032f66f30dcb8 + sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" url: "https://pub.dev" source: hosted - version: "0.12.14" + version: "0.12.15" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.5.0" meta: dependency: transitive description: @@ -415,10 +415,10 @@ packages: dependency: transitive description: name: pointycastle - sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" url: "https://pub.dev" source: hosted - version: "3.6.2" + version: "3.7.3" pool: dependency: transitive description: @@ -439,34 +439,34 @@ packages: dependency: transitive description: name: pub_semver - sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" pubspec_parse: dependency: transitive description: name: pubspec_parse - sha256: ec85d7d55339d85f44ec2b682a82fea340071e8978257e5a43e69f79e98ef50c + sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "1.2.3" shelf: dependency: transitive description: name: shelf - sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.4.1" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" sky_engine: dependency: transitive description: flutter @@ -476,18 +476,18 @@ packages: dependency: transitive description: name: source_gen - sha256: c2bea18c95cfa0276a366270afaa2850b09b4a76db95d546f3d003dcc7011298 + sha256: "373f96cf5a8744bc9816c1ff41cf5391bbdbe3d7a96fe98c622b6738a8a7bd33" url: "https://pub.dev" source: hosted - version: "1.2.7" + version: "1.3.2" source_span: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" stack_trace: dependency: transitive description: @@ -532,10 +532,10 @@ packages: dependency: transitive description: name: test_api - sha256: "6182294da5abf431177fccc1ee02401f6df30f766bc6130a0852c6b6d7ee6b2d" + sha256: daadc9baabec998b062c9091525aa95786508b1c48e9c30f1f891b8bf6ff2e64 url: "https://pub.dev" source: hosted - version: "0.4.18" + version: "0.5.2" timing: dependency: transitive description: @@ -548,10 +548,10 @@ packages: dependency: transitive description: name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" vector_math: dependency: transitive description: @@ -564,25 +564,25 @@ packages: dependency: transitive description: name: watcher - sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.1.0" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.4.0" yaml: dependency: transitive description: name: yaml - sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" sdks: - dart: ">=3.0.0-290.0.dev <4.0.0" + dart: ">=3.0.1 <4.0.0" diff --git a/packages/users_repository/pubspec.yaml b/packages/users_repository/pubspec.yaml index 10f66a3..8e7f508 100644 --- a/packages/users_repository/pubspec.yaml +++ b/packages/users_repository/pubspec.yaml @@ -5,7 +5,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: '>=3.0.0-290.0.dev <4.0.0' + sdk: '>=3.0.1 <4.0.0' dependencies: flutter: diff --git a/pubspec.lock b/pubspec.lock index 18eecc3..1c57866 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,34 +5,34 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: a36ec4843dc30ea6bf652bf25e3448db6c5e8bcf4aa55f063a5d1dad216d8214 + sha256: "405666cd3cf0ee0a48d21ec67e65406aad2c726d9fa58840d3375e7bdcd32a07" url: "https://pub.dev" source: hosted - version: "58.0.0" + version: "60.0.0" analyzer: dependency: "direct dev" description: name: analyzer - sha256: cc4242565347e98424ce9945c819c192ec0838cb9d1f6aa4a97cc96becbc5b27 + sha256: "1952250bd005bacb895a01bf1b4dc00e3ba1c526cf47dca54dfe24979c65f5b3" url: "https://pub.dev" source: hosted - version: "5.10.0" + version: "5.12.0" archive: dependency: transitive description: name: archive - sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d + sha256: "0c8368c9b3f0abbc193b9d6133649a614204b528982bebc7026372d61677ce3a" url: "https://pub.dev" source: hosted - version: "3.3.6" + version: "3.3.7" args: dependency: transitive description: name: args - sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" + sha256: c372bb384f273f0c2a8aaaa226dad84dc27c8519a691b888725dec59518ad53a url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" async: dependency: transitive description: @@ -77,10 +77,10 @@ packages: dependency: transitive description: name: build - sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + sha256: "43865b79fbb78532e4bff7c33087aa43b1d488c4fdef014eaef568af6d8016dc" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.4.0" build_config: dependency: transitive description: @@ -109,18 +109,18 @@ packages: dependency: "direct dev" description: name: build_runner - sha256: "7b25ba738bc74c94187cebeb9cc29d38a32e8279ce950eabd821d3b454a5f03d" + sha256: "220ae4553e50d7c21a17c051afc7b183d28a24a420502e842f303f8e4e6edced" url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.4" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" + sha256: "30859c90e9ddaccc484f56303931f477b1f1ba2bab74aa32ed5d6ce15870f8cf" url: "https://pub.dev" source: hosted - version: "7.2.7" + version: "7.2.8" built_collection: dependency: transitive description: @@ -133,10 +133,10 @@ packages: dependency: transitive description: name: built_value - sha256: "31b7c748fd4b9adf8d25d72a4c4a59ef119f12876cf414f94f8af5131d5fa2b0" + sha256: "2f17434bd5d52a26762043d6b43bb53b3acd029b4d9071a329f46d67ef297e6d" url: "https://pub.dev" source: hosted - version: "8.4.4" + version: "8.5.0" change_app_package_name: dependency: "direct main" description: @@ -157,10 +157,10 @@ packages: dependency: transitive description: name: checked_yaml - sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" cli_util: dependency: transitive description: @@ -189,10 +189,10 @@ packages: dependency: transitive description: name: collection - sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 url: "https://pub.dev" source: hosted - version: "1.17.1" + version: "1.17.2" color: dependency: transitive description: @@ -221,10 +221,10 @@ packages: dependency: transitive description: name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" cupertino_icons: dependency: "direct main" description: @@ -237,10 +237,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "6d691edde054969f0e0f26abb1b30834b5138b963793e56f69d3a9a4435e6352" + sha256: f4f1f73ab3fd2afcbcca165ee601fe980d966af6a21b5970c6c9376955c528ad url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.1" dartx: dependency: transitive description: @@ -253,10 +253,10 @@ packages: dependency: "direct main" description: name: dropdown_button2 - sha256: "4458d81bfd24207f3d58f66f78097064e02f810f94cf1bc80bf20fe7685ebc80" + sha256: "13bf78b6e5b6ca7256701988b22e078cd94b41bfab8d68a128651734702e0d1b" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.1.2" fake_async: dependency: transitive description: @@ -265,6 +265,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99 + url: "https://pub.dev" + source: hosted + version: "2.0.2" file: dependency: transitive description: @@ -298,18 +306,18 @@ packages: dependency: transitive description: name: flutter_gen_core - sha256: e74db9fc706ce43ef0dfd4b296fcfa10f84c4d862b9b68a087e7c703f97c7a0a + sha256: e8637dd6a59860f89e5e71be0a27101ec32dad1a0ed7fd879fd23b6e91d5004d url: "https://pub.dev" source: hosted - version: "5.2.0" + version: "5.3.1" flutter_gen_runner: dependency: "direct dev" description: name: flutter_gen_runner - sha256: "434511d7c3f7bb5c67d89a16451056093953bebf7afa8336baeceddfc6fe2a21" + sha256: "7de1bf4fc0439be0fef3178b6423d5c7f1f9f3a38a7c6fafe75d7f70ff4856d7" url: "https://pub.dev" source: hosted - version: "5.2.0" + version: "5.3.1" flutter_launcher_icons: dependency: "direct dev" description: @@ -348,10 +356,10 @@ packages: dependency: "direct dev" description: name: freezed - sha256: e819441678f1679b719008ff2ff0ef045d66eed9f9ec81166ca0d9b02a187454 + sha256: "2edb9ef971d0f803860ecd9084afd48c717d002141ad77b69be3e976bee7190e" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.3.4" freezed_annotation: dependency: "direct main" description: @@ -388,10 +396,10 @@ packages: dependency: transitive description: name: graphs - sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 + sha256: "772db3d53d23361d4ffcf5a9bb091cf3ee9b22f2be52cd107cd7a2683a89ba0e" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.0" grpc: dependency: transitive description: @@ -400,14 +408,38 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.0" + hive: + dependency: "direct main" + description: + name: hive + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" + source: hosted + version: "2.2.3" + hive_flutter: + dependency: "direct main" + description: + name: hive_flutter + sha256: dca1da446b1d808a51689fb5d0c6c9510c0a2ba01e22805d492c73b68e33eecc + url: "https://pub.dev" + source: hosted + version: "1.1.0" + hive_generator: + dependency: "direct dev" + description: + name: hive_generator + sha256: "65998cc4d2cd9680a3d9709d893d2f6bb15e6c1f92626c3f1fa650b4b3281521" + url: "https://pub.dev" + source: hosted + version: "2.0.0" http: dependency: transitive description: name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" url: "https://pub.dev" source: hosted - version: "0.13.5" + version: "0.13.6" http2: dependency: transitive description: @@ -436,18 +468,18 @@ packages: dependency: transitive description: name: image - sha256: "483a389d6ccb292b570c31b3a193779b1b0178e7eb571986d9a49904b6861227" + sha256: a72242c9a0ffb65d03de1b7113bc4e189686fc07c7147b8b41811d0dd0e0d9bf url: "https://pub.dev" source: hosted - version: "4.0.15" + version: "4.0.17" intl: dependency: "direct main" description: name: intl - sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6 + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" url: "https://pub.dev" source: hosted - version: "0.18.0" + version: "0.18.1" io: dependency: transitive description: @@ -468,18 +500,18 @@ packages: dependency: transitive description: name: json_annotation - sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 url: "https://pub.dev" source: hosted - version: "4.8.0" + version: "4.8.1" lints: dependency: transitive description: name: lints - sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" + sha256: "6b0206b0bf4f04961fc5438198ccb3a885685cd67d4d4a32cc20ad7f8adbe015" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.0" logging: dependency: transitive description: @@ -492,18 +524,18 @@ packages: dependency: transitive description: name: matcher - sha256: c94db23593b89766cda57aab9ac311e3616cf87c6fa4e9749df032f66f30dcb8 + sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" url: "https://pub.dev" source: hosted - version: "0.12.14" + version: "0.12.15" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.5.0" meta: dependency: transitive description: @@ -568,22 +600,86 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: "3087813781ab814e4157b172f1a11c46be20179fcc9bea043e0fba36bc0acaa2" + url: "https://pub.dev" + source: hosted + version: "2.0.15" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: "2cec049d282c7f13c594b4a73976b0b4f2d7a1838a6dd5aaf7bd9719196bee86" + url: "https://pub.dev" + source: hosted + version: "2.0.27" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "1995d88ec2948dac43edf8fe58eb434d35d22a2940ecee1a9fefcd62beee6eb3" + url: "https://pub.dev" + source: hosted + version: "2.2.3" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1" + url: "https://pub.dev" + source: hosted + version: "2.1.10" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" + url: "https://pub.dev" + source: hosted + version: "2.0.6" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: d3f80b32e83ec208ac95253e0cd4d298e104fbc63cb29c5c69edaed43b0c69d6 + url: "https://pub.dev" + source: hosted + version: "2.1.6" petitparser: dependency: transitive description: name: petitparser - sha256: a9346a3fbba7546a28374bdbcd7f54ea48bb47772bf3a7ab4bfaadc40bc8b8c6 + sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 + url: "https://pub.dev" + source: hosted + version: "5.4.0" + platform: + dependency: transitive + description: + name: platform + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" url: "https://pub.dev" source: hosted - version: "5.3.0" + version: "2.1.4" pointycastle: dependency: transitive description: name: pointycastle - sha256: c3120a968135aead39699267f4c74bc9a08e4e909e86bc1b0af5bfd78691123c + sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" url: "https://pub.dev" source: hosted - version: "3.7.2" + version: "3.7.3" pool: dependency: transitive description: @@ -592,6 +688,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" + process: + dependency: transitive + description: + name: process + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" + source: hosted + version: "4.2.4" protobuf: dependency: transitive description: @@ -612,50 +716,50 @@ packages: dependency: transitive description: name: pub_semver - sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" pubspec_parse: dependency: transitive description: name: pubspec_parse - sha256: ec85d7d55339d85f44ec2b682a82fea340071e8978257e5a43e69f79e98ef50c + sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "1.2.3" shelf: dependency: transitive description: name: shelf - sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.4.1" shelf_packages_handler: dependency: transitive description: name: shelf_packages_handler - sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306 + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" shelf_static: dependency: transitive description: name: shelf_static - sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c + sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" sky_engine: dependency: transitive description: flutter @@ -665,10 +769,18 @@ packages: dependency: transitive description: name: source_gen - sha256: c2bea18c95cfa0276a366270afaa2850b09b4a76db95d546f3d003dcc7011298 + sha256: "373f96cf5a8744bc9816c1ff41cf5391bbdbe3d7a96fe98c622b6738a8a7bd33" + url: "https://pub.dev" + source: hosted + version: "1.3.2" + source_helper: + dependency: transitive + description: + name: source_helper + sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" url: "https://pub.dev" source: hosted - version: "1.2.7" + version: "1.3.3" source_map_stack_trace: dependency: transitive description: @@ -689,10 +801,10 @@ packages: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" stack_trace: dependency: transitive description: @@ -737,26 +849,26 @@ packages: dependency: transitive description: name: test - sha256: "5301f54eb6fe945daa99bc8df6ece3f88b5ceaa6f996f250efdaaf63e22886be" + sha256: "4f92f103ef63b1bbac6f4bd1930624fca81b2574464482512c4f0896319be575" url: "https://pub.dev" source: hosted - version: "1.23.1" + version: "1.24.2" test_api: dependency: transitive description: name: test_api - sha256: "6182294da5abf431177fccc1ee02401f6df30f766bc6130a0852c6b6d7ee6b2d" + sha256: daadc9baabec998b062c9091525aa95786508b1c48e9c30f1f891b8bf6ff2e64 url: "https://pub.dev" source: hosted - version: "0.4.18" + version: "0.5.2" test_core: dependency: transitive description: name: test_core - sha256: d2e9240594b409565524802b84b7b39341da36dd6fd8e1660b53ad928ec3e9af + sha256: "3642b184882f79e76ca57a9230fb971e494c3c1fd09c21ae3083ce891bcc0aa1" url: "https://pub.dev" source: hosted - version: "0.4.24" + version: "0.5.2" time: dependency: transitive description: @@ -777,10 +889,10 @@ packages: dependency: transitive description: name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" users_repository: dependency: "direct main" description: @@ -800,26 +912,26 @@ packages: dependency: transitive description: name: vm_service - sha256: f6deed8ed625c52864792459709183da231ebf66ff0cf09e69b573227c377efe + sha256: f3743ca475e0c9ef71df4ba15eb2d7684eecd5c8ba20a462462e4e8b561b2e11 url: "https://pub.dev" source: hosted - version: "11.3.0" + version: "11.6.0" watcher: dependency: transitive description: name: watcher - sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.1.0" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.4.0" webkit_inspection_protocol: dependency: transitive description: @@ -828,22 +940,38 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + win32: + dependency: transitive + description: + name: win32 + sha256: "5a751eddf9db89b3e5f9d50c20ab8612296e4e8db69009788d6c8b060a84191c" + url: "https://pub.dev" + source: hosted + version: "4.1.4" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1 + url: "https://pub.dev" + source: hosted + version: "1.0.0" xml: dependency: transitive description: name: xml - sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5" + sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" url: "https://pub.dev" source: hosted - version: "6.2.2" + version: "6.3.0" yaml: dependency: transitive description: name: yaml - sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" sdks: - dart: ">=3.0.0-366.0.dev <4.0.0" - flutter: ">=3.0.0" + dart: ">=3.0.1 <4.0.0" + flutter: ">=3.3.0" diff --git a/pubspec.yaml b/pubspec.yaml index e9b189a..8278c2e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ">=3.0.0-366.0.dev" + sdk: ">=3.0.1" dependencies: flutter: @@ -26,6 +26,8 @@ dependencies: change_app_package_name: ^1.1.0 oauth2: ^2.0.1 dropdown_button2: ^2.0.0 + hive: ^2.2.3 + hive_flutter: ^1.1.0 dev_dependencies: analyzer: ^5.7.1 @@ -38,6 +40,7 @@ dev_dependencies: flutter_gen_runner: ^5.2.0 flutter_launcher_icons: ^0.12.0 freezed: ^2.3.2 + hive_generator: ^2.0.0 flutter: uses-material-design: true