diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index 7c56964..1dc6cf7 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 12.0 + 13.0 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..620e46e --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,43 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '13.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! + + 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..992c012 --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,47 @@ +PODS: + - country_codes (0.0.1): + - Flutter + - Flutter (1.0.0) + - flutter_timezone (0.0.1): + - Flutter + - package_info_plus (0.4.5): + - Flutter + - shared_preferences_foundation (0.0.1): + - Flutter + - FlutterMacOS + - url_launcher_ios (0.0.1): + - Flutter + +DEPENDENCIES: + - country_codes (from `.symlinks/plugins/country_codes/ios`) + - Flutter (from `Flutter`) + - flutter_timezone (from `.symlinks/plugins/flutter_timezone/ios`) + - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) + - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) + - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) + +EXTERNAL SOURCES: + country_codes: + :path: ".symlinks/plugins/country_codes/ios" + Flutter: + :path: Flutter + flutter_timezone: + :path: ".symlinks/plugins/flutter_timezone/ios" + package_info_plus: + :path: ".symlinks/plugins/package_info_plus/ios" + shared_preferences_foundation: + :path: ".symlinks/plugins/shared_preferences_foundation/darwin" + url_launcher_ios: + :path: ".symlinks/plugins/url_launcher_ios/ios" + +SPEC CHECKSUMS: + country_codes: b534fe92b5dd4d4cfd31a720f2bfa223373d162c + Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 + flutter_timezone: 7c838e17ffd4645d261e87037e5bebf6d38fe544 + package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 + shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb + url_launcher_ios: 7a95fa5b60cc718a708b8f2966718e93db0cef1b + +PODFILE CHECKSUM: 3c63482e143d1b91d2d2560aee9fb04ecc74ac7e + +COCOAPODS: 1.16.2 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 43c90eb..57e9dc1 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -14,6 +14,8 @@ 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 */; }; + D6AF61536FE25E9599461A74 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E57E810A499B08BAF03CC0D0 /* Pods_Runner.framework */; }; + EB6883DE340144BEBF060281 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D944ECEE9C0E97512C6BCF1 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -45,9 +47,13 @@ 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; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 5D944ECEE9C0E97512C6BCF1 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6229F102B123ED5F9F3BFE93 /* 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 = ""; }; + 6C0CDC925BB7C99C8EBD017E /* 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 = ""; }; 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 = ""; }; + 95C0595C8BB6FB8A5D611ED3 /* 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 = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -55,6 +61,10 @@ 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 = ""; }; + A17D7A19F74C6329B176EB0B /* 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 = ""; }; + AFBDA15C6A50D5350FED866E /* 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 = ""; }; + C79473F1C197D763A58E5350 /* 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 = ""; }; + E57E810A499B08BAF03CC0D0 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -62,12 +72,30 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + D6AF61536FE25E9599461A74 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E609A07D3395C2C4ECEA45C4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EB6883DE340144BEBF060281 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 02A04AD3A6C2D216A3C8D5C8 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E57E810A499B08BAF03CC0D0 /* Pods_Runner.framework */, + 5D944ECEE9C0E97512C6BCF1 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -76,6 +104,20 @@ path = RunnerTests; sourceTree = ""; }; + 7A415DEB957D1F1E6678B5C6 /* Pods */ = { + isa = PBXGroup; + children = ( + A17D7A19F74C6329B176EB0B /* Pods-Runner.debug.xcconfig */, + C79473F1C197D763A58E5350 /* Pods-Runner.release.xcconfig */, + AFBDA15C6A50D5350FED866E /* Pods-Runner.profile.xcconfig */, + 6C0CDC925BB7C99C8EBD017E /* Pods-RunnerTests.debug.xcconfig */, + 95C0595C8BB6FB8A5D611ED3 /* Pods-RunnerTests.release.xcconfig */, + 6229F102B123ED5F9F3BFE93 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -94,6 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + 7A415DEB957D1F1E6678B5C6 /* Pods */, + 02A04AD3A6C2D216A3C8D5C8 /* Frameworks */, ); sourceTree = ""; }; @@ -128,8 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + 7A415F6AF1E8B7A582616E65 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + E609A07D3395C2C4ECEA45C4 /* Frameworks */, ); buildRules = ( ); @@ -145,12 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 084A0FF0EE9676034AAFB1BE /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + EA6377470422299BFB036C7F /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -222,6 +270,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 084A0FF0EE9676034AAFB1BE /* [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; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -238,6 +308,28 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 7A415F6AF1E8B7A582616E65 /* [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; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -253,6 +345,23 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + EA6377470422299BFB036C7F /* [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; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -346,7 +455,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -378,6 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 6C0CDC925BB7C99C8EBD017E /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -395,6 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 95C0595C8BB6FB8A5D611ED3 /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -410,6 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 6229F102B123ED5F9F3BFE93 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -472,7 +584,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -523,7 +635,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 8e3ca5d..e3773d4 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -26,6 +26,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit" shouldUseLaunchSchemeArgsEnv = "YES"> diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a1..21a3cc1 100644 --- a/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/lib/features/auth/repo/auth_repo.dart b/lib/features/auth/repo/auth_repo.dart index 1158068..992dac8 100644 --- a/lib/features/auth/repo/auth_repo.dart +++ b/lib/features/auth/repo/auth_repo.dart @@ -1,4 +1,5 @@ import 'package:pulse/features/auth/screens/splash_screen.dart'; +import 'package:pulse/main.dart'; import 'package:pulse/utils/endpoints.dart'; import 'package:pulse/utils/local_storage.dart'; import 'package:pulse/utils/navigation.dart'; @@ -30,4 +31,14 @@ class AuthRepo { await prefs.clear(); Navigation.go(screen: SplashScreen(), context: context, replace: true); } + + static Future tokenExpired() async { + await prefs.clear(); + Toast.showToast( + message: 'Token Expired', context: navigatorKey.currentContext!); + Navigation.go( + screen: SplashScreen(), + context: navigatorKey.currentContext!, + replace: true); + } } diff --git a/lib/features/auth/screens/sign_in_screen.dart b/lib/features/auth/screens/sign_in_screen.dart index 711b75b..4d407bc 100644 --- a/lib/features/auth/screens/sign_in_screen.dart +++ b/lib/features/auth/screens/sign_in_screen.dart @@ -68,7 +68,7 @@ class _SignInScreenState extends State { Text('Sign In', style: kTitleTextStyle.copyWith(fontSize: 30)), Text('Please sign in to continue', - style: kBodyTitleTextStyle), + style: Theme.of(context).textTheme.bodyMedium), CustomDropDown( removePadding: true, selectedItem: hostType, diff --git a/lib/features/auth/screens/splash_screen.dart b/lib/features/auth/screens/splash_screen.dart index c0ffca5..82f7bc0 100644 --- a/lib/features/auth/screens/splash_screen.dart +++ b/lib/features/auth/screens/splash_screen.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:in_app_update/in_app_update.dart'; +import 'package:pulse/features/theme/cubit/theme_cubit.dart'; import 'package:pulse/features/websites/screens/websites_screen.dart'; import 'package:pulse/utils/endpoints.dart'; import 'package:pulse/utils/local_storage.dart'; @@ -23,7 +25,7 @@ class _SplashScreenState extends State { checkForUpdate(); baseUrl = prefs.getString(LocalStorage.host) ?? umamiUrl; String? token = prefs.getString(LocalStorage.jwt); - + await context.read().setDarkMode(); Navigation.go( screen: token != null ? WebsitesScreen() : SignInScreen(), context: context, diff --git a/lib/features/events/screens/events_screen.dart b/lib/features/events/screens/events_screen.dart index 53237e0..b0c2cc1 100644 --- a/lib/features/events/screens/events_screen.dart +++ b/lib/features/events/screens/events_screen.dart @@ -1,10 +1,10 @@ -import 'package:fade_shimmer/fade_shimmer.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:icons_plus/icons_plus.dart'; import 'package:intl/intl.dart'; import 'package:pulse/features/events/cubit/events_cubit.dart'; import 'package:pulse/features/websites/models/website.dart'; +import 'package:pulse/widgets/loading_shimmer.dart'; import '../../../utils/colors.dart'; import '../../../utils/utils.dart'; import '../../../widgets/drop_down_btn.dart'; @@ -83,12 +83,7 @@ class _SessionsScreenState extends State { indent: 20, ), itemBuilder: (_, i) => state.appState == AppState.loading - ? FadeShimmer( - height: 80, - width: double.infinity, - radius: 8, - fadeTheme: FadeTheme.light, - ) + ? LoadingShimmer() : EventCard(event: state.events[i]), itemCount: state.appState == AppState.loading ? 6 diff --git a/lib/features/events/widgets/event_card.dart b/lib/features/events/widgets/event_card.dart index 0a364b0..5ca5182 100644 --- a/lib/features/events/widgets/event_card.dart +++ b/lib/features/events/widgets/event_card.dart @@ -51,10 +51,13 @@ class EventCard extends StatelessWidget { children: [ TextSpan( text: '${isEvent ? 'event' : 'view'} - ', - style: kBodyTextStyle.copyWith( - color: Colors.black, - fontWeight: FontWeight.bold, - ), + style: Theme.of(context) + .textTheme + .bodyMedium + ?.copyWith( + fontSize: 12, + fontWeight: FontWeight.bold, + ), ), TextSpan( text: isEvent ? event.eventName : event.urlPath, diff --git a/lib/features/nav_bar.dart b/lib/features/nav_bar.dart index 9ee618c..5ca8325 100644 --- a/lib/features/nav_bar.dart +++ b/lib/features/nav_bar.dart @@ -71,7 +71,7 @@ class _NavBarState extends State with TickerProviderStateMixin { kBodyTextStyle.copyWith(fontWeight: FontWeight.w600), unselectedLabelStyle: kBodyTextStyle.copyWith(color: kGreyColor), showSelectedLabels: true, - // backgroundColor: Theme.of(context).appBarTheme.backgroundColor, + backgroundColor: Theme.of(context).appBarTheme.backgroundColor, items: const [ BottomNavigationBarItem( icon: Icon(Icons.bar_chart_outlined), diff --git a/lib/features/overview/screens/overview_screen.dart b/lib/features/overview/screens/overview_screen.dart index d62fb7a..722c1ee 100644 --- a/lib/features/overview/screens/overview_screen.dart +++ b/lib/features/overview/screens/overview_screen.dart @@ -8,8 +8,8 @@ import 'package:pulse/features/websites/models/website.dart'; import 'package:pulse/utils/text.dart'; import 'package:pulse/widgets/drop_down.dart'; import 'package:pulse/widgets/drop_down_btn.dart'; -import 'package:fade_shimmer/fade_shimmer.dart'; import 'package:pulse/widgets/loading_indicator.dart'; +import 'package:pulse/widgets/loading_shimmer.dart'; import 'package:pulse/widgets/title_card.dart'; import '../../../utils/utils.dart'; import '../cubit/overview_cubit.dart'; @@ -94,11 +94,9 @@ class _OverviewScreenState extends State { ), TitleCard(title: 'Summary'), state.stats == null || state.appState == AppState.loading - ? FadeShimmer( + ? LoadingShimmer( height: 100, - width: double.infinity, radius: 16, - fadeTheme: FadeTheme.light, ) : StatCard( stat: state.stats!.entries.first, @@ -120,11 +118,10 @@ class _OverviewScreenState extends State { return state.stats == null || state.appState == AppState.loading - ? FadeShimmer( + ? LoadingShimmer( height: 8, - width: 150, radius: 16, - fadeTheme: FadeTheme.light, + width: 150, ) : StatCard( stat: stats.entries @@ -177,11 +174,9 @@ class _OverviewScreenState extends State { PageviewChart( data: state.pageview!, unit: state.unit.toLowerCase()) else - FadeShimmer( + LoadingShimmer( height: 250, - width: double.infinity, radius: 16, - fadeTheme: FadeTheme.light, ), TitleCard(title: 'Metrics'), CustomDropDown( @@ -237,17 +232,13 @@ class _OverviewScreenState extends State { spacing: 10, children: state.appState == AppState.secondaryLoading ? [ - FadeShimmer( + LoadingShimmer( height: 50, - width: double.infinity, radius: 8, - fadeTheme: FadeTheme.light, ), - FadeShimmer( + LoadingShimmer( height: 50, - width: double.infinity, radius: 8, - fadeTheme: FadeTheme.light, ), ] : state.metrics diff --git a/lib/features/overview/widgets/pageview_chart.dart b/lib/features/overview/widgets/pageview_chart.dart index ab5e11f..d1e9865 100644 --- a/lib/features/overview/widgets/pageview_chart.dart +++ b/lib/features/overview/widgets/pageview_chart.dart @@ -27,8 +27,10 @@ class PageviewChart extends StatelessWidget { child: Column( spacing: 5, children: [ - getIndicator(title: 'Pageviews', color: Colors.orange), - getIndicator(title: 'Sessions', color: Colors.blue), + getIndicator( + title: 'Pageviews', color: Colors.orange, context: context), + getIndicator( + title: 'Sessions', color: Colors.blue, context: context), ], ), ), @@ -77,7 +79,7 @@ class PageviewChart extends StatelessWidget { ); } - Row getIndicator({required Color color, required String title}) { + Row getIndicator({required Color color, required String title, context}) { return Row( spacing: 8, children: [ @@ -91,8 +93,10 @@ class PageviewChart extends StatelessWidget { ), Text( title, - style: kBodyTextStyle.copyWith( - fontWeight: FontWeight.bold, color: Colors.black), + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + fontSize: 12, + fontWeight: FontWeight.bold, + ), ), ], ); diff --git a/lib/features/overview/widgets/stat_card.dart b/lib/features/overview/widgets/stat_card.dart index 63b185c..f5ab34a 100644 --- a/lib/features/overview/widgets/stat_card.dart +++ b/lib/features/overview/widgets/stat_card.dart @@ -19,8 +19,6 @@ class StatCard extends StatelessWidget { @override Widget build(BuildContext context) { - logger.i(stat); - logger.i(comp); double percentage = OverviewRepo().getPercentage(current: stat.value, previous: comp.value); return ContainerWrapper( diff --git a/lib/features/sessions/screens/session_details_screen.dart b/lib/features/sessions/screens/session_details_screen.dart index d869fb4..9a990c1 100644 --- a/lib/features/sessions/screens/session_details_screen.dart +++ b/lib/features/sessions/screens/session_details_screen.dart @@ -17,6 +17,7 @@ import 'package:pulse/utils/text.dart'; import 'package:pulse/utils/utils.dart'; import 'package:pulse/widgets/custom_appbar.dart'; import 'package:country_codes/country_codes.dart'; +import 'package:pulse/widgets/loading_shimmer.dart'; import 'package:pulse/widgets/title_card.dart'; import '../../../widgets/drop_down_btn.dart'; @@ -121,11 +122,9 @@ class _SessionDetailsScreenState extends State { ], ), _session == null - ? FadeShimmer( + ? LoadingShimmer( height: 100, - width: double.infinity, radius: 16, - fadeTheme: FadeTheme.light, ) : Row( spacing: 15, @@ -271,7 +270,10 @@ class _SessionDetailsScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(title, - style: kBodyTitleTextStyle.copyWith(fontWeight: FontWeight.bold)), + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + fontWeight: FontWeight.bold, + fontSize: 14, + )), Row( spacing: 5, crossAxisAlignment: CrossAxisAlignment.center, diff --git a/lib/features/sessions/screens/sessions_screen.dart b/lib/features/sessions/screens/sessions_screen.dart index 190a34e..d03f3c4 100644 --- a/lib/features/sessions/screens/sessions_screen.dart +++ b/lib/features/sessions/screens/sessions_screen.dart @@ -1,4 +1,3 @@ -import 'package:fade_shimmer/fade_shimmer.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:icons_plus/icons_plus.dart'; @@ -7,6 +6,7 @@ import 'package:pulse/features/sessions/cubit/sessions_cubit.dart'; import 'package:pulse/features/sessions/widget/session_card.dart'; import 'package:pulse/features/websites/models/website.dart'; import 'package:pulse/widgets/loading_indicator.dart'; +import 'package:pulse/widgets/loading_shimmer.dart'; import '../../../utils/colors.dart'; import '../../../utils/utils.dart'; @@ -125,11 +125,9 @@ class _SessionsScreenState extends State { indent: 20, ), itemBuilder: (_, i) => state.appState == AppState.loading - ? FadeShimmer( + ? LoadingShimmer( height: 80, - width: double.infinity, radius: 8, - fadeTheme: FadeTheme.light, ) : SessionCard(session: state.sessions[i]), itemCount: state.appState == AppState.loading diff --git a/lib/features/sessions/widget/session_card.dart b/lib/features/sessions/widget/session_card.dart index 520959a..04f1a38 100644 --- a/lib/features/sessions/widget/session_card.dart +++ b/lib/features/sessions/widget/session_card.dart @@ -58,10 +58,10 @@ class SessionCard extends StatelessWidget { children: [ Text( '${CountryCodes.name(locale: Locale(session.language, session.country))}, ${session.city} -- ${session.os}', - style: kBodyTextStyle.copyWith( - fontWeight: FontWeight.bold, - color: Colors.black, - ), + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + fontSize: 12, + fontWeight: FontWeight.bold, + ), ), Text( '${DateFormat('EEE, MMM d y').format(session.createdAt!.toLocal())} at ${DateFormat('HH:mm').format(session.createdAt!.toLocal())} hrs', diff --git a/lib/features/settings/screens/settings_screen.dart b/lib/features/settings/screens/settings_screen.dart index 69ac906..86f713f 100644 --- a/lib/features/settings/screens/settings_screen.dart +++ b/lib/features/settings/screens/settings_screen.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:icons_plus/icons_plus.dart'; import 'package:pulse/features/auth/repo/auth_repo.dart'; import 'package:pulse/features/settings/screens/model/btn.dart'; +import 'package:pulse/features/theme/cubit/theme_cubit.dart'; import 'package:pulse/utils/colors.dart'; import 'package:pulse/widgets/custom_appbar.dart'; import 'package:pulse/widgets/title_card.dart'; @@ -36,8 +38,35 @@ class _SettingsScreenState extends State { @override Widget build(BuildContext context) { List btns = [ - //account - + //theme + Btn( + child: BlocBuilder( + builder: (context, state) { + return SwitchTheme( + data: SwitchThemeData( + trackOutlineColor: MaterialStateProperty.resolveWith((states) { + if (!states.contains(MaterialState.selected)) { + return kGreyColor; + } + return Colors.transparent; + }), + ), + child: Switch.adaptive( + value: state.darkMode, + onChanged: (_) { + context.read().setThemeMode(); + }, + activeColor: kPrimaryColor, + ), + ); + }, + ), + title: 'Dark Theme', + des: 'Enable/Disable dark theme', + type: 'theme', + icon: Iconsax.moon_bold, + click: () {}, + ), //app Btn( @@ -61,15 +90,7 @@ class _SettingsScreenState extends State { mode: LaunchMode.inAppBrowserView); }, ), - Btn( - title: 'Source Code', - des: 'Pulse app source code', - type: 'app', - icon: Icons.code_rounded, - click: () { - Links.goToLink('https://github.com/ericknamukolo/pulse'); - }, - ), + Btn( title: 'Developer', des: 'information about the dev', @@ -88,9 +109,27 @@ class _SettingsScreenState extends State { Links.goToLink('https://www.sonka.io/creator/erick'); }, ), - // contact + // github + Btn( + title: 'Source Code', + des: 'Pulse app source code', + type: 'github', + icon: Icons.code_rounded, + click: () { + Links.goToLink('https://github.com/ericknamukolo/pulse'); + }, + ), Btn( - title: 'Help & Support/Feature Suggestions', + title: 'Issues or Feature suggestions', + des: 'Create an issue on github', + type: 'github', + icon: Bootstrap.github, + click: () { + Links.goToLink('https://github.com/ericknamukolo/pulse/issues'); + }, + ), // contact + Btn( + title: 'Help & Support', des: 'Contact Me', type: 'contact', icon: Icons.contact_support_rounded, @@ -135,10 +174,18 @@ class _SettingsScreenState extends State { child: SingleChildScrollView( child: Column( children: [ + _buildSettings( + title: 'Theme', + btns: btns.where((e) => e.type == 'theme').toList(), + ), _buildSettings( title: 'App', btns: btns.where((e) => e.type == 'app').toList(), ), + _buildSettings( + title: 'Github', + btns: btns.where((e) => e.type == 'github').toList(), + ), _buildSettings( title: 'Contact', btns: btns.where((e) => e.type == 'contact').toList(), diff --git a/lib/features/settings/widgets/settings_btn.dart b/lib/features/settings/widgets/settings_btn.dart index 5e9e018..170e289 100644 --- a/lib/features/settings/widgets/settings_btn.dart +++ b/lib/features/settings/widgets/settings_btn.dart @@ -44,7 +44,7 @@ class SettingsBtn extends StatelessWidget { style: kBodyTitleTextStyle.copyWith( color: getColor() == kErrorColor ? kErrorColor - : Colors.black, + : Theme.of(context).textTheme.bodyMedium?.color, )), Text(btn.des ?? '-', style: kBodyTextStyle.copyWith(color: getColor())), diff --git a/lib/features/theme/cubit/theme_cubit.dart b/lib/features/theme/cubit/theme_cubit.dart new file mode 100644 index 0000000..193d6ac --- /dev/null +++ b/lib/features/theme/cubit/theme_cubit.dart @@ -0,0 +1,22 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:equatable/equatable.dart'; +import 'package:pulse/utils/local_storage.dart'; +import 'package:pulse/utils/utils.dart'; + +part 'theme_state.dart'; + +class ThemeCubit extends Cubit { + ThemeCubit() : super(ThemeState()); + + Future setThemeMode() async { + bool mode = state.darkMode; + + await prefs.setBool(LocalStorage.darkTheme, !mode); + emit(state.copyWith(darkMode: !mode)); + } + + Future setDarkMode() async { + bool? mode = prefs.getBool(LocalStorage.darkTheme); + emit(state.copyWith(darkMode: mode ?? false)); + } +} diff --git a/lib/features/theme/cubit/theme_state.dart b/lib/features/theme/cubit/theme_state.dart new file mode 100644 index 0000000..04c17a3 --- /dev/null +++ b/lib/features/theme/cubit/theme_state.dart @@ -0,0 +1,13 @@ +part of 'theme_cubit.dart'; + +class ThemeState extends Equatable { + final bool darkMode; + const ThemeState({this.darkMode = true}); + + @override + List get props => [darkMode]; + + ThemeState copyWith({bool? darkMode}) { + return ThemeState(darkMode: darkMode ?? this.darkMode); + } +} diff --git a/lib/features/websites/widgets/web_card.dart b/lib/features/websites/widgets/web_card.dart index 02abbba..66aaa93 100644 --- a/lib/features/websites/widgets/web_card.dart +++ b/lib/features/websites/widgets/web_card.dart @@ -22,7 +22,7 @@ class WebCard extends StatelessWidget { child: Container( padding: EdgeInsets.all(15.0), decoration: BoxDecoration( - color: Colors.white, + color: Theme.of(context).cardColor, borderRadius: BorderRadius.circular(8), boxShadow: shadows, ), @@ -38,7 +38,7 @@ class WebCard extends StatelessWidget { children: [ Text( website.name, - style: kBodyTitleTextStyle, + style: Theme.of(context).textTheme.bodyMedium, ), Text( website.domain, diff --git a/lib/main.dart b/lib/main.dart index 7a718de..e5c6e10 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,7 +4,9 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:pulse/features/events/cubit/events_cubit.dart'; import 'package:pulse/features/overview/cubit/overview_cubit.dart'; import 'package:pulse/features/sessions/cubit/sessions_cubit.dart'; +import 'package:pulse/features/theme/cubit/theme_cubit.dart'; import 'package:pulse/features/websites/cubit/website_cubit.dart'; +import 'package:pulse/utils/text.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_timezone/flutter_timezone.dart'; import 'features/auth/cubit/auth_cubit.dart'; @@ -13,6 +15,8 @@ import 'utils/colors.dart'; import 'utils/utils.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; +final GlobalKey navigatorKey = GlobalKey(); + void main() async { WidgetsFlutterBinding.ensureInitialized(); await dotenv.load(fileName: ".env"); @@ -34,16 +38,65 @@ class Pulse extends StatelessWidget { BlocProvider(create: (_) => OverviewCubit()), BlocProvider(create: (_) => EventsCubit()), BlocProvider(create: (_) => SessionsCubit()), + BlocProvider(create: (_) => ThemeCubit()), ], - child: MaterialApp( - debugShowCheckedModeBanner: false, - theme: ThemeData( - scaffoldBackgroundColor: Color(0xffF5F5F5), - fontFamily: 'Montserrat', - useMaterial3: true, - colorScheme: ColorScheme.fromSeed(seedColor: kPrimaryColor), - ), - home: SplashScreen(), + child: BlocBuilder( + builder: (context, state) { + return MaterialApp( + navigatorKey: navigatorKey, + debugShowCheckedModeBanner: false, + theme: ThemeData( + scaffoldBackgroundColor: + state.darkMode ? Color(0xff141414) : Color(0xffF5F5F5), + appBarTheme: AppBarTheme( + backgroundColor: state.darkMode ? Color(0xff1A1A1A) : null, + ), + textTheme: TextTheme( + bodyMedium: kBodyTitleTextStyle.copyWith( + color: state.darkMode ? Colors.white : Colors.black87), + bodyLarge: kTitleTextStyle.copyWith( + color: state.darkMode ? Colors.white : Colors.black87)), + cardColor: state.darkMode ? Color(0xff1A1A1A) : Colors.white, + focusColor: + state.darkMode ? Color(0xff292929) : const Color(0xffF5F9FE), + fontFamily: 'Montserrat', + useMaterial3: true, + colorScheme: ColorScheme.fromSeed( + seedColor: kPrimaryColor, + brightness: state.darkMode ? Brightness.dark : Brightness.light, + ).copyWith( + surface: + state.darkMode ? const Color(0xff1A1A1A) : Colors.white, + onSurface: state.darkMode ? Colors.white : Colors.black87, + ), + datePickerTheme: DatePickerThemeData( + backgroundColor: + state.darkMode ? const Color(0xff1A1A1A) : Colors.white, + headerBackgroundColor: + state.darkMode ? const Color(0xff1A1A1A) : null, + headerForegroundColor: + state.darkMode ? Colors.white : Colors.black87, + dayForegroundColor: WidgetStateProperty.resolveWith((states) { + if (states.contains(WidgetState.disabled)) { + return state.darkMode + ? Colors.white.withOpacity(.38) + : Colors.black.withOpacity(.38); + } + return state.darkMode ? Colors.white : Colors.black87; + }), + yearForegroundColor: WidgetStateProperty.resolveWith((states) { + if (states.contains(WidgetState.disabled)) { + return state.darkMode + ? Colors.white.withOpacity(.38) + : Colors.black.withOpacity(.38); + } + return state.darkMode ? Colors.white : Colors.black87; + }), + ), + ), + home: SplashScreen(), + ); + }, ), ); } diff --git a/lib/utils/local_storage.dart b/lib/utils/local_storage.dart index 3d6884d..e6a104a 100644 --- a/lib/utils/local_storage.dart +++ b/lib/utils/local_storage.dart @@ -1,4 +1,5 @@ class LocalStorage { static String jwt = 'jwt_token'; static String host = 'host_url'; + static String darkTheme = 'dark_theme'; } diff --git a/lib/utils/requests.dart b/lib/utils/requests.dart index 2a8496f..1713c4a 100644 --- a/lib/utils/requests.dart +++ b/lib/utils/requests.dart @@ -4,6 +4,7 @@ import 'dart:io'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:http/http.dart' as http; +import 'package:pulse/features/auth/repo/auth_repo.dart'; import 'package:pulse/utils/utils.dart'; import 'local_storage.dart'; @@ -143,9 +144,12 @@ class Requests { return throw Exception('Invalid host url'); } + if (res.statusCode == 401) { + await AuthRepo.tokenExpired(); + return null; + } + if (res.statusCode != okStatusCode) { - logger.i(res.body); - logger.i(endpoint); return throw Exception( json.decode(res.body)?['error'] ?? 'Error occurred'); } diff --git a/lib/widgets/container_wrapper.dart b/lib/widgets/container_wrapper.dart index d96538a..f1f534c 100644 --- a/lib/widgets/container_wrapper.dart +++ b/lib/widgets/container_wrapper.dart @@ -25,7 +25,7 @@ class ContainerWrapper extends StatelessWidget { width: width, height: height, decoration: BoxDecoration( - color: Colors.white, + color: Theme.of(context).cardColor, borderRadius: BorderRadius.circular(bRadius), boxShadow: shadows, border: Border.all( diff --git a/lib/widgets/custom_appbar.dart b/lib/widgets/custom_appbar.dart index 6c9ba81..1ca11ba 100644 --- a/lib/widgets/custom_appbar.dart +++ b/lib/widgets/custom_appbar.dart @@ -1,4 +1,3 @@ -import 'package:pulse/utils/text.dart'; import 'package:pulse/widgets/icon_btn.dart'; import 'package:flutter/material.dart'; @@ -48,7 +47,7 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget { padding: const EdgeInsets.only(top: 12.0), child: Text( title!.toUpperCase(), - style: kTitleTextStyle, + style: Theme.of(context).textTheme.bodyLarge, ), ), ); diff --git a/lib/widgets/custom_text_field.dart b/lib/widgets/custom_text_field.dart index 764a7a2..598e3a8 100644 --- a/lib/widgets/custom_text_field.dart +++ b/lib/widgets/custom_text_field.dart @@ -57,7 +57,8 @@ class CustomTextField extends StatelessWidget { visible: title != null, child: Padding( padding: const EdgeInsets.only(bottom: 5.0), - child: Text(title ?? '', style: kBodyTitleTextStyle), + child: Text(title ?? '', + style: Theme.of(context).textTheme.bodyMedium), ), ), TextFormField( @@ -79,7 +80,8 @@ class CustomTextField extends StatelessWidget { decoration: InputDecoration( prefixText: prefixText, filled: true, - fillColor: const Color(0xffF5F9FE), + fillColor: Theme.of(context) + .focusColor, // fillColor: const Color(0xffF5F9FE), border: InputBorder.none, errorStyle: kBodyTextStyle.copyWith(fontSize: 10, color: kErrorColor), diff --git a/lib/widgets/drop_down.dart b/lib/widgets/drop_down.dart index c04ab5e..75dbd17 100644 --- a/lib/widgets/drop_down.dart +++ b/lib/widgets/drop_down.dart @@ -12,7 +12,7 @@ class CustomDropDown extends StatelessWidget { required this.hint, required this.onChanged, this.preIcon, - this.fillColor = Colors.white, + this.fillColor, this.title, this.removePadding = false, this.isRequired = false, @@ -41,7 +41,11 @@ class CustomDropDown extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.only(bottom: 8.0), - child: Text(title!, style: kBodyTitleTextStyle), + child: Text(title!, + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + fontSize: 14, + fontWeight: FontWeight.w600, + )), ), ], ), @@ -51,7 +55,7 @@ class CustomDropDown extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 10), height: maxHeight, decoration: BoxDecoration( - color: fillColor, + color: fillColor ?? Theme.of(context).cardColor, border: Border.all(color: kGreyColor.withOpacity(.3), width: 1.5), borderRadius: BorderRadius.circular(10.0), ), @@ -69,6 +73,7 @@ class CustomDropDown extends StatelessWidget { ), Expanded( child: DropdownButton( + dropdownColor: Theme.of(context).appBarTheme.backgroundColor, underline: const SizedBox(), icon: const Icon( Icons.keyboard_arrow_down_rounded, diff --git a/lib/widgets/loading_shimmer.dart b/lib/widgets/loading_shimmer.dart new file mode 100644 index 0000000..7ae881d --- /dev/null +++ b/lib/widgets/loading_shimmer.dart @@ -0,0 +1,29 @@ +import 'package:fade_shimmer/fade_shimmer.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:pulse/features/theme/cubit/theme_cubit.dart'; + +class LoadingShimmer extends StatelessWidget { + final double height; + final double radius; + final double width; + const LoadingShimmer( + {super.key, + this.height = 80, + this.radius = 8, + this.width = double.infinity}); + + @override + Widget build(BuildContext context) { + return BlocBuilder( + builder: (context, state) { + return FadeShimmer( + height: height, + width: width, + radius: radius, + fadeTheme: state.darkMode ? FadeTheme.dark : FadeTheme.light, + ); + }, + ); + } +} diff --git a/lib/widgets/title_card.dart b/lib/widgets/title_card.dart index ad8d9ab..6fa959f 100644 --- a/lib/widgets/title_card.dart +++ b/lib/widgets/title_card.dart @@ -26,9 +26,10 @@ class TitleCard extends StatelessWidget { Text( title.toUpperCase(), style: kBodyTextStyle.copyWith( - letterSpacing: 1.0, - fontWeight: FontWeight.w700, - color: Colors.black), + letterSpacing: 1.0, + fontWeight: FontWeight.w700, + color: Theme.of(context).textTheme.bodyMedium?.color, + ), ), Container( margin: const EdgeInsets.symmetric(vertical: 5), diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/macos/Flutter/Flutter-Debug.xcconfig index c2efd0b..4b81f9b 100644 --- a/macos/Flutter/Flutter-Debug.xcconfig +++ b/macos/Flutter/Flutter-Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/Flutter-Release.xcconfig b/macos/Flutter/Flutter-Release.xcconfig index c2efd0b..5caa9d1 100644 --- a/macos/Flutter/Flutter-Release.xcconfig +++ b/macos/Flutter/Flutter-Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Podfile b/macos/Podfile new file mode 100644 index 0000000..ff5ddb3 --- /dev/null +++ b/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.15' + +# 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', 'ephemeral', '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 Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_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_macos_build_settings(target) + end +end diff --git a/pubspec.lock b/pubspec.lock index 9840183..30f775d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,18 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: da0d9209ca76bde579f2da330aeb9df62b6319c834fa7baae052021b0462401f + sha256: "8d7ff3948166b8ec5da0fbb5962000926b8e02f2ed9b3e51d1738905fbd4c98d" url: "https://pub.dev" source: hosted - version: "85.0.0" + version: "93.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "974859dc0ff5f37bc4313244b3218c791810d03ab3470a579580279ba971a48d" + sha256: de7148ed2fcec579b19f122c1800933dfa028f6d9fd38a152b04b1516cec120b url: "https://pub.dev" source: hosted - version: "7.7.1" + version: "10.0.1" archive: dependency: transitive description: @@ -37,74 +37,58 @@ packages: dependency: transitive description: name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.13.0" bloc: dependency: transitive description: name: bloc - sha256: "52c10575f4445c61dd9e0cafcc6356fdd827c4c64dd7945ef3c4105f6b6ac189" + sha256: a48653a82055a900b88cd35f92429f068c5a8057ae9b136d197b3d56c57efb81 url: "https://pub.dev" source: hosted - version: "9.0.0" + version: "9.2.0" boolean_selector: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" build: dependency: transitive description: name: build - sha256: cef23f1eda9b57566c81e2133d196f8e3df48f244b317368d65c5943d91148f0 + sha256: "275bf6bb2a00a9852c28d4e0b410da1d833a734d57d39d44f94bfc895a484ec3" url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "4.0.4" build_config: dependency: transitive description: name: build_config - sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33" + sha256: "4f64382b97504dc2fcdf487d5aae33418e08b4703fc21249e4db6d804a4d0187" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.2.0" build_daemon: dependency: transitive description: name: build_daemon - sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa" + sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957 url: "https://pub.dev" source: hosted - version: "4.0.4" - build_resolvers: - dependency: transitive - description: - name: build_resolvers - sha256: b9e4fda21d846e192628e7a4f6deda6888c36b5b69ba02ff291a01fd529140f0 - url: "https://pub.dev" - source: hosted - version: "2.4.4" + version: "4.1.1" build_runner: dependency: "direct dev" description: name: build_runner - sha256: "058fe9dce1de7d69c4b84fada934df3e0153dd000758c4d65964d0166779aa99" - url: "https://pub.dev" - source: hosted - version: "2.4.15" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: "22e3aa1c80e0ada3722fe5b63fd43d9c8990759d0a2cf489c8c5d7b2bdebc021" + sha256: ac78098de97893812b7aff1154f29008fa2464cad9e8e7044d39bc905dad4fbc url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "2.11.0" built_collection: dependency: transitive description: @@ -117,10 +101,10 @@ packages: dependency: transitive description: name: built_value - sha256: "0b1b12a0a549605e5f04476031cd0bc91ead1d7c8e830773a18ee54179b3cb62" + sha256: "7931c90b84bc573fef103548e354258ae4c9d28d140e41961df6843c5d60d4d8" url: "https://pub.dev" source: hosted - version: "8.11.0" + version: "8.12.3" change_app_package_name: dependency: "direct main" description: @@ -141,10 +125,10 @@ packages: dependency: transitive description: name: checked_yaml - sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "2.0.4" clock: dependency: transitive description: @@ -157,10 +141,10 @@ packages: dependency: transitive description: name: code_builder - sha256: "0ec10bf4a89e4c613960bf1e8b42c64127021740fb21640c29c909826a5eea3e" + sha256: "6a6cab2ba4680d6423f34a9b972a4c9a94ebe1b62ecec4e1a1f2cba91fd1319d" url: "https://pub.dev" source: hosted - version: "4.10.1" + version: "4.11.1" collection: dependency: transitive description: @@ -189,18 +173,18 @@ packages: dependency: "direct main" description: name: country_flags - sha256: "66726c7070d60c2f90c4a1d58980e9188fa04335d6287e98aef835461019c3c2" + sha256: "78a7bf8aabd7ae1a90087f0c517471ac9ebfe07addc652692f58da0f0f833196" url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "3.3.0" crypto: dependency: transitive description: name: crypto - sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "3.0.7" cupertino_icons: dependency: "direct main" description: @@ -213,18 +197,18 @@ packages: dependency: transitive description: name: dart_style - sha256: "27eb0ae77836989a3bc541ce55595e8ceee0992807f14511552a898ddd0d88ac" + sha256: "15a7db352c8fc6a4d2bc475ba901c25b39fe7157541da4c16eacce6f8be83e49" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.1.5" equatable: dependency: "direct main" description: name: equatable - sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7" + sha256: "3e0141505477fd8ad55d6eb4e7776d3fe8430be8e497ccb1521370c3f21a3e2b" url: "https://pub.dev" source: hosted - version: "2.0.7" + version: "2.0.8" fade_shimmer: dependency: "direct main" description: @@ -245,10 +229,10 @@ packages: dependency: transitive description: name: ffi - sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" + sha256: d07d37192dbf97461359c1518788f203b0c9102cfd2c35a716b823741219542c url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.5" file: dependency: transitive description: @@ -290,10 +274,10 @@ packages: dependency: "direct main" description: name: flutter_boring_avatars - sha256: "281305a2f5441d00b12ff36f94ba8ae3b5eb3dda4114953f6040c8d899e99773" + sha256: c4439a5e6753db58debd8d85a92e9747727e5f5c05cc1f3a252ba70d2c1df720 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.0" flutter_dotenv: dependency: "direct main" description: @@ -314,10 +298,10 @@ packages: dependency: transitive description: name: flutter_svg - sha256: cd57f7969b4679317c17af6fd16ee233c1e60a82ed209d8a475c54fd6fd6f845 + sha256: "87fbd7c534435b6c5d9d98b01e1fd527812b82e68ddd8bd35fc45ed0fa8f0a95" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.3" flutter_test: dependency: "direct dev" description: flutter @@ -336,14 +320,6 @@ packages: description: flutter source: sdk version: "0.0.0" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.dev" - source: hosted - version: "4.0.0" glob: dependency: transitive description: @@ -364,10 +340,10 @@ packages: dependency: "direct main" description: name: http - sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b" + sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.6.0" http_multi_server: dependency: transitive description: @@ -388,10 +364,10 @@ packages: dependency: "direct main" description: name: icons_launcher - sha256: "2949eef3d336028d89133f69ef221d877e09deed04ebd8e738ab4a427850a7a2" + sha256: "6317d56a73ee528f1dd570d7cd7be120ce58014e0fe635d141ada3d88782f58d" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.3" icons_plus: dependency: "direct main" description: @@ -404,18 +380,18 @@ packages: dependency: transitive description: name: image - sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" + sha256: "492bd52f6c4fbb6ee41f781ff27765ce5f627910e1e0cbecfa3d9add5562604c" url: "https://pub.dev" source: hosted - version: "4.5.4" + version: "4.7.2" in_app_update: dependency: "direct main" description: name: in_app_update - sha256: "489572accaa55b51518b2d64676ca8c3c6d4c989fa53cf718001882237691a3c" + sha256: "9924a3efe592e1c0ec89dda3683b3cfec3d4cd02d908e6de00c24b759038ddb1" url: "https://pub.dev" source: hosted - version: "4.2.3" + version: "4.2.5" intl: dependency: "direct main" description: @@ -444,42 +420,42 @@ packages: dependency: transitive description: name: jovial_svg - sha256: "6791b1435547bdc0793081a166d41a8a313ebc61e4e5136fb7a3218781fb9e50" - url: "https://pub.dev" - source: hosted - version: "1.1.27" - js: - dependency: transitive - description: - name: js - sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf + sha256: "08dd24b800d48796c9c0227acb96eb00c6cacccb1d7de58d79fc924090049868" url: "https://pub.dev" source: hosted - version: "0.7.1" + version: "1.1.28" json_annotation: dependency: "direct main" description: name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + sha256: "805fa86df56383000f640384b282ce0cb8431f1a7a2396de92fb66186d8c57df" + url: "https://pub.dev" + source: hosted + version: "4.10.0" + json_schema: + dependency: transitive + description: + name: json_schema + sha256: f37d9c3fdfe8c9aae55fdfd5af815d24ce63c3a0f6a2c1f0982c30f43643fa1a url: "https://pub.dev" source: hosted - version: "4.9.0" + version: "5.2.2" json_serializable: dependency: "direct dev" description: name: json_serializable - sha256: c50ef5fc083d5b5e12eef489503ba3bf5ccc899e487d691584699b4bdefeea8c + sha256: "93fba3ad139dab2b1ce59ecc6fdce6da46a42cdb6c4399ecda30f1e7e725760d" url: "https://pub.dev" source: hosted - version: "6.9.5" + version: "6.12.0" leak_tracker: dependency: transitive description: name: leak_tracker - sha256: "8dcda04c3fc16c14f48a7bb586d4be1f0d1572731b6d81d51772ef47c02081e0" + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" url: "https://pub.dev" source: hosted - version: "11.0.1" + version: "11.0.2" leak_tracker_flutter_testing: dependency: transitive description: @@ -508,10 +484,10 @@ packages: dependency: "direct main" description: name: logger - sha256: "2621da01aabaf223f8f961e751f2c943dbb374dc3559b982f200ccedadaa6999" + sha256: a7967e31b703831a893bbc3c3dd11db08126fe5f369b5c648a36f821979f5be3 url: "https://pub.dev" source: hosted - version: "2.6.0" + version: "2.6.2" logging: dependency: transitive description: @@ -540,10 +516,10 @@ packages: dependency: transitive description: name: meta - sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" mime: dependency: transitive description: @@ -572,18 +548,18 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: "7976bfe4c583170d6cdc7077e3237560b364149fcd268b5f53d95a991963b191" + sha256: "16eee997588c60225bda0488b6dcfac69280a6b7a3cf02c741895dd370a02968" url: "https://pub.dev" source: hosted - version: "8.3.0" + version: "8.3.1" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "6c935fb612dff8e3cc9632c2b301720c77450a126114126ffaafe28d2e87956c" + sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086" url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "3.2.1" path: dependency: transitive description: @@ -628,10 +604,10 @@ packages: dependency: transitive description: name: petitparser - sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + sha256: "1a97266a94f7350d30ae522c0af07890c70b8e62c71e8e3920d1db4d23c057d1" url: "https://pub.dev" source: hosted - version: "6.0.2" + version: "7.0.1" platform: dependency: transitive description: @@ -652,10 +628,10 @@ packages: dependency: transitive description: name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d" url: "https://pub.dev" source: hosted - version: "1.5.1" + version: "1.5.2" posix: dependency: transitive description: @@ -668,10 +644,10 @@ packages: dependency: transitive description: name: provider - sha256: "4abbd070a04e9ddc287673bf5a030c7ca8b685ff70218720abab8b092f53dd84" + sha256: "4e82183fa20e5ca25703ead7e05de9e4cceed1fbd1eadc1ac3cb6f565a09f272" url: "https://pub.dev" source: hosted - version: "6.1.5" + version: "6.1.5+1" pub_semver: dependency: transitive description: @@ -688,30 +664,46 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.0" + quiver: + dependency: transitive + description: + name: quiver + sha256: ea0b925899e64ecdfbf9c7becb60d5b50e706ade44a85b2363be2a22d88117d2 + url: "https://pub.dev" + source: hosted + version: "3.2.2" + rfc_6901: + dependency: transitive + description: + name: rfc_6901 + sha256: "6a43b1858dca2febaf93e15639aa6b0c49ccdfd7647775f15a499f872b018154" + url: "https://pub.dev" + source: hosted + version: "0.2.1" shared_preferences: dependency: "direct main" description: name: shared_preferences - sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5" + sha256: "2939ae520c9024cb197fc20dee269cd8cdbf564c8b5746374ec6cacdc5169e64" url: "https://pub.dev" source: hosted - version: "2.5.3" + version: "2.5.4" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac" + sha256: cbc40be9be1c5af4dab4d6e0de4d5d3729e6f3d65b89d21e1815d57705644a6f url: "https://pub.dev" source: hosted - version: "2.4.10" + version: "2.4.20" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03" + sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f" url: "https://pub.dev" source: hosted - version: "2.5.4" + version: "2.5.6" shared_preferences_linux: dependency: transitive description: @@ -769,26 +761,26 @@ packages: dependency: transitive description: name: source_gen - sha256: "35c8150ece9e8c8d263337a265153c3329667640850b9304861faea59fc98f6b" + sha256: "1d562a3c1f713904ebbed50d2760217fd8a51ca170ac4b05b0db490699dbac17" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "4.2.0" source_helper: dependency: transitive description: name: source_helper - sha256: "4f81479fe5194a622cdd1713fe1ecb683a6e6c85cd8cec8e2e35ee5ab3fdf2a1" + sha256: "4a85e90b50694e652075cbe4575665539d253e6ec10e46e76b45368ab5e3caae" url: "https://pub.dev" source: hosted - version: "1.3.6" + version: "1.3.10" source_span: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.10.2" stack_trace: dependency: transitive description: @@ -817,26 +809,26 @@ packages: dependency: transitive description: name: string_scanner - sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.1" term_glyph: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" test_api: dependency: transitive description: name: test_api - sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" + sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 url: "https://pub.dev" source: hosted - version: "0.7.6" + version: "0.7.7" timeago: dependency: "direct main" description: @@ -845,14 +837,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.7.1" - timing: - dependency: transitive - description: - name: timing - sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" - url: "https://pub.dev" - source: hosted - version: "1.0.2" typed_data: dependency: transitive description: @@ -865,10 +849,18 @@ packages: dependency: transitive description: name: universal_io - sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + sha256: f63cbc48103236abf48e345e07a03ce5757ea86285ed313a6a032596ed9301e2 + url: "https://pub.dev" + source: hosted + version: "2.3.1" + uri: + dependency: transitive + description: + name: uri + sha256: "889eea21e953187c6099802b7b4cf5219ba8f3518f604a1033064d45b1b8268a" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "1.0.0" url_launcher: dependency: "direct main" description: @@ -881,34 +873,34 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79" + sha256: "767344bf3063897b5cf0db830e94f904528e6dd50a6dfaf839f0abf509009611" url: "https://pub.dev" source: hosted - version: "6.3.16" + version: "6.3.28" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb" + sha256: cfde38aa257dae62ffe79c87fab20165dfdf6988c1d31b58ebf59b9106062aad url: "https://pub.dev" source: hosted - version: "6.3.3" + version: "6.3.6" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" + sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.2.2" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" + sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18" url: "https://pub.dev" source: hosted - version: "3.2.2" + version: "3.2.5" url_launcher_platform_interface: dependency: transitive description: @@ -921,18 +913,18 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" + sha256: d0412fcf4c6b31ecfdb7762359b7206ffba3bbffd396c6d9f9c4616ece476c1f url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.4.2" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77" + sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f" url: "https://pub.dev" source: hosted - version: "3.1.4" + version: "3.1.5" vector_graphics: dependency: transitive description: @@ -953,10 +945,10 @@ packages: dependency: transitive description: name: vector_graphics_compiler - sha256: "557a315b7d2a6dbb0aaaff84d857967ce6bdc96a63dc6ee2a57ce5a6ee5d3331" + sha256: "201e876b5d52753626af64b6359cd13ac6011b80728731428fd34bc840f71c9b" url: "https://pub.dev" source: hosted - version: "1.1.17" + version: "1.1.20" vector_math: dependency: transitive description: @@ -969,18 +961,18 @@ packages: dependency: transitive description: name: vm_service - sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b + sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "15.0.2" watcher: dependency: transitive description: name: watcher - sha256: "0b7fd4a0bbc4b92641dbf20adfd7e3fd1398fe17102d94b674234563e110088a" + sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.2.1" web: dependency: transitive description: @@ -1009,10 +1001,10 @@ packages: dependency: transitive description: name: win32 - sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e + sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e url: "https://pub.dev" source: hosted - version: "5.10.1" + version: "5.15.0" xdg_directories: dependency: transitive description: @@ -1025,10 +1017,10 @@ packages: dependency: transitive description: name: xml - sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" url: "https://pub.dev" source: hosted - version: "6.5.0" + version: "6.6.1" yaml: dependency: transitive description: @@ -1038,5 +1030,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.8.0-0 <4.0.0" - flutter: ">=3.27.0" + dart: ">=3.10.0 <4.0.0" + flutter: ">=3.38.0" diff --git a/pubspec.yaml b/pubspec.yaml index 4a10b4e..efb7aee 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,7 +4,7 @@ description: "A new Flutter project." # pub.dev using `flutter pub publish`. This is preferred for private packages. publish_to: "none" # Remove this line if you wish to publish to pub.dev -version: 1.0.12+13 +version: 1.0.13+14 environment: sdk: ^3.6.1