v1.26 ios v2
This commit is contained in:
parent
208ada4251
commit
621d766335
@ -22,12 +22,12 @@
|
|||||||
</natures>
|
</natures>
|
||||||
<filteredResources>
|
<filteredResources>
|
||||||
<filter>
|
<filter>
|
||||||
<id>1633186029325</id>
|
<id>1666112134141</id>
|
||||||
<name></name>
|
<name></name>
|
||||||
<type>30</type>
|
<type>30</type>
|
||||||
<matcher>
|
<matcher>
|
||||||
<id>org.eclipse.core.resources.regexFilterMatcher</id>
|
<id>org.eclipse.core.resources.regexFilterMatcher</id>
|
||||||
<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
|
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
|
||||||
</matcher>
|
</matcher>
|
||||||
</filter>
|
</filter>
|
||||||
</filteredResources>
|
</filteredResources>
|
||||||
|
@ -56,6 +56,12 @@
|
|||||||
<data android:scheme="@string/fb_login_protocol_scheme" />
|
<data android:scheme="@string/fb_login_protocol_scheme" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
<meta-data android:name="com.posthog.posthog.API_KEY" android:value="phc_ATsS8RRdgzDdKpDSPYEYpYxWjfZ4QPMHHnoLbSaTZ2Q" />
|
||||||
|
<meta-data android:name="com.posthog.posthog.POSTHOG_HOST" android:value="https://posthog.workouttest.org" />
|
||||||
|
<meta-data android:name="com.posthog.posthog.TRACK_APPLICATION_LIFECYCLE_EVENTS" android:value="true" />
|
||||||
|
<meta-data android:name="com.posthog.posthog.DEBUG" android:value="true" />
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
<queries>
|
<queries>
|
||||||
<provider android:authorities="com.facebook.katana.provider.PlatformProvider" />
|
<provider android:authorities="com.facebook.katana.provider.PlatformProvider" />
|
||||||
|
430
ios/Podfile.lock
430
ios/Podfile.lock
@ -1,218 +1,210 @@
|
|||||||
PODS:
|
PODS:
|
||||||
- AppAuth (1.5.0):
|
- AppAuth (1.6.0):
|
||||||
- AppAuth/Core (= 1.5.0)
|
- AppAuth/Core (= 1.6.0)
|
||||||
- AppAuth/ExternalUserAgent (= 1.5.0)
|
- AppAuth/ExternalUserAgent (= 1.6.0)
|
||||||
- AppAuth/Core (1.5.0)
|
- AppAuth/Core (1.6.0)
|
||||||
- AppAuth/ExternalUserAgent (1.5.0):
|
- AppAuth/ExternalUserAgent (1.6.0):
|
||||||
- AppAuth/Core
|
- AppAuth/Core
|
||||||
- device_info_plus (0.0.1):
|
- device_info_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- devicelocale (0.0.1):
|
- devicelocale (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FBAEMKit (13.0.0):
|
- FBAEMKit (14.1.0):
|
||||||
- FBSDKCoreKit_Basics (= 13.0.0)
|
- FBSDKCoreKit_Basics (= 14.1.0)
|
||||||
- FBSDKCoreKit (13.0.0):
|
- FBSDKCoreKit (14.1.0):
|
||||||
- FBAEMKit (= 13.0.0)
|
- FBAEMKit (= 14.1.0)
|
||||||
- FBSDKCoreKit_Basics (= 13.0.0)
|
- FBSDKCoreKit_Basics (= 14.1.0)
|
||||||
- FBSDKCoreKit_Basics (13.0.0)
|
- FBSDKCoreKit_Basics (14.1.0)
|
||||||
- FBSDKLoginKit (13.0.0):
|
- FBSDKLoginKit (14.1.0):
|
||||||
- FBSDKCoreKit (= 13.0.0)
|
- FBSDKCoreKit (= 14.1.0)
|
||||||
- Firebase/Analytics (8.11.0):
|
- Firebase/Analytics (10.0.0):
|
||||||
- Firebase/Core
|
- Firebase/Core
|
||||||
- Firebase/Auth (8.11.0):
|
- Firebase/Auth (10.0.0):
|
||||||
- Firebase/CoreOnly
|
- Firebase/CoreOnly
|
||||||
- FirebaseAuth (~> 8.11.0)
|
- FirebaseAuth (~> 10.0.0)
|
||||||
- Firebase/Core (8.11.0):
|
- Firebase/Core (10.0.0):
|
||||||
- Firebase/CoreOnly
|
- Firebase/CoreOnly
|
||||||
- FirebaseAnalytics (~> 8.11.0)
|
- FirebaseAnalytics (~> 10.0.0)
|
||||||
- Firebase/CoreOnly (8.11.0):
|
- Firebase/CoreOnly (10.0.0):
|
||||||
- FirebaseCore (= 8.11.0)
|
- FirebaseCore (= 10.0.0)
|
||||||
- Firebase/DynamicLinks (8.11.0):
|
- Firebase/DynamicLinks (10.0.0):
|
||||||
- Firebase/CoreOnly
|
- Firebase/CoreOnly
|
||||||
- FirebaseDynamicLinks (~> 8.11.0)
|
- FirebaseDynamicLinks (~> 10.0.0)
|
||||||
- Firebase/InAppMessaging (8.11.0):
|
- Firebase/InAppMessaging (10.0.0):
|
||||||
- Firebase/CoreOnly
|
- Firebase/CoreOnly
|
||||||
- FirebaseInAppMessaging (~> 8.11.0-beta)
|
- FirebaseInAppMessaging (~> 10.0.0-beta)
|
||||||
- Firebase/Messaging (8.11.0):
|
- Firebase/Messaging (10.0.0):
|
||||||
- Firebase/CoreOnly
|
- Firebase/CoreOnly
|
||||||
- FirebaseMessaging (~> 8.11.0)
|
- FirebaseMessaging (~> 10.0.0)
|
||||||
- Firebase/RemoteConfig (8.11.0):
|
- Firebase/RemoteConfig (10.0.0):
|
||||||
- Firebase/CoreOnly
|
- Firebase/CoreOnly
|
||||||
- FirebaseRemoteConfig (~> 8.11.0)
|
- FirebaseRemoteConfig (~> 10.0.0)
|
||||||
- firebase_analytics (9.1.2):
|
- firebase_analytics (10.0.1):
|
||||||
- Firebase/Analytics (= 8.11.0)
|
- Firebase/Analytics (= 10.0.0)
|
||||||
- firebase_core
|
- firebase_core
|
||||||
- Flutter
|
- Flutter
|
||||||
- firebase_auth (3.3.11):
|
- firebase_auth (4.0.1):
|
||||||
- Firebase/Auth (= 8.11.0)
|
- Firebase/Auth (= 10.0.0)
|
||||||
- firebase_core
|
- firebase_core
|
||||||
- Flutter
|
- Flutter
|
||||||
- firebase_core (1.13.1):
|
- firebase_core (2.0.0):
|
||||||
- Firebase/CoreOnly (= 8.11.0)
|
- Firebase/CoreOnly (= 10.0.0)
|
||||||
- Flutter
|
- Flutter
|
||||||
- firebase_dynamic_links (4.1.1):
|
- firebase_dynamic_links (5.0.1):
|
||||||
- Firebase/DynamicLinks (= 8.11.0)
|
- Firebase/DynamicLinks (= 10.0.0)
|
||||||
- firebase_core
|
- firebase_core
|
||||||
- Flutter
|
- Flutter
|
||||||
- firebase_in_app_messaging (0.6.0-9):
|
- firebase_in_app_messaging (0.7.0-1):
|
||||||
- Firebase/InAppMessaging (= 8.11.0)
|
- Firebase/InAppMessaging (= 10.0.0)
|
||||||
- firebase_core
|
- firebase_core
|
||||||
- Flutter
|
- Flutter
|
||||||
- firebase_messaging (11.2.11):
|
- firebase_messaging (14.0.1):
|
||||||
- Firebase/Messaging (= 8.11.0)
|
- Firebase/Messaging (= 10.0.0)
|
||||||
- firebase_core
|
- firebase_core
|
||||||
- Flutter
|
- Flutter
|
||||||
- firebase_remote_config (2.0.2):
|
- firebase_remote_config (3.0.1):
|
||||||
- Firebase/RemoteConfig (= 8.11.0)
|
- Firebase/RemoteConfig (= 10.0.0)
|
||||||
- firebase_core
|
- firebase_core
|
||||||
- Flutter
|
- Flutter
|
||||||
- FirebaseABTesting (8.14.0):
|
- FirebaseABTesting (10.0.0):
|
||||||
- FirebaseCore (~> 8.0)
|
- FirebaseCore (~> 10.0)
|
||||||
- FirebaseAnalytics (8.11.0):
|
- FirebaseAnalytics (10.0.0):
|
||||||
- FirebaseAnalytics/AdIdSupport (= 8.11.0)
|
- FirebaseAnalytics/AdIdSupport (= 10.0.0)
|
||||||
- FirebaseCore (~> 8.0)
|
- FirebaseCore (~> 10.0)
|
||||||
- FirebaseInstallations (~> 8.0)
|
- FirebaseInstallations (~> 10.0)
|
||||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.7)
|
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
|
||||||
- GoogleUtilities/MethodSwizzler (~> 7.7)
|
- GoogleUtilities/MethodSwizzler (~> 7.8)
|
||||||
- GoogleUtilities/Network (~> 7.7)
|
- GoogleUtilities/Network (~> 7.8)
|
||||||
- "GoogleUtilities/NSData+zlib (~> 7.7)"
|
- "GoogleUtilities/NSData+zlib (~> 7.8)"
|
||||||
- nanopb (~> 2.30908.0)
|
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||||
- FirebaseAnalytics/AdIdSupport (8.11.0):
|
- FirebaseAnalytics/AdIdSupport (10.0.0):
|
||||||
- FirebaseCore (~> 8.0)
|
- FirebaseCore (~> 10.0)
|
||||||
- FirebaseInstallations (~> 8.0)
|
- FirebaseInstallations (~> 10.0)
|
||||||
- GoogleAppMeasurement (= 8.11.0)
|
- GoogleAppMeasurement (= 10.0.0)
|
||||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.7)
|
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
|
||||||
- GoogleUtilities/MethodSwizzler (~> 7.7)
|
- GoogleUtilities/MethodSwizzler (~> 7.8)
|
||||||
- GoogleUtilities/Network (~> 7.7)
|
- GoogleUtilities/Network (~> 7.8)
|
||||||
- "GoogleUtilities/NSData+zlib (~> 7.7)"
|
- "GoogleUtilities/NSData+zlib (~> 7.8)"
|
||||||
- nanopb (~> 2.30908.0)
|
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||||
- FirebaseAuth (8.11.0):
|
- FirebaseAuth (10.0.0):
|
||||||
- FirebaseCore (~> 8.0)
|
- FirebaseCore (~> 10.0)
|
||||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.7)
|
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
|
||||||
- GoogleUtilities/Environment (~> 7.7)
|
- GoogleUtilities/Environment (~> 7.8)
|
||||||
- GTMSessionFetcher/Core (~> 1.5)
|
- GTMSessionFetcher/Core (~> 2.1)
|
||||||
- FirebaseCore (8.11.0):
|
- FirebaseCore (10.0.0):
|
||||||
- FirebaseCoreDiagnostics (~> 8.0)
|
- FirebaseCoreInternal (~> 10.0)
|
||||||
- GoogleUtilities/Environment (~> 7.7)
|
- GoogleUtilities/Environment (~> 7.8)
|
||||||
- GoogleUtilities/Logger (~> 7.7)
|
- GoogleUtilities/Logger (~> 7.8)
|
||||||
- FirebaseCoreDiagnostics (8.14.0):
|
- FirebaseCoreInternal (10.0.0):
|
||||||
- GoogleDataTransport (~> 9.1)
|
- "GoogleUtilities/NSData+zlib (~> 7.8)"
|
||||||
- GoogleUtilities/Environment (~> 7.7)
|
- FirebaseDynamicLinks (10.0.0):
|
||||||
- GoogleUtilities/Logger (~> 7.7)
|
- FirebaseCore (~> 10.0)
|
||||||
- nanopb (~> 2.30908.0)
|
- FirebaseInAppMessaging (10.0.0-beta):
|
||||||
- FirebaseDynamicLinks (8.11.0):
|
- FirebaseABTesting (~> 10.0)
|
||||||
- FirebaseCore (~> 8.0)
|
- FirebaseCore (~> 10.0)
|
||||||
- FirebaseInAppMessaging (8.11.0-beta):
|
- FirebaseInstallations (~> 10.0)
|
||||||
- FirebaseABTesting (~> 8.0)
|
- GoogleUtilities/Environment (~> 7.8)
|
||||||
- FirebaseCore (~> 8.0)
|
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||||
- FirebaseInstallations (~> 8.0)
|
- FirebaseInstallations (10.0.0):
|
||||||
- GoogleUtilities/Environment (~> 7.7)
|
- FirebaseCore (~> 10.0)
|
||||||
- nanopb (~> 2.30908.0)
|
- GoogleUtilities/Environment (~> 7.8)
|
||||||
- FirebaseInstallations (8.14.0):
|
- GoogleUtilities/UserDefaults (~> 7.8)
|
||||||
- FirebaseCore (~> 8.0)
|
- PromisesObjC (~> 2.1)
|
||||||
- GoogleUtilities/Environment (~> 7.7)
|
- FirebaseMessaging (10.0.0):
|
||||||
- GoogleUtilities/UserDefaults (~> 7.7)
|
- FirebaseCore (~> 10.0)
|
||||||
- PromisesObjC (< 3.0, >= 1.2)
|
- FirebaseInstallations (~> 10.0)
|
||||||
- FirebaseMessaging (8.11.0):
|
- GoogleDataTransport (~> 9.2)
|
||||||
- FirebaseCore (~> 8.0)
|
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
|
||||||
- FirebaseInstallations (~> 8.0)
|
- GoogleUtilities/Environment (~> 7.8)
|
||||||
- GoogleDataTransport (~> 9.1)
|
- GoogleUtilities/Reachability (~> 7.8)
|
||||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.7)
|
- GoogleUtilities/UserDefaults (~> 7.8)
|
||||||
- GoogleUtilities/Environment (~> 7.7)
|
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||||
- GoogleUtilities/Reachability (~> 7.7)
|
- FirebaseRemoteConfig (10.0.0):
|
||||||
- GoogleUtilities/UserDefaults (~> 7.7)
|
- FirebaseABTesting (~> 10.0)
|
||||||
- nanopb (~> 2.30908.0)
|
- FirebaseCore (~> 10.0)
|
||||||
- FirebaseRemoteConfig (8.11.0):
|
- FirebaseInstallations (~> 10.0)
|
||||||
- FirebaseABTesting (~> 8.0)
|
- GoogleUtilities/Environment (~> 7.8)
|
||||||
- FirebaseCore (~> 8.0)
|
- "GoogleUtilities/NSData+zlib (~> 7.8)"
|
||||||
- FirebaseInstallations (~> 8.0)
|
|
||||||
- GoogleUtilities/Environment (~> 7.7)
|
|
||||||
- "GoogleUtilities/NSData+zlib (~> 7.7)"
|
|
||||||
- Flutter (1.0.0)
|
- Flutter (1.0.0)
|
||||||
- flutter_app_badger (0.0.1):
|
- flutter_app_badger (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- flutter_facebook_auth (4.1.2):
|
- flutter_facebook_auth (4.4.1):
|
||||||
- FBSDKCoreKit (~> 13.0.0)
|
- FBSDKLoginKit (= 14.1.0)
|
||||||
- FBSDKLoginKit (~> 13.0.0)
|
|
||||||
- Flutter
|
- Flutter
|
||||||
- flutter_secure_storage (3.3.1):
|
- flutter_secure_storage (3.3.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- flutter_smartlook (0.0.5):
|
- google_sign_in_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- flutter_uxcam (2.0.1):
|
- GoogleSignIn (~> 6.2)
|
||||||
- Flutter
|
- GoogleAppMeasurement (10.0.0):
|
||||||
- UXCam (~> 3.3.6)
|
- GoogleAppMeasurement/AdIdSupport (= 10.0.0)
|
||||||
- FMDB (2.7.5):
|
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
|
||||||
- FMDB/standard (= 2.7.5)
|
- GoogleUtilities/MethodSwizzler (~> 7.8)
|
||||||
- FMDB/standard (2.7.5)
|
- GoogleUtilities/Network (~> 7.8)
|
||||||
- google_sign_in (0.0.1):
|
- "GoogleUtilities/NSData+zlib (~> 7.8)"
|
||||||
- Flutter
|
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||||
- GoogleSignIn (~> 5.0)
|
- GoogleAppMeasurement/AdIdSupport (10.0.0):
|
||||||
- GoogleAppMeasurement (8.11.0):
|
- GoogleAppMeasurement/WithoutAdIdSupport (= 10.0.0)
|
||||||
- GoogleAppMeasurement/AdIdSupport (= 8.11.0)
|
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
|
||||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.7)
|
- GoogleUtilities/MethodSwizzler (~> 7.8)
|
||||||
- GoogleUtilities/MethodSwizzler (~> 7.7)
|
- GoogleUtilities/Network (~> 7.8)
|
||||||
- GoogleUtilities/Network (~> 7.7)
|
- "GoogleUtilities/NSData+zlib (~> 7.8)"
|
||||||
- "GoogleUtilities/NSData+zlib (~> 7.7)"
|
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||||
- nanopb (~> 2.30908.0)
|
- GoogleAppMeasurement/WithoutAdIdSupport (10.0.0):
|
||||||
- GoogleAppMeasurement/AdIdSupport (8.11.0):
|
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
|
||||||
- GoogleAppMeasurement/WithoutAdIdSupport (= 8.11.0)
|
- GoogleUtilities/MethodSwizzler (~> 7.8)
|
||||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.7)
|
- GoogleUtilities/Network (~> 7.8)
|
||||||
- GoogleUtilities/MethodSwizzler (~> 7.7)
|
- "GoogleUtilities/NSData+zlib (~> 7.8)"
|
||||||
- GoogleUtilities/Network (~> 7.7)
|
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||||
- "GoogleUtilities/NSData+zlib (~> 7.7)"
|
- GoogleDataTransport (9.2.0):
|
||||||
- nanopb (~> 2.30908.0)
|
- GoogleUtilities/Environment (~> 7.7)
|
||||||
- GoogleAppMeasurement/WithoutAdIdSupport (8.11.0):
|
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.7)
|
|
||||||
- GoogleUtilities/MethodSwizzler (~> 7.7)
|
|
||||||
- GoogleUtilities/Network (~> 7.7)
|
|
||||||
- "GoogleUtilities/NSData+zlib (~> 7.7)"
|
|
||||||
- nanopb (~> 2.30908.0)
|
|
||||||
- GoogleDataTransport (9.1.2):
|
|
||||||
- GoogleUtilities/Environment (~> 7.2)
|
|
||||||
- nanopb (~> 2.30908.0)
|
|
||||||
- PromisesObjC (< 3.0, >= 1.2)
|
- PromisesObjC (< 3.0, >= 1.2)
|
||||||
- GoogleSignIn (5.0.2):
|
- GoogleSignIn (6.2.4):
|
||||||
- AppAuth (~> 1.2)
|
- AppAuth (~> 1.5)
|
||||||
- GTMAppAuth (~> 1.0)
|
- GTMAppAuth (~> 1.3)
|
||||||
- GTMSessionFetcher/Core (~> 1.1)
|
- GTMSessionFetcher/Core (< 3.0, >= 1.1)
|
||||||
- GoogleUtilities/AppDelegateSwizzler (7.7.0):
|
- GoogleUtilities/AppDelegateSwizzler (7.8.0):
|
||||||
- GoogleUtilities/Environment
|
- GoogleUtilities/Environment
|
||||||
- GoogleUtilities/Logger
|
- GoogleUtilities/Logger
|
||||||
- GoogleUtilities/Network
|
- GoogleUtilities/Network
|
||||||
- GoogleUtilities/Environment (7.7.0):
|
- GoogleUtilities/Environment (7.8.0):
|
||||||
- PromisesObjC (< 3.0, >= 1.2)
|
- PromisesObjC (< 3.0, >= 1.2)
|
||||||
- GoogleUtilities/Logger (7.7.0):
|
- GoogleUtilities/Logger (7.8.0):
|
||||||
- GoogleUtilities/Environment
|
- GoogleUtilities/Environment
|
||||||
- GoogleUtilities/MethodSwizzler (7.7.0):
|
- GoogleUtilities/MethodSwizzler (7.8.0):
|
||||||
- GoogleUtilities/Logger
|
- GoogleUtilities/Logger
|
||||||
- GoogleUtilities/Network (7.7.0):
|
- GoogleUtilities/Network (7.8.0):
|
||||||
- GoogleUtilities/Logger
|
- GoogleUtilities/Logger
|
||||||
- "GoogleUtilities/NSData+zlib"
|
- "GoogleUtilities/NSData+zlib"
|
||||||
- GoogleUtilities/Reachability
|
- GoogleUtilities/Reachability
|
||||||
- "GoogleUtilities/NSData+zlib (7.7.0)"
|
- "GoogleUtilities/NSData+zlib (7.8.0)"
|
||||||
- GoogleUtilities/Reachability (7.7.0):
|
- GoogleUtilities/Reachability (7.8.0):
|
||||||
- GoogleUtilities/Logger
|
- GoogleUtilities/Logger
|
||||||
- GoogleUtilities/UserDefaults (7.7.0):
|
- GoogleUtilities/UserDefaults (7.8.0):
|
||||||
- GoogleUtilities/Logger
|
- GoogleUtilities/Logger
|
||||||
- GTMAppAuth (1.2.3):
|
- GTMAppAuth (1.3.1):
|
||||||
- AppAuth/Core (~> 1.4)
|
- AppAuth/Core (~> 1.6)
|
||||||
- GTMSessionFetcher/Core (~> 1.5)
|
- GTMSessionFetcher/Core (< 3.0, >= 1.5)
|
||||||
- GTMSessionFetcher/Core (1.7.1)
|
- GTMSessionFetcher/Core (2.1.0)
|
||||||
- modal_progress_hud_nsn (0.0.1):
|
- modal_progress_hud_nsn (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- nanopb (2.30908.0):
|
- nanopb (2.30909.0):
|
||||||
- nanopb/decode (= 2.30908.0)
|
- nanopb/decode (= 2.30909.0)
|
||||||
- nanopb/encode (= 2.30908.0)
|
- nanopb/encode (= 2.30909.0)
|
||||||
- nanopb/decode (2.30908.0)
|
- nanopb/decode (2.30909.0)
|
||||||
- nanopb/encode (2.30908.0)
|
- nanopb/encode (2.30909.0)
|
||||||
- package_info (0.0.1):
|
- package_info (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- package_info_plus (0.4.5):
|
- package_info_plus (0.4.5):
|
||||||
- Flutter
|
- Flutter
|
||||||
- path_provider_ios (0.0.1):
|
- path_provider_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- PromisesObjC (2.1.0)
|
- PostHog (1.4.4)
|
||||||
|
- posthog_flutter (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- PostHog (~> 1.0)
|
||||||
|
- PromisesObjC (2.1.1)
|
||||||
- Purchases (3.13.2):
|
- Purchases (3.13.2):
|
||||||
- PurchasesCoreSwift (= 3.13.2)
|
- PurchasesCoreSwift (= 3.13.2)
|
||||||
- purchases_flutter (3.9.5):
|
- purchases_flutter (3.9.5):
|
||||||
@ -221,25 +213,21 @@ PODS:
|
|||||||
- PurchasesCoreSwift (3.13.2)
|
- PurchasesCoreSwift (3.13.2)
|
||||||
- PurchasesHybridCommon (1.11.2):
|
- PurchasesHybridCommon (1.11.2):
|
||||||
- Purchases (= 3.13.2)
|
- Purchases (= 3.13.2)
|
||||||
- Sentry (7.10.2):
|
- Sentry (7.28.0):
|
||||||
- Sentry/Core (= 7.10.2)
|
- Sentry/Core (= 7.28.0)
|
||||||
- Sentry/Core (7.10.2)
|
- Sentry/Core (7.28.0)
|
||||||
- sentry_flutter (0.0.1):
|
- sentry_flutter (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- Sentry (~> 7.10.1)
|
- Sentry (~> 7.28.0)
|
||||||
- share (0.0.1):
|
- share (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- shared_preferences_ios (0.0.1):
|
- shared_preferences_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- sign_in_with_apple (0.0.1):
|
- sign_in_with_apple (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- sqflite (0.0.2):
|
|
||||||
- Flutter
|
|
||||||
- FMDB (>= 2.7.5)
|
|
||||||
- url_launcher_ios (0.0.1):
|
- url_launcher_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- UXCam (3.3.9)
|
|
||||||
- video_player_avfoundation (0.0.1):
|
- video_player_avfoundation (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- wakelock (0.0.1):
|
- wakelock (0.0.1):
|
||||||
@ -261,19 +249,17 @@ DEPENDENCIES:
|
|||||||
- flutter_app_badger (from `.symlinks/plugins/flutter_app_badger/ios`)
|
- flutter_app_badger (from `.symlinks/plugins/flutter_app_badger/ios`)
|
||||||
- flutter_facebook_auth (from `.symlinks/plugins/flutter_facebook_auth/ios`)
|
- flutter_facebook_auth (from `.symlinks/plugins/flutter_facebook_auth/ios`)
|
||||||
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
|
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
|
||||||
- flutter_smartlook (from `.symlinks/plugins/flutter_smartlook/ios`)
|
- google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/ios`)
|
||||||
- flutter_uxcam (from `.symlinks/plugins/flutter_uxcam/ios`)
|
|
||||||
- google_sign_in (from `.symlinks/plugins/google_sign_in/ios`)
|
|
||||||
- modal_progress_hud_nsn (from `.symlinks/plugins/modal_progress_hud_nsn/ios`)
|
- modal_progress_hud_nsn (from `.symlinks/plugins/modal_progress_hud_nsn/ios`)
|
||||||
- package_info (from `.symlinks/plugins/package_info/ios`)
|
- package_info (from `.symlinks/plugins/package_info/ios`)
|
||||||
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
||||||
- path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
|
- path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
|
||||||
|
- posthog_flutter (from `.symlinks/plugins/posthog_flutter/ios`)
|
||||||
- purchases_flutter (from `.symlinks/plugins/purchases_flutter/ios`)
|
- purchases_flutter (from `.symlinks/plugins/purchases_flutter/ios`)
|
||||||
- sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`)
|
- sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`)
|
||||||
- share (from `.symlinks/plugins/share/ios`)
|
- share (from `.symlinks/plugins/share/ios`)
|
||||||
- shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`)
|
- shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`)
|
||||||
- sign_in_with_apple (from `.symlinks/plugins/sign_in_with_apple/ios`)
|
- sign_in_with_apple (from `.symlinks/plugins/sign_in_with_apple/ios`)
|
||||||
- sqflite (from `.symlinks/plugins/sqflite/ios`)
|
|
||||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||||
- video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/ios`)
|
- video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/ios`)
|
||||||
- wakelock (from `.symlinks/plugins/wakelock/ios`)
|
- wakelock (from `.symlinks/plugins/wakelock/ios`)
|
||||||
@ -291,13 +277,12 @@ SPEC REPOS:
|
|||||||
- FirebaseAnalytics
|
- FirebaseAnalytics
|
||||||
- FirebaseAuth
|
- FirebaseAuth
|
||||||
- FirebaseCore
|
- FirebaseCore
|
||||||
- FirebaseCoreDiagnostics
|
- FirebaseCoreInternal
|
||||||
- FirebaseDynamicLinks
|
- FirebaseDynamicLinks
|
||||||
- FirebaseInAppMessaging
|
- FirebaseInAppMessaging
|
||||||
- FirebaseInstallations
|
- FirebaseInstallations
|
||||||
- FirebaseMessaging
|
- FirebaseMessaging
|
||||||
- FirebaseRemoteConfig
|
- FirebaseRemoteConfig
|
||||||
- FMDB
|
|
||||||
- GoogleAppMeasurement
|
- GoogleAppMeasurement
|
||||||
- GoogleDataTransport
|
- GoogleDataTransport
|
||||||
- GoogleSignIn
|
- GoogleSignIn
|
||||||
@ -305,12 +290,12 @@ SPEC REPOS:
|
|||||||
- GTMAppAuth
|
- GTMAppAuth
|
||||||
- GTMSessionFetcher
|
- GTMSessionFetcher
|
||||||
- nanopb
|
- nanopb
|
||||||
|
- PostHog
|
||||||
- PromisesObjC
|
- PromisesObjC
|
||||||
- Purchases
|
- Purchases
|
||||||
- PurchasesCoreSwift
|
- PurchasesCoreSwift
|
||||||
- PurchasesHybridCommon
|
- PurchasesHybridCommon
|
||||||
- Sentry
|
- Sentry
|
||||||
- UXCam
|
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
device_info_plus:
|
device_info_plus:
|
||||||
@ -339,12 +324,8 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/flutter_facebook_auth/ios"
|
:path: ".symlinks/plugins/flutter_facebook_auth/ios"
|
||||||
flutter_secure_storage:
|
flutter_secure_storage:
|
||||||
:path: ".symlinks/plugins/flutter_secure_storage/ios"
|
:path: ".symlinks/plugins/flutter_secure_storage/ios"
|
||||||
flutter_smartlook:
|
google_sign_in_ios:
|
||||||
:path: ".symlinks/plugins/flutter_smartlook/ios"
|
:path: ".symlinks/plugins/google_sign_in_ios/ios"
|
||||||
flutter_uxcam:
|
|
||||||
:path: ".symlinks/plugins/flutter_uxcam/ios"
|
|
||||||
google_sign_in:
|
|
||||||
:path: ".symlinks/plugins/google_sign_in/ios"
|
|
||||||
modal_progress_hud_nsn:
|
modal_progress_hud_nsn:
|
||||||
:path: ".symlinks/plugins/modal_progress_hud_nsn/ios"
|
:path: ".symlinks/plugins/modal_progress_hud_nsn/ios"
|
||||||
package_info:
|
package_info:
|
||||||
@ -353,6 +334,8 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/package_info_plus/ios"
|
:path: ".symlinks/plugins/package_info_plus/ios"
|
||||||
path_provider_ios:
|
path_provider_ios:
|
||||||
:path: ".symlinks/plugins/path_provider_ios/ios"
|
:path: ".symlinks/plugins/path_provider_ios/ios"
|
||||||
|
posthog_flutter:
|
||||||
|
:path: ".symlinks/plugins/posthog_flutter/ios"
|
||||||
purchases_flutter:
|
purchases_flutter:
|
||||||
:path: ".symlinks/plugins/purchases_flutter/ios"
|
:path: ".symlinks/plugins/purchases_flutter/ios"
|
||||||
sentry_flutter:
|
sentry_flutter:
|
||||||
@ -363,8 +346,6 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/shared_preferences_ios/ios"
|
:path: ".symlinks/plugins/shared_preferences_ios/ios"
|
||||||
sign_in_with_apple:
|
sign_in_with_apple:
|
||||||
:path: ".symlinks/plugins/sign_in_with_apple/ios"
|
:path: ".symlinks/plugins/sign_in_with_apple/ios"
|
||||||
sqflite:
|
|
||||||
:path: ".symlinks/plugins/sqflite/ios"
|
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
||||||
video_player_avfoundation:
|
video_player_avfoundation:
|
||||||
@ -375,63 +356,60 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/webview_flutter_wkwebview/ios"
|
:path: ".symlinks/plugins/webview_flutter_wkwebview/ios"
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
AppAuth: 80317d99ac7ff2801a2f18ff86b48cd315ed465d
|
AppAuth: 8fca6b5563a5baef2c04bee27538025e4ceb2add
|
||||||
device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed
|
device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed
|
||||||
devicelocale: b22617f40038496deffba44747101255cee005b0
|
devicelocale: b22617f40038496deffba44747101255cee005b0
|
||||||
FBAEMKit: 11a0bcdc7a88e26ed764bcf56372afc6cbbbdcd9
|
FBAEMKit: a899515e45476027f73aef377b5cffadcd56ca3a
|
||||||
FBSDKCoreKit: 00e1e751257e1005304fa29cb683d2dfe008f41a
|
FBSDKCoreKit: 24f8bc8d3b5b2a8c5c656a1329492a12e8efa792
|
||||||
FBSDKCoreKit_Basics: 96ec2ddb67a032e54f0754ea3d59db6f84f42389
|
FBSDKCoreKit_Basics: 6e578c9bdc7aa1365dbbbde633c9ebb536bcaa98
|
||||||
FBSDKLoginKit: 66ff4ddf372d9c3fc360e65ae048a47a482c29b9
|
FBSDKLoginKit: 787de205d524c3a4b17d527916f1d066e4361660
|
||||||
Firebase: 44dd9724c84df18b486639e874f31436eaa9a20c
|
Firebase: 1b810f3d0c0532e27a48f1961f8c0400a668a2cf
|
||||||
firebase_analytics: 20841ef6a705a412c737deb2fe98290e9242d323
|
firebase_analytics: 8f6874ecf36f61797835ed99d7a792d3a212b026
|
||||||
firebase_auth: bdfbd5b10da1db6d5eb6ae7dbda5d81365b9cc9d
|
firebase_auth: 62015b6cbfccf40521d7f777c804d19f9bc6f922
|
||||||
firebase_core: 08f6a85f62060111de5e98d6a214810d11365de9
|
firebase_core: f9febc855bab615ea02dc9a75b6932364edb1225
|
||||||
firebase_dynamic_links: 1b6e3aeb743c0a0df1dab3543bd9dec6aab4de58
|
firebase_dynamic_links: 37282d0148b844b34d09a9aba54bfa72eada9377
|
||||||
firebase_in_app_messaging: 5937abf8acacbe3d35123a4c845ccf9d1669d7ed
|
firebase_in_app_messaging: 3ec946b7cf90c3fb0257e1e8155180d6dbf644f7
|
||||||
firebase_messaging: 4a993bb4aa1a83349988d853c637fbb0494dab15
|
firebase_messaging: a39df674ecaffd962658a9de3182d735b6cee0d7
|
||||||
firebase_remote_config: 588bafe2eff61076e53b018758ec1fa96893e3c3
|
firebase_remote_config: 11eee0656374e6ef595f36e49d904ddc209b4523
|
||||||
FirebaseABTesting: aaa0e096c9fc9972ce6806d596e8fcc077d4371f
|
FirebaseABTesting: 5a08a4d3060b7fb5638f60698bc2cb57996bcc73
|
||||||
FirebaseAnalytics: 4e4b13031034e6561ed3bd1d47b6fdabbd6487c6
|
FirebaseAnalytics: 9921a52739f4ab66099da31b6e0243db78a3ac0a
|
||||||
FirebaseAuth: d96d73aba85d192d7a7aa0b86dd6d7f8ec170b4b
|
FirebaseAuth: 493382cf533cc45e2862b00e9aa4cfe4c98daf71
|
||||||
FirebaseCore: 2f4f85b453cc8fea4bb2b37e370007d2bcafe3f0
|
FirebaseCore: 97f48a3a567a72b8d4daa0f03c3aadb78df4e995
|
||||||
FirebaseCoreDiagnostics: fd0c8490f34287229c1d6c103d3a55f81ec85712
|
FirebaseCoreInternal: 5eb3960335da5ea30115d57d39db6988c4ad06f3
|
||||||
FirebaseDynamicLinks: f506c83eb7eba0f9861f84cd6b65c38b3bd5ff6f
|
FirebaseDynamicLinks: 37dcd9f082b9c5ea9eb5826e82aef58bbd6fd5c1
|
||||||
FirebaseInAppMessaging: 68586d72d5411b2dfaeb02461c2cd8d9f96a771a
|
FirebaseInAppMessaging: 07aafacbb74228af034fb1c8885d25045a25d510
|
||||||
FirebaseInstallations: 7d1d967a307c12f1aadd76844fc321cef699b1ce
|
FirebaseInstallations: 7f1c9ae6bd9df6abe9c74124b38fa8740aba5df4
|
||||||
FirebaseMessaging: 02e248e8997f71fa8cc9d78e9d49ec1a701ba14a
|
FirebaseMessaging: 8916bf5edb1dbfac74665a181e4d1ab3a78a08a2
|
||||||
FirebaseRemoteConfig: a6a1ce9dabf404817ae2a44e8421d276660d9091
|
FirebaseRemoteConfig: e4431ddba74ddf705e2aabd7d356a23d5b802853
|
||||||
Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
|
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
|
||||||
flutter_app_badger: 65de4d6f0c34a891df49e6cfb8a1c0496426fa68
|
flutter_app_badger: 65de4d6f0c34a891df49e6cfb8a1c0496426fa68
|
||||||
flutter_facebook_auth: c0a8473f857cf44b0a27bfe752facf1d5fedd863
|
flutter_facebook_auth: 361ac7a57263ebf327f26089507ead0d66558ee8
|
||||||
flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec
|
flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec
|
||||||
flutter_smartlook: 2aa304f6a38fc22b741ca750e0078606582525ae
|
google_sign_in_ios: 4f85eb9f937450765c8573bb85fd8cd6a5af675c
|
||||||
flutter_uxcam: 32e4e8b4355be6bf9d512ad36aed6d86c98a5cdf
|
GoogleAppMeasurement: 7e48a3249792ac35d6f18f107f63f199a7e9d0ce
|
||||||
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
GoogleDataTransport: 1c8145da7117bd68bbbed00cf304edb6a24de00f
|
||||||
google_sign_in: f669f45933dad48cd218dc3e189726bced3d19f4
|
GoogleSignIn: 5651ce3a61e56ca864160e79b484cd9ed3f49b7a
|
||||||
GoogleAppMeasurement: aa3cb422fab2b05d2efac543a5720d1a85b9dea5
|
GoogleUtilities: 1d20a6ad97ef46f67bbdec158ce00563a671ebb7
|
||||||
GoogleDataTransport: 629c20a4d363167143f30ea78320d5a7eb8bd940
|
GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd
|
||||||
GoogleSignIn: 7137d297ddc022a7e0aa4619c86d72c909fa7213
|
GTMSessionFetcher: ffbb25ec00ebcb5201adab0a56d808f6f1902d9f
|
||||||
GoogleUtilities: e0913149f6b0625b553d70dae12b49fc62914fd1
|
|
||||||
GTMAppAuth: 987526d41b07efb1bedda5e936fe0cb718a03113
|
|
||||||
GTMSessionFetcher: 4577a4cc914a5a07c40a8a0ad0acc22080418c2d
|
|
||||||
modal_progress_hud_nsn: f6fb744cd060653d66ed8f325360ef3650eb2fde
|
modal_progress_hud_nsn: f6fb744cd060653d66ed8f325360ef3650eb2fde
|
||||||
nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96
|
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
|
||||||
package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
|
package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
|
||||||
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
|
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
|
||||||
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
|
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
|
||||||
PromisesObjC: 99b6f43f9e1044bd87a95a60beff28c2c44ddb72
|
PostHog: 4b6321b521569092d4ef3a02238d9435dbaeb99f
|
||||||
|
posthog_flutter: e5bed2753b8c124158530724e30232998aaf9137
|
||||||
|
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
|
||||||
Purchases: 03200de9288724e77de435000d1828601e6b8e00
|
Purchases: 03200de9288724e77de435000d1828601e6b8e00
|
||||||
purchases_flutter: cf2b742f12b7ffef6f618c7f1ba1961e652825b1
|
purchases_flutter: cf2b742f12b7ffef6f618c7f1ba1961e652825b1
|
||||||
PurchasesCoreSwift: 2ea4b33e5cece5c8a0751594ef7c6cbfcbd747a9
|
PurchasesCoreSwift: 2ea4b33e5cece5c8a0751594ef7c6cbfcbd747a9
|
||||||
PurchasesHybridCommon: 56ef42d85c3e930d49aff4ac5fa027373d2e1bb8
|
PurchasesHybridCommon: 56ef42d85c3e930d49aff4ac5fa027373d2e1bb8
|
||||||
Sentry: 7bf9bfe713692cf87812e55f0999260494ba7982
|
Sentry: 2c6053e4cfe6dea6608135dea1928ffbb4ecfba5
|
||||||
sentry_flutter: 77ccdac346608b8ce7e428e7284e7a3e4e7f4a02
|
sentry_flutter: fad3ef0917dc1afa7d242af0743696ed9a9a8864
|
||||||
share: 0b2c3e82132f5888bccca3351c504d0003b3b410
|
share: 0b2c3e82132f5888bccca3351c504d0003b3b410
|
||||||
shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad
|
shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad
|
||||||
sign_in_with_apple: f3bf75217ea4c2c8b91823f225d70230119b8440
|
sign_in_with_apple: f3bf75217ea4c2c8b91823f225d70230119b8440
|
||||||
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
|
|
||||||
url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de
|
url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de
|
||||||
UXCam: fb294bf954e708fc308a645ae65bb967cac0760e
|
|
||||||
video_player_avfoundation: e489aac24ef5cf7af82702979ed16f2a5ef84cff
|
video_player_avfoundation: e489aac24ef5cf7af82702979ed16f2a5ef84cff
|
||||||
wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f
|
wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f
|
||||||
webview_flutter_wkwebview: 005fbd90c888a42c5690919a1527ecc6649e1162
|
webview_flutter_wkwebview: 005fbd90c888a42c5690919a1527ecc6649e1162
|
||||||
|
@ -160,7 +160,6 @@
|
|||||||
9705A1C41CF9048500538489 /* Embed Frameworks */,
|
9705A1C41CF9048500538489 /* Embed Frameworks */,
|
||||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
|
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
|
||||||
EB0A62903CC30EC853FC7908 /* [CP] Embed Pods Frameworks */,
|
EB0A62903CC30EC853FC7908 /* [CP] Embed Pods Frameworks */,
|
||||||
C1BA2CB9D651F269CCBE06B3 /* [CP] Copy Pods Resources */,
|
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
@ -270,23 +269,6 @@
|
|||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
|
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
|
||||||
};
|
};
|
||||||
C1BA2CB9D651F269CCBE06B3 /* [CP] Copy Pods Resources */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputFileListPaths = (
|
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
|
|
||||||
);
|
|
||||||
name = "[CP] Copy Pods Resources";
|
|
||||||
outputFileListPaths = (
|
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
|
|
||||||
showEnvVarsInLog = 0;
|
|
||||||
};
|
|
||||||
EB0A62903CC30EC853FC7908 /* [CP] Embed Pods Frameworks */ = {
|
EB0A62903CC30EC853FC7908 /* [CP] Embed Pods Frameworks */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
@ -388,7 +370,9 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
DEVELOPMENT_TEAM = SFJJBDCU6Z;
|
DEVELOPMENT_TEAM = SFJJBDCU6Z;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
@ -408,6 +392,7 @@
|
|||||||
MARKETING_VERSION = 1.1.26;
|
MARKETING_VERSION = 1.1.26;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.aitrainer.app;
|
PRODUCT_BUNDLE_IDENTIFIER = com.aitrainer.app;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = 1;
|
TARGETED_DEVICE_FAMILY = 1;
|
||||||
@ -531,7 +516,9 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
DEVELOPMENT_TEAM = SFJJBDCU6Z;
|
DEVELOPMENT_TEAM = SFJJBDCU6Z;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
@ -551,6 +538,7 @@
|
|||||||
MARKETING_VERSION = 1.1.26;
|
MARKETING_VERSION = 1.1.26;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.aitrainer.app;
|
PRODUCT_BUNDLE_IDENTIFIER = com.aitrainer.app;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
@ -566,7 +554,9 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
DEVELOPMENT_TEAM = SFJJBDCU6Z;
|
DEVELOPMENT_TEAM = SFJJBDCU6Z;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
@ -586,6 +576,7 @@
|
|||||||
MARKETING_VERSION = 1.1.26;
|
MARKETING_VERSION = 1.1.26;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.aitrainer.app;
|
PRODUCT_BUNDLE_IDENTIFIER = com.aitrainer.app;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = 1;
|
TARGETED_DEVICE_FAMILY = 1;
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
|
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||||
|
<true/>
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
@ -38,10 +40,10 @@
|
|||||||
<string>TRUE</string>
|
<string>TRUE</string>
|
||||||
<key>FacebookAppID</key>
|
<key>FacebookAppID</key>
|
||||||
<string>584181112271127</string>
|
<string>584181112271127</string>
|
||||||
<key>FacebookClientToken</key>
|
|
||||||
<string>60d565f451ce32de3d7eeb26274bbddd</string>
|
|
||||||
<key>FacebookAutoLogAppEventsEnabled</key>
|
<key>FacebookAutoLogAppEventsEnabled</key>
|
||||||
<string>TRUE</string>
|
<string>TRUE</string>
|
||||||
|
<key>FacebookClientToken</key>
|
||||||
|
<string>60d565f451ce32de3d7eeb26274bbddd</string>
|
||||||
<key>FacebookDisplayName</key>
|
<key>FacebookDisplayName</key>
|
||||||
<string>Workout Test</string>
|
<string>Workout Test</string>
|
||||||
<key>FirebaseAppDelegateProxyEnabled</key>
|
<key>FirebaseAppDelegateProxyEnabled</key>
|
||||||
@ -98,5 +100,13 @@
|
|||||||
</array>
|
</array>
|
||||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||||
<false/>
|
<false/>
|
||||||
|
|
||||||
|
<key>com.posthog.posthog.API_KEY</key>
|
||||||
|
<string>phc_ATsS8RRdgzDdKpDSPYEYpYxWjfZ4QPMHHnoLbSaTZ2Q</string>
|
||||||
|
<key>com.posthog.posthog.POSTHOG_HOST</key>
|
||||||
|
<string>https://posthog.workouttest.org</string>
|
||||||
|
<key>com.posthog.posthog.TRACK_APPLICATION_LIFECYCLE_EVENTS</key>
|
||||||
|
<false/>
|
||||||
|
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
@ -133,25 +133,28 @@ class CustomerChangeBloc extends Bloc<CustomerChangeEvent, CustomerChangeState>
|
|||||||
void _onSaveFitness(CustomerSaveFitness event, Emitter<CustomerChangeState> emit) {
|
void _onSaveFitness(CustomerSaveFitness event, Emitter<CustomerChangeState> emit) {
|
||||||
emit(CustomerChangeLoading());
|
emit(CustomerChangeLoading());
|
||||||
if (customerRepository.customer!.fitnessLevel == null) {
|
if (customerRepository.customer!.fitnessLevel == null) {
|
||||||
throw Exception("Please select your fitness level");
|
emit(CustomerSaveError(message: "Please selectyour fitness level"));
|
||||||
|
} else {
|
||||||
|
emit(CustomerSaveSuccess());
|
||||||
}
|
}
|
||||||
emit(CustomerSaveSuccess());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onSaveGoal(CustomerSaveGoal event, Emitter<CustomerChangeState> emit) {
|
void _onSaveGoal(CustomerSaveGoal event, Emitter<CustomerChangeState> emit) {
|
||||||
emit(CustomerChangeLoading());
|
emit(CustomerChangeLoading());
|
||||||
if (customerRepository.customer!.goal == null) {
|
if (customerRepository.customer!.goal == null) {
|
||||||
throw Exception("Please select your goal");
|
emit(CustomerSaveError(message: "Please select your goal"));
|
||||||
|
} else {
|
||||||
|
emit(CustomerSaveSuccess());
|
||||||
}
|
}
|
||||||
emit(CustomerSaveSuccess());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onSaveSex(CustomerSaveSex event, Emitter<CustomerChangeState> emit) {
|
void _onSaveSex(CustomerSaveSex event, Emitter<CustomerChangeState> emit) {
|
||||||
emit(CustomerChangeLoading());
|
emit(CustomerChangeLoading());
|
||||||
if (customerRepository.customer!.sex == null) {
|
if (customerRepository.customer!.sex == null) {
|
||||||
throw Exception("Please select your biologial gender");
|
emit(CustomerSaveError(message: "Please selectyour biological gender"));
|
||||||
|
} else {
|
||||||
|
emit(CustomerSaveSuccess());
|
||||||
}
|
}
|
||||||
emit(CustomerSaveSuccess());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onSaveWeight(CustomerSaveWeight event, Emitter<CustomerChangeState> emit) {
|
void _onSaveWeight(CustomerSaveWeight event, Emitter<CustomerChangeState> emit) {
|
||||||
@ -166,25 +169,29 @@ class CustomerChangeBloc extends Bloc<CustomerChangeEvent, CustomerChangeState>
|
|||||||
|
|
||||||
void _onSave(CustomerSave event, Emitter<CustomerChangeState> emit) async {
|
void _onSave(CustomerSave event, Emitter<CustomerChangeState> emit) async {
|
||||||
emit(CustomerSaving());
|
emit(CustomerSaving());
|
||||||
if (validation()) {
|
try {
|
||||||
if (selectedFitnessItem != null) {
|
if (validation()) {
|
||||||
customerRepository.setFitnessLevel(selectedFitnessItem!);
|
if (selectedFitnessItem != null) {
|
||||||
}
|
customerRepository.setFitnessLevel(selectedFitnessItem!);
|
||||||
if (selectedSport != null) {
|
}
|
||||||
customerRepository.customer!.sportId = selectedSport!.sportId;
|
if (selectedSport != null) {
|
||||||
}
|
customerRepository.customer!.sportId = selectedSport!.sportId;
|
||||||
|
}
|
||||||
|
|
||||||
if (customerRepository.customer!.lang == null) {
|
if (customerRepository.customer!.lang == null) {
|
||||||
customerRepository.customer!.lang = AppLanguage().appLocal.languageCode;
|
customerRepository.customer!.lang = AppLanguage().appLocal.languageCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
await customerRepository.saveCustomer();
|
await customerRepository.saveCustomer();
|
||||||
MauticRepository mauticRepository = MauticRepository(customerRepository: customerRepository);
|
MauticRepository mauticRepository = MauticRepository(customerRepository: customerRepository);
|
||||||
await mauticRepository.sendMauticDataChange();
|
await mauticRepository.sendMauticDataChange();
|
||||||
Cache().initBadges();
|
Cache().initBadges();
|
||||||
emit(CustomerSaveSuccess());
|
emit(CustomerSaveSuccess());
|
||||||
} else {
|
} else {
|
||||||
emit(CustomerSaveError(message: "Please provide the necessary information"));
|
emit(CustomerSaveError(message: "Please provide the necessary information"));
|
||||||
|
}
|
||||||
|
} on Exception catch (e) {
|
||||||
|
emit(CustomerSaveError(message: e.toString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ class ExerciseNewBloc extends Bloc<ExerciseNewEvent, ExerciseNewState> with Logg
|
|||||||
menuBloc.add(MenuTreeDown(parent: 0));
|
menuBloc.add(MenuTreeDown(parent: 0));
|
||||||
Cache().initBadges();
|
Cache().initBadges();
|
||||||
Track().track(TrackingEvent.exercise_new, eventValue: exerciseRepository.exerciseType!.name);
|
Track().track(TrackingEvent.exercise_new, eventValue: exerciseRepository.exerciseType!.name);
|
||||||
emit(ExerciseNewReady());
|
emit(ExerciseNewSaved());
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onSubmitNoRegistration(ExerciseNewSubmitNoRegistration event, Emitter<ExerciseNewState> emit) async {
|
void _onSubmitNoRegistration(ExerciseNewSubmitNoRegistration event, Emitter<ExerciseNewState> emit) async {
|
||||||
@ -190,7 +190,7 @@ class ExerciseNewBloc extends Bloc<ExerciseNewEvent, ExerciseNewState> with Logg
|
|||||||
exerciseRepository.addExerciseNoRegistration();
|
exerciseRepository.addExerciseNoRegistration();
|
||||||
menuBloc.add(MenuTreeDown(parent: 0));
|
menuBloc.add(MenuTreeDown(parent: 0));
|
||||||
Track().track(TrackingEvent.exercise_new_no_registration, eventValue: exerciseRepository.exerciseType!.name);
|
Track().track(TrackingEvent.exercise_new_no_registration, eventValue: exerciseRepository.exerciseType!.name);
|
||||||
emit(ExerciseNewReady());
|
emit(ExerciseNewSaved());
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onBMIAnimate(ExerciseNewBMIAnimate event, Emitter<ExerciseNewState> emit) async {
|
void _onBMIAnimate(ExerciseNewBMIAnimate event, Emitter<ExerciseNewState> emit) async {
|
||||||
|
@ -93,7 +93,7 @@ class LoginBloc extends Bloc<LoginEvent, LoginState> with Trans {
|
|||||||
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
||||||
Track().track(TrackingEvent.login, eventValue: "email");
|
Track().track(TrackingEvent.login, eventValue: "email");
|
||||||
Cache().setLoginType(LoginType.email);
|
Cache().setLoginType(LoginType.email);
|
||||||
} on Exception catch(e) {
|
} on Exception catch (e) {
|
||||||
emit(LoginError(message: e.toString()));
|
emit(LoginError(message: e.toString()));
|
||||||
} finally {
|
} finally {
|
||||||
emit(LoginSuccess());
|
emit(LoginSuccess());
|
||||||
@ -107,7 +107,7 @@ class LoginBloc extends Bloc<LoginEvent, LoginState> with Trans {
|
|||||||
await userRepository.getUserByFB();
|
await userRepository.getUserByFB();
|
||||||
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
||||||
Track().track(TrackingEvent.login, eventValue: "FB");
|
Track().track(TrackingEvent.login, eventValue: "FB");
|
||||||
} on Exception catch(e) {
|
} on Exception catch (e) {
|
||||||
emit(LoginError(message: e.toString()));
|
emit(LoginError(message: e.toString()));
|
||||||
} finally {
|
} finally {
|
||||||
emit(LoginSuccess());
|
emit(LoginSuccess());
|
||||||
@ -121,8 +121,7 @@ class LoginBloc extends Bloc<LoginEvent, LoginState> with Trans {
|
|||||||
await userRepository.getUserByGoogle();
|
await userRepository.getUserByGoogle();
|
||||||
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
||||||
Track().track(TrackingEvent.login, eventValue: "Google");
|
Track().track(TrackingEvent.login, eventValue: "Google");
|
||||||
|
} on Exception catch (e) {
|
||||||
} on Exception catch(e) {
|
|
||||||
emit(LoginError(message: e.toString()));
|
emit(LoginError(message: e.toString()));
|
||||||
} finally {
|
} finally {
|
||||||
emit(LoginSuccess());
|
emit(LoginSuccess());
|
||||||
@ -136,7 +135,7 @@ class LoginBloc extends Bloc<LoginEvent, LoginState> with Trans {
|
|||||||
await userRepository.getUserByApple();
|
await userRepository.getUserByApple();
|
||||||
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
||||||
Track().track(TrackingEvent.login, eventValue: "Apple");
|
Track().track(TrackingEvent.login, eventValue: "Apple");
|
||||||
} on Exception catch(e) {
|
} on Exception catch (e) {
|
||||||
emit(LoginError(message: e.toString()));
|
emit(LoginError(message: e.toString()));
|
||||||
} finally {
|
} finally {
|
||||||
emit(LoginSuccess());
|
emit(LoginSuccess());
|
||||||
@ -145,47 +144,67 @@ class LoginBloc extends Bloc<LoginEvent, LoginState> with Trans {
|
|||||||
|
|
||||||
void _onRegistrationSubmit(RegistrationSubmit event, Emitter<LoginState> emit) async {
|
void _onRegistrationSubmit(RegistrationSubmit event, Emitter<LoginState> emit) async {
|
||||||
emit(LoginLoading());
|
emit(LoginLoading());
|
||||||
final String? validationError = this.validate();
|
try {
|
||||||
if (validationError != null) {
|
final String? validationError = this.validate();
|
||||||
emit(LoginError(message: validationError));
|
if (validationError != null) {
|
||||||
} else {
|
emit(LoginError(message: validationError));
|
||||||
await userRepository.addUser();
|
} else {
|
||||||
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
await userRepository.addUser();
|
||||||
customerRepository!.customer!.emailSubscription = emailSubscription == true ? 1 : 0;
|
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
||||||
await afterRegistration("email");
|
customerRepository!.customer!.emailSubscription = emailSubscription == true ? 1 : 0;
|
||||||
Cache().setLoginType(LoginType.email);
|
await afterRegistration("email");
|
||||||
|
Cache().setLoginType(LoginType.email);
|
||||||
|
}
|
||||||
|
} on Exception catch (e) {
|
||||||
|
emit(LoginError(message: e.toString()));
|
||||||
|
} finally {
|
||||||
|
emit(LoginSuccess());
|
||||||
}
|
}
|
||||||
emit(LoginSuccess());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onRegistrationFB(RegistrationFB event, Emitter<LoginState> emit) async {
|
void _onRegistrationFB(RegistrationFB event, Emitter<LoginState> emit) async {
|
||||||
emit(LoginLoading());
|
emit(LoginLoading());
|
||||||
Cache().setLoginType(LoginType.fb);
|
try {
|
||||||
await userRepository.addUserFB();
|
Cache().setLoginType(LoginType.fb);
|
||||||
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
await userRepository.addUserFB();
|
||||||
customerRepository!.customer!.emailSubscription = emailSubscription == true ? 1 : 0;
|
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
||||||
await afterRegistration("FB");
|
customerRepository!.customer!.emailSubscription = emailSubscription == true ? 1 : 0;
|
||||||
emit(LoginSuccess());
|
await afterRegistration("FB");
|
||||||
|
} on Exception catch (e) {
|
||||||
|
emit(LoginError(message: e.toString()));
|
||||||
|
} finally {
|
||||||
|
emit(LoginSuccess());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onRegistrationGoogle(RegistrationGoogle event, Emitter<LoginState> emit) async {
|
void _onRegistrationGoogle(RegistrationGoogle event, Emitter<LoginState> emit) async {
|
||||||
emit(LoginLoading());
|
emit(LoginLoading());
|
||||||
Cache().setLoginType(LoginType.google);
|
try {
|
||||||
await userRepository.addUserGoogle();
|
Cache().setLoginType(LoginType.google);
|
||||||
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
await userRepository.addUserGoogle();
|
||||||
customerRepository!.customer!.emailSubscription = emailSubscription == true ? 1 : 0;
|
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
||||||
await afterRegistration("Google");
|
customerRepository!.customer!.emailSubscription = emailSubscription == true ? 1 : 0;
|
||||||
emit(LoginSuccess());
|
await afterRegistration("Google");
|
||||||
|
} on Exception catch (e) {
|
||||||
|
emit(LoginError(message: e.toString()));
|
||||||
|
} finally {
|
||||||
|
emit(LoginSuccess());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onRegistrationApple(RegistrationApple event, Emitter<LoginState> emit) async {
|
void _onRegistrationApple(RegistrationApple event, Emitter<LoginState> emit) async {
|
||||||
emit(LoginLoading());
|
emit(LoginLoading());
|
||||||
Cache().setLoginType(LoginType.apple);
|
try {
|
||||||
await userRepository.addUserApple();
|
Cache().setLoginType(LoginType.apple);
|
||||||
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
await userRepository.addUserApple();
|
||||||
customerRepository!.customer!.emailSubscription = emailSubscription == true ? 1 : 0;
|
accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
|
||||||
await afterRegistration("Apple");
|
customerRepository!.customer!.emailSubscription = emailSubscription == true ? 1 : 0;
|
||||||
emit(LoginSuccess());
|
await afterRegistration("Apple");
|
||||||
|
} on Exception catch (e) {
|
||||||
|
emit(LoginError(message: e.toString()));
|
||||||
|
} finally {
|
||||||
|
emit(LoginSuccess());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _onDataProtectionClicked(DataProtectionClicked event, Emitter<LoginState> emit) async {
|
void _onDataProtectionClicked(DataProtectionClicked event, Emitter<LoginState> emit) async {
|
||||||
|
@ -113,103 +113,6 @@ class MenuBloc extends Bloc<MenuEvent, MenuState> with Trans, Logging {
|
|||||||
this.context = context;
|
this.context = context;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @override
|
|
||||||
Stream<MenuState> mapEventToState(
|
|
||||||
MenuEvent event,
|
|
||||||
) async* {
|
|
||||||
try {
|
|
||||||
if (event is MenuCreate) {
|
|
||||||
yield MenuLoading();
|
|
||||||
//await menuTreeRepository.createTree();
|
|
||||||
//menuTreeRepository.getBranch(this.parent);
|
|
||||||
//setMenuInfo();
|
|
||||||
if (Cache().getDevices() != null) {
|
|
||||||
exerciseDeviceRepository.setDevices(Cache().getDevices()!);
|
|
||||||
}
|
|
||||||
yield MenuReady();
|
|
||||||
} else if (event is MenuRecreateTree) {
|
|
||||||
yield MenuLoading();
|
|
||||||
// ie. at language changes
|
|
||||||
menuTreeRepository.createTree();
|
|
||||||
yield MenuReady();
|
|
||||||
} else if (event is MenuTreeDown) {
|
|
||||||
yield MenuLoading();
|
|
||||||
parent = event.parent;
|
|
||||||
workoutItem = event.item;
|
|
||||||
|
|
||||||
if (workoutItem != null) {
|
|
||||||
setAbility(workoutItem!.internalName);
|
|
||||||
}
|
|
||||||
final LinkedHashMap<String, WorkoutMenuTree> branch = menuTreeRepository.getBranch(event.parent);
|
|
||||||
|
|
||||||
await getImages(branch);
|
|
||||||
yield MenuReady();
|
|
||||||
} else if (event is MenuTreeUp) {
|
|
||||||
yield MenuLoading();
|
|
||||||
// get parent menus or exercises
|
|
||||||
parent = event.parent;
|
|
||||||
workoutItem = menuTreeRepository.getParentItem(parent);
|
|
||||||
|
|
||||||
LinkedHashMap<String, WorkoutMenuTree> branch;
|
|
||||||
if (workoutItem != null) {
|
|
||||||
setAbility(workoutItem!.internalName);
|
|
||||||
branch = menuTreeRepository.getBranch(workoutItem!.parent);
|
|
||||||
await getImages(branch);
|
|
||||||
}
|
|
||||||
|
|
||||||
yield MenuReady();
|
|
||||||
} else if (event is MenuTreeJump) {
|
|
||||||
yield MenuLoading();
|
|
||||||
parent = event.parent;
|
|
||||||
workoutItem = menuTreeRepository.getParentItem(parent);
|
|
||||||
|
|
||||||
if (workoutItem != null) {
|
|
||||||
setAbility(workoutItem!.internalName);
|
|
||||||
}
|
|
||||||
final LinkedHashMap<String, WorkoutMenuTree> branch = menuTreeRepository.getBranch(workoutItem!.parent);
|
|
||||||
await getImages(branch);
|
|
||||||
|
|
||||||
yield MenuReady();
|
|
||||||
} else if (event is MenuClickExercise) {
|
|
||||||
yield MenuLoading();
|
|
||||||
// get exercise page
|
|
||||||
yield MenuReady();
|
|
||||||
} else if (event is MenuFilterExerciseType) {
|
|
||||||
yield MenuLoading();
|
|
||||||
final int deviceId = event.deviceId;
|
|
||||||
if (selectedDevice(deviceId)) {
|
|
||||||
listFilterDevice.add(deviceId);
|
|
||||||
} else {
|
|
||||||
listFilterDevice.remove(deviceId);
|
|
||||||
}
|
|
||||||
yield MenuReady();
|
|
||||||
} else if (event is MenuStartTrial) {
|
|
||||||
yield MenuLoading();
|
|
||||||
final DateTime start = event.start;
|
|
||||||
CustomerRepository customerRepository = CustomerRepository();
|
|
||||||
customerRepository.customer = Cache().userLoggedIn;
|
|
||||||
customerRepository.customer!.trialDate = start;
|
|
||||||
Cache().userLoggedIn!.trialDate = start;
|
|
||||||
|
|
||||||
customerRepository.saveCustomer();
|
|
||||||
|
|
||||||
if (DateTime.now().difference(start).inHours < 1) {
|
|
||||||
Cache().hasPurchased = true;
|
|
||||||
log("Trial mode on!");
|
|
||||||
Track().track(TrackingEvent.trial, eventValue: DateFormat('yyyy-MM-dd HH:mm:ss').format(start));
|
|
||||||
|
|
||||||
if (!isInDebugMode) {
|
|
||||||
MauticRepository mauticRepository = MauticRepository(customerRepository: customerRepository);
|
|
||||||
await mauticRepository.sendMauticTrial();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
yield MenuReady();
|
|
||||||
}
|
|
||||||
} on Exception catch (ex) {
|
|
||||||
yield MenuError(message: ex.toString());
|
|
||||||
}
|
|
||||||
} */
|
|
||||||
|
|
||||||
void setAbility(String name) {
|
void setAbility(String name) {
|
||||||
switch (name) {
|
switch (name) {
|
||||||
case "one_rep_max":
|
case "one_rep_max":
|
||||||
|
@ -161,10 +161,10 @@ class SalesBloc extends Bloc<SalesEvent, SalesState> with Logging {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String productSetString = splitTestRepository.getSplitTestValue("product_set_5");
|
//String productSetString = splitTestRepository.getSplitTestValue("product_set_5");
|
||||||
log("ProductSetString: $productSetString");
|
//log("ProductSetString: $productSetString");
|
||||||
try {
|
try {
|
||||||
productSet = int.parse(productSetString);
|
productSet = 5;
|
||||||
} on Exception catch (e) {
|
} on Exception catch (e) {
|
||||||
log("Define the right productset! $e");
|
log("Define the right productset! $e");
|
||||||
productSet = 2;
|
productSet = 2;
|
||||||
|
@ -7,6 +7,7 @@ import 'package:aitrainer_app/service/logging.dart';
|
|||||||
import 'package:aitrainer_app/util/session.dart';
|
import 'package:aitrainer_app/util/session.dart';
|
||||||
import 'package:bloc/bloc.dart';
|
import 'package:bloc/bloc.dart';
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:upgrader/upgrader.dart';
|
||||||
|
|
||||||
part 'session_event.dart';
|
part 'session_event.dart';
|
||||||
part 'session_state.dart';
|
part 'session_state.dart';
|
||||||
@ -30,6 +31,11 @@ class SessionBloc extends Bloc<SessionEvent, SessionState> with Logging {
|
|||||||
String lang = AppLanguage().appLocal.languageCode;
|
String lang = AppLanguage().appLocal.languageCode;
|
||||||
log("Change lang to $lang");
|
log("Change lang to $lang");
|
||||||
settingsBloc!.add(SettingsChangeLanguage(language: lang));
|
settingsBloc!.add(SettingsChangeLanguage(language: lang));
|
||||||
|
final iTunes = ITunesSearchAPI();
|
||||||
|
final resultsFuture = iTunes.lookupByBundleId('com.aitrainer.app');
|
||||||
|
resultsFuture.then((results) {
|
||||||
|
print('iTunes results: $results');
|
||||||
|
});
|
||||||
emit(SessionReady());
|
emit(SessionReady());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ class TrainingEvaluationBloc extends Bloc<TrainingEvaluationEvent, TrainingEvalu
|
|||||||
final String day;
|
final String day;
|
||||||
TrainingEvaluationBloc({required this.trainingPlanBloc, required this.day}) : super(TrainingEvaluationInitial()) {
|
TrainingEvaluationBloc({required this.trainingPlanBloc, required this.day}) : super(TrainingEvaluationInitial()) {
|
||||||
_load();
|
_load();
|
||||||
//on<TrainingEvaluationLoad>(_onLoad);
|
on<TrainingEvaluationLoad>(_onLoad);
|
||||||
}
|
}
|
||||||
|
|
||||||
String duration = "-";
|
String duration = "-";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import 'dart:io';
|
//import 'dart:io';
|
||||||
|
/*
|
||||||
import 'package:sqflite/sqflite.dart';
|
import 'package:sqflite/sqflite.dart';
|
||||||
|
|
||||||
class DB {
|
class DB {
|
||||||
@ -35,3 +35,4 @@ class DB {
|
|||||||
|
|
||||||
Database getDB() => this._db;
|
Database getDB() => this._db;
|
||||||
}
|
}
|
||||||
|
*/
|
@ -121,7 +121,7 @@ class AnimatedButton extends StatefulWidget {
|
|||||||
this.borderWidth = 1,
|
this.borderWidth = 1,
|
||||||
this.blurColor = Colors.black,
|
this.blurColor = Colors.black,
|
||||||
this.shadowColor,
|
this.shadowColor,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
_AnimatedButtonState createState() => _AnimatedButtonState(
|
_AnimatedButtonState createState() => _AnimatedButtonState(
|
||||||
@ -145,7 +145,7 @@ class _AnimatedButtonState extends State<AnimatedButton> {
|
|||||||
_AnimatedButtonState({
|
_AnimatedButtonState({
|
||||||
this.type,
|
this.type,
|
||||||
this.color,
|
this.color,
|
||||||
this.shadowColor,
|
//this.shadowColor,
|
||||||
this.borderColor,
|
this.borderColor,
|
||||||
this.blurColor,
|
this.blurColor,
|
||||||
});
|
});
|
||||||
@ -159,14 +159,14 @@ class _AnimatedButtonState extends State<AnimatedButton> {
|
|||||||
int index = type!.index;
|
int index = type!.index;
|
||||||
setState(() {
|
setState(() {
|
||||||
color = definedColors[index]["color"];
|
color = definedColors[index]["color"];
|
||||||
shadowColor = definedColors[index]["shadowColor"];
|
//shadowColor = definedColors[index]["shadowColor"];
|
||||||
blurColor = definedColors[index]["blurColor"];
|
blurColor = definedColors[index]["blurColor"];
|
||||||
borderColor = definedColors[index]["borderColor"];
|
borderColor = definedColors[index]["borderColor"];
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
setState(() {
|
setState(() {
|
||||||
color = widget.color;
|
color = widget.color;
|
||||||
shadowColor = widget.shadowColor;
|
//shadowColor = widget.shadowColor;
|
||||||
blurColor = widget.blurColor;
|
blurColor = widget.blurColor;
|
||||||
borderColor = widget.borderColor;
|
borderColor = widget.borderColor;
|
||||||
});
|
});
|
||||||
|
@ -44,15 +44,6 @@ class ImageCache with Logging {
|
|||||||
|
|
||||||
_images[imageKey] = imageString;
|
_images[imageKey] = imageString;
|
||||||
_imageMap[imageKey] = true;
|
_imageMap[imageKey] = true;
|
||||||
|
|
||||||
/* final String imageString = await getImageAs64BaseString(id, url);
|
|
||||||
if (imageString != null) {
|
|
||||||
_imageMap[imageKey] = imageString;
|
|
||||||
_imageDown[imageKey] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_images[imageKey] = imageString;
|
|
||||||
_imageMap[imageKey] = true; */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> saveImageToPrefs(String key, String value) async {
|
Future<void> saveImageToPrefs(String key, String value) async {
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
library network_image_to_byte;
|
library network_image_to_byte;
|
||||||
|
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:typed_data';
|
|
||||||
|
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ class __TreeViewDataState extends State<_TreeViewData> {
|
|||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
/// We require the initializers to run after the loading screen is rendered
|
/// We require the initializers to run after the loading screen is rendered
|
||||||
SchedulerBinding.instance!.addPostFrameCallback((_) {
|
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||||
final double cHeight = MediaQuery.of(context).size.height;
|
final double cHeight = MediaQuery.of(context).size.height;
|
||||||
subscription = stream.listen((value) {
|
subscription = stream.listen((value) {
|
||||||
if (value) {
|
if (value) {
|
||||||
|
153
lib/main.dart
153
lib/main.dart
@ -1,5 +1,3 @@
|
|||||||
// ignore_for_file: must_be_immutable
|
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'package:aitrainer_app/bloc/test_set_execute/test_set_execute_bloc.dart';
|
import 'package:aitrainer_app/bloc/test_set_execute/test_set_execute_bloc.dart';
|
||||||
@ -48,17 +46,16 @@ import 'package:aitrainer_app/widgets/development_diagram.dart';
|
|||||||
import 'package:aitrainer_app/widgets/home.dart';
|
import 'package:aitrainer_app/widgets/home.dart';
|
||||||
import 'package:aitrainer_app/library/facebook_app_events/facebook_app_events.dart';
|
import 'package:aitrainer_app/library/facebook_app_events/facebook_app_events.dart';
|
||||||
import 'package:firebase_analytics/firebase_analytics.dart';
|
import 'package:firebase_analytics/firebase_analytics.dart';
|
||||||
//import 'package:flurry_data/flurry_data.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||||
import 'package:aitrainer_app/util/app_localization.dart';
|
import 'package:aitrainer_app/util/app_localization.dart';
|
||||||
//import 'package:flutter_uxcam/flutter_uxcam.dart';
|
|
||||||
import 'package:google_fonts/google_fonts.dart';
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
import 'package:matomo_tracker/matomo_tracker.dart';
|
import 'package:matomo_tracker/matomo_tracker.dart';
|
||||||
import 'package:sentry_flutter/sentry_flutter.dart';
|
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||||
//import 'package:flutter_smartlook/flutter_smartlook.dart';
|
|
||||||
|
import 'package:posthog_flutter/posthog_flutter.dart';
|
||||||
import 'package:upgrader/upgrader.dart';
|
import 'package:upgrader/upgrader.dart';
|
||||||
import 'bloc/account/account_bloc.dart';
|
import 'bloc/account/account_bloc.dart';
|
||||||
import 'bloc/body_development/body_development_bloc.dart';
|
import 'bloc/body_development/body_development_bloc.dart';
|
||||||
@ -72,7 +69,8 @@ import 'model/cache.dart';
|
|||||||
import 'view/training_evaluation_page.dart';
|
import 'view/training_evaluation_page.dart';
|
||||||
import 'package:syncfusion_localizations/syncfusion_localizations.dart';
|
import 'package:syncfusion_localizations/syncfusion_localizations.dart';
|
||||||
|
|
||||||
const dsn = 'https://0f635b7225564abc9089f8106f25eb5c@sentry.aitrainer.app/1';
|
const dsn = 'https://2309523cf2374c089fa1143d19209bc1@glitch.workouttest.org/2';
|
||||||
|
//const dsn = 'https://be8b4f90398a45e68b6798c32c4e6baf@app.glitchtip.com/1992';
|
||||||
|
|
||||||
/// Whether the VM is running in debug mode.
|
/// Whether the VM is running in debug mode.
|
||||||
///
|
///
|
||||||
@ -99,16 +97,10 @@ Future<Null> _reportError(dynamic error, dynamic stackTrace) async {
|
|||||||
}
|
}
|
||||||
|
|
||||||
print('Reporting to Sentry.io...');
|
print('Reporting to Sentry.io...');
|
||||||
final String customerId = Cache().userLoggedIn != null ? Cache().userLoggedIn!.customerId.toString() : "0";
|
final sentryId = await Sentry.captureException(error, stackTrace: stackTrace);
|
||||||
Sentry.configureScope(
|
|
||||||
(scope) => scope.user = SentryUser(id: customerId),
|
|
||||||
);
|
|
||||||
final String platform = Platform.isAndroid ? "Android" : "iOS";
|
|
||||||
final String version = Cache().packageInfo != null ? Cache().packageInfo!.version + "+" + Cache().packageInfo!.buildNumber : "";
|
|
||||||
final sentryId =
|
|
||||||
await Sentry.captureException(error, stackTrace: stackTrace, hint: "Platform: $platform, Version: $version, User: $customerId");
|
|
||||||
|
|
||||||
print('Capture exception result : SentryId : $sentryId');
|
print('Capture exception result : SentryId : $sentryId');
|
||||||
|
MatomoTracker.instance.trackEvent(eventCategory: "error", action: error.toString());
|
||||||
|
print('Track error to Matomo');
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Null> main() async {
|
Future<Null> main() async {
|
||||||
@ -117,13 +109,31 @@ Future<Null> main() async {
|
|||||||
if (isInDebugMode) {
|
if (isInDebugMode) {
|
||||||
// In development mode simply print to console.
|
// In development mode simply print to console.
|
||||||
FlutterError.dumpErrorToConsole(details);
|
FlutterError.dumpErrorToConsole(details);
|
||||||
} else {
|
//} else {
|
||||||
// In production mode report to the application zone to report to
|
// In production mode report to the application zone to report to
|
||||||
// Sentry.
|
// Sentry.
|
||||||
Zone.current.handleUncaughtError(details.exception, details.stack!);
|
Zone.current.handleUncaughtError(details.exception, details.stack!);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Future<void> initThirdParty() async {
|
||||||
|
if (!isInDebugMode) {
|
||||||
|
await MatomoTracker.instance.initialize(
|
||||||
|
siteId: 3,
|
||||||
|
url: 'https://matomo.workouttest.org/matomo.php',
|
||||||
|
);
|
||||||
|
|
||||||
|
Posthog().setContext({
|
||||||
|
'device': {
|
||||||
|
'token': 'v1.26 test',
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
print(" -- FireBase init..");
|
||||||
|
await FirebaseApi().initializeFlutterFire();
|
||||||
|
}
|
||||||
|
|
||||||
// This creates a [Zone] that contains the Flutter application and stablishes
|
// This creates a [Zone] that contains the Flutter application and stablishes
|
||||||
// an error handler that captures errors and reports them.
|
// an error handler that captures errors and reports them.
|
||||||
//
|
//
|
||||||
@ -136,80 +146,54 @@ Future<Null> main() async {
|
|||||||
// - https://api.dartlang.org/stable/1.24.2/dart-async/Zone-class.html
|
// - https://api.dartlang.org/stable/1.24.2/dart-async/Zone-class.html
|
||||||
// - https://www.dartlang.org/articles/libraries/zones
|
// - https://www.dartlang.org/articles/libraries/zones
|
||||||
runZonedGuarded<Future<Null>>(() async {
|
runZonedGuarded<Future<Null>>(() async {
|
||||||
if (!isInDebugMode) {
|
|
||||||
await SentryFlutter.init(
|
|
||||||
(options) {
|
|
||||||
options.dsn = dsn;
|
|
||||||
options.release = Cache().packageInfo != null ? Cache().packageInfo!.version + "+" + Cache().packageInfo!.buildNumber : "";
|
|
||||||
options.enableAutoSessionTracking = true;
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
Future<void> initThirdParty() async {
|
|
||||||
if (!isInDebugMode) {
|
|
||||||
//await FlurryData.initialize(androidKey: "JNYCTCWBT34FM3J8TV36", iosKey: "3QBG7BSMGPDH24S8TRQP", enableLog: true);
|
|
||||||
await MatomoTracker.instance.initialize(
|
|
||||||
siteId: 3,
|
|
||||||
url: 'https://matomo.workouttest.com/matomo.php',
|
|
||||||
//visitorId: 'customer_1',
|
|
||||||
);
|
|
||||||
//FlutterUxcam.optIntoSchematicRecordings();
|
|
||||||
}
|
|
||||||
await FirebaseApi().initializeFlutterFire();
|
|
||||||
}
|
|
||||||
|
|
||||||
final WorkoutTreeRepository menuTreeRepository = WorkoutTreeRepository();
|
final WorkoutTreeRepository menuTreeRepository = WorkoutTreeRepository();
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
if (!isInDebugMode) {
|
|
||||||
//FlutterUxcam.startWithKey("wvdstyoml4tiwfd");
|
|
||||||
|
|
||||||
//SetupOptions options = (new SetupOptionsBuilder('682883e5cd71a46160c4f6ed070530ee593f49c6')).build();
|
|
||||||
//Smartlook.setupAndStartRecording(options);
|
|
||||||
//Smartlook.setEventTrackingMode(EventTrackingMode.FULL_TRACKING);
|
|
||||||
}
|
|
||||||
await initThirdParty();
|
await initThirdParty();
|
||||||
final FirebaseAnalytics analytics = FirebaseAnalytics.instance;
|
final FirebaseAnalytics analytics = FirebaseAnalytics.instance;
|
||||||
|
|
||||||
print(" -- FireBase init..");
|
await SentryFlutter.init(
|
||||||
|
(options) => options
|
||||||
runApp(MultiBlocProvider(
|
..dsn = dsn
|
||||||
providers: [
|
..debug = true,
|
||||||
BlocProvider<SessionBloc>(
|
appRunner: () => runApp(MultiBlocProvider(
|
||||||
create: (BuildContext context) => SessionBloc(session: Session()),
|
providers: [
|
||||||
),
|
BlocProvider<SessionBloc>(
|
||||||
BlocProvider<MenuBloc>(
|
create: (BuildContext context) => SessionBloc(session: Session()),
|
||||||
create: (BuildContext context) => MenuBloc(menuTreeRepository: menuTreeRepository),
|
),
|
||||||
),
|
BlocProvider<MenuBloc>(
|
||||||
BlocProvider<SettingsBloc>(
|
create: (BuildContext context) => MenuBloc(menuTreeRepository: menuTreeRepository),
|
||||||
create: (BuildContext context) => SettingsBloc(context: context),
|
),
|
||||||
),
|
BlocProvider<SettingsBloc>(
|
||||||
BlocProvider<AccountBloc>(
|
create: (BuildContext context) => SettingsBloc(context: context),
|
||||||
create: (BuildContext context) => AccountBloc(customerRepository: CustomerRepository()),
|
),
|
||||||
),
|
BlocProvider<AccountBloc>(
|
||||||
BlocProvider<ExercisePlanBloc>(
|
create: (BuildContext context) => AccountBloc(customerRepository: CustomerRepository()),
|
||||||
create: (BuildContext context) => ExercisePlanBloc(menuTreeRepository: menuTreeRepository),
|
),
|
||||||
),
|
BlocProvider<ExercisePlanBloc>(
|
||||||
BlocProvider<DevelopmentByMuscleBloc>(
|
create: (BuildContext context) => ExercisePlanBloc(menuTreeRepository: menuTreeRepository),
|
||||||
create: (BuildContext context) => DevelopmentByMuscleBloc(workoutTreeRepository: menuTreeRepository),
|
),
|
||||||
),
|
BlocProvider<DevelopmentByMuscleBloc>(
|
||||||
BlocProvider<BodyDevelopmentBloc>(
|
create: (BuildContext context) => DevelopmentByMuscleBloc(workoutTreeRepository: menuTreeRepository),
|
||||||
create: (BuildContext context) => BodyDevelopmentBloc(workoutTreeRepository: menuTreeRepository),
|
),
|
||||||
),
|
BlocProvider<BodyDevelopmentBloc>(
|
||||||
BlocProvider<TimerBloc>(
|
create: (BuildContext context) => BodyDevelopmentBloc(workoutTreeRepository: menuTreeRepository),
|
||||||
create: (BuildContext context) => TimerBloc(),
|
),
|
||||||
),
|
BlocProvider<TimerBloc>(
|
||||||
BlocProvider<TestSetExecuteBloc>(
|
create: (BuildContext context) => TimerBloc(),
|
||||||
create: (BuildContext context) => TestSetExecuteBloc(),
|
),
|
||||||
),
|
BlocProvider<TestSetExecuteBloc>(
|
||||||
BlocProvider<TutorialBloc>(
|
create: (BuildContext context) => TestSetExecuteBloc(),
|
||||||
create: (BuildContext context) => TutorialBloc(tutorialName: ActivityDone.tutorialExecuteFirstTest.toStr())),
|
),
|
||||||
BlocProvider<TrainingPlanBloc>(create: (context) {
|
BlocProvider<TutorialBloc>(
|
||||||
final MenuBloc menuBloc = BlocProvider.of<MenuBloc>(context);
|
create: (BuildContext context) => TutorialBloc(tutorialName: ActivityDone.tutorialExecuteFirstTest.toStr())),
|
||||||
return TrainingPlanBloc(menuBloc: menuBloc, trainingPlanRepository: TrainingPlanRepository());
|
BlocProvider<TrainingPlanBloc>(create: (context) {
|
||||||
}),
|
final MenuBloc menuBloc = BlocProvider.of<MenuBloc>(context);
|
||||||
],
|
return TrainingPlanBloc(menuBloc: menuBloc, trainingPlanRepository: TrainingPlanRepository());
|
||||||
child: WorkoutTestApp(analytics: analytics),
|
}),
|
||||||
));
|
],
|
||||||
|
child: WorkoutTestApp(analytics: analytics),
|
||||||
|
)));
|
||||||
}, (error, stackTrace) async {
|
}, (error, stackTrace) async {
|
||||||
await _reportError(error, stackTrace);
|
await _reportError(error, stackTrace);
|
||||||
});
|
});
|
||||||
@ -312,6 +296,7 @@ class WorkoutTestApp extends StatelessWidget {
|
|||||||
)),
|
)),
|
||||||
navigatorObservers: [
|
navigatorObservers: [
|
||||||
FirebaseAnalyticsObserver(analytics: analytics),
|
FirebaseAnalyticsObserver(analytics: analytics),
|
||||||
|
//PosthogObserver(),
|
||||||
],
|
],
|
||||||
home: AitrainerHome(),
|
home: AitrainerHome(),
|
||||||
);
|
);
|
||||||
|
@ -117,8 +117,8 @@ class Cache with Logging {
|
|||||||
static final String activeExercisePlanDetailsKey = "active_exercise_details_plan";
|
static final String activeExercisePlanDetailsKey = "active_exercise_details_plan";
|
||||||
static final String myTrainingPlanKey = "myTrainingPlan";
|
static final String myTrainingPlanKey = "myTrainingPlan";
|
||||||
|
|
||||||
static String baseUrlLive = 'https://aitrainer.info:8943/api/';
|
static String baseUrlLive = 'https://api.workouttest.org/api/';
|
||||||
static String baseUrlTest = 'https://aitrainer.info:8843/api/';
|
static String baseUrlTest = 'https://api-test.workouttest.org/api/';
|
||||||
late String baseUrl;
|
late String baseUrl;
|
||||||
static final String mediaUrl = 'https://admin.aitrainer.app/media/';
|
static final String mediaUrl = 'https://admin.aitrainer.app/media/';
|
||||||
static final String username = 'bosi';
|
static final String username = 'bosi';
|
||||||
@ -702,8 +702,8 @@ class Cache with Logging {
|
|||||||
//Smartlook.setUserIdentifier(customerId.toString());
|
//Smartlook.setUserIdentifier(customerId.toString());
|
||||||
//Smartlook.instance.
|
//Smartlook.instance.
|
||||||
Track().track(TrackingEvent.enter);
|
Track().track(TrackingEvent.enter);
|
||||||
MatomoTracker.instance
|
MatomoTracker.instance.setVisitorUserId(customerId.toString());
|
||||||
.trackEvent(eventName: TrackingEvent.enter.enumToString(), eventCategory: "", action: TrackingEvent.enter.enumToString(), eventValue: customerId);
|
MatomoTracker.instance.trackEvent(eventCategory: "wt", action: TrackingEvent.enter.enumToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
await Future.forEach(ActivityDone.values, (element) async {
|
await Future.forEach(ActivityDone.values, (element) async {
|
||||||
|
@ -23,7 +23,7 @@ class CustomerRepository with Logging {
|
|||||||
Customer? _trainee;
|
Customer? _trainee;
|
||||||
List<Customer>? _trainees;
|
List<Customer>? _trainees;
|
||||||
List<CustomerProperty>? _properties;
|
List<CustomerProperty>? _properties;
|
||||||
List<CustomerProperty>? _allCustomerProperties;
|
//List<CustomerProperty>? _allCustomerProperties;
|
||||||
final PropertyRepository propertyRepository = PropertyRepository();
|
final PropertyRepository propertyRepository = PropertyRepository();
|
||||||
final List<Property> womanSizes = [];
|
final List<Property> womanSizes = [];
|
||||||
final List<Property> manSizes = [];
|
final List<Property> manSizes = [];
|
||||||
@ -45,7 +45,7 @@ class CustomerRepository with Logging {
|
|||||||
isMan = (Cache().userLoggedIn!.sex == "m");
|
isMan = (Cache().userLoggedIn!.sex == "m");
|
||||||
}
|
}
|
||||||
|
|
||||||
_allCustomerProperties = Cache().getCustomerPropertyAll();
|
//_allCustomerProperties = Cache().getCustomerPropertyAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
String? getGenderByName(String name) {
|
String? getGenderByName(String name) {
|
||||||
|
@ -5,6 +5,7 @@ import 'package:aitrainer_app/util/common.dart';
|
|||||||
import 'package:aitrainer_app/util/not_found_exception.dart';
|
import 'package:aitrainer_app/util/not_found_exception.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:aitrainer_app/model/cache.dart';
|
import 'package:aitrainer_app/model/cache.dart';
|
||||||
|
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||||
|
|
||||||
class APIClient with Common, Logging {
|
class APIClient with Common, Logging {
|
||||||
static final APIClient _singleton = APIClient._internal();
|
static final APIClient _singleton = APIClient._internal();
|
||||||
@ -45,12 +46,13 @@ class APIClient with Common, Logging {
|
|||||||
HttpClientResponse result = await request.close();
|
HttpClientResponse result = await request.close();
|
||||||
client.close();
|
client.close();
|
||||||
if (result.statusCode != 200) {
|
if (result.statusCode != 200) {
|
||||||
trace("authentication response: ${result.statusCode}");
|
trace("authentication response: ${result.statusCode} with URL: $url");
|
||||||
throw Exception("Network error, try again later!");
|
throw Exception("Authentication error: ${result.statusCode}");
|
||||||
}
|
}
|
||||||
return jsonDecode(await result.transform(utf8.decoder).join());
|
return jsonDecode(await result.transform(utf8.decoder).join());
|
||||||
} catch (exception) {
|
} catch (exception) {
|
||||||
print(exception.toString());
|
print(exception.toString());
|
||||||
|
await Sentry.captureException(exception);
|
||||||
throw Exception("Network error, try again later!");
|
throw Exception("Network error, try again later!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -87,37 +89,43 @@ class APIClient with Common, Logging {
|
|||||||
}
|
}
|
||||||
} on Exception catch (e) {
|
} on Exception catch (e) {
|
||||||
print("Post Exception: $e");
|
print("Post Exception: $e");
|
||||||
|
await Sentry.captureException(e);
|
||||||
throw Exception("Network Error, please try again later");
|
throw Exception("Network Error, please try again later");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<String> get(String endPoint, String param) async {
|
Future<String> get(String endPoint, String param) async {
|
||||||
final url = Cache().getBaseUrl() + endPoint + param;
|
final url = Cache().getBaseUrl() + endPoint + param;
|
||||||
|
try {
|
||||||
|
trace("-------- API get " + url);
|
||||||
|
String authToken = Cache().getAuthToken();
|
||||||
|
if (authToken.length == 0) {
|
||||||
|
var responseJson = await this.authenticateUser(Cache.username, Cache.password);
|
||||||
|
authToken = responseJson['token'];
|
||||||
|
Cache().authToken = authToken;
|
||||||
|
}
|
||||||
|
var uri = Uri.parse(url);
|
||||||
|
|
||||||
trace("-------- API get " + url);
|
HttpClient client = new HttpClient();
|
||||||
String authToken = Cache().getAuthToken();
|
|
||||||
if (authToken.length == 0) {
|
|
||||||
var responseJson = await this.authenticateUser(Cache.username, Cache.password);
|
|
||||||
authToken = responseJson['token'];
|
|
||||||
Cache().authToken = authToken;
|
|
||||||
}
|
|
||||||
var uri = Uri.parse(url);
|
|
||||||
|
|
||||||
HttpClient client = new HttpClient();
|
client.badCertificateCallback = ((X509Certificate cert, String host, int port) => true);
|
||||||
|
|
||||||
client.badCertificateCallback = ((X509Certificate cert, String host, int port) => true);
|
final HttpClientRequest request = await client.getUrl(uri);
|
||||||
|
request.headers.set('Content-Type', 'application/json');
|
||||||
final HttpClientRequest request = await client.getUrl(uri);
|
request.headers.set('Authorization', 'Bearer $authToken');
|
||||||
request.headers.set('Content-Type', 'application/json');
|
HttpClientResponse result = await request.close();
|
||||||
request.headers.set('Authorization', 'Bearer $authToken');
|
client.close();
|
||||||
HttpClientResponse result = await request.close();
|
trace(" ------------get response code: " + result.statusCode.toString());
|
||||||
client.close();
|
if (result.statusCode == 200) {
|
||||||
trace(" ------------get response code: " + result.statusCode.toString());
|
return await result.transform(utf8.decoder).join();
|
||||||
if (result.statusCode == 200) {
|
} else if (result.statusCode == 404) {
|
||||||
return await result.transform(utf8.decoder).join();
|
throw NotFoundException(message: "Not Found");
|
||||||
} else if (result.statusCode == 404) {
|
} else {
|
||||||
throw NotFoundException(message: "Not Found");
|
throw Exception("Network Error, please try again later");
|
||||||
} else {
|
}
|
||||||
|
} on Exception catch (e) {
|
||||||
|
print("Post Exception: $e");
|
||||||
|
await Sentry.captureException(e);
|
||||||
throw Exception("Network Error, please try again later");
|
throw Exception("Network Error, please try again later");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -62,10 +62,10 @@ class FirebaseApi with logging.Logging {
|
|||||||
badge: true,
|
badge: true,
|
||||||
sound: true,
|
sound: true,
|
||||||
);
|
);
|
||||||
this.firebaseRegToken = await FirebaseMessaging.instance.getToken();
|
this.firebaseRegToken = await FirebaseMessaging.instance.getToken();
|
||||||
Cache().firebaseMessageToken = firebaseRegToken;
|
Cache().firebaseMessageToken = firebaseRegToken;
|
||||||
log("FirebaseMessaging token $firebaseRegToken");
|
log("FirebaseMessaging token $firebaseRegToken");
|
||||||
|
|
||||||
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
|
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
|
||||||
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
|
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
|
||||||
print('Got a message whilst in the foreground!');
|
print('Got a message whilst in the foreground!');
|
||||||
@ -75,7 +75,6 @@ class FirebaseApi with logging.Logging {
|
|||||||
print('Message also contained a notification: ${message.notification}');
|
print('Message also contained a notification: ${message.notification}');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// Set `_error` state to true if Firebase initialization fails
|
// Set `_error` state to true if Firebase initialization fails
|
||||||
log("Error initializing Firebase");
|
log("Error initializing Firebase");
|
||||||
@ -381,11 +380,10 @@ class FirebaseApi with logging.Logging {
|
|||||||
|
|
||||||
Future<void> setupRemoteConfig() async {
|
Future<void> setupRemoteConfig() async {
|
||||||
//initializeFlutterFire();
|
//initializeFlutterFire();
|
||||||
RemoteConfig? remoteConfig;
|
FirebaseRemoteConfig? remoteConfig;
|
||||||
try {
|
try {
|
||||||
remoteConfig = RemoteConfig.instance;
|
remoteConfig = FirebaseRemoteConfig.instance;
|
||||||
await remoteConfig.setConfigSettings(
|
await remoteConfig.setConfigSettings(RemoteConfigSettings(
|
||||||
RemoteConfigSettings(
|
|
||||||
fetchTimeout: const Duration(seconds: 10),
|
fetchTimeout: const Duration(seconds: 10),
|
||||||
minimumFetchInterval: const Duration(seconds: 1),
|
minimumFetchInterval: const Duration(seconds: 1),
|
||||||
));
|
));
|
||||||
|
@ -50,6 +50,7 @@ class RevenueCatPurchases with Logging {
|
|||||||
log("Trial mode: $inTrial date: ${Cache().userLoggedIn!.trialDate}");
|
log("Trial mode: $inTrial date: ${Cache().userLoggedIn!.trialDate}");
|
||||||
if (Cache().userLoggedIn!.admin == 1 || inTrial || Cache().userLoggedIn!.lifeLong == 1) {
|
if (Cache().userLoggedIn!.admin == 1 || inTrial || Cache().userLoggedIn!.lifeLong == 1) {
|
||||||
Cache().hasPurchased = true;
|
Cache().hasPurchased = true;
|
||||||
|
log(" -- Purchased -- ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,6 +95,7 @@ class RevenueCatPurchases with Logging {
|
|||||||
PurchaserInfo purchaserInfo = await Purchases.purchasePackage(selectedPackage);
|
PurchaserInfo purchaserInfo = await Purchases.purchasePackage(selectedPackage);
|
||||||
if (purchaserInfo.entitlements.all["wt_subscription"] != null && purchaserInfo.entitlements.all["wt_subscription"]!.isActive) {
|
if (purchaserInfo.entitlements.all["wt_subscription"] != null && purchaserInfo.entitlements.all["wt_subscription"]!.isActive) {
|
||||||
Cache().hasPurchased = true;
|
Cache().hasPurchased = true;
|
||||||
|
log(" -- Purchased -- ");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log("!!!! No Selected package to purchase");
|
log("!!!! No Selected package to purchase");
|
||||||
@ -107,6 +109,7 @@ class RevenueCatPurchases with Logging {
|
|||||||
if (errorCode == PurchasesErrorCode.invalidReceiptError) {
|
if (errorCode == PurchasesErrorCode.invalidReceiptError) {
|
||||||
log("iOS Sandbox invalid receipt");
|
log("iOS Sandbox invalid receipt");
|
||||||
Cache().hasPurchased = true;
|
Cache().hasPurchased = true;
|
||||||
|
log(" -- Purchased -- ");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
log(e.toString());
|
log(e.toString());
|
||||||
|
@ -6,9 +6,7 @@ import 'package:aitrainer_app/util/enums.dart';
|
|||||||
import 'package:aitrainer_app/model/tracking.dart' as model;
|
import 'package:aitrainer_app/model/tracking.dart' as model;
|
||||||
import 'package:firebase_analytics/firebase_analytics.dart';
|
import 'package:firebase_analytics/firebase_analytics.dart';
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||||
//import 'package:flurry_data/flurry_data.dart';
|
import 'package:posthog_flutter/posthog_flutter.dart';
|
||||||
//import 'package:flutter_uxcam/flutter_uxcam.dart';
|
|
||||||
//import 'package:flutter_smartlook/flutter_smartlook.dart';
|
|
||||||
import 'package:matomo_tracker/matomo_tracker.dart';
|
import 'package:matomo_tracker/matomo_tracker.dart';
|
||||||
|
|
||||||
class Track with Logging {
|
class Track with Logging {
|
||||||
@ -22,12 +20,9 @@ class Track with Logging {
|
|||||||
Track._internal();
|
Track._internal();
|
||||||
|
|
||||||
void track(TrackingEvent event, {String eventValue = ""}) {
|
void track(TrackingEvent event, {String eventValue = ""}) {
|
||||||
|
model.Tracking tracking = model.Tracking();
|
||||||
|
tracking.customerId = Cache().userLoggedIn == null ? 0 : Cache().userLoggedIn!.customerId!;
|
||||||
if (!isInDebugMode) {
|
if (!isInDebugMode) {
|
||||||
//FlurryData.logEvent(event.enumToString());
|
|
||||||
//Smartlook.setGlobalEventProperty(event.toString(), eventValue, false);
|
|
||||||
//FlutterUxcam.logEventWithProperties(event.enumToString(), {"value": eventValue});
|
|
||||||
model.Tracking tracking = model.Tracking();
|
|
||||||
tracking.customerId = Cache().userLoggedIn == null ? 0 : Cache().userLoggedIn!.customerId!;
|
|
||||||
tracking.event = event.enumToString();
|
tracking.event = event.enumToString();
|
||||||
if (eventValue.isNotEmpty) {
|
if (eventValue.isNotEmpty) {
|
||||||
tracking.eventValue = eventValue;
|
tracking.eventValue = eventValue;
|
||||||
@ -38,7 +33,20 @@ class Track with Logging {
|
|||||||
|
|
||||||
FirebaseMessaging.instance.subscribeToTopic(event.enumToString());
|
FirebaseMessaging.instance.subscribeToTopic(event.enumToString());
|
||||||
analytics.logEvent(name: event.enumToString(), parameters: {"value": eventValue});
|
analytics.logEvent(name: event.enumToString(), parameters: {"value": eventValue});
|
||||||
MatomoTracker.instance.trackEvent(eventName: event.enumToString(), eventCategory: "", action: eventValue, eventValue: tracking.customerId);
|
|
||||||
|
if (eventValue.isNotEmpty) {
|
||||||
|
MatomoTracker.instance.trackEvent(eventCategory: "wt", action: event.enumToString(), eventName: eventValue);
|
||||||
|
} else {
|
||||||
|
MatomoTracker.instance.trackEvent(eventCategory: "wt", action: event.enumToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
Posthog().capture(
|
||||||
|
eventName: event.enumToString(),
|
||||||
|
properties: {
|
||||||
|
'action': eventValue,
|
||||||
|
'customer': tracking.customerId,
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,7 +73,7 @@ class AccountPage extends StatelessWidget with Trans {
|
|||||||
]),
|
]),
|
||||||
style: TextButton.styleFrom(
|
style: TextButton.styleFrom(
|
||||||
backgroundColor: Colors.white38,
|
backgroundColor: Colors.white38,
|
||||||
onSurface: Colors.grey,
|
disabledForegroundColor: Colors.grey,
|
||||||
),
|
),
|
||||||
onPressed: () => {
|
onPressed: () => {
|
||||||
if (Cache().userLoggedIn != null)
|
if (Cache().userLoggedIn != null)
|
||||||
@ -94,7 +94,7 @@ class AccountPage extends StatelessWidget with Trans {
|
|||||||
]),
|
]),
|
||||||
style: TextButton.styleFrom(
|
style: TextButton.styleFrom(
|
||||||
backgroundColor: Colors.white38,
|
backgroundColor: Colors.white38,
|
||||||
onSurface: Colors.grey,
|
disabledForegroundColor: Colors.grey,
|
||||||
),
|
),
|
||||||
onPressed: () => {
|
onPressed: () => {
|
||||||
if (Cache().userLoggedIn != null)
|
if (Cache().userLoggedIn != null)
|
||||||
@ -116,7 +116,7 @@ class AccountPage extends StatelessWidget with Trans {
|
|||||||
]),
|
]),
|
||||||
style: TextButton.styleFrom(
|
style: TextButton.styleFrom(
|
||||||
backgroundColor: Colors.white38,
|
backgroundColor: Colors.white38,
|
||||||
onSurface: Colors.grey,
|
disabledForegroundColor: Colors.grey,
|
||||||
),
|
),
|
||||||
onPressed: () => {
|
onPressed: () => {
|
||||||
if (Cache().userLoggedIn != null)
|
if (Cache().userLoggedIn != null)
|
||||||
@ -134,7 +134,7 @@ class AccountPage extends StatelessWidget with Trans {
|
|||||||
title: TextButton(
|
title: TextButton(
|
||||||
style: TextButton.styleFrom(
|
style: TextButton.styleFrom(
|
||||||
backgroundColor: Colors.white38,
|
backgroundColor: Colors.white38,
|
||||||
onSurface: Colors.grey,
|
disabledForegroundColor: Colors.grey,
|
||||||
),
|
),
|
||||||
child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||||
Text(t(bodyType), style: TextStyle(color: Colors.blue)),
|
Text(t(bodyType), style: TextStyle(color: Colors.blue)),
|
||||||
@ -165,7 +165,7 @@ class AccountPage extends StatelessWidget with Trans {
|
|||||||
title: TextButton(
|
title: TextButton(
|
||||||
style: TextButton.styleFrom(
|
style: TextButton.styleFrom(
|
||||||
backgroundColor: Colors.white38,
|
backgroundColor: Colors.white38,
|
||||||
onSurface: Colors.grey,
|
disabledForegroundColor: Colors.grey,
|
||||||
),
|
),
|
||||||
child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||||
Text(t("Available Devices"), style: TextStyle(color: Colors.blue)),
|
Text(t("Available Devices"), style: TextStyle(color: Colors.blue)),
|
||||||
@ -189,7 +189,7 @@ class AccountPage extends StatelessWidget with Trans {
|
|||||||
title: TextButton(
|
title: TextButton(
|
||||||
style: TextButton.styleFrom(
|
style: TextButton.styleFrom(
|
||||||
backgroundColor: Colors.white38,
|
backgroundColor: Colors.white38,
|
||||||
onSurface: Colors.grey,
|
disabledForegroundColor: Colors.grey,
|
||||||
),
|
),
|
||||||
child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||||
Text(t("Trigger message"), style: TextStyle(color: Colors.purple)),
|
Text(t("Trigger message"), style: TextStyle(color: Colors.purple)),
|
||||||
@ -218,7 +218,7 @@ class AccountPage extends StatelessWidget with Trans {
|
|||||||
title: TextButton(
|
title: TextButton(
|
||||||
style: TextButton.styleFrom(
|
style: TextButton.styleFrom(
|
||||||
backgroundColor: Colors.white38,
|
backgroundColor: Colors.white38,
|
||||||
onSurface: Colors.grey,
|
disabledForegroundColor: Colors.grey,
|
||||||
),
|
),
|
||||||
child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||||
Text(t(text), style: TextStyle(color: buttonColor)),
|
Text(t(text), style: TextStyle(color: buttonColor)),
|
||||||
@ -253,7 +253,7 @@ class AccountPage extends StatelessWidget with Trans {
|
|||||||
leading: Icon(Icons.people),
|
leading: Icon(Icons.people),
|
||||||
title: ElevatedButton(
|
title: ElevatedButton(
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
primary: Colors.white70,
|
backgroundColor: Colors.white70,
|
||||||
),
|
),
|
||||||
onPressed: () => accountBloc.add(AccountGetTrainees()),
|
onPressed: () => accountBloc.add(AccountGetTrainees()),
|
||||||
child: Text("See my trainees"),
|
child: Text("See my trainees"),
|
||||||
|
@ -13,8 +13,6 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
|||||||
import 'package:google_fonts/google_fonts.dart';
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
|
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
|
||||||
|
|
||||||
import '../bloc/customer_change/customer_change_bloc.dart';
|
|
||||||
|
|
||||||
// ignore: must_be_immutable
|
// ignore: must_be_immutable
|
||||||
class CustomerFitnessPage extends StatefulWidget {
|
class CustomerFitnessPage extends StatefulWidget {
|
||||||
late _CustomerFitnessPageState _state;
|
late _CustomerFitnessPageState _state;
|
||||||
|
@ -11,8 +11,6 @@ import 'package:google_fonts/google_fonts.dart';
|
|||||||
|
|
||||||
import 'package:syncfusion_flutter_gauges/gauges.dart';
|
import 'package:syncfusion_flutter_gauges/gauges.dart';
|
||||||
|
|
||||||
import '../bloc/customer_change/customer_change_bloc.dart';
|
|
||||||
|
|
||||||
// ignore: must_be_immutable
|
// ignore: must_be_immutable
|
||||||
class CustomerHeightPage extends StatefulWidget {
|
class CustomerHeightPage extends StatefulWidget {
|
||||||
late _CustomerHeightPageState _state;
|
late _CustomerHeightPageState _state;
|
||||||
|
@ -11,8 +11,6 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
|||||||
import 'package:google_fonts/google_fonts.dart';
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
|
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
|
||||||
|
|
||||||
import '../bloc/customer_change/customer_change_bloc.dart';
|
|
||||||
|
|
||||||
// ignore: must_be_immutable
|
// ignore: must_be_immutable
|
||||||
class CustomerSexPage extends StatefulWidget {
|
class CustomerSexPage extends StatefulWidget {
|
||||||
late _CustomerSexPageState _state;
|
late _CustomerSexPageState _state;
|
||||||
|
@ -11,8 +11,6 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
|||||||
import 'package:google_fonts/google_fonts.dart';
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
|
import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart';
|
||||||
|
|
||||||
import '../bloc/customer_change/customer_change_bloc.dart';
|
|
||||||
|
|
||||||
// ignore: must_be_immutable
|
// ignore: must_be_immutable
|
||||||
class CustomerWeightPage extends StatefulWidget {
|
class CustomerWeightPage extends StatefulWidget {
|
||||||
late _CustomerWeightPageState _state;
|
late _CustomerWeightPageState _state;
|
||||||
|
@ -59,10 +59,10 @@ class _CustomerWelcomePageState extends State<CustomerWelcomePage> with Trans {
|
|||||||
duration: Duration(seconds: 6),
|
duration: Duration(seconds: 6),
|
||||||
),
|
),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: 110,
|
height: 40,
|
||||||
),
|
),
|
||||||
CircularPercentIndicator(
|
CircularPercentIndicator(
|
||||||
radius: 250.0,
|
radius: 200.0,
|
||||||
animation: true,
|
animation: true,
|
||||||
animationDuration: 4800,
|
animationDuration: 4800,
|
||||||
lineWidth: 20.0,
|
lineWidth: 20.0,
|
||||||
|
@ -327,8 +327,8 @@ class _ExerciseControlPage extends State<ExerciseControlPage> with Trans {
|
|||||||
TextButton(
|
TextButton(
|
||||||
style: TextButton.styleFrom(
|
style: TextButton.styleFrom(
|
||||||
padding: EdgeInsets.all(0),
|
padding: EdgeInsets.all(0),
|
||||||
primary: Colors.white,
|
foregroundColor: Colors.white,
|
||||||
onSurface: Colors.blueAccent,
|
disabledForegroundColor: Colors.blueAccent,
|
||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
exerciseBloc.add(ExerciseControlSubmit(step: step));
|
exerciseBloc.add(ExerciseControlSubmit(step: step));
|
||||||
|
@ -47,7 +47,7 @@ class _MyDevelopmentMuscleState extends State<MyDevelopmentMusclePage> with Comm
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// We require the initializers to run after the loading screen is rendered
|
/// We require the initializers to run after the loading screen is rendered
|
||||||
SchedulerBinding.instance!.addPostFrameCallback((_) {
|
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||||
BlocProvider.of<DevelopmentByMuscleBloc>(context).add(DevelopmentByMuscleLoad());
|
BlocProvider.of<DevelopmentByMuscleBloc>(context).add(DevelopmentByMuscleLoad());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,10 @@ class _MyDevelopmentPage extends State<MyDevelopmentPage> with Trans {
|
|||||||
text: t("My Training Logs"),
|
text: t("My Training Logs"),
|
||||||
style: GoogleFonts.robotoMono(
|
style: GoogleFonts.robotoMono(
|
||||||
textStyle: TextStyle(
|
textStyle: TextStyle(
|
||||||
fontSize: 14, color: Colors.white, fontWeight: FontWeight.bold, backgroundColor: Colors.black54.withOpacity(0.4))),
|
fontSize: 14,
|
||||||
|
color: Colors.white,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
backgroundColor: Colors.black54.withOpacity(0.4))),
|
||||||
image: "asset/image/edzesnaplom400400.jpg",
|
image: "asset/image/edzesnaplom400400.jpg",
|
||||||
left: 5,
|
left: 5,
|
||||||
onTap: () => Navigator.of(context).pushNamed('mydevelopmentLog', arguments: args),
|
onTap: () => Navigator.of(context).pushNamed('mydevelopmentLog', arguments: args),
|
||||||
@ -186,7 +189,8 @@ class _MyDevelopmentPage extends State<MyDevelopmentPage> with Trans {
|
|||||||
onTap: () => {Navigator.of(context).pushNamed('mydevelopmentMusclePage', arguments: args)},
|
onTap: () => {Navigator.of(context).pushNamed('mydevelopmentMusclePage', arguments: args)},
|
||||||
isLocked: true,
|
isLocked: true,
|
||||||
))),
|
))),
|
||||||
developmentWidget(imageWidth, t("Development of My Sizes"), "asset/image/sizes_q.jpg", TrackingEvent.my_size_development, args),
|
developmentWidget(
|
||||||
|
imageWidth, t("Development of My Sizes"), "asset/image/sizes_q.jpg", TrackingEvent.my_size_development, args),
|
||||||
hiddenWidget(customerRepository, exerciseRepository),
|
hiddenWidget(customerRepository, exerciseRepository),
|
||||||
]),
|
]),
|
||||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||||
@ -207,7 +211,8 @@ class _MyDevelopmentPage extends State<MyDevelopmentPage> with Trans {
|
|||||||
textAlignment: Alignment.topLeft,
|
textAlignment: Alignment.topLeft,
|
||||||
text: t(title),
|
text: t(title),
|
||||||
style: GoogleFonts.robotoMono(
|
style: GoogleFonts.robotoMono(
|
||||||
textStyle: TextStyle(fontSize: 14, color: Colors.white, fontWeight: FontWeight.bold, backgroundColor: Colors.black54.withOpacity(0.4))),
|
textStyle:
|
||||||
|
TextStyle(fontSize: 14, color: Colors.white, fontWeight: FontWeight.bold, backgroundColor: Colors.black54.withOpacity(0.4))),
|
||||||
image: imageUrl,
|
image: imageUrl,
|
||||||
onTap: () => {
|
onTap: () => {
|
||||||
if (Cache().userLoggedIn != null)
|
if (Cache().userLoggedIn != null)
|
||||||
@ -240,8 +245,8 @@ class _MyDevelopmentPage extends State<MyDevelopmentPage> with Trans {
|
|||||||
return TextButton(
|
return TextButton(
|
||||||
style: TextButton.styleFrom(
|
style: TextButton.styleFrom(
|
||||||
padding: EdgeInsets.all(20),
|
padding: EdgeInsets.all(20),
|
||||||
primary: Colors.white,
|
backgroundColor: Colors.white,
|
||||||
onSurface: Colors.blueAccent,
|
disabledForegroundColor: Colors.blueAccent,
|
||||||
),
|
),
|
||||||
onPressed: () => {
|
onPressed: () => {
|
||||||
if (Cache().getTrainee() != null)
|
if (Cache().getTrainee() != null)
|
||||||
|
@ -43,8 +43,8 @@ class SettingsPage extends StatelessWidget with Trans {
|
|||||||
child: Form(
|
child: Form(
|
||||||
child: BlocConsumer<SettingsBloc, SettingsState>(listener: (context, state) {
|
child: BlocConsumer<SettingsBloc, SettingsState>(listener: (context, state) {
|
||||||
if (state is SettingsError) {
|
if (state is SettingsError) {
|
||||||
ScaffoldMessenger.of(context)
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
.showSnackBar(SnackBar(backgroundColor: Colors.orange, content: Text(state.message, style: TextStyle(color: Colors.white))));
|
SnackBar(backgroundColor: Colors.orange, content: Text(state.message, style: TextStyle(color: Colors.white))));
|
||||||
} else if (state is SettingsReady) {
|
} else if (state is SettingsReady) {
|
||||||
menuBloc.add(MenuRecreateTree());
|
menuBloc.add(MenuRecreateTree());
|
||||||
Navigator.of(context).pushNamed("home");
|
Navigator.of(context).pushNamed("home");
|
||||||
@ -193,7 +193,7 @@ class SettingsPage extends StatelessWidget with Trans {
|
|||||||
]),
|
]),
|
||||||
style: TextButton.styleFrom(
|
style: TextButton.styleFrom(
|
||||||
backgroundColor: Colors.white70,
|
backgroundColor: Colors.white70,
|
||||||
onSurface: Colors.grey,
|
disabledForegroundColor: Colors.grey,
|
||||||
),
|
),
|
||||||
onPressed: () => {
|
onPressed: () => {
|
||||||
Track().track(TrackingEvent.terms_of_use),
|
Track().track(TrackingEvent.terms_of_use),
|
||||||
@ -220,7 +220,7 @@ class SettingsPage extends StatelessWidget with Trans {
|
|||||||
]),
|
]),
|
||||||
style: TextButton.styleFrom(
|
style: TextButton.styleFrom(
|
||||||
backgroundColor: Colors.white70,
|
backgroundColor: Colors.white70,
|
||||||
onSurface: Colors.grey,
|
disabledForegroundColor: Colors.grey,
|
||||||
),
|
),
|
||||||
onPressed: () => {
|
onPressed: () => {
|
||||||
Track().track(TrackingEvent.data_privacy),
|
Track().track(TrackingEvent.data_privacy),
|
||||||
@ -247,7 +247,7 @@ class SettingsPage extends StatelessWidget with Trans {
|
|||||||
]),
|
]),
|
||||||
style: TextButton.styleFrom(
|
style: TextButton.styleFrom(
|
||||||
backgroundColor: Colors.white70,
|
backgroundColor: Colors.white70,
|
||||||
onSurface: Colors.grey,
|
disabledForegroundColor: Colors.grey,
|
||||||
),
|
),
|
||||||
onPressed: () => {
|
onPressed: () => {
|
||||||
Navigator.of(context).pushNamed("faqPage"),
|
Navigator.of(context).pushNamed("faqPage"),
|
||||||
@ -290,7 +290,7 @@ class SettingsPage extends StatelessWidget with Trans {
|
|||||||
]),
|
]),
|
||||||
style: TextButton.styleFrom(
|
style: TextButton.styleFrom(
|
||||||
backgroundColor: Colors.white70,
|
backgroundColor: Colors.white70,
|
||||||
onSurface: Colors.grey,
|
disabledForegroundColor: Colors.grey,
|
||||||
),
|
),
|
||||||
onPressed: () => {
|
onPressed: () => {
|
||||||
launchMailto(),
|
launchMailto(),
|
||||||
@ -311,6 +311,7 @@ class SettingsPage extends StatelessWidget with Trans {
|
|||||||
// Use either Dart's string interpolation
|
// Use either Dart's string interpolation
|
||||||
// or the toString() method.
|
// or the toString() method.
|
||||||
print("Mailto: $mailtoLink");
|
print("Mailto: $mailtoLink");
|
||||||
await launch('$mailtoLink');
|
final Uri _url = Uri.parse("$mailtoLink");
|
||||||
|
await launchUrl(_url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -165,8 +165,8 @@ class TestSetControl extends StatelessWidget with Trans {
|
|||||||
TextButton(
|
TextButton(
|
||||||
style: TextButton.styleFrom(
|
style: TextButton.styleFrom(
|
||||||
padding: EdgeInsets.all(0),
|
padding: EdgeInsets.all(0),
|
||||||
primary: Colors.white,
|
foregroundColor: Colors.white,
|
||||||
onSurface: Colors.blueAccent,
|
disabledForegroundColor: Colors.blueAccent,
|
||||||
),
|
),
|
||||||
onPressed: () => {
|
onPressed: () => {
|
||||||
bloc.add(TestSetControlSubmit()),
|
bloc.add(TestSetControlSubmit()),
|
||||||
|
@ -316,8 +316,8 @@ class TrainingPlanActivatePage extends StatelessWidget with Trans {
|
|||||||
getPlanDetails(plan, bloc, dayName),
|
getPlanDetails(plan, bloc, dayName),
|
||||||
ElevatedButton(
|
ElevatedButton(
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
onPrimary: Colors.white,
|
foregroundColor: Colors.white,
|
||||||
primary: restricted ? Colors.grey[600] : Colors.orange,
|
backgroundColor: restricted ? Colors.grey[600] : Colors.orange,
|
||||||
),
|
),
|
||||||
child: Text(t("Start")),
|
child: Text(t("Start")),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
@ -476,7 +476,8 @@ class TrainingPlanActivatePage extends StatelessWidget with Trans {
|
|||||||
return DialogCommon(
|
return DialogCommon(
|
||||||
title: t("Dropset"),
|
title: t("Dropset"),
|
||||||
descriptions: t("A drop set is an advanced resistance training technique "),
|
descriptions: t("A drop set is an advanced resistance training technique "),
|
||||||
description2: t(" in which you focus on completing a set until failure - or the inability to do another repetition."),
|
description2:
|
||||||
|
t(" in which you focus on completing a set until failure - or the inability to do another repetition."),
|
||||||
text: "OK",
|
text: "OK",
|
||||||
onTap: () => {
|
onTap: () => {
|
||||||
Navigator.of(context).pop(),
|
Navigator.of(context).pop(),
|
||||||
@ -490,7 +491,7 @@ class TrainingPlanActivatePage extends StatelessWidget with Trans {
|
|||||||
headerGridLinesVisibility: GridLinesVisibility.both,
|
headerGridLinesVisibility: GridLinesVisibility.both,
|
||||||
gridLinesVisibility: GridLinesVisibility.both,
|
gridLinesVisibility: GridLinesVisibility.both,
|
||||||
columns: [
|
columns: [
|
||||||
GridTextColumn(
|
GridColumn(
|
||||||
columnWidthMode: ColumnWidthMode.lastColumnFill,
|
columnWidthMode: ColumnWidthMode.lastColumnFill,
|
||||||
maximumWidth: 130,
|
maximumWidth: 130,
|
||||||
columnName: 'exerciseImage',
|
columnName: 'exerciseImage',
|
||||||
@ -507,7 +508,7 @@ class TrainingPlanActivatePage extends StatelessWidget with Trans {
|
|||||||
textAlign: TextAlign.start,
|
textAlign: TextAlign.start,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
))),
|
))),
|
||||||
GridTextColumn(
|
GridColumn(
|
||||||
maximumWidth: 0,
|
maximumWidth: 0,
|
||||||
visible: false,
|
visible: false,
|
||||||
columnName: 'exerciseName',
|
columnName: 'exerciseName',
|
||||||
@ -520,7 +521,7 @@ class TrainingPlanActivatePage extends StatelessWidget with Trans {
|
|||||||
textAlign: TextAlign.start,
|
textAlign: TextAlign.start,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
))),
|
))),
|
||||||
GridTextColumn(
|
GridColumn(
|
||||||
maximumWidth: 60,
|
maximumWidth: 60,
|
||||||
columnName: 'Set',
|
columnName: 'Set',
|
||||||
label: Container(
|
label: Container(
|
||||||
@ -532,7 +533,7 @@ class TrainingPlanActivatePage extends StatelessWidget with Trans {
|
|||||||
style: GoogleFonts.inter(color: Colors.white, fontWeight: FontWeight.bold),
|
style: GoogleFonts.inter(color: Colors.white, fontWeight: FontWeight.bold),
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
))),
|
))),
|
||||||
GridTextColumn(
|
GridColumn(
|
||||||
maximumWidth: 100,
|
maximumWidth: 100,
|
||||||
columnWidthMode: ColumnWidthMode.fill,
|
columnWidthMode: ColumnWidthMode.fill,
|
||||||
columnName: 'Repeats',
|
columnName: 'Repeats',
|
||||||
@ -545,7 +546,7 @@ class TrainingPlanActivatePage extends StatelessWidget with Trans {
|
|||||||
style: GoogleFonts.inter(color: Colors.white, fontWeight: FontWeight.bold),
|
style: GoogleFonts.inter(color: Colors.white, fontWeight: FontWeight.bold),
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
))),
|
))),
|
||||||
GridTextColumn(
|
GridColumn(
|
||||||
maximumWidth: 60,
|
maximumWidth: 60,
|
||||||
columnName: 'Weight',
|
columnName: 'Weight',
|
||||||
label: Container(
|
label: Container(
|
||||||
|
@ -297,7 +297,7 @@ class _ExerciseListState extends State<ExerciseList> with Trans {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
WidgetsBinding.instance!.addPostFrameCallback((_) {
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
animate();
|
animate();
|
||||||
});
|
});
|
||||||
super.initState();
|
super.initState();
|
||||||
@ -306,7 +306,7 @@ class _ExerciseListState extends State<ExerciseList> with Trans {
|
|||||||
@override
|
@override
|
||||||
void didUpdateWidget(ExerciseList page) {
|
void didUpdateWidget(ExerciseList page) {
|
||||||
super.didUpdateWidget(page);
|
super.didUpdateWidget(page);
|
||||||
WidgetsBinding.instance!.addPostFrameCallback((_) {
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
animate();
|
animate();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -333,8 +333,8 @@ class _ExerciseListState extends State<ExerciseList> with Trans {
|
|||||||
String description2 = "";
|
String description2 = "";
|
||||||
if (next.exerciseTypeId != detail.exerciseTypeId) {
|
if (next.exerciseTypeId != detail.exerciseTypeId) {
|
||||||
title = AppLocalizations.of(context)!.translate("Stop!");
|
title = AppLocalizations.of(context)!.translate("Stop!");
|
||||||
description =
|
description = AppLocalizations.of(context)!.translate("Please continue with the next exercise in the queue:") +
|
||||||
AppLocalizations.of(context)!.translate("Please continue with the next exercise in the queue:") + next.exerciseType!.nameTranslation;
|
next.exerciseType!.nameTranslation;
|
||||||
} else {
|
} else {
|
||||||
final HashMap args = HashMap();
|
final HashMap args = HashMap();
|
||||||
args['exerciseType'] = next.exerciseType;
|
args['exerciseType'] = next.exerciseType;
|
||||||
@ -388,7 +388,8 @@ class _ExerciseListState extends State<ExerciseList> with Trans {
|
|||||||
bloc.getMyPlan()!.days[widget.dayName]!.forEach((element) {
|
bloc.getMyPlan()!.days[widget.dayName]!.forEach((element) {
|
||||||
if (prev == null || (prev != null && prev!.exerciseTypeId != element.exerciseTypeId)) {
|
if (prev == null || (prev != null && prev!.exerciseTypeId != element.exerciseTypeId)) {
|
||||||
tiles.add(GestureDetector(
|
tiles.add(GestureDetector(
|
||||||
onTap: () => bloc.getNext() != null ? executeExercise(bloc, bloc.getNext()!, context) : Navigator.of(context).pushNamed('home'),
|
onTap: () =>
|
||||||
|
bloc.getNext() != null ? executeExercise(bloc, bloc.getNext()!, context) : Navigator.of(context).pushNamed('home'),
|
||||||
child: ExerciseTile(
|
child: ExerciseTile(
|
||||||
bloc: bloc,
|
bloc: bloc,
|
||||||
detail: element,
|
detail: element,
|
||||||
@ -543,7 +544,8 @@ class ExerciseTile extends StatelessWidget with Trans {
|
|||||||
|
|
||||||
List<Widget> getExerciseTiles(CustomerTrainingPlanDetails detail) {
|
List<Widget> getExerciseTiles(CustomerTrainingPlanDetails detail) {
|
||||||
final List<Widget> list = [];
|
final List<Widget> list = [];
|
||||||
if (bloc.alternatives[detail.customerTrainingPlanDetailsId] != null && bloc.alternatives[detail.customerTrainingPlanDetailsId].length > 0) {
|
if (bloc.alternatives[detail.customerTrainingPlanDetailsId] != null &&
|
||||||
|
bloc.alternatives[detail.customerTrainingPlanDetailsId].length > 0) {
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (CustomerTrainingPlanDetails alternative in bloc.alternatives[detail.customerTrainingPlanDetailsId]) {
|
for (CustomerTrainingPlanDetails alternative in bloc.alternatives[detail.customerTrainingPlanDetailsId]) {
|
||||||
final Widget widget = getTile(alternative, index);
|
final Widget widget = getTile(alternative, index);
|
||||||
@ -563,7 +565,8 @@ class ExerciseTile extends StatelessWidget with Trans {
|
|||||||
final int step = bloc.getStep(detail);
|
final int step = bloc.getStep(detail);
|
||||||
final int highlightStep = bloc.getHighlightStep(detail);
|
final int highlightStep = bloc.getHighlightStep(detail);
|
||||||
final bool hasLeftAlternative = detail.alternatives.length > 0 && index > 0;
|
final bool hasLeftAlternative = detail.alternatives.length > 0 && index > 0;
|
||||||
final bool hasRightAlternative = detail.alternatives.length > 0 && index + 1 < bloc.alternatives[detail.customerTrainingPlanDetailsId].length;
|
final bool hasRightAlternative =
|
||||||
|
detail.alternatives.length > 0 && index + 1 < bloc.alternatives[detail.customerTrainingPlanDetailsId].length;
|
||||||
|
|
||||||
return Container(
|
return Container(
|
||||||
child: Stack(alignment: Alignment.centerRight, children: [
|
child: Stack(alignment: Alignment.centerRight, children: [
|
||||||
@ -598,7 +601,8 @@ class ExerciseTile extends StatelessWidget with Trans {
|
|||||||
context: context,
|
context: context,
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return DialogHTML(
|
return DialogHTML(
|
||||||
title: detail.exerciseType!.nameTranslation, htmlData: '<p>' + detail.exerciseType!.descriptionTranslation + '</p>');
|
title: detail.exerciseType!.nameTranslation,
|
||||||
|
htmlData: '<p>' + detail.exerciseType!.descriptionTranslation + '</p>');
|
||||||
}),
|
}),
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
Icons.info_outline,
|
Icons.info_outline,
|
||||||
|
@ -38,7 +38,7 @@ class _BottomBarMultipleExercisesState extends State<BottomBarMultipleExercises>
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
SchedulerBinding.instance!.addPostFrameCallback((_) {
|
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||||
_controller = ScrollController();
|
_controller = ScrollController();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -209,12 +209,12 @@ class _ExerciseSaveState extends State<ExerciseSave> with Trans {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
SchedulerBinding.instance!.addPostFrameCallback((_) {
|
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||||
subscription = stream.listen((event) {
|
subscription = stream.listen((event) {
|
||||||
//_controller1.text = ExerciseSaveStream().weight.toStringAsFixed(0);
|
//_controller1.text = ExerciseSaveStream().weight.toStringAsFixed(0);
|
||||||
_controller2.text = ExerciseSaveStream().repeats.toStringAsFixed(0);
|
_controller2.text = ExerciseSaveStream().repeats.toStringAsFixed(0);
|
||||||
});
|
});
|
||||||
print("ExerciseSave weight ${widget.weight}");
|
//print("ExerciseSave weight ${widget.weight}");
|
||||||
_controller1.text = widget.weight == null || widget.weight == -1
|
_controller1.text = widget.weight == null || widget.weight == -1
|
||||||
? "TEST"
|
? "TEST"
|
||||||
: widget.weight! % widget.weight!.round() == 0
|
: widget.weight! % widget.weight!.round() == 0
|
||||||
@ -633,7 +633,8 @@ class _ExerciseSaveState extends State<ExerciseSave> with Trans {
|
|||||||
padding: const EdgeInsets.all(2),
|
padding: const EdgeInsets.all(2),
|
||||||
color: Colors.white70,
|
color: Colors.white70,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
stopWatchTimer.onExecute.add(StopWatchExecute.start);
|
//stopWatchTimer.onExecute.add(StopWatchExecute.start);
|
||||||
|
stopWatchTimer.onStartTimer();
|
||||||
Wakelock.enable(); // prevent sleep the phone
|
Wakelock.enable(); // prevent sleep the phone
|
||||||
},
|
},
|
||||||
icon: Icon(CustomIcon.play_1),
|
icon: Icon(CustomIcon.play_1),
|
||||||
@ -647,7 +648,8 @@ class _ExerciseSaveState extends State<ExerciseSave> with Trans {
|
|||||||
iconSize: 40,
|
iconSize: 40,
|
||||||
color: Colors.white70,
|
color: Colors.white70,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
stopWatchTimer.onExecute.add(StopWatchExecute.stop);
|
//stopWatchTimer.onExecute.add(StopWatchExecute.stop);
|
||||||
|
stopWatchTimer.onStartTimer();
|
||||||
Wakelock.disable();
|
Wakelock.disable();
|
||||||
},
|
},
|
||||||
icon: Icon(CustomIcon.stop),
|
icon: Icon(CustomIcon.stop),
|
||||||
@ -660,7 +662,8 @@ class _ExerciseSaveState extends State<ExerciseSave> with Trans {
|
|||||||
iconSize: 40,
|
iconSize: 40,
|
||||||
color: Colors.white70,
|
color: Colors.white70,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
stopWatchTimer.onExecute.add(StopWatchExecute.reset);
|
//stopWatchTimer.onExecute.add(StopWatchExecute.reset);
|
||||||
|
stopWatchTimer.onResetTimer();
|
||||||
},
|
},
|
||||||
icon: Icon(CustomIcon.creative_commons_zero),
|
icon: Icon(CustomIcon.creative_commons_zero),
|
||||||
),
|
),
|
||||||
|
@ -2,7 +2,6 @@ import 'package:aitrainer_app/bloc/session/session_bloc.dart';
|
|||||||
import 'package:aitrainer_app/bloc/settings/settings_bloc.dart';
|
import 'package:aitrainer_app/bloc/settings/settings_bloc.dart';
|
||||||
import 'package:aitrainer_app/model/cache.dart';
|
import 'package:aitrainer_app/model/cache.dart';
|
||||||
import 'package:aitrainer_app/service/logging.dart';
|
import 'package:aitrainer_app/service/logging.dart';
|
||||||
import 'package:aitrainer_app/util/app_language.dart';
|
|
||||||
import 'package:aitrainer_app/util/trans.dart';
|
import 'package:aitrainer_app/util/trans.dart';
|
||||||
import 'package:aitrainer_app/view/customer_goal_page.dart';
|
import 'package:aitrainer_app/view/customer_goal_page.dart';
|
||||||
import 'package:aitrainer_app/view/login.dart';
|
import 'package:aitrainer_app/view/login.dart';
|
||||||
@ -12,6 +11,7 @@ import 'package:firebase_messaging/firebase_messaging.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/scheduler.dart';
|
import 'package:flutter/scheduler.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
import 'package:matomo_tracker/matomo_tracker.dart';
|
||||||
import 'package:upgrader/upgrader.dart';
|
import 'package:upgrader/upgrader.dart';
|
||||||
import 'loading.dart';
|
import 'loading.dart';
|
||||||
|
|
||||||
@ -25,15 +25,21 @@ class AitrainerHome extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _HomePageState extends State<AitrainerHome> with Logging, Trans {
|
class _HomePageState extends State<AitrainerHome> with Logging, Trans, TraceableClientMixin {
|
||||||
GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
|
GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get traceName => 'Home';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get traceTitle => this.widget.toString();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
/// We require the initializers to run after the loading screen is rendered
|
/// We require the initializers to run after the loading screen is rendered
|
||||||
SchedulerBinding.instance!.addPostFrameCallback((_) {
|
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||||
runDelayedEvent();
|
runDelayedEvent();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -70,7 +76,7 @@ class _HomePageState extends State<AitrainerHome> with Logging, Trans {
|
|||||||
return Scaffold(
|
return Scaffold(
|
||||||
key: _scaffoldKey,
|
key: _scaffoldKey,
|
||||||
body: UpgradeAlert(
|
body: UpgradeAlert(
|
||||||
upgrader: Upgrader(appcastConfig: cfg, messages: MyLocalizedUpgraderMessages(context: context)),
|
upgrader: Upgrader(appcastConfig: cfg, messages: MyLocalizedUpgraderMessages(context: context)),
|
||||||
child: BlocConsumer<SessionBloc, SessionState>(listener: (context, state) {
|
child: BlocConsumer<SessionBloc, SessionState>(listener: (context, state) {
|
||||||
if (state is SessionFailure) {
|
if (state is SessionFailure) {
|
||||||
showDialog(
|
showDialog(
|
||||||
|
@ -174,8 +174,8 @@ class _InputDialogState<Event> extends State<InputDialog<Event>> with Trans {
|
|||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
ElevatedButton(
|
ElevatedButton(
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
primary: Colors.black26,
|
backgroundColor: Colors.black26,
|
||||||
onSurface: Colors.white,
|
disabledBackgroundColor: Colors.white,
|
||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
@ -187,8 +187,8 @@ class _InputDialogState<Event> extends State<InputDialog<Event>> with Trans {
|
|||||||
),
|
),
|
||||||
ElevatedButton(
|
ElevatedButton(
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
primary: Colors.orange[600],
|
backgroundColor: Colors.orange[600],
|
||||||
onSurface: Colors.white,
|
disabledForegroundColor: Colors.white,
|
||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
widget.onChanged(this.inputValue);
|
widget.onChanged(this.inputValue);
|
||||||
|
@ -5,7 +5,6 @@ import 'package:aitrainer_app/bloc/menu/menu_bloc.dart';
|
|||||||
import 'package:aitrainer_app/repository/training_plan_repository.dart';
|
import 'package:aitrainer_app/repository/training_plan_repository.dart';
|
||||||
import 'package:aitrainer_app/util/enums.dart';
|
import 'package:aitrainer_app/util/enums.dart';
|
||||||
import 'package:aitrainer_app/util/track.dart';
|
import 'package:aitrainer_app/util/track.dart';
|
||||||
import 'package:aitrainer_app/widgets/dialog_trial.dart';
|
|
||||||
import 'package:aitrainer_app/widgets/menu_image.dart';
|
import 'package:aitrainer_app/widgets/menu_image.dart';
|
||||||
import 'package:aitrainer_app/widgets/menu_search_bar.dart';
|
import 'package:aitrainer_app/widgets/menu_search_bar.dart';
|
||||||
import 'package:aitrainer_app/util/app_language.dart';
|
import 'package:aitrainer_app/util/app_language.dart';
|
||||||
@ -55,7 +54,7 @@ class _MenuPageWidgetState extends State<MenuPageWidget> with Trans, Logging {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// We require the initializers to run after the loading screen is rendered
|
/// We require the initializers to run after the loading screen is rendered
|
||||||
SchedulerBinding.instance!.addPostFrameCallback((_) {
|
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||||
menuBloc.add(MenuCreate());
|
menuBloc.add(MenuCreate());
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -112,7 +111,9 @@ class _MenuPageWidgetState extends State<MenuPageWidget> with Trans, Logging {
|
|||||||
|
|
||||||
return Stack(children: [
|
return Stack(children: [
|
||||||
CustomScrollView(
|
CustomScrollView(
|
||||||
controller: scrollController, scrollDirection: Axis.vertical, slivers: buildMenuColumn(widget.parent!, context, menuBloc, cWidth, cHeight)),
|
controller: scrollController,
|
||||||
|
scrollDirection: Axis.vertical,
|
||||||
|
slivers: buildMenuColumn(widget.parent!, context, menuBloc, cWidth, cHeight)),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,7 +135,8 @@ class _MenuPageWidgetState extends State<MenuPageWidget> with Trans, Logging {
|
|||||||
padding: EdgeInsets.only(top: 15.0),
|
padding: EdgeInsets.only(top: 15.0),
|
||||||
child: Center(
|
child: Center(
|
||||||
child: Stack(alignment: Alignment.bottomLeft, children: [
|
child: Stack(alignment: Alignment.bottomLeft, children: [
|
||||||
Text(AppLocalizations.of(context)!.translate("All Exercises has been filtered out"), style: GoogleFonts.inter(color: Colors.white)),
|
Text(AppLocalizations.of(context)!.translate("All Exercises has been filtered out"),
|
||||||
|
style: GoogleFonts.inter(color: Colors.white)),
|
||||||
]))));
|
]))));
|
||||||
} else {
|
} else {
|
||||||
menuBloc.getFilteredBranch(menuBloc.parent).forEach((treeName, value) {
|
menuBloc.getFilteredBranch(menuBloc.parent).forEach((treeName, value) {
|
||||||
@ -395,8 +397,10 @@ class _MenuPageWidgetState extends State<MenuPageWidget> with Trans, Logging {
|
|||||||
dynamic getShape(WorkoutMenuTree workoutTree) {
|
dynamic getShape(WorkoutMenuTree workoutTree) {
|
||||||
bool base = workoutTree.base;
|
bool base = workoutTree.base;
|
||||||
dynamic returnCode = (base == true)
|
dynamic returnCode = (base == true)
|
||||||
? RoundedRectangleBorder(side: BorderSide(width: 6, color: Colors.orangeAccent), borderRadius: BorderRadius.all(Radius.circular(24.0)))
|
? RoundedRectangleBorder(
|
||||||
: RoundedRectangleBorder(side: BorderSide(width: 1, color: Colors.transparent), borderRadius: BorderRadius.all(Radius.circular(8.0)));
|
side: BorderSide(width: 6, color: Colors.orangeAccent), borderRadius: BorderRadius.all(Radius.circular(24.0)))
|
||||||
|
: RoundedRectangleBorder(
|
||||||
|
side: BorderSide(width: 1, color: Colors.transparent), borderRadius: BorderRadius.all(Radius.circular(8.0)));
|
||||||
return returnCode;
|
return returnCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ class TutorialWidget with Trans, Logging {
|
|||||||
children: [
|
children: [
|
||||||
ElevatedButton(
|
ElevatedButton(
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
primary: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
),
|
),
|
||||||
onPressed: () => {bloc.add(TutorialNext(text: bloc.checks[0]))},
|
onPressed: () => {bloc.add(TutorialNext(text: bloc.checks[0]))},
|
||||||
child: Text("« " + t(bloc.checks[0]),
|
child: Text("« " + t(bloc.checks[0]),
|
||||||
@ -186,7 +186,7 @@ class TutorialWidget with Trans, Logging {
|
|||||||
),
|
),
|
||||||
ElevatedButton(
|
ElevatedButton(
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
primary: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
),
|
),
|
||||||
onPressed: () => {bloc.add(TutorialNext(text: bloc.checks[1]))},
|
onPressed: () => {bloc.add(TutorialNext(text: bloc.checks[1]))},
|
||||||
child: Text(t(bloc.checks[1]) + " »",
|
child: Text(t(bloc.checks[1]) + " »",
|
||||||
@ -196,7 +196,7 @@ class TutorialWidget with Trans, Logging {
|
|||||||
)
|
)
|
||||||
: ElevatedButton(
|
: ElevatedButton(
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
primary: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
),
|
),
|
||||||
onPressed: () => {
|
onPressed: () => {
|
||||||
//tooltip!.rebuild(context),
|
//tooltip!.rebuild(context),
|
||||||
|
@ -16,7 +16,7 @@ class _VictoryConfettiState extends State<VictoryConfetti> {
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
_controllerBottomCenter = ConfettiController(duration: const Duration(seconds: 2));
|
_controllerBottomCenter = ConfettiController(duration: const Duration(seconds: 2));
|
||||||
SchedulerBinding.instance!.addPostFrameCallback((_) {
|
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||||
Future.delayed(Duration(milliseconds: 500)).then((value) => _controllerBottomCenter.play());
|
Future.delayed(Duration(milliseconds: 500)).then((value) => _controllerBottomCenter.play());
|
||||||
});
|
});
|
||||||
super.initState();
|
super.initState();
|
||||||
|
45
pubspec.lock
45
pubspec.lock
@ -867,7 +867,7 @@ packages:
|
|||||||
name: matomo_tracker
|
name: matomo_tracker
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.5.0"
|
version: "1.6.0"
|
||||||
meta:
|
meta:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1092,6 +1092,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.5.0"
|
version: "1.5.0"
|
||||||
|
posthog_flutter:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: posthog_flutter
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.3"
|
||||||
process:
|
process:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1321,20 +1328,6 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.0"
|
version: "1.9.0"
|
||||||
sqflite:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: sqflite
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.1.0+1"
|
|
||||||
sqflite_common:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: sqflite_common
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "2.3.0"
|
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1426,13 +1419,6 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "20.3.50"
|
version: "20.3.50"
|
||||||
synchronized:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: synchronized
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "3.0.0+2"
|
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1517,27 +1503,20 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.4"
|
version: "2.0.4"
|
||||||
universal_platform:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: universal_platform
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.0.0+1"
|
|
||||||
upgrader:
|
upgrader:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: upgrader
|
name: upgrader
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.8.1"
|
version: "4.10.0"
|
||||||
url_launcher:
|
url_launcher:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: url_launcher
|
name: url_launcher
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.6"
|
version: "6.1.5"
|
||||||
url_launcher_android:
|
url_launcher_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1784,5 +1763,5 @@ packages:
|
|||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.0"
|
version: "3.1.0"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=2.18.0-0 <3.0.0"
|
dart: ">=2.17.0 <3.0.0"
|
||||||
flutter: ">=3.3.0-0"
|
flutter: ">=3.0.0"
|
||||||
|
@ -67,19 +67,20 @@ dependencies:
|
|||||||
keyboard_actions: ^3.4.0
|
keyboard_actions: ^3.4.0
|
||||||
|
|
||||||
mailto: ^2.0.0
|
mailto: ^2.0.0
|
||||||
matomo_tracker: ^1.5.0
|
matomo_tracker: ^1.6.0
|
||||||
mockito: ^5.3.2
|
mockito: ^5.3.2
|
||||||
modal_progress_hud_nsn: ^0.3.0
|
modal_progress_hud_nsn: ^0.3.0
|
||||||
|
|
||||||
package_info: ^2.0.2
|
package_info: ^2.0.2
|
||||||
percent_indicator: ^4.0.0
|
percent_indicator: ^4.0.0
|
||||||
|
posthog_flutter: ^2.0.3
|
||||||
purchases_flutter: ^3.9.5
|
purchases_flutter: ^3.9.5
|
||||||
|
|
||||||
rainbow_color: ^2.0.1
|
rainbow_color: ^2.0.1
|
||||||
|
|
||||||
sentry_flutter: ^6.13.0
|
sentry_flutter: ^6.9.1
|
||||||
sign_in_with_apple: ^4.1.0
|
sign_in_with_apple: ^4.1.0
|
||||||
sqflite: ^2.1.0+1
|
#sqflite: ^2.1.0+1
|
||||||
stop_watch_timer: ^2.0.0
|
stop_watch_timer: ^2.0.0
|
||||||
|
|
||||||
syncfusion_flutter_gauges: ^20.3.50
|
syncfusion_flutter_gauges: ^20.3.50
|
||||||
@ -91,7 +92,7 @@ dependencies:
|
|||||||
timeline_tile: ^2.0.0
|
timeline_tile: ^2.0.0
|
||||||
toggle_switch: ^2.0.1
|
toggle_switch: ^2.0.1
|
||||||
|
|
||||||
upgrader: ^4.8.1
|
upgrader: ^4.10.0
|
||||||
url_launcher: ^6.0.9
|
url_launcher: ^6.0.9
|
||||||
|
|
||||||
wakelock: ^0.6.2
|
wakelock: ^0.6.2
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import 'package:aitrainer_app/model/cache.dart';
|
/*import 'package:aitrainer_app/model/cache.dart';
|
||||||
import 'package:aitrainer_app/model/exercise_plan.dart';
|
import 'package:aitrainer_app/model/exercise_plan.dart';
|
||||||
import 'package:aitrainer_app/model/exercise_plan_detail.dart';
|
import 'package:aitrainer_app/model/exercise_plan_detail.dart';
|
||||||
import 'package:aitrainer_app/model/model_change.dart';
|
import 'package:aitrainer_app/model/model_change.dart';
|
||||||
import 'package:test/test.dart';
|
import 'package:test/test.dart';
|
||||||
import 'mocks.dart';
|
import 'mocks.dart';*/
|
||||||
|
/*
|
||||||
main() {
|
main() {
|
||||||
late SimExercisePlanRepository _exercisePlanRepository;
|
late SimExercisePlanRepository _exercisePlanRepository;
|
||||||
late int _customerId;
|
late int _customerId;
|
||||||
@ -141,3 +141,5 @@ main() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
@ -17,10 +17,11 @@ import 'package:bloc_test/bloc_test.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:flutter_localizations/flutter_localizations.dart'; */
|
import 'package:flutter_localizations/flutter_localizations.dart'; */
|
||||||
import 'package:aitrainer_app/helper/database.dart';
|
//import 'package:aitrainer_app/helper/database.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
//import 'package:flutter_test/flutter_test.dart';
|
||||||
//import 'package:mockito/mockito.dart';
|
//import 'package:mockito/mockito.dart';
|
||||||
|
|
||||||
|
/*
|
||||||
void main() {
|
void main() {
|
||||||
group('SQFLite', () {
|
group('SQFLite', () {
|
||||||
setUp(() async {
|
setUp(() async {
|
||||||
@ -39,3 +40,4 @@ void main() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
*/
|
@ -6,7 +6,7 @@
|
|||||||
// tree, read text, and verify that the values of widget properties are correct.
|
// tree, read text, and verify that the values of widget properties are correct.
|
||||||
|
|
||||||
//import 'package:aitrainer_app/bloc/login_form_bloc.dart';
|
//import 'package:aitrainer_app/bloc/login_form_bloc.dart';
|
||||||
import 'package:aitrainer_app/helper/database.dart';
|
//import 'package:aitrainer_app/helper/database.dart';
|
||||||
import 'package:aitrainer_app/library_keys.dart';
|
import 'package:aitrainer_app/library_keys.dart';
|
||||||
import 'package:aitrainer_app/util/app_localization.dart';
|
import 'package:aitrainer_app/util/app_localization.dart';
|
||||||
import 'package:aitrainer_app/model/user.dart';
|
import 'package:aitrainer_app/model/user.dart';
|
||||||
@ -52,7 +52,7 @@ void main() {
|
|||||||
late MockCommon common;
|
late MockCommon common;
|
||||||
|
|
||||||
setUp(() async {
|
setUp(() async {
|
||||||
await DB().initDb();
|
//await DB().initDb();
|
||||||
common = MockCommon();
|
common = MockCommon();
|
||||||
|
|
||||||
loginWidget = MaterialApp(home: LoginPage(), localizationsDelegates: [
|
loginWidget = MaterialApp(home: LoginPage(), localizationsDelegates: [
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
import 'package:aitrainer_app/model/customer.dart';
|
//import 'package:aitrainer_app/model/customer.dart';
|
||||||
import '../../lib/helper/database.dart';
|
//import '../../lib/helper/database.dart';
|
||||||
|
/*
|
||||||
class CustomerApi {
|
class CustomerApi {
|
||||||
Future<void> addCustomer(Customer customer) async {
|
Future<void> addCustomer(Customer customer) async {
|
||||||
//print(" ===== add new customer: " + customer.toSQL().toString();
|
//print(" ===== add new customer: " + customer.toSQL().toString();
|
||||||
await DB().getDB().insert("customer", customer.toJson());
|
await DB().getDB().insert("customer", customer.toJson());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
Loading…
Reference in New Issue
Block a user