This commit is contained in:
bossanyit 2022-10-18 18:48:18 +02:00
parent fb01016494
commit b5e387ee2a
9 changed files with 113 additions and 107 deletions

View File

@ -5,18 +5,10 @@
additional functionality it is fine to subclass or reimplement additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. --> FlutterApplication and put your custom class here. -->
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<application <application android:name="${applicationName}" android:label="WorkoutTest" android:icon="@mipmap/launcher_icon">
android:name="${applicationName}" <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" />
android:label="WorkoutTest" <meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
android:icon="@mipmap/launcher_icon"> <activity android:name="io.flutter.embedding.android.FlutterActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize" android:allowBackup="false" android:fullBackupContent="false">
<activity android:name="io.flutter.embedding.android.FlutterActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize"
android:allowBackup="false"
android:fullBackupContent="false">
<!-- Specifies an Android theme to apply to this Activity as soon as <!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues while the Flutter UI initializes. After that, this theme continues
@ -65,4 +57,7 @@
</intent-filter> </intent-filter>
</activity> </activity>
</application> </application>
<queries>
<provider android:authorities="com.facebook.katana.provider.PlatformProvider" />
</queries>
</manifest> </manifest>

View File

@ -1,13 +1,14 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="app_name">WorkoutTest</string> <string name="app_name">WorkoutTest</string>
<!-- Replace "000000000000" with your Facebook App ID here. --> <!-- Replace "000000000000" with your Facebook App ID here. -->
<string name="facebook_app_id">584181112271127</string> <string name="facebook_app_id">584181112271127</string>
<string name="facebook_client_token">60d565f451ce32de3d7eeb26274bbddd</string>
<!-- <!--
Replace "000000000000" with your Facebook App ID here. Replace "000000000000" with your Facebook App ID here.
**NOTE**: The scheme needs to start with `fb` and then your ID. **NOTE**: The scheme needs to start with `fb` and then your ID.
--> -->
<string name="fb_login_protocol_scheme">fb584181112271127</string> <string name="fb_login_protocol_scheme">fb584181112271127</string>
</resources> </resources>

View File

