diff --git a/android/app/build.gradle b/android/app/build.gradle
index 22e3294..4ea19e5 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -52,6 +52,11 @@ android {
multiDexEnabled true
}
+ android {
+ compileSdkVersion 33
+
+ }
+
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index a801715..a9a560b 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -5,18 +5,10 @@
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
-
-
+
+
+
+
- 584181112271127
+
+ 584181112271127
+ 60d565f451ce32de3d7eeb26274bbddd
-
- fb584181112271127
+ fb584181112271127
\ No newline at end of file
diff --git a/lib/bloc/login/login_bloc.dart b/lib/bloc/login/login_bloc.dart
index e08437b..a0dfa7d 100644
--- a/lib/bloc/login/login_bloc.dart
+++ b/lib/bloc/login/login_bloc.dart
@@ -88,40 +88,59 @@ class LoginBloc extends Bloc with Trans {
void _onSubmit(LoginSubmit event, Emitter emit) async {
emit(LoginLoading());
- await userRepository.getUser();
- accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
- Track().track(TrackingEvent.login, eventValue: "email");
- Cache().setLoginType(LoginType.email);
-
- emit(LoginSuccess());
+ try {
+ await userRepository.getUser();
+ accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
+ Track().track(TrackingEvent.login, eventValue: "email");
+ Cache().setLoginType(LoginType.email);
+ } on Exception catch(e) {
+ emit(LoginError(message: e.toString()));
+ } finally {
+ emit(LoginSuccess());
+ }
}
void _onLoginFB(LoginFB event, Emitter emit) async {
emit(LoginLoading());
- Cache().setLoginType(LoginType.fb);
- await userRepository.getUserByFB();
- accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
- Track().track(TrackingEvent.login, eventValue: "FB");
- emit(LoginSuccess());
+ try {
+ Cache().setLoginType(LoginType.fb);
+ await userRepository.getUserByFB();
+ accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
+ Track().track(TrackingEvent.login, eventValue: "FB");
+ } on Exception catch(e) {
+ emit(LoginError(message: e.toString()));
+ } finally {
+ emit(LoginSuccess());
+ }
}
void _onLoginGoogle(LoginGoogle event, Emitter emit) async {
emit(LoginLoading());
- Cache().setLoginType(LoginType.google);
- await userRepository.getUserByGoogle();
- accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
- Track().track(TrackingEvent.login, eventValue: "Google");
+ try {
+ Cache().setLoginType(LoginType.google);
+ await userRepository.getUserByGoogle();
+ accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
+ Track().track(TrackingEvent.login, eventValue: "Google");
- emit(LoginSuccess());
+ } on Exception catch(e) {
+ emit(LoginError(message: e.toString()));
+ } finally {
+ emit(LoginSuccess());
+ }
}
void _onLoginApple(LoginApple event, Emitter emit) async {
emit(LoginLoading());
- Cache().setLoginType(LoginType.apple);
- await userRepository.getUserByApple();
- accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
- Track().track(TrackingEvent.login, eventValue: "Apple");
- emit(LoginSuccess());
+ try {
+ Cache().setLoginType(LoginType.apple);
+ await userRepository.getUserByApple();
+ accountBloc.add(AccountLogInFinished(customer: Cache().userLoggedIn!));
+ Track().track(TrackingEvent.login, eventValue: "Apple");
+ } on Exception catch(e) {
+ emit(LoginError(message: e.toString()));
+ } finally {
+ emit(LoginSuccess());
+ }
}
void _onRegistrationSubmit(RegistrationSubmit event, Emitter emit) async {
diff --git a/lib/bloc/sales/sales_bloc.dart b/lib/bloc/sales/sales_bloc.dart
index 2044e67..96a351b 100644
--- a/lib/bloc/sales/sales_bloc.dart
+++ b/lib/bloc/sales/sales_bloc.dart
@@ -161,7 +161,7 @@ class SalesBloc extends Bloc with Logging {
return;
}
- String productSetString = splitTestRepository.getSplitTestValue("product_set_2");
+ String productSetString = splitTestRepository.getSplitTestValue("product_set_5");
log("ProductSetString: $productSetString");
try {
productSet = int.parse(productSetString);
diff --git a/lib/library/dropdown_search/dropdown_search.dart b/lib/library/dropdown_search/dropdown_search.dart
index cc5f6dd..55fe4f5 100644
--- a/lib/library/dropdown_search/dropdown_search.dart
+++ b/lib/library/dropdown_search/dropdown_search.dart
@@ -296,7 +296,7 @@ class DropdownSearchState extends State> {
initialValue: widget.selectedItem,
builder: (FormFieldState state) {
if (state.value != value) {
- WidgetsBinding.instance!.addPostFrameCallback((_) {
+ WidgetsBinding.instance.addPostFrameCallback((_) {
state.didChange(value);
});
}
diff --git a/lib/library/dropdown_search/select_dialog.dart b/lib/library/dropdown_search/select_dialog.dart
index 45ccf36..898be82 100644
--- a/lib/library/dropdown_search/select_dialog.dart
+++ b/lib/library/dropdown_search/select_dialog.dart
@@ -182,7 +182,7 @@ class _SelectDialogState extends State> {
content: _errorWidget(error),
actions: [
TextButton(
- child: new Text("OK"),
+ child: const Text("OK"),
onPressed: () {
Navigator.of(context).pop(false);
},
diff --git a/lib/library/super_tooltip.dart b/lib/library/super_tooltip.dart
index 859adae..4317311 100644
--- a/lib/library/super_tooltip.dart
+++ b/lib/library/super_tooltip.dart
@@ -1127,7 +1127,7 @@ class _AnimationWrapperState extends State<_AnimationWrapper> {
@override
void initState() {
super.initState();
- WidgetsBinding.instance!.addPostFrameCallback((_) {
+ WidgetsBinding.instance.addPostFrameCallback((_) {
if (mounted) {
setState(() {
opacity = 1.0;
diff --git a/lib/main.dart b/lib/main.dart
index 30eb527..b74d63c 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -54,10 +54,11 @@ import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:aitrainer_app/util/app_localization.dart';
-import 'package:flutter_uxcam/flutter_uxcam.dart';
+//import 'package:flutter_uxcam/flutter_uxcam.dart';
import 'package:google_fonts/google_fonts.dart';
+import 'package:matomo_tracker/matomo_tracker.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
-import 'package:flutter_smartlook/flutter_smartlook.dart';
+//import 'package:flutter_smartlook/flutter_smartlook.dart';
import 'package:upgrader/upgrader.dart';
import 'bloc/account/account_bloc.dart';
import 'bloc/body_development/body_development_bloc.dart';
@@ -104,7 +105,8 @@ Future _reportError(dynamic error, dynamic stackTrace) async {
);
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");
+ final sentryId =
+ await Sentry.captureException(error, stackTrace: stackTrace, hint: "Platform: $platform, Version: $version, User: $customerId");
print('Capture exception result : SentryId : $sentryId');
}
@@ -146,7 +148,12 @@ Future main() async {
Future initThirdParty() async {
if (!isInDebugMode) {
//await FlurryData.initialize(androidKey: "JNYCTCWBT34FM3J8TV36", iosKey: "3QBG7BSMGPDH24S8TRQP", enableLog: true);
- FlutterUxcam.optIntoSchematicRecordings();
+ await MatomoTracker.instance.initialize(
+ siteId: 3,
+ url: 'https://matomo.workouttest.com/matomo.php',
+ //visitorId: 'customer_1',
+ );
+ //FlutterUxcam.optIntoSchematicRecordings();
}
await FirebaseApi().initializeFlutterFire();
}
@@ -154,11 +161,11 @@ Future main() async {
final WorkoutTreeRepository menuTreeRepository = WorkoutTreeRepository();
WidgetsFlutterBinding.ensureInitialized();
if (!isInDebugMode) {
- FlutterUxcam.startWithKey("wvdstyoml4tiwfd");
+ //FlutterUxcam.startWithKey("wvdstyoml4tiwfd");
- SetupOptions options = (new SetupOptionsBuilder('682883e5cd71a46160c4f6ed070530ee593f49c6')).build();
- Smartlook.setupAndStartRecording(options);
- Smartlook.setEventTrackingMode(EventTrackingMode.FULL_TRACKING);
+ //SetupOptions options = (new SetupOptionsBuilder('682883e5cd71a46160c4f6ed070530ee593f49c6')).build();
+ //Smartlook.setupAndStartRecording(options);
+ //Smartlook.setEventTrackingMode(EventTrackingMode.FULL_TRACKING);
}
await initThirdParty();
final FirebaseAnalytics analytics = FirebaseAnalytics.instance;
@@ -194,7 +201,8 @@ Future main() async {
BlocProvider(
create: (BuildContext context) => TestSetExecuteBloc(),
),
- BlocProvider(create: (BuildContext context) => TutorialBloc(tutorialName: ActivityDone.tutorialExecuteFirstTest.toStr())),
+ BlocProvider(
+ create: (BuildContext context) => TutorialBloc(tutorialName: ActivityDone.tutorialExecuteFirstTest.toStr())),
BlocProvider(create: (context) {
final MenuBloc menuBloc = BlocProvider.of(context);
return TrainingPlanBloc(menuBloc: menuBloc, trainingPlanRepository: TrainingPlanRepository());
@@ -216,9 +224,6 @@ class WorkoutTestApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
-
- // Only call clearSavedSettings() during testing to reset internal values.
- Upgrader().clearSavedSettings(); // REMOVE this for release builds
Upgrader().installAppStoreListingURL(Platform.isAndroid
? "https://play.google.com/store/apps/details?id=com.aitrainer.aitrainer_app"
: "https://apps.apple.com/hu/app/workouttest/id1515271425");
diff --git a/lib/model/cache.dart b/lib/model/cache.dart
index dc27681..d96f467 100644
--- a/lib/model/cache.dart
+++ b/lib/model/cache.dart
@@ -34,12 +34,13 @@ import 'package:aitrainer_app/util/track.dart';
import 'package:firebase_remote_config/firebase_remote_config.dart';
//import 'package:flurry_data/flurry_data.dart';
import 'package:flutter_facebook_auth/flutter_facebook_auth.dart';
-import 'package:flutter_uxcam/flutter_uxcam.dart';
+//import 'package:flutter_uxcam/flutter_uxcam.dart';
+import 'package:matomo_tracker/matomo_tracker.dart';
import 'package:package_info/package_info.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:aitrainer_app/model/exercise_type.dart';
import 'package:intl/intl.dart';
-import 'package:flutter_smartlook/flutter_smartlook.dart';
+//import 'package:flutter_smartlook/flutter_smartlook.dart';
import 'customer_exercise_device.dart';
import 'exercise_device.dart';
@@ -175,7 +176,7 @@ class Cache with Logging {
List? _exercisesTrainee;
ExercisePlan? _traineeExercisePlan;
- RemoteConfig? remoteConfig;
+ FirebaseRemoteConfig? remoteConfig;
LinkedHashMap _badges = LinkedHashMap();
@@ -544,7 +545,8 @@ class Cache with Logging {
ExercisePlan? getMyExercisePlan() => _myExercisePlan;
- void setMyExercisePlanDetails(LinkedHashMap listExercisePlanDetail) => _myExercisesPlanDetails = listExercisePlanDetail;
+ void setMyExercisePlanDetails(LinkedHashMap listExercisePlanDetail) =>
+ _myExercisesPlanDetails = listExercisePlanDetail;
void addToMyExercisePlanDetails(ExercisePlanDetail detail) => _myExercisesPlanDetails[detail.exerciseTypeId] = detail;
@@ -558,7 +560,8 @@ class Cache with Logging {
void deleteMyExercisePlanDetail(ExercisePlanDetail detail) => this.deleteMyExercisePlanDetailByExerciseTypeId(detail.exerciseTypeId);
- void deletedMyExercisePlanDetail(ExercisePlanDetail detail) => this._myExercisesPlanDetails[detail.exerciseTypeId]!.change = ModelChange.deleted;
+ void deletedMyExercisePlanDetail(ExercisePlanDetail detail) =>
+ this._myExercisesPlanDetails[detail.exerciseTypeId]!.change = ModelChange.deleted;
void deleteMyExercisePlanDetailByExerciseTypeId(int exerciseTypeId) {
this._myExercisesPlanDetails[exerciseTypeId]!.change = ModelChange.delete;
@@ -686,14 +689,21 @@ class Cache with Logging {
Future initCustomer(int customerId) async {
log(" *** initCustomer");
- await PackageApi().getCustomerPackage(customerId);
+ try {
+ await PackageApi().getCustomerPackage(customerId);
+ } on Exception catch (_) {
+ return;
+ }
if (!isInDebugMode) {
//FlurryData.setUserId(customerId.toString());
- FlutterUxcam.setUserProperty("username", customerId.toString());
- FlutterUxcam.setUserIdentity(customerId.toString());
- Smartlook.setUserIdentifier(customerId.toString());
+ //FlutterUxcam.setUserProperty("username", customerId.toString());
+ //FlutterUxcam.setUserIdentity(customerId.toString());
+ //Smartlook.setUserIdentifier(customerId.toString());
+ //Smartlook.instance.
Track().track(TrackingEvent.enter);
+ MatomoTracker.instance
+ .trackEvent(eventName: TrackingEvent.enter.enumToString(), eventCategory: "", action: TrackingEvent.enter.enumToString(), eventValue: customerId);
}
await Future.forEach(ActivityDone.values, (element) async {
@@ -751,8 +761,8 @@ class Cache with Logging {
List? get tutorials => this._tutorials;
setTutorials(List? value) => this._tutorials = value;
- RemoteConfig? getRemoteConfig() => this.remoteConfig;
- setRemoteConfig(RemoteConfig? remoteConfig) => this.remoteConfig = remoteConfig;
+ FirebaseRemoteConfig? getRemoteConfig() => this.remoteConfig;
+ setRemoteConfig(FirebaseRemoteConfig? remoteConfig) => this.remoteConfig = remoteConfig;
List? getDescriptions() => this._descriptions;
setDescriptions(List? value) => this._descriptions = value;
diff --git a/lib/repository/remote_config_repository.dart b/lib/repository/remote_config_repository.dart
index a5b1121..829fb7b 100644
--- a/lib/repository/remote_config_repository.dart
+++ b/lib/repository/remote_config_repository.dart
@@ -2,8 +2,9 @@ import 'package:aitrainer_app/model/cache.dart';
import 'package:aitrainer_app/service/logging.dart';
import 'package:firebase_remote_config/firebase_remote_config.dart';
+
class RemoteConfigRepository with Logging {
- RemoteConfig? remoteConfig;
+ FirebaseRemoteConfig? remoteConfig;
String getConfigValue(String configKey, String baseValue) {
String value = "";
diff --git a/lib/repository/split_test_respository.dart b/lib/repository/split_test_respository.dart
index 43d7a38..82b871b 100644
--- a/lib/repository/split_test_respository.dart
+++ b/lib/repository/split_test_respository.dart
@@ -3,8 +3,9 @@ import 'package:aitrainer_app/repository/description_repository.dart';
import 'package:aitrainer_app/service/logging.dart';
import 'package:firebase_remote_config/firebase_remote_config.dart';
+
class SplitTestRepository with Logging {
- final RemoteConfig? _remoteConfig = Cache().remoteConfig;
+ final FirebaseRemoteConfig? _remoteConfig = Cache().remoteConfig;
final DescriptionRepository descriptionRepository = DescriptionRepository();
String getSplitTestValue(String remoteConfigKey) {
diff --git a/lib/service/firebase_api.dart b/lib/service/firebase_api.dart
index d5aa84d..9b88bab 100644
--- a/lib/service/firebase_api.dart
+++ b/lib/service/firebase_api.dart
@@ -384,13 +384,14 @@ class FirebaseApi with logging.Logging {
RemoteConfig? remoteConfig;
try {
remoteConfig = RemoteConfig.instance;
- await remoteConfig.setConfigSettings(RemoteConfigSettings(
+ await remoteConfig.setConfigSettings(
+ RemoteConfigSettings(
fetchTimeout: const Duration(seconds: 10),
minimumFetchInterval: const Duration(seconds: 1),
));
- RemoteConfigValue(null, ValueSource.valueStatic);
- Cache().setRemoteConfig(remoteConfig);
+ //RemoteConfigValue(null, ValueSource.valueStatic);
+ //Cache().setRemoteConfig(remoteConfig);
} on Exception catch (e) {
print('Unable to fetch remote config. Cached or default values will be used: $e');
if (remoteConfig != null) {
diff --git a/lib/service/package_service.dart b/lib/service/package_service.dart
index c9718d7..ae5c105 100644
--- a/lib/service/package_service.dart
+++ b/lib/service/package_service.dart
@@ -44,62 +44,44 @@ class PackageApi {
final List headRecord = element.split("***");
final Iterable json = jsonDecode(headRecord[1]);
if (headRecord[0] == "ExerciseDevice") {
- final List devices =
- json.map((device) => ExerciseDevice.fromJson(device)).toList();
+ final List devices = json.map((device) => ExerciseDevice.fromJson(device)).toList();
Cache().setDevices(devices);
} else if (headRecord[0] == "Product") {
- final List products =
- json.map((product) => Product.fromJson(product)).toList();
+ final List products = json.map((product) => Product.fromJson(product)).toList();
Cache().setProducts(products);
} else if (headRecord[0] == "Property") {
- final List properties =
- json.map((property) => Property.fromJson(property)).toList();
+ final List properties = json.map((property) => Property.fromJson(property)).toList();
Cache().setProperties(properties);
} else if (headRecord[0] == "ExerciseTree") {
- exerciseTree = json
- .map((exerciseTree) => ExerciseTree.fromJson(exerciseTree))
- .toList();
+ exerciseTree = json.map((exerciseTree) => ExerciseTree.fromJson(exerciseTree)).toList();
} else if (headRecord[0] == "ExerciseType") {
- final List exerciseTypes = json
- .map((exerciseType) => ExerciseType.fromJson(exerciseType))
- .toList();
+ final List exerciseTypes = json.map((exerciseType) => ExerciseType.fromJson(exerciseType)).toList();
await Future.forEach(exerciseTypes, (elem) async {
final ExerciseType exerciseType = elem as ExerciseType;
- exerciseType.imageUrl = await ExerciseTypeApi()
- .buildImage(exerciseType.imageUrl, exerciseType.exerciseTypeId);
+ exerciseType.imageUrl = await ExerciseTypeApi().buildImage(exerciseType.imageUrl, exerciseType.exerciseTypeId);
});
Cache().setExerciseTypes(exerciseTypes);
} else if (headRecord[0] == "ExerciseAbility") {
} else if (headRecord[0] == "ExercisePlanTemplate") {
- final List exercisePlanTemplates = json
- .map((exercisePlanTemplate) =>
- ExercisePlanTemplate.fromJson(exercisePlanTemplate))
- .toList();
+ final List exercisePlanTemplates =
+ json.map((exercisePlanTemplate) => ExercisePlanTemplate.fromJson(exercisePlanTemplate)).toList();
Cache().setExercisePlanTemplates(exercisePlanTemplates);
} else if (headRecord[0] == "ExerciseTreeParents") {
- exerciseTreeParents = json
- .map((exerciseTreeParent) =>
- ExerciseTreeParents.fromJson(exerciseTreeParent))
- .toList();
+ exerciseTreeParents = json.map((exerciseTreeParent) => ExerciseTreeParents.fromJson(exerciseTreeParent)).toList();
} else if (headRecord[0] == "Evaluation") {
- final List evaluations =
- json.map((evaluation) => Evaluation.fromJson(evaluation)).toList();
+ final List evaluations = json.map((evaluation) => Evaluation.fromJson(evaluation)).toList();
Cache().evaluations = evaluations;
} else if (headRecord[0] == "Sport") {
- final List sports =
- json.map((sport) => Sport.fromJson(sport)).toList();
+ final List sports = json.map((sport) => Sport.fromJson(sport)).toList();
Cache().setSports(sports);
} else if (headRecord[0] == "Tutorial") {
final Iterable json = jsonDecode(headRecord[1]);
- final List tutorials =
- json.map((tutorial) => Tutorial.fromJson(tutorial)).toList();
+ final List tutorials = json.map((tutorial) => Tutorial.fromJson(tutorial)).toList();
Cache().setTutorials(tutorials);
} else if (headRecord[0] == "Description") {
final Iterable json = jsonDecode(headRecord[1]);
- final List? descriptions = json
- .map((description) => Description.fromJson(description))
- .toList();
+ final List? descriptions = json.map((description) => Description.fromJson(description)).toList();
//print("Description: $descriptions");
Cache().setDescriptions(descriptions);
} else if (headRecord[0] == "Faq") {
@@ -109,8 +91,7 @@ class PackageApi {
Cache().setFaqs(faqs);
} else if (headRecord[0] == "TrainingPlan") {
final Iterable json = jsonDecode(headRecord[1]);
- final List? plans =
- json.map((plan) => TrainingPlan.fromJson(plan)).toList();
+ final List? plans = json.map((plan) => TrainingPlan.fromJson(plan)).toList();
List activePlans = [];
if (plans != null) {
@@ -123,38 +104,31 @@ class PackageApi {
Cache().setTrainingPlans(activePlans);
} else if (headRecord[0] == "SplitTests") {
final Iterable json = jsonDecode(headRecord[1]);
- final List? tests =
- json.map((test) => SplitTest.fromJson(test)).toList();
+ final List? tests = json.map((test) => SplitTest.fromJson(test)).toList();
//print("A/B tests: $tests");
Cache().setSplitTests(tests);
} else if (headRecord[0] == "TrainingPlanDay") {
final Iterable json = jsonDecode(headRecord[1]);
- final List? days =
- json.map((day) => TrainingPlanDay.fromJson(day)).toList();
+ final List? days = json.map((day) => TrainingPlanDay.fromJson(day)).toList();
Cache().setTrainingPlanDays(days);
}
});
- exerciseTree =
- this.getExerciseTreeParents(exerciseTree, exerciseTreeParents);
+ exerciseTree = this.getExerciseTreeParents(exerciseTree, exerciseTreeParents);
await Future.forEach(exerciseTree, (element) async {
ExerciseTree tree = element as ExerciseTree;
- tree.imageUrl =
- await ExerciseTreeApi().buildImage(tree.imageUrl, tree.treeId);
+ tree.imageUrl = await ExerciseTreeApi().buildImage(tree.imageUrl, tree.treeId);
});
Cache().setExerciseTree(exerciseTree);
- TrainingPlanDayRepository trainingPlanDayRepository =
- TrainingPlanDayRepository();
+ TrainingPlanDayRepository trainingPlanDayRepository = TrainingPlanDayRepository();
trainingPlanDayRepository.assignTrainingPlanDays();
return;
}
- List getExerciseTreeParents(
- final List exerciseTree,
- final List exerciseTreeParents) {
+ List getExerciseTreeParents(final List exerciseTree, final List exerciseTreeParents) {
List copyList = ExerciseTreeApi().copyList(exerciseTree);
int treeIndex = 0;
@@ -184,8 +158,7 @@ class PackageApi {
Future getCustomerPackage(int customerId) async {
try {
- final body = await _client.get(
- "app_customer_package/" + customerId.toString(), "");
+ final body = await _client.get("app_customer_package/" + customerId.toString(), "");
final List models = body.split("|||");
await Future.forEach(models, (elem) async {
@@ -197,33 +170,24 @@ class PackageApi {
Cache().userLoggedIn = customer;
} else if (headRecord[0] == "CustomerExerciseDevice") {
final Iterable json = jsonDecode(headRecord[1]);
- final List devices = json
- .map((device) => CustomerExerciseDevice.fromJson(device))
- .toList();
+ final List devices = json.map((device) => CustomerExerciseDevice.fromJson(device)).toList();
Cache().setCustomerDevices(devices);
// ToDo
} else if (headRecord[0] == "Exercises") {
final Iterable json = jsonDecode(headRecord[1]);
- final List exercises = json
- .map((exerciseType) => Exercise.fromJson(exerciseType))
- .toList();
+ final List exercises = json.map((exerciseType) => Exercise.fromJson(exerciseType)).toList();
Cache().setExercises(exercises);
} else if (headRecord[0] == "Purchase") {
final Iterable json = jsonDecode(headRecord[1]);
- final List purchases =
- json.map((purchase) => Purchase.fromJson(purchase)).toList();
+ final List purchases = json.map((purchase) => Purchase.fromJson(purchase)).toList();
Cache().setPurchases(purchases);
} else if (headRecord[0] == "CustomerProperty") {
final Iterable json = jsonDecode(headRecord[1]);
- final List customerProperties = json
- .map((property) => CustomerProperty.fromJson(property))
- .toList();
+ final List customerProperties = json.map((property) => CustomerProperty.fromJson(property)).toList();
CustomerApi().initProperties(customerProperties);
} else if (headRecord[0] == "CustomerPropertyAll") {
final Iterable json = jsonDecode(headRecord[1]);
- final List allCustomerProperties = json
- .map((property) => CustomerProperty.fromJson(property))
- .toList();
+ final List allCustomerProperties = json.map((property) => CustomerProperty.fromJson(property)).toList();
print(" All Properties ---- $allCustomerProperties");
Cache().setCustomerPropertyAll(allCustomerProperties);
} else if (headRecord[0] == "ExerciseResult") {
@@ -235,14 +199,12 @@ class PackageApi {
// ToDo */
} else if (headRecord[0] == "CustomerActivity") {
final Iterable json = jsonDecode(headRecord[1]);
- final List customerActivities = json
- .map((activity) => CustomerActivity.fromJson(activity))
- .toList();
+ final List customerActivities = json.map((activity) => CustomerActivity.fromJson(activity)).toList();
Cache().setCustomerActivities(customerActivities);
}
});
- } on NotFoundException catch (_) {
- throw Exception("Please log in");
+ } on NotFoundException catch (e) {
+ throw Exception("Please log in $e");
}
}
}
diff --git a/lib/util/track.dart b/lib/util/track.dart
index fa3799a..2e263ec 100644
--- a/lib/util/track.dart
+++ b/lib/util/track.dart
@@ -7,8 +7,9 @@ import 'package:aitrainer_app/model/tracking.dart' as model;
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
//import 'package:flurry_data/flurry_data.dart';
-import 'package:flutter_uxcam/flutter_uxcam.dart';
-import 'package:flutter_smartlook/flutter_smartlook.dart';
+//import 'package:flutter_uxcam/flutter_uxcam.dart';
+//import 'package:flutter_smartlook/flutter_smartlook.dart';
+import 'package:matomo_tracker/matomo_tracker.dart';
class Track with Logging {
static final Track _singleton = Track._internal();
@@ -23,8 +24,8 @@ class Track with Logging {
void track(TrackingEvent event, {String eventValue = ""}) {
if (!isInDebugMode) {
//FlurryData.logEvent(event.enumToString());
- Smartlook.setGlobalEventProperty(event.toString(), eventValue, false);
- FlutterUxcam.logEventWithProperties(event.enumToString(), {"value": eventValue});
+ //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();
@@ -37,6 +38,7 @@ class Track with Logging {
FirebaseMessaging.instance.subscribeToTopic(event.enumToString());
analytics.logEvent(name: event.enumToString(), parameters: {"value": eventValue});
+ MatomoTracker.instance.trackEvent(eventName: event.enumToString(), eventCategory: "", action: eventValue, eventValue: tracking.customerId);
}
}
}
diff --git a/lib/widgets/home.dart b/lib/widgets/home.dart
index d83c12a..f24cb66 100644
--- a/lib/widgets/home.dart
+++ b/lib/widgets/home.dart
@@ -70,17 +70,7 @@ class _HomePageState extends State with Logging, Trans {
return Scaffold(
key: _scaffoldKey,
body: UpgradeAlert(
- appcastConfig: cfg,
- dialogStyle: UpgradeDialogStyle.cupertino,
- countryCode: AppLanguage().appLocal.languageCode,
- showIgnore: false,
- showLater: false,
- showReleaseNotes: false,
- debugLogging: true,
- //debugAlwaysUpgrade: true,
- //debugDisplayOnce: true,
- //minAppVersion: Cache().packageInfo != null ? Cache().packageInfo!.version : "99.99.99",
- messages: MyLocalizedUpgraderMessages(context: context),
+ upgrader: Upgrader(appcastConfig: cfg, messages: MyLocalizedUpgraderMessages(context: context)),
child: BlocConsumer(listener: (context, state) {
if (state is SessionFailure) {
showDialog(
@@ -148,6 +138,8 @@ class MyLocalizedUpgraderMessages extends UpgraderMessages with Trans {
return t('Want to update?');
case UpgraderMessage.title:
return t('Update App?');
+ case UpgraderMessage.releaseNotes:
+ return "";
}
// Messages that are not provided above can still use the default values.
diff --git a/pubspec.lock b/pubspec.lock
index c8264f5..0d9ae12 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -7,14 +7,21 @@ packages:
name: _fe_analyzer_shared
url: "https://pub.dartlang.org"
source: hosted
- version: "31.0.0"
+ version: "47.0.0"
+ _flutterfire_internals:
+ dependency: transitive
+ description:
+ name: _flutterfire_internals
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.4"
analyzer:
dependency: transitive
description:
name: analyzer
url: "https://pub.dartlang.org"
source: hosted
- version: "2.8.0"
+ version: "4.7.0"
animated_widgets:
dependency: "direct main"
description:
@@ -42,7 +49,7 @@ packages:
name: async
url: "https://pub.dartlang.org"
source: hosted
- version: "2.8.2"
+ version: "2.9.0"
badges:
dependency: "direct main"
description:
@@ -56,14 +63,14 @@ packages:
name: bloc
url: "https://pub.dartlang.org"
source: hosted
- version: "8.0.3"
+ version: "8.1.0"
bloc_test:
dependency: "direct dev"
description:
name: bloc_test
url: "https://pub.dartlang.org"
source: hosted
- version: "9.0.3"
+ version: "9.1.0"
boolean_selector:
dependency: transitive
description:
@@ -77,7 +84,7 @@ packages:
name: build
url: "https://pub.dartlang.org"
source: hosted
- version: "2.2.1"
+ version: "2.3.1"
build_config:
dependency: transitive
description:
@@ -91,21 +98,21 @@ packages:
name: build_daemon
url: "https://pub.dartlang.org"
source: hosted
- version: "3.0.1"
+ version: "3.1.0"
build_resolvers:
dependency: transitive
description:
name: build_resolvers
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.6"
+ version: "2.0.10"
build_runner:
dependency: "direct dev"
description:
name: build_runner
url: "https://pub.dartlang.org"
source: hosted
- version: "2.1.8"
+ version: "2.1.11"
build_runner_core:
dependency: transitive
description:
@@ -140,7 +147,7 @@ packages:
name: characters
url: "https://pub.dartlang.org"
source: hosted
- version: "1.2.0"
+ version: "1.2.1"
charcode:
dependency: transitive
description:
@@ -169,34 +176,41 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
- cli_util:
- dependency: transitive
- description:
- name: cli_util
- url: "https://pub.dartlang.org"
- source: hosted
- version: "0.3.5"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.0"
+ version: "1.1.1"
+ cloud_firestore_platform_interface:
+ dependency: transitive
+ description:
+ name: cloud_firestore_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "5.8.1"
+ cloud_firestore_web:
+ dependency: transitive
+ description:
+ name: cloud_firestore_web
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "3.0.1"
code_builder:
dependency: transitive
description:
name: code_builder
url: "https://pub.dartlang.org"
source: hosted
- version: "4.1.0"
+ version: "4.3.0"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
source: hosted
- version: "1.15.0"
+ version: "1.16.0"
confetti:
dependency: "direct main"
description:
@@ -259,56 +273,56 @@ packages:
name: dart_style
url: "https://pub.dartlang.org"
source: hosted
- version: "2.2.1"
+ version: "2.2.4"
device_info_plus:
dependency: transitive
description:
name: device_info_plus
url: "https://pub.dartlang.org"
source: hosted
- version: "3.2.2"
+ version: "4.1.3"
device_info_plus_linux:
dependency: transitive
description:
name: device_info_plus_linux
url: "https://pub.dartlang.org"
source: hosted
- version: "2.1.1"
+ version: "3.0.0"
device_info_plus_macos:
dependency: transitive
description:
name: device_info_plus_macos
url: "https://pub.dartlang.org"
source: hosted
- version: "2.2.2"
+ version: "3.0.0"
device_info_plus_platform_interface:
dependency: transitive
description:
name: device_info_plus_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "2.3.0+1"
+ version: "3.0.0"
device_info_plus_web:
dependency: transitive
description:
name: device_info_plus_web
url: "https://pub.dartlang.org"
source: hosted
- version: "2.1.0"
+ version: "3.0.0"
device_info_plus_windows:
dependency: transitive
description:
name: device_info_plus_windows
url: "https://pub.dartlang.org"
source: hosted
- version: "2.1.1"
+ version: "4.1.0"
devicelocale:
dependency: "direct main"
description:
name: devicelocale
url: "https://pub.dartlang.org"
source: hosted
- version: "0.5.0"
+ version: "0.5.5"
diff_match_patch:
dependency: transitive
description:
@@ -322,14 +336,14 @@ packages:
name: equatable
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.3"
+ version: "2.0.5"
extended_tabs:
dependency: "direct main"
description:
name: extended_tabs
url: "https://pub.dartlang.org"
source: hosted
- version: "2.3.0"
+ version: "4.0.1"
ezanimation:
dependency: "direct main"
description:
@@ -343,14 +357,14 @@ packages:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
- version: "1.2.0"
+ version: "1.3.1"
ffi:
dependency: transitive
description:
name: ffi
url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.2"
+ version: "2.0.1"
file:
dependency: transitive
description:
@@ -364,133 +378,133 @@ packages:
name: firebase_analytics
url: "https://pub.dartlang.org"
source: hosted
- version: "9.1.2"
+ version: "10.0.1"
firebase_analytics_platform_interface:
dependency: transitive
description:
name: firebase_analytics_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "3.1.1"
+ version: "3.3.9"
firebase_analytics_web:
dependency: transitive
description:
name: firebase_analytics_web
url: "https://pub.dartlang.org"
source: hosted
- version: "0.4.0+8"
+ version: "0.5.1"
firebase_auth:
dependency: "direct main"
description:
name: firebase_auth
url: "https://pub.dartlang.org"
source: hosted
- version: "3.3.11"
+ version: "4.0.1"
firebase_auth_platform_interface:
dependency: transitive
description:
name: firebase_auth_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "6.2.1"
+ version: "6.10.3"
firebase_auth_web:
dependency: transitive
description:
name: firebase_auth_web
url: "https://pub.dartlang.org"
source: hosted
- version: "3.3.9"
+ version: "5.0.1"
firebase_core:
dependency: "direct main"
description:
name: firebase_core
url: "https://pub.dartlang.org"
source: hosted
- version: "1.13.1"
+ version: "2.0.0"
firebase_core_platform_interface:
dependency: transitive
description:
name: firebase_core_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "4.2.5"
+ version: "4.5.1"
firebase_core_web:
dependency: transitive
description:
name: firebase_core_web
url: "https://pub.dartlang.org"
source: hosted
- version: "1.6.1"
+ version: "2.0.0"
firebase_dynamic_links:
dependency: "direct main"
description:
name: firebase_dynamic_links
url: "https://pub.dartlang.org"
source: hosted
- version: "4.1.1"
+ version: "5.0.1"
firebase_dynamic_links_platform_interface:
dependency: transitive
description:
name: firebase_dynamic_links_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "0.2.2+1"
+ version: "0.2.3+17"
firebase_in_app_messaging:
dependency: "direct main"
description:
name: firebase_in_app_messaging
url: "https://pub.dartlang.org"
source: hosted
- version: "0.6.0+9"
+ version: "0.7.0+1"
firebase_in_app_messaging_platform_interface:
dependency: transitive
description:
name: firebase_in_app_messaging_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "0.2.1+1"
+ version: "0.2.1+21"
firebase_messaging:
dependency: "direct main"
description:
name: firebase_messaging
url: "https://pub.dartlang.org"
source: hosted
- version: "11.2.11"
+ version: "14.0.1"
firebase_messaging_platform_interface:
dependency: transitive
description:
name: firebase_messaging_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "3.2.1"
+ version: "4.2.2"
firebase_messaging_web:
dependency: transitive
description:
name: firebase_messaging_web
url: "https://pub.dartlang.org"
source: hosted
- version: "2.2.9"
+ version: "3.2.2"
firebase_remote_config:
dependency: "direct main"
description:
name: firebase_remote_config
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.2"
+ version: "3.0.1"
firebase_remote_config_platform_interface:
dependency: transitive
description:
name: firebase_remote_config_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.1"
+ version: "1.1.21"
firebase_remote_config_web:
dependency: transitive
description:
name: firebase_remote_config_web
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.7"
+ version: "1.1.10"
fixnum:
dependency: transitive
description:
@@ -498,13 +512,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
- fl_chart:
- dependency: "direct main"
- description:
- name: fl_chart
- url: "https://pub.dartlang.org"
- source: hosted
- version: "0.50.0"
flutter:
dependency: "direct main"
description: flutter
@@ -523,28 +530,28 @@ packages:
name: flutter_bloc
url: "https://pub.dartlang.org"
source: hosted
- version: "8.0.1"
+ version: "8.1.1"
flutter_facebook_auth:
dependency: "direct main"
description:
name: flutter_facebook_auth
url: "https://pub.dartlang.org"
source: hosted
- version: "4.3.4"
+ version: "4.4.1+1"
flutter_facebook_auth_platform_interface:
dependency: transitive
description:
name: flutter_facebook_auth_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "3.1.2"
+ version: "3.2.0"
flutter_facebook_auth_web:
dependency: transitive
description:
name: flutter_facebook_auth_web
url: "https://pub.dartlang.org"
source: hosted
- version: "3.1.2"
+ version: "3.2.0"
flutter_fadein:
dependency: "direct main"
description:
@@ -580,6 +587,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.6"
+ flutter_lints:
+ dependency: "direct main"
+ description:
+ name: flutter_lints
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.0.1"
flutter_localizations:
dependency: "direct main"
description: flutter
@@ -641,13 +655,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
- flutter_smartlook:
- dependency: "direct main"
- description:
- name: flutter_smartlook
- url: "https://pub.dartlang.org"
- source: hosted
- version: "3.0.9"
flutter_svg:
dependency: transitive
description:
@@ -660,13 +667,6 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
- flutter_uxcam:
- dependency: "direct main"
- description:
- name: flutter_uxcam
- url: "https://pub.dartlang.org"
- source: hosted
- version: "2.0.1"
flutter_web_plugins:
dependency: transitive
description: flutter
@@ -706,14 +706,28 @@ packages:
name: google_sign_in
url: "https://pub.dartlang.org"
source: hosted
- version: "5.2.4"
+ version: "5.4.2"
+ google_sign_in_android:
+ dependency: transitive
+ description:
+ name: google_sign_in_android
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "6.1.1"
+ google_sign_in_ios:
+ dependency: transitive
+ description:
+ name: google_sign_in_ios
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "5.5.0"
google_sign_in_platform_interface:
dependency: transitive
description:
name: google_sign_in_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "2.1.2"
+ version: "2.3.0"
google_sign_in_web:
dependency: transitive
description:
@@ -741,7 +755,7 @@ packages:
name: http
url: "https://pub.dartlang.org"
source: hosted
- version: "0.13.4"
+ version: "0.13.5"
http_multi_server:
dependency: transitive
description:
@@ -790,7 +804,7 @@ packages:
name: js
url: "https://pub.dartlang.org"
source: hosted
- version: "0.6.3"
+ version: "0.6.4"
json_annotation:
dependency: transitive
description:
@@ -812,6 +826,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.2"
+ lints:
+ dependency: transitive
+ description:
+ name: lints
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.0.0"
logging:
dependency: transitive
description:
@@ -832,21 +853,28 @@ packages:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
- version: "0.12.11"
+ version: "0.12.12"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
url: "https://pub.dartlang.org"
source: hosted
- version: "0.1.3"
+ version: "0.1.5"
+ matomo_tracker:
+ dependency: "direct main"
+ description:
+ name: matomo_tracker
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.5.0"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
- version: "1.7.0"
+ version: "1.8.0"
mime:
dependency: transitive
description:
@@ -860,7 +888,7 @@ packages:
name: mockito
url: "https://pub.dartlang.org"
source: hosted
- version: "5.1.0"
+ version: "5.3.2"
mocktail:
dependency: transitive
description:
@@ -874,7 +902,7 @@ packages:
name: modal_progress_hud_nsn
url: "https://pub.dartlang.org"
source: hosted
- version: "0.1.0-nullsafety-1"
+ version: "0.3.0"
nested:
dependency: transitive
description:
@@ -923,14 +951,14 @@ packages:
name: package_info_plus
url: "https://pub.dartlang.org"
source: hosted
- version: "1.4.0"
+ version: "1.4.3+1"
package_info_plus_linux:
dependency: transitive
description:
name: package_info_plus_linux
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.3"
+ version: "1.0.5"
package_info_plus_macos:
dependency: transitive
description:
@@ -951,21 +979,21 @@ packages:
name: package_info_plus_web
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.4"
+ version: "1.0.5"
package_info_plus_windows:
dependency: transitive
description:
name: package_info_plus_windows
url: "https://pub.dartlang.org"
source: hosted
- version: "1.0.4"
+ version: "2.1.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.dartlang.org"
source: hosted
- version: "1.8.0"
+ version: "1.8.2"
path_drawing:
dependency: transitive
description:
@@ -1007,7 +1035,7 @@ packages:
name: path_provider_linux
url: "https://pub.dartlang.org"
source: hosted
- version: "2.1.5"
+ version: "2.1.7"
path_provider_macos:
dependency: transitive
description:
@@ -1028,7 +1056,7 @@ packages:
name: path_provider_windows
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.5"
+ version: "2.1.3"
percent_indicator:
dependency: "direct main"
description:
@@ -1133,21 +1161,21 @@ packages:
name: rxdart
url: "https://pub.dartlang.org"
source: hosted
- version: "0.27.3"
+ version: "0.27.5"
sentry:
dependency: transitive
description:
name: sentry
url: "https://pub.dartlang.org"
source: hosted
- version: "6.4.0"
+ version: "6.13.0"
sentry_flutter:
dependency: "direct main"
description:
name: sentry_flutter
url: "https://pub.dartlang.org"
source: hosted
- version: "6.4.0"
+ version: "6.13.0"
share:
dependency: transitive
description:
@@ -1161,7 +1189,7 @@ packages:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.13"
+ version: "2.0.15"
shared_preferences_android:
dependency: transitive
description:
@@ -1245,7 +1273,7 @@ packages:
name: sign_in_with_apple
url: "https://pub.dartlang.org"
source: hosted
- version: "3.3.0"
+ version: "4.1.0"
sign_in_with_apple_platform_interface:
dependency: transitive
description:
@@ -1271,7 +1299,7 @@ packages:
name: source_gen
url: "https://pub.dartlang.org"
source: hosted
- version: "1.2.1"
+ version: "1.2.6"
source_map_stack_trace:
dependency: transitive
description:
@@ -1292,21 +1320,21 @@ packages:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
- version: "1.8.1"
+ version: "1.9.0"
sqflite:
dependency: "direct main"
description:
name: sqflite
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.2"
+ version: "2.1.0+1"
sqflite_common:
dependency: transitive
description:
name: sqflite_common
url: "https://pub.dartlang.org"
source: hosted
- version: "2.2.1"
+ version: "2.3.0"
stack_trace:
dependency: transitive
description:
@@ -1320,7 +1348,7 @@ packages:
name: stop_watch_timer
url: "https://pub.dartlang.org"
source: hosted
- version: "1.3.1"
+ version: "2.0.0"
stream_channel:
dependency: transitive
description:
@@ -1341,56 +1369,63 @@ packages:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
- version: "1.1.0"
+ version: "1.1.1"
+ sync_scroll_library:
+ dependency: transitive
+ description:
+ name: sync_scroll_library
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.1"
syncfusion_flutter_calendar:
dependency: "direct main"
description:
name: syncfusion_flutter_calendar
url: "https://pub.dartlang.org"
source: hosted
- version: "20.1.47"
+ version: "20.3.50"
syncfusion_flutter_charts:
dependency: "direct main"
description:
name: syncfusion_flutter_charts
url: "https://pub.dartlang.org"
source: hosted
- version: "20.1.47+1"
+ version: "20.3.50"
syncfusion_flutter_core:
dependency: transitive
description:
name: syncfusion_flutter_core
url: "https://pub.dartlang.org"
source: hosted
- version: "20.1.47"
+ version: "20.3.50"
syncfusion_flutter_datagrid:
dependency: "direct main"
description:
name: syncfusion_flutter_datagrid
url: "https://pub.dartlang.org"
source: hosted
- version: "20.1.47"
+ version: "20.3.50"
syncfusion_flutter_datepicker:
dependency: transitive
description:
name: syncfusion_flutter_datepicker
url: "https://pub.dartlang.org"
source: hosted
- version: "20.1.47"
+ version: "20.3.50"
syncfusion_flutter_gauges:
dependency: "direct main"
description:
name: syncfusion_flutter_gauges
url: "https://pub.dartlang.org"
source: hosted
- version: "20.1.47"
+ version: "20.3.50"
syncfusion_localizations:
dependency: "direct main"
description:
name: syncfusion_localizations
url: "https://pub.dartlang.org"
source: hosted
- version: "20.1.47"
+ version: "20.3.50"
synchronized:
dependency: transitive
description:
@@ -1404,28 +1439,28 @@ packages:
name: term_glyph
url: "https://pub.dartlang.org"
source: hosted
- version: "1.2.0"
+ version: "1.2.1"
test:
dependency: "direct dev"
description:
name: test
url: "https://pub.dartlang.org"
source: hosted
- version: "1.19.5"
+ version: "1.21.4"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
- version: "0.4.8"
+ version: "0.4.12"
test_core:
dependency: transitive
description:
name: test_core
url: "https://pub.dartlang.org"
source: hosted
- version: "0.4.9"
+ version: "0.4.16"
timeline_tile:
dependency: "direct main"
description:
@@ -1439,7 +1474,7 @@ packages:
name: timezone
url: "https://pub.dartlang.org"
source: hosted
- version: "0.8.0"
+ version: "0.9.0"
timing:
dependency: transitive
description:
@@ -1453,7 +1488,7 @@ packages:
name: toggle_switch
url: "https://pub.dartlang.org"
source: hosted
- version: "1.4.0"
+ version: "2.0.1"
tuple:
dependency: transitive
description:
@@ -1482,20 +1517,27 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
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:
dependency: "direct main"
description:
name: upgrader
url: "https://pub.dartlang.org"
source: hosted
- version: "3.13.0"
+ version: "4.8.1"
url_launcher:
dependency: "direct main"
description:
name: url_launcher
url: "https://pub.dartlang.org"
source: hosted
- version: "6.0.20"
+ version: "6.1.6"
url_launcher_android:
dependency: transitive
description:
@@ -1530,7 +1572,7 @@ packages:
name: url_launcher_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "2.0.5"
+ version: "2.1.1"
url_launcher_web:
dependency: transitive
description:
@@ -1558,7 +1600,7 @@ packages:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
- version: "2.1.1"
+ version: "2.1.2"
version:
dependency: transitive
description:
@@ -1621,7 +1663,7 @@ packages:
name: wakelock
url: "https://pub.dartlang.org"
source: hosted
- version: "0.6.1+2"
+ version: "0.6.2"
wakelock_macos:
dependency: transitive
description:
@@ -1719,7 +1761,7 @@ packages:
name: win32
url: "https://pub.dartlang.org"
source: hosted
- version: "2.4.4"
+ version: "2.7.0"
xdg_directories:
dependency: transitive
description:
@@ -1742,5 +1784,5 @@ packages:
source: hosted
version: "3.1.0"
sdks:
- dart: ">=2.16.0 <3.0.0"
- flutter: ">=2.10.0"
+ dart: ">=2.18.0-0 <3.0.0"
+ flutter: ">=3.3.0-0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 9181f14..c6220bb 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -18,77 +18,92 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.1.26+107
environment:
- sdk: ">=2.12.0 <3.0.0"
+ sdk: ">=2.12.0 <3.9.0"
dependencies:
flutter:
sdk: flutter
- cupertino_icons: ^1.0.0
- google_fonts: ^2.1.0
- devicelocale: ^0.5.0
- sentry_flutter: ^6.4.0
- flutter_bloc: ^8.0.1
- equatable: ^2.0.3
-
- flutter_radar_chart: ^0.2.1
- rainbow_color: ^2.0.1
- percent_indicator: ^4.0.0
- fl_chart: ^0.50.0
- infinite_listview: ^1.1.0
- toggle_switch: ^1.4.0
- keyboard_actions: ^3.4.0
- badges: ^2.0.1
- stop_watch_timer: ^1.3.1
- #location: ^3.2.4
- modal_progress_hud_nsn: ^0.1.0-nullsafety-1
- flutter_html: ^2.0.0
- wakelock: ^0.6.1+2
- timeline_tile: ^2.0.0
- purchases_flutter: ^3.9.5
- package_info: ^2.0.0
- ezanimation: ^0.6.0
- confetti: ^0.6.0
- crypto: ^3.0.0
- carousel_slider: ^4.0.0
- convex_bottom_bar: ^3.0.0
- flutter_app_badger: ^1.2.0
- extended_tabs: ^2.2.0
- upgrader: ^3.11.0
- web_browser: ^0.5.0
- flutter_fadein: ^2.0.0
- mailto: ^2.0.0
- url_launcher: ^6.0.9
-
- firebase_core: ^1.10.5
- firebase_analytics: ^9.1.2
- firebase_messaging: ^11.2.11
- firebase_auth: ^3.3.3
- firebase_remote_config: ^2.0.2
- firebase_dynamic_links: ^4.1.1
- firebase_in_app_messaging: ^0.6.0+4
-
- syncfusion_flutter_gauges: ^20.1.47
- syncfusion_flutter_datagrid: ^20.1.47
- syncfusion_flutter_charts: ^20.1.47
- syncfusion_flutter_calendar: ^20.1.47
- syncfusion_localizations: ^20.1.47
-
- flutter_facebook_auth: ^4.3.4
- google_sign_in: ^5.2.4
- sign_in_with_apple: ^3.3.0
-
- flutter_smartlook: ^3.0.9
- #flurry_data: ^0.0.1
- flutter_uxcam: ^2.0.1
-
animated_widgets: ^1.0.6
- flutter_fancy_tree_view: ^0.5.1+1
- mockito: ^5.0.3
- sqflite: ^2.0.0+3
+ badges: ^2.0.1
+
+ carousel_slider: ^4.0.0
+ confetti: ^0.6.0
+ convex_bottom_bar: ^3.0.0
+ crypto: ^3.0.0
+ cupertino_icons: ^1.0.0
+
+ equatable: ^2.0.5
+ extended_tabs: ^4.0.1
+ ezanimation: ^0.6.0
+
+ devicelocale: ^0.5.5
+
+ firebase_core: ^2.0.0
+ firebase_analytics: ^10.0.1
+ firebase_messaging: ^14.0.1
+ firebase_auth: ^4.0.1
+ firebase_remote_config: ^3.0.1
+ firebase_dynamic_links: ^5.0.1
+ firebase_in_app_messaging: ^0.7.0+1
+
+ flutter_app_badger: ^1.2.0
+ flutter_bloc: ^8.1.1
+ flutter_html: ^2.0.0
+ flutter_fancy_tree_view: ^0.5.1+1
+ flutter_facebook_auth: ^4.4.1+1
+ flutter_fadein: ^2.0.0
+ flutter_lints: ^2.0.1
+ flutter_radar_chart: ^0.2.1
flutter_secure_storage: ^5.0.2
+ #flutter_smartlook: ^4.0.1
+
+ google_fonts: ^2.1.0
+ google_sign_in: ^5.4.2
+
+ infinite_listview: ^1.1.0
+
+ keyboard_actions: ^3.4.0
+
+ mailto: ^2.0.0
+ matomo_tracker: ^1.5.0
+ mockito: ^5.3.2
+ modal_progress_hud_nsn: ^0.3.0
+
+ package_info: ^2.0.2
+ percent_indicator: ^4.0.0
+ purchases_flutter: ^3.9.5
+
+ rainbow_color: ^2.0.1
+
+ sentry_flutter: ^6.13.0
+ sign_in_with_apple: ^4.1.0
+ sqflite: ^2.1.0+1
+ stop_watch_timer: ^2.0.0
+
+ syncfusion_flutter_gauges: ^20.3.50
+ syncfusion_flutter_datagrid: ^20.3.50
+ syncfusion_flutter_charts: ^20.3.50
+ syncfusion_flutter_calendar: ^20.3.50
+ syncfusion_localizations: ^20.3.50
+
+ timeline_tile: ^2.0.0
+ toggle_switch: ^2.0.1
+
+ upgrader: ^4.8.1
+ url_launcher: ^6.0.9
+
+ wakelock: ^0.6.2
+ web_browser: ^0.5.0
+
+
+ #fl_chart: ^0.50.0
+ #location: ^3.2.4
+ #flurry_data: ^0.0.1
+ #flutter_uxcam: ^2.1.5
#social_share: ^2.1.1
+
flutter_localizations:
sdk: flutter
@@ -100,7 +115,7 @@ dev_dependencies:
test: '>=1.0.0 <2.0.0'
flutter_test:
sdk: flutter
- bloc_test: ^9.0.3
+ bloc_test: ^9.1.0
build_runner: