v1.26.3
This commit is contained in:
parent
fb01016494
commit
b5e387ee2a
@ -5,18 +5,10 @@
|
||||
additional functionality it is fine to subclass or reimplement
|
||||
FlutterApplication and put your custom class here. -->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<application
|
||||
android:name="${applicationName}"
|
||||
android:label="WorkoutTest"
|
||||
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">
|
||||
<application android:name="${applicationName}" android:label="WorkoutTest" android:icon="@mipmap/launcher_icon">
|
||||
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" />
|
||||
<meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
|
||||
<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
|
||||
the Android process has started. This theme is visible to the user
|
||||
while the Flutter UI initializes. After that, this theme continues
|
||||
@ -65,4 +57,7 @@
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
<queries>
|
||||
<provider android:authorities="com.facebook.katana.provider.PlatformProvider" />
|
||||
</queries>
|
||||
</manifest>
|
@ -4,6 +4,7 @@
|
||||
|
||||
<!-- Replace "000000000000" with your Facebook App ID here. -->
|
||||
<string name="facebook_app_id">584181112271127</string>
|
||||
<string name="facebook_client_token">60d565f451ce32de3d7eeb26274bbddd</string>
|
||||
|
||||
<!--
|
||||
Replace "000000000000" with your Facebook App ID here.
|
||||
|
@ -161,7 +161,7 @@ class SalesBloc extends Bloc<SalesEvent, SalesState> 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);
|
||||
|
@ -56,6 +56,7 @@ import 'package:flutter_localizations/flutter_localizations.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:matomo_tracker/matomo_tracker.dart';
|
||||
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||
import 'package:flutter_smartlook/flutter_smartlook.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 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,6 +148,11 @@ Future<Null> main() async {
|
||||
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();
|
||||
@ -194,7 +201,8 @@ Future<Null> main() async {
|
||||
BlocProvider<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) {
|
||||
final MenuBloc menuBloc = BlocProvider.of<MenuBloc>(context);
|
||||
return TrainingPlanBloc(menuBloc: menuBloc, trainingPlanRepository: TrainingPlanRepository());
|
||||
|
@ -35,6 +35,7 @@ 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: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';
|
||||
@ -544,7 +545,8 @@ class Cache with Logging {
|
||||
|
||||
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;
|
||||
|
||||
@ -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,7 +689,11 @@ class Cache with Logging {
|
||||
|
||||
Future<void> initCustomer(int customerId) async {
|
||||
log(" *** initCustomer");
|
||||
try {
|
||||
await PackageApi().getCustomerPackage(customerId);
|
||||
} on Exception catch (_) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isInDebugMode) {
|
||||
//FlurryData.setUserId(customerId.toString());
|
||||
@ -694,6 +701,8 @@ class Cache with Logging {
|
||||
FlutterUxcam.setUserIdentity(customerId.toString());
|
||||
Smartlook.setUserIdentifier(customerId.toString());
|
||||
Track().track(TrackingEvent.enter);
|
||||
MatomoTracker.instance
|
||||
.trackEvent(name: TrackingEvent.enter.enumToString(), action: TrackingEvent.enter.enumToString(), eventValue: customerId);
|
||||
}
|
||||
|
||||
await Future.forEach(ActivityDone.values, (element) async {
|
||||
|
@ -44,62 +44,44 @@ class PackageApi {
|
||||
final List<String> headRecord = element.split("***");
|
||||
final Iterable json = jsonDecode(headRecord[1]);
|
||||
if (headRecord[0] == "ExerciseDevice") {
|
||||
final List<ExerciseDevice> devices =
|
||||
json.map((device) => ExerciseDevice.fromJson(device)).toList();
|
||||
final List<ExerciseDevice> devices = json.map((device) => ExerciseDevice.fromJson(device)).toList();
|
||||
Cache().setDevices(devices);
|
||||
} else if (headRecord[0] == "Product") {
|
||||
final List<Product> products =
|
||||
json.map((product) => Product.fromJson(product)).toList();
|
||||
final List<Product> products = json.map((product) => Product.fromJson(product)).toList();
|
||||
Cache().setProducts(products);
|
||||
} else if (headRecord[0] == "Property") {
|
||||
final List<Property> properties =
|
||||
json.map((property) => Property.fromJson(property)).toList();
|
||||
final List<Property> 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<ExerciseType> exerciseTypes = json
|
||||
.map((exerciseType) => ExerciseType.fromJson(exerciseType))
|
||||
.toList();
|
||||
final List<ExerciseType> 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<ExercisePlanTemplate> exercisePlanTemplates = json
|
||||
.map((exercisePlanTemplate) =>
|
||||
ExercisePlanTemplate.fromJson(exercisePlanTemplate))
|
||||
.toList();
|
||||
final List<ExercisePlanTemplate> 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<Evaluation> evaluations =
|
||||
json.map((evaluation) => Evaluation.fromJson(evaluation)).toList();
|
||||
final List<Evaluation> evaluations = json.map((evaluation) => Evaluation.fromJson(evaluation)).toList();
|
||||
Cache().evaluations = evaluations;
|
||||
} else if (headRecord[0] == "Sport") {
|
||||
final List<Sport> sports =
|
||||
json.map((sport) => Sport.fromJson(sport)).toList();
|
||||
final List<Sport> sports = json.map((sport) => Sport.fromJson(sport)).toList();
|
||||
Cache().setSports(sports);
|
||||
} else if (headRecord[0] == "Tutorial") {
|
||||
final Iterable json = jsonDecode(headRecord[1]);
|
||||
final List<Tutorial> tutorials =
|
||||
json.map((tutorial) => Tutorial.fromJson(tutorial)).toList();
|
||||
final List<Tutorial> tutorials = json.map((tutorial) => Tutorial.fromJson(tutorial)).toList();
|
||||
|
||||
Cache().setTutorials(tutorials);
|
||||
} else if (headRecord[0] == "Description") {
|
||||
final Iterable json = jsonDecode(headRecord[1]);
|
||||
final List<Description>? descriptions = json
|
||||
.map((description) => Description.fromJson(description))
|
||||
.toList();
|
||||
final List<Description>? 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<TrainingPlan>? plans =
|
||||
json.map((plan) => TrainingPlan.fromJson(plan)).toList();
|
||||
final List<TrainingPlan>? plans = json.map((plan) => TrainingPlan.fromJson(plan)).toList();
|
||||
|
||||
List<TrainingPlan> 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<SplitTest>? tests =
|
||||
json.map((test) => SplitTest.fromJson(test)).toList();
|
||||
final List<SplitTest>? 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<TrainingPlanDay>? days =
|
||||
json.map((day) => TrainingPlanDay.fromJson(day)).toList();
|
||||
final List<TrainingPlanDay>? 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<ExerciseTree> getExerciseTreeParents(
|
||||
final List<ExerciseTree> exerciseTree,
|
||||
final List<ExerciseTreeParents> exerciseTreeParents) {
|
||||
List<ExerciseTree> getExerciseTreeParents(final List<ExerciseTree> exerciseTree, final List<ExerciseTreeParents> exerciseTreeParents) {
|
||||
List<ExerciseTree> copyList = ExerciseTreeApi().copyList(exerciseTree);
|
||||
|
||||
int treeIndex = 0;
|
||||
@ -184,8 +158,7 @@ class PackageApi {
|
||||
|
||||
Future<void> 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<String> 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<CustomerExerciseDevice> devices = json
|
||||
.map((device) => CustomerExerciseDevice.fromJson(device))
|
||||
.toList();
|
||||
final List<CustomerExerciseDevice> 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<Exercise> exercises = json
|
||||
.map((exerciseType) => Exercise.fromJson(exerciseType))
|
||||
.toList();
|
||||
final List<Exercise> exercises = json.map((exerciseType) => Exercise.fromJson(exerciseType)).toList();
|
||||
Cache().setExercises(exercises);
|
||||
} else if (headRecord[0] == "Purchase") {
|
||||
final Iterable json = jsonDecode(headRecord[1]);
|
||||
final List<Purchase> purchases =
|
||||
json.map((purchase) => Purchase.fromJson(purchase)).toList();
|
||||
final List<Purchase> purchases = json.map((purchase) => Purchase.fromJson(purchase)).toList();
|
||||
Cache().setPurchases(purchases);
|
||||
} else if (headRecord[0] == "CustomerProperty") {
|
||||
final Iterable json = jsonDecode(headRecord[1]);
|
||||
final List<CustomerProperty> customerProperties = json
|
||||
.map((property) => CustomerProperty.fromJson(property))
|
||||
.toList();
|
||||
final List<CustomerProperty> customerProperties = json.map((property) => CustomerProperty.fromJson(property)).toList();
|
||||
CustomerApi().initProperties(customerProperties);
|
||||
} else if (headRecord[0] == "CustomerPropertyAll") {
|
||||
final Iterable json = jsonDecode(headRecord[1]);
|
||||
final List<CustomerProperty> allCustomerProperties = json
|
||||
.map((property) => CustomerProperty.fromJson(property))
|
||||
.toList();
|
||||
final List<CustomerProperty> 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<CustomerActivity> customerActivities = json
|
||||
.map((activity) => CustomerActivity.fromJson(activity))
|
||||
.toList();
|
||||
final List<CustomerActivity> 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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ 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:matomo_tracker/matomo_tracker.dart';
|
||||
|
||||
class Track with Logging {
|
||||
static final Track _singleton = Track._internal();
|
||||
@ -37,6 +38,7 @@ class Track with Logging {
|
||||
|
||||
FirebaseMessaging.instance.subscribeToTopic(event.enumToString());
|
||||
analytics.logEvent(name: event.enumToString(), parameters: {"value": eventValue});
|
||||
MatomoTracker.instance.trackEvent(name: event.enumToString(), action: eventValue, eventValue: tracking.customerId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
52
pubspec.lock
52
pubspec.lock
@ -266,7 +266,7 @@ packages:
|
||||
name: device_info_plus
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.2.2"
|
||||
version: "3.2.4"
|
||||
device_info_plus_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -280,7 +280,7 @@ packages:
|
||||
name: device_info_plus_macos
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.2.2"
|
||||
version: "2.2.3"
|
||||
device_info_plus_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -530,7 +530,7 @@ packages:
|
||||
name: flutter_facebook_auth
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "4.3.4"
|
||||
version: "4.3.4+2"
|
||||
flutter_facebook_auth_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -647,7 +647,7 @@ packages:
|
||||
name: flutter_smartlook
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.9"
|
||||
version: "3.0.10"
|
||||
flutter_svg:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -666,7 +666,7 @@ packages:
|
||||
name: flutter_uxcam
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
version: "2.1.1"
|
||||
flutter_web_plugins:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
@ -706,7 +706,21 @@ packages:
|
||||
name: google_sign_in
|
||||
url: "https://pub.dartlang.org"
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -840,6 +854,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -923,14 +944,14 @@ packages:
|
||||
name: package_info_plus
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.4.0"
|
||||
version: "1.4.2"
|
||||
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,14 +972,14 @@ 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: "1.0.5"
|
||||
path:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1161,7 +1182,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 +1266,7 @@ packages:
|
||||
name: sign_in_with_apple
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.3.0"
|
||||
version: "4.0.0"
|
||||
sign_in_with_apple_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1482,6 +1503,13 @@ 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:
|
||||
|
11
pubspec.yaml
11
pubspec.yaml
@ -74,13 +74,14 @@ dependencies:
|
||||
syncfusion_flutter_calendar: ^20.1.47
|
||||
syncfusion_localizations: ^20.1.47
|
||||
|
||||
flutter_facebook_auth: ^4.1.2
|
||||
google_sign_in: ^5.2.4
|
||||
sign_in_with_apple: ^3.3.0
|
||||
flutter_facebook_auth: ^4.3.4+2
|
||||
google_sign_in: ^5.3.3
|
||||
sign_in_with_apple: ^4.0.0
|
||||
|
||||
flutter_smartlook: ^3.0.9
|
||||
flutter_smartlook: ^3.0.10
|
||||
#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
|
||||
flutter_fancy_tree_view: ^0.5.1+1
|
||||
|
Loading…
Reference in New Issue
Block a user