@ -161,7 +161,7 @@ class SalesBloc extends Bloc<SalesEvent, SalesState> with Logging {
return; return;
} }
String productSetString = splitTestRepository.getSplitTestValue("product_set_2"); String productSetString = splitTestRepository.getSplitTestValue("product_set_5");
log("ProductSetString: $productSetString"); log("ProductSetString: $productSetString");
try { try {
productSet = int.parse(productSetString); productSet = int.parse(productSetString);

View File

@ -56,6 +56,7 @@ 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: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:sentry_flutter/sentry_flutter.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 'package:upgrader/upgrader.dart';
@ -104,7 +105,8 @@ Future<Null> _reportError(dynamic error, dynamic stackTrace) async {
); );
final String platform = Platform.isAndroid ? "Android" : "iOS"; final String platform = Platform.isAndroid ? "Android" : "iOS";
final String version = Cache().packageInfo != null ? Cache().packageInfo!.version + "+" + Cache().packageInfo!.buildNumber : ""; 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'); print('Capture exception result : SentryId : $sentryId');
} }
@ -146,6 +148,11 @@ Future<Null> main() async {
Future<void> initThirdParty() async { Future<void> initThirdParty() async {
if (!isInDebugMode) { if (!isInDebugMode) {
//await FlurryData.initialize(androidKey: "JNYCTCWBT34FM3J8TV36", iosKey: "3QBG7BSMGPDH24S8TRQP", enableLog: true); //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(); FlutterUxcam.optIntoSchematicRecordings();
} }
await FirebaseApi().initializeFlutterFire(); await FirebaseApi().initializeFlutterFire();
@ -194,7 +201,8 @@ Future<Null> main() async {
BlocProvider<TestSetExecuteBloc>( BlocProvider<TestSetExecuteBloc>(
create: (BuildContext context) => TestSetExecuteBloc(), create: (BuildContext context) => TestSetExecuteBloc(),
), ),
BlocProvider<TutorialBloc>(create: (BuildContext context) => TutorialBloc(tutorialName: ActivityDone.tutorialExecuteFirstTest.toStr())), BlocProvider<TutorialBloc>(
create: (BuildContext context) => TutorialBloc(tutorialName: ActivityDone.tutorialExecuteFirstTest.toStr())),
BlocProvider<TrainingPlanBloc>(create: (context) { BlocProvider<TrainingPlanBloc>(create: (context) {
final MenuBloc menuBloc = BlocProvider.of<MenuBloc>(context); final MenuBloc menuBloc = BlocProvider.of<MenuBloc>(context);
return TrainingPlanBloc(menuBloc: menuBloc, trainingPlanRepository: TrainingPlanRepository()); return TrainingPlanBloc(menuBloc: menuBloc, trainingPlanRepository: TrainingPlanRepository());

View File

@ -35,6 +35,7 @@ import 'package:firebase_remote_config/firebase_remote_config.dart';
//import 'package:flurry_data/flurry_data.dart'; //import 'package:flurry_data/flurry_data.dart';
import 'package:flutter_facebook_auth/flutter_facebook_auth.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:package_info/package_info.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:aitrainer_app/model/exercise_type.dart'; import 'package:aitrainer_app/model/exercise_type.dart';
@ -544,7 +545,8 @@ class Cache with Logging {
ExercisePlan? getMyExercisePlan() => _myExercisePlan; ExercisePlan? getMyExercisePlan() => _myExercisePlan;
void setMyExercisePlanDetails(LinkedHashMap<int, ExercisePlanDetail> listExercisePlanDetail) => _myExercisesPlanDetails = listExercisePlanDetail; void setMyExercisePlanDetails(LinkedHashMap<int, ExercisePlanDetail> listExercisePlanDetail) =>
_myExercisesPlanDetails = listExercisePlanDetail;
void addToMyExercisePlanDetails(ExercisePlanDetail detail) => _myExercisesPlanDetails[detail.exerciseTypeId] = detail; 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 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) { void deleteMyExercisePlanDetailByExerciseTypeId(int exerciseTypeId) {
this._myExercisesPlanDetails[exerciseTypeId]!.change = ModelChange.delete; this._myExercisesPlanDetails[exerciseTypeId]!.change = ModelChange.delete;
@ -686,7 +689,11 @@ class Cache with Logging {
Future<void> initCustomer(int customerId) async { Future<void> initCustomer(int customerId) async {
log(" *** initCustomer"); log(" *** initCustomer");
await PackageApi().getCustomerPackage(customerId); try {
await PackageApi().getCustomerPackage(customerId);
} on Exception catch (_) {
return;
}
if (!isInDebugMode) { if (!isInDebugMode) {
//FlurryData.setUserId(customerId.toString()); //FlurryData.setUserId(customerId.toString());
@ -694,6 +701,8 @@ class Cache with Logging {
FlutterUxcam.setUserIdentity(customerId.toString()); FlutterUxcam.setUserIdentity(customerId.toString());
Smartlook.setUserIdentifier(customerId.toString()); Smartlook.setUserIdentifier(customerId.toString());
Track().track(TrackingEvent.enter); Track().track(TrackingEvent.enter);
MatomoTracker.instance
.trackEvent(name: TrackingEvent.enter.enumToString(), action: TrackingEvent.enter.enumToString(), eventValue: customerId);
} }
await Future.forEach(ActivityDone.values, (element) async { await Future.forEach(ActivityDone.values, (element) async {

View File

@ -44,62 +44,44 @@ class PackageApi {
final List<String> headRecord = element.split("***"); final List<String> headRecord = element.split("***");
final Iterable json = jsonDecode(headRecord[1]); final Iterable json = jsonDecode(headRecord[1]);
if (headRecord[0] == "ExerciseDevice") { if (headRecord[0] == "ExerciseDevice") {
final List<ExerciseDevice> devices = final List<ExerciseDevice> devices = json.map((device) => ExerciseDevice.fromJson(device)).toList();
json.map((device) => ExerciseDevice.fromJson(device)).toList();
Cache().setDevices(devices); Cache().setDevices(devices);
} else if (headRecord[0] == "Product") { } else if (headRecord[0] == "Product") {
final List<Product> products = final List<Product> products = json.map((product) => Product.fromJson(product)).toList();
json.map((product) => Product.fromJson(product)).toList();
Cache().setProducts(products); Cache().setProducts(products);
} else if (headRecord[0] == "Property") { } else if (headRecord[0] == "Property") {
final List<Property> properties = final List<Property> properties = json.map((property) => Property.fromJson(property)).toList();
json.map((property) => Property.fromJson(property)).toList();
Cache().setProperties(properties); Cache().setProperties(properties);
} else if (headRecord[0] == "ExerciseTree") { } else if (headRecord[0] == "ExerciseTree") {
exerciseTree = json exerciseTree = json.map((exerciseTree) => ExerciseTree.fromJson(exerciseTree)).toList();
.map((exerciseTree) => ExerciseTree.fromJson(exerciseTree))
.toList();
} else if (headRecord[0] == "ExerciseType") { } else if (headRecord[0] == "ExerciseType") {
final List<ExerciseType> exerciseTypes = json final List<ExerciseType> exerciseTypes = json.map((exerciseType) => ExerciseType.fromJson(exerciseType)).toList();
.map((exerciseType) => ExerciseType.fromJson(exerciseType))
.toList();
await Future.forEach(exerciseTypes, (elem) async { await Future.forEach(exerciseTypes, (elem) async {
final ExerciseType exerciseType = elem as ExerciseType; final ExerciseType exerciseType = elem as ExerciseType;
exerciseType.imageUrl = await ExerciseTypeApi() exerciseType.imageUrl = await ExerciseTypeApi().buildImage(exerciseType.imageUrl, exerciseType.exerciseTypeId);
.buildImage(exerciseType.imageUrl, exerciseType.exerciseTypeId);
}); });
Cache().setExerciseTypes(exerciseTypes); Cache().setExerciseTypes(exerciseTypes);
} else if (headRecord[0] == "ExerciseAbility") { } else if (headRecord[0] == "ExerciseAbility") {
} else if (headRecord[0] == "ExercisePlanTemplate") { } else if (headRecord[0] == "ExercisePlanTemplate") {
final List<ExercisePlanTemplate> exercisePlanTemplates = json final List<ExercisePlanTemplate> exercisePlanTemplates =
.map((exercisePlanTemplate) => json.map((exercisePlanTemplate) => ExercisePlanTemplate.fromJson(exercisePlanTemplate)).toList();
ExercisePlanTemplate.fromJson(exercisePlanTemplate))
.toList();
Cache().setExercisePlanTemplates(exercisePlanTemplates); Cache().setExercisePlanTemplates(exercisePlanTemplates);
} else if (headRecord[0] == "ExerciseTreeParents") { } else if (headRecord[0] == "ExerciseTreeParents") {
exerciseTreeParents = json exerciseTreeParents = json.map((exerciseTreeParent) => ExerciseTreeParents.fromJson(exerciseTreeParent)).toList();
.map((exerciseTreeParent) =>
ExerciseTreeParents.fromJson(exerciseTreeParent))
.toList();
} else if (headRecord[0] == "Evaluation") { } else if (headRecord[0] == "Evaluation") {
final List<Evaluation> evaluations = final List<Evaluation> evaluations = json.map((evaluation) => Evaluation.fromJson(evaluation)).toList();
json.map((evaluation) => Evaluation.fromJson(evaluation)).toList();
Cache().evaluations = evaluations; Cache().evaluations = evaluations;
} else if (headRecord[0] == "Sport") { } else if (headRecord[0] == "Sport") {
final List<Sport> sports = final List<Sport> sports = json.map((sport) => Sport.fromJson(sport)).toList();
json.map((sport) => Sport.fromJson(sport)).toList();
Cache().setSports(sports); Cache().setSports(sports);
} else if (headRecord[0] == "Tutorial") { } else if (headRecord[0] == "Tutorial") {
final Iterable json = jsonDecode(headRecord[1]); final Iterable json = jsonDecode(headRecord[1]);
final List<Tutorial> tutorials = final List<Tutorial> tutorials = json.map((tutorial) => Tutorial.fromJson(tutorial)).toList();
json.map((tutorial) => Tutorial.fromJson(tutorial)).toList();
Cache().setTutorials(tutorials); Cache().setTutorials(tutorials);
} else if (headRecord[0] == "Description") { } else if (headRecord[0] == "Description") {
final Iterable json = jsonDecode(headRecord[1]); final Iterable json = jsonDecode(headRecord[1]);
final List<Description>? descriptions = json final List<Description>? descriptions = json.map((description) => Description.fromJson(description)).toList();
.map((description) => Description.fromJson(description))
.toList();
//print("Description: $descriptions"); //print("Description: $descriptions");
Cache().setDescriptions(descriptions); Cache().setDescriptions(descriptions);
} else if (headRecord[0] == "Faq") { } else if (headRecord[0] == "Faq") {
@ -109,8 +91,7 @@ class PackageApi {
Cache().setFaqs(faqs); Cache().setFaqs(faqs);
} else if (headRecord[0] == "TrainingPlan") { } else if (headRecord[0] == "TrainingPlan") {
final Iterable json = jsonDecode(headRecord[1]); final Iterable json = jsonDecode(headRecord[1]);
final List<TrainingPlan>? plans = final List<TrainingPlan>? plans = json.map((plan) => TrainingPlan.fromJson(plan)).toList();
json.map((plan) => TrainingPlan.fromJson(plan)).toList();
List<TrainingPlan> activePlans = []; List<TrainingPlan> activePlans = [];
if (plans != null) { if (plans != null) {
@ -123,38 +104,31 @@ class PackageApi {
Cache().setTrainingPlans(activePlans); Cache().setTrainingPlans(activePlans);
} else if (headRecord[0] == "SplitTests") { } else if (headRecord[0] == "SplitTests") {
final Iterable json = jsonDecode(headRecord[1]); final Iterable json = jsonDecode(headRecord[1]);
final List<SplitTest>? tests = final List<SplitTest>? tests = json.map((test) => SplitTest.fromJson(test)).toList();
json.map((test) => SplitTest.fromJson(test)).toList();
//print("A/B tests: $tests"); //print("A/B tests: $tests");
Cache().setSplitTests(tests); Cache().setSplitTests(tests);
} else if (headRecord[0] == "TrainingPlanDay") { } else if (headRecord[0] == "TrainingPlanDay") {
final Iterable json = jsonDecode(headRecord[1]); final Iterable json = jsonDecode(headRecord[1]);
final List<TrainingPlanDay>? days = final List<TrainingPlanDay>? days = json.map((day) => TrainingPlanDay.fromJson(day)).toList();
json.map((day) => TrainingPlanDay.fromJson(day)).toList();
Cache().setTrainingPlanDays(days); Cache().setTrainingPlanDays(days);
} }
}); });
exerciseTree = exerciseTree = this.getExerciseTreeParents(exerciseTree, exerciseTreeParents);
this.getExerciseTreeParents(exerciseTree, exerciseTreeParents);
await Future.forEach(exerciseTree, (element) async { await Future.forEach(exerciseTree, (element) async {
ExerciseTree tree = element as ExerciseTree; ExerciseTree tree = element as ExerciseTree;
tree.imageUrl = tree.imageUrl = await ExerciseTreeApi().buildImage(tree.imageUrl, tree.treeId);
await ExerciseTreeApi().buildImage(tree.imageUrl, tree.treeId);
}); });
Cache().setExerciseTree(exerciseTree); Cache().setExerciseTree(exerciseTree);
TrainingPlanDayRepository trainingPlanDayRepository = TrainingPlanDayRepository trainingPlanDayRepository = TrainingPlanDayRepository();
TrainingPlanDayRepository();
trainingPlanDayRepository.assignTrainingPlanDays(); trainingPlanDayRepository.assignTrainingPlanDays();
return; return;
} }
List<ExerciseTree> getExerciseTreeParents( List<ExerciseTree> getExerciseTreeParents(final List<ExerciseTree> exerciseTree, final List<ExerciseTreeParents> exerciseTreeParents) {
final List<ExerciseTree> exerciseTree,
final List<ExerciseTreeParents> exerciseTreeParents) {
List<ExerciseTree> copyList = ExerciseTreeApi().copyList(exerciseTree); List<ExerciseTree> copyList = ExerciseTreeApi().copyList(exerciseTree);
int treeIndex = 0; int treeIndex = 0;
@ -184,8 +158,7 @@ class PackageApi {
Future<void> getCustomerPackage(int customerId) async { Future<void> getCustomerPackage(int customerId) async {
try { try {
final body = await _client.get( final body = await _client.get("app_customer_package/" + customerId.toString(), "");
"app_customer_package/" + customerId.toString(), "");
final List<String> models = body.split("|||"); final List<String> models = body.split("|||");
await Future.forEach(models, (elem) async { await Future.forEach(models, (elem) async {
@ -197,33 +170,24 @@ class PackageApi {
Cache().userLoggedIn = customer; Cache().userLoggedIn = customer;
} else if (headRecord[0] == "CustomerExerciseDevice") { } else if (headRecord[0] == "CustomerExerciseDevice") {
final Iterable json = jsonDecode(headRecord[1]); final Iterable json = jsonDecode(headRecord[1]);
final List<CustomerExerciseDevice> devices = json final List<CustomerExerciseDevice> devices = json.map((device) => CustomerExerciseDevice.fromJson(device)).toList();
.map((device) => CustomerExerciseDevice.fromJson(device))
.toList();
Cache().setCustomerDevices(devices); Cache().setCustomerDevices(devices);
// ToDo // ToDo
} else if (headRecord[0] == "Exercises") { } else if (headRecord[0] == "Exercises") {
final Iterable json = jsonDecode(headRecord[1]); final Iterable json = jsonDecode(headRecord[1]);
final List<Exercise> exercises = json final List<Exercise> exercises = json.map((exerciseType) => Exercise.fromJson(exerciseType)).toList();
.map((exerciseType) => Exercise.fromJson(exerciseType))
.toList();
Cache().setExercises(exercises); Cache().setExercises(exercises);
} else if (headRecord[0] == "Purchase") { } else if (headRecord[0] == "Purchase") {
final Iterable json = jsonDecode(headRecord[1]); final Iterable json = jsonDecode(headRecord[1]);
final List<Purchase> purchases = final List<Purchase> purchases = json.map((purchase) => Purchase.fromJson(purchase)).toList();
json.map((purchase) => Purchase.fromJson(purchase)).toList();
Cache().setPurchases(purchases); Cache().setPurchases(purchases);
} else if (headRecord[0] == "CustomerProperty") { } else if (headRecord[0] == "CustomerProperty") {
final Iterable json = jsonDecode(headRecord[1]); final Iterable json = jsonDecode(headRecord[1]);
final List<CustomerProperty> customerProperties = json final List<CustomerProperty> customerProperties = json.map((property) => CustomerProperty.fromJson(property)).toList();
.map((property) => CustomerProperty.fromJson(property))
.toList();
CustomerApi().initProperties(customerProperties); CustomerApi().initProperties(customerProperties);
} else if (headRecord[0] == "CustomerPropertyAll") { } else if (headRecord[0] == "CustomerPropertyAll") {
final Iterable json = jsonDecode(headRecord[1]); final Iterable json = jsonDecode(headRecord[1]);
final List<CustomerProperty> allCustomerProperties = json final List<CustomerProperty> allCustomerProperties = json.map((property) => CustomerProperty.fromJson(property)).toList();
.map((property) => CustomerProperty.fromJson(property))
.toList();
print(" All Properties ---- $allCustomerProperties"); print(" All Properties ---- $allCustomerProperties");
Cache().setCustomerPropertyAll(allCustomerProperties); Cache().setCustomerPropertyAll(allCustomerProperties);
} else if (headRecord[0] == "ExerciseResult") { } else if (headRecord[0] == "ExerciseResult") {
@ -235,14 +199,12 @@ class PackageApi {
// ToDo */ // ToDo */
} else if (headRecord[0] == "CustomerActivity") { } else if (headRecord[0] == "CustomerActivity") {
final Iterable json = jsonDecode(headRecord[1]); final Iterable json = jsonDecode(headRecord[1]);
final List<CustomerActivity> customerActivities = json final List<CustomerActivity> customerActivities = json.map((activity) => CustomerActivity.fromJson(activity)).toList();
.map((activity) => CustomerActivity.fromJson(activity))
.toList();
Cache().setCustomerActivities(customerActivities); Cache().setCustomerActivities(customerActivities);
} }
}); });
} on NotFoundException catch (_) { } on NotFoundException catch (e) {
throw Exception("Please log in"); throw Exception("Please log in $e");
} }
} }
} }

View File

@ -9,6 +9,7 @@ import 'package:firebase_messaging/firebase_messaging.dart';
//import 'package:flurry_data/flurry_data.dart'; //import 'package:flurry_data/flurry_data.dart';
import 'package:flutter_uxcam/flutter_uxcam.dart'; import 'package:flutter_uxcam/flutter_uxcam.dart';
import 'package:flutter_smartlook/flutter_smartlook.dart'; import 'package:flutter_smartlook/flutter_smartlook.dart';
import 'package:matomo_tracker/matomo_tracker.dart';
class Track with Logging { class Track with Logging {
static final Track _singleton = Track._internal(); static final Track _singleton = Track._internal();
@ -37,6 +38,7 @@ 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(name: event.enumToString(), action: eventValue, eventValue: tracking.customerId);
} }
} }
} }

View File

@ -266,7 +266,7 @@ packages:
name: device_info_plus name: device_info_plus
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.2.2" version: "3.2.4"
device_info_plus_linux: device_info_plus_linux:
dependency: transitive dependency: transitive
description: description:
@ -280,7 +280,7 @@ packages:
name: device_info_plus_macos name: device_info_plus_macos
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.2.2" version: "2.2.3"
device_info_plus_platform_interface: device_info_plus_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -530,7 +530,7 @@ packages:
name: flutter_facebook_auth name: flutter_facebook_auth
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.3.4" version: "4.3.4+2"
flutter_facebook_auth_platform_interface: flutter_facebook_auth_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -647,7 +647,7 @@ packages:
name: flutter_smartlook name: flutter_smartlook
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.9" version: "3.0.10"
flutter_svg: flutter_svg:
dependency: transitive dependency: transitive
description: description:
@ -666,7 +666,7 @@ packages:
name: flutter_uxcam name: flutter_uxcam
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.1" version: "2.1.1"
flutter_web_plugins: flutter_web_plugins:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -706,7 +706,21 @@ packages:
name: google_sign_in name: google_sign_in
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "5.2.4" version: "5.3.3"
google_sign_in_android:
dependency: transitive
description:
name: google_sign_in_android
url: "https://pub.dartlang.org"
source: hosted
version: "5.2.8"
google_sign_in_ios:
dependency: transitive
description:
name: google_sign_in_ios
url: "https://pub.dartlang.org"
source: hosted
version: "5.3.1"
google_sign_in_platform_interface: google_sign_in_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -840,6 +854,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.1.3" version: "0.1.3"
matomo_tracker:
dependency: "direct main"
description:
name: matomo_tracker
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
meta: meta:
dependency: transitive dependency: transitive
description: description:
@ -923,14 +944,14 @@ packages:
name: package_info_plus name: package_info_plus
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.4.0" version: "1.4.2"
package_info_plus_linux: package_info_plus_linux:
dependency: transitive dependency: transitive
description: description:
name: package_info_plus_linux name: package_info_plus_linux
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.3" version: "1.0.5"
package_info_plus_macos: package_info_plus_macos:
dependency: transitive dependency: transitive
description: description:
@ -951,14 +972,14 @@ packages:
name: package_info_plus_web name: package_info_plus_web
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.4" version: "1.0.5"
package_info_plus_windows: package_info_plus_windows:
dependency: transitive dependency: transitive
description: description:
name: package_info_plus_windows name: package_info_plus_windows
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.4" version: "1.0.5"
path: path:
dependency: transitive dependency: transitive
description: description:
@ -1161,7 +1182,7 @@ packages:
name: shared_preferences name: shared_preferences
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.13" version: "2.0.15"
shared_preferences_android: shared_preferences_android:
dependency: transitive dependency: transitive
description: description:
@ -1245,7 +1266,7 @@ packages:
name: sign_in_with_apple name: sign_in_with_apple
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.3.0" version: "4.0.0"
sign_in_with_apple_platform_interface: sign_in_with_apple_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -1482,6 +1503,13 @@ 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:

View File

@ -74,13 +74,14 @@ dependencies:
syncfusion_flutter_calendar: ^20.1.47 syncfusion_flutter_calendar: ^20.1.47
syncfusion_localizations: ^20.1.47 syncfusion_localizations: ^20.1.47
flutter_facebook_auth: ^4.1.2 flutter_facebook_auth: ^4.3.4+2
google_sign_in: ^5.2.4 google_sign_in: ^5.3.3
sign_in_with_apple: ^3.3.0 sign_in_with_apple: ^4.0.0
flutter_smartlook: ^3.0.9 flutter_smartlook: ^3.0.10
#flurry_data: ^0.0.1 #flurry_data: ^0.0.1
flutter_uxcam: ^2.0.1 matomo_tracker: ^1.1.2
flutter_uxcam: ^2.1.1
animated_widgets: ^1.0.6 animated_widgets: ^1.0.6
flutter_fancy_tree_view: ^0.5.1+1 flutter_fancy_tree_view: ^0.5.1+1