list = [];
- if (bloc.alternatives[detail.customerTrainingPlanDetailsId] != null && bloc.alternatives[detail.customerTrainingPlanDetailsId].length > 0) {
+ if (bloc.alternatives[detail.customerTrainingPlanDetailsId] != null &&
+ bloc.alternatives[detail.customerTrainingPlanDetailsId].length > 0) {
int index = 0;
for (CustomerTrainingPlanDetails alternative in bloc.alternatives[detail.customerTrainingPlanDetailsId]) {
final Widget widget = getTile(alternative, index);
@@ -563,7 +565,8 @@ class ExerciseTile extends StatelessWidget with Trans {
final int step = bloc.getStep(detail);
final int highlightStep = bloc.getHighlightStep(detail);
final bool hasLeftAlternative = detail.alternatives.length > 0 && index > 0;
- final bool hasRightAlternative = detail.alternatives.length > 0 && index + 1 < bloc.alternatives[detail.customerTrainingPlanDetailsId].length;
+ final bool hasRightAlternative =
+ detail.alternatives.length > 0 && index + 1 < bloc.alternatives[detail.customerTrainingPlanDetailsId].length;
return Container(
child: Stack(alignment: Alignment.centerRight, children: [
@@ -598,7 +601,8 @@ class ExerciseTile extends StatelessWidget with Trans {
context: context,
builder: (BuildContext context) {
return DialogHTML(
- title: detail.exerciseType!.nameTranslation, htmlData: '' + detail.exerciseType!.descriptionTranslation + '
');
+ title: detail.exerciseType!.nameTranslation,
+ htmlData: '' + detail.exerciseType!.descriptionTranslation + '
');
}),
icon: Icon(
Icons.info_outline,
diff --git a/lib/widgets/bottom_bar_multiple_exercises.dart b/lib/widgets/bottom_bar_multiple_exercises.dart
index 184bbbf..f039cad 100644
--- a/lib/widgets/bottom_bar_multiple_exercises.dart
+++ b/lib/widgets/bottom_bar_multiple_exercises.dart
@@ -38,7 +38,7 @@ class _BottomBarMultipleExercisesState extends State
@override
void initState() {
super.initState();
- SchedulerBinding.instance!.addPostFrameCallback((_) {
+ SchedulerBinding.instance.addPostFrameCallback((_) {
_controller = ScrollController();
});
}
diff --git a/lib/widgets/exercise_save.dart b/lib/widgets/exercise_save.dart
index a9cb648..608ac25 100644
--- a/lib/widgets/exercise_save.dart
+++ b/lib/widgets/exercise_save.dart
@@ -209,12 +209,12 @@ class _ExerciseSaveState extends State with Trans {
});
}
- SchedulerBinding.instance!.addPostFrameCallback((_) {
+ SchedulerBinding.instance.addPostFrameCallback((_) {
subscription = stream.listen((event) {
//_controller1.text = ExerciseSaveStream().weight.toStringAsFixed(0);
_controller2.text = ExerciseSaveStream().repeats.toStringAsFixed(0);
});
- print("ExerciseSave weight ${widget.weight}");
+ //print("ExerciseSave weight ${widget.weight}");
_controller1.text = widget.weight == null || widget.weight == -1
? "TEST"
: widget.weight! % widget.weight!.round() == 0
@@ -633,7 +633,8 @@ class _ExerciseSaveState extends State with Trans {
padding: const EdgeInsets.all(2),
color: Colors.white70,
onPressed: () async {
- stopWatchTimer.onExecute.add(StopWatchExecute.start);
+ //stopWatchTimer.onExecute.add(StopWatchExecute.start);
+ stopWatchTimer.onStartTimer();
Wakelock.enable(); // prevent sleep the phone
},
icon: Icon(CustomIcon.play_1),
@@ -647,7 +648,8 @@ class _ExerciseSaveState extends State with Trans {
iconSize: 40,
color: Colors.white70,
onPressed: () async {
- stopWatchTimer.onExecute.add(StopWatchExecute.stop);
+ //stopWatchTimer.onExecute.add(StopWatchExecute.stop);
+ stopWatchTimer.onStartTimer();
Wakelock.disable();
},
icon: Icon(CustomIcon.stop),
@@ -660,7 +662,8 @@ class _ExerciseSaveState extends State with Trans {
iconSize: 40,
color: Colors.white70,
onPressed: () async {
- stopWatchTimer.onExecute.add(StopWatchExecute.reset);
+ //stopWatchTimer.onExecute.add(StopWatchExecute.reset);
+ stopWatchTimer.onResetTimer();
},
icon: Icon(CustomIcon.creative_commons_zero),
),
diff --git a/lib/widgets/home.dart b/lib/widgets/home.dart
index f24cb66..d20b421 100644
--- a/lib/widgets/home.dart
+++ b/lib/widgets/home.dart
@@ -2,7 +2,6 @@ import 'package:aitrainer_app/bloc/session/session_bloc.dart';
import 'package:aitrainer_app/bloc/settings/settings_bloc.dart';
import 'package:aitrainer_app/model/cache.dart';
import 'package:aitrainer_app/service/logging.dart';
-import 'package:aitrainer_app/util/app_language.dart';
import 'package:aitrainer_app/util/trans.dart';
import 'package:aitrainer_app/view/customer_goal_page.dart';
import 'package:aitrainer_app/view/login.dart';
@@ -12,6 +11,7 @@ import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:matomo_tracker/matomo_tracker.dart';
import 'package:upgrader/upgrader.dart';
import 'loading.dart';
@@ -25,15 +25,21 @@ class AitrainerHome extends StatefulWidget {
}
}
-class _HomePageState extends State with Logging, Trans {
+class _HomePageState extends State with Logging, Trans, TraceableClientMixin {
GlobalKey _scaffoldKey = new GlobalKey();
+ @override
+ String get traceName => 'Home';
+
+ @override
+ String get traceTitle => this.widget.toString();
+
@override
void initState() {
super.initState();
/// We require the initializers to run after the loading screen is rendered
- SchedulerBinding.instance!.addPostFrameCallback((_) {
+ SchedulerBinding.instance.addPostFrameCallback((_) {
runDelayedEvent();
});
@@ -70,7 +76,7 @@ class _HomePageState extends State with Logging, Trans {
return Scaffold(
key: _scaffoldKey,
body: UpgradeAlert(
- upgrader: Upgrader(appcastConfig: cfg, messages: MyLocalizedUpgraderMessages(context: context)),
+ upgrader: Upgrader(appcastConfig: cfg, messages: MyLocalizedUpgraderMessages(context: context)),
child: BlocConsumer(listener: (context, state) {
if (state is SessionFailure) {
showDialog(
diff --git a/lib/widgets/input_dialog_widget.dart b/lib/widgets/input_dialog_widget.dart
index 2ed210a..95dfd25 100644
--- a/lib/widgets/input_dialog_widget.dart
+++ b/lib/widgets/input_dialog_widget.dart
@@ -174,8 +174,8 @@ class _InputDialogState extends State> with Trans {
children: [
ElevatedButton(
style: ElevatedButton.styleFrom(
- primary: Colors.black26,
- onSurface: Colors.white,
+ backgroundColor: Colors.black26,
+ disabledBackgroundColor: Colors.white,
),
onPressed: () {
Navigator.of(context).pop();
@@ -187,8 +187,8 @@ class _InputDialogState extends State> with Trans {
),
ElevatedButton(
style: ElevatedButton.styleFrom(
- primary: Colors.orange[600],
- onSurface: Colors.white,
+ backgroundColor: Colors.orange[600],
+ disabledForegroundColor: Colors.white,
),
onPressed: () {
widget.onChanged(this.inputValue);
diff --git a/lib/widgets/menu_page_widget.dart b/lib/widgets/menu_page_widget.dart
index 0dde78a..c96cb2f 100644
--- a/lib/widgets/menu_page_widget.dart
+++ b/lib/widgets/menu_page_widget.dart
@@ -5,7 +5,6 @@ import 'package:aitrainer_app/bloc/menu/menu_bloc.dart';
import 'package:aitrainer_app/repository/training_plan_repository.dart';
import 'package:aitrainer_app/util/enums.dart';
import 'package:aitrainer_app/util/track.dart';
-import 'package:aitrainer_app/widgets/dialog_trial.dart';
import 'package:aitrainer_app/widgets/menu_image.dart';
import 'package:aitrainer_app/widgets/menu_search_bar.dart';
import 'package:aitrainer_app/util/app_language.dart';
@@ -55,7 +54,7 @@ class _MenuPageWidgetState extends State with Trans, Logging {
}
/// We require the initializers to run after the loading screen is rendered
- SchedulerBinding.instance!.addPostFrameCallback((_) {
+ SchedulerBinding.instance.addPostFrameCallback((_) {
menuBloc.add(MenuCreate());
});
@@ -112,7 +111,9 @@ class _MenuPageWidgetState extends State with Trans, Logging {
return Stack(children: [
CustomScrollView(
- controller: scrollController, scrollDirection: Axis.vertical, slivers: buildMenuColumn(widget.parent!, context, menuBloc, cWidth, cHeight)),
+ controller: scrollController,
+ scrollDirection: Axis.vertical,
+ slivers: buildMenuColumn(widget.parent!, context, menuBloc, cWidth, cHeight)),
]);
}
@@ -134,7 +135,8 @@ class _MenuPageWidgetState extends State with Trans, Logging {
padding: EdgeInsets.only(top: 15.0),
child: Center(
child: Stack(alignment: Alignment.bottomLeft, children: [
- Text(AppLocalizations.of(context)!.translate("All Exercises has been filtered out"), style: GoogleFonts.inter(color: Colors.white)),
+ Text(AppLocalizations.of(context)!.translate("All Exercises has been filtered out"),
+ style: GoogleFonts.inter(color: Colors.white)),
]))));
} else {
menuBloc.getFilteredBranch(menuBloc.parent).forEach((treeName, value) {
@@ -395,8 +397,10 @@ class _MenuPageWidgetState extends State with Trans, Logging {
dynamic getShape(WorkoutMenuTree workoutTree) {
bool base = workoutTree.base;
dynamic returnCode = (base == true)
- ? RoundedRectangleBorder(side: BorderSide(width: 6, color: Colors.orangeAccent), borderRadius: BorderRadius.all(Radius.circular(24.0)))
- : RoundedRectangleBorder(side: BorderSide(width: 1, color: Colors.transparent), borderRadius: BorderRadius.all(Radius.circular(8.0)));
+ ? RoundedRectangleBorder(
+ side: BorderSide(width: 6, color: Colors.orangeAccent), borderRadius: BorderRadius.all(Radius.circular(24.0)))
+ : RoundedRectangleBorder(
+ side: BorderSide(width: 1, color: Colors.transparent), borderRadius: BorderRadius.all(Radius.circular(8.0)));
return returnCode;
}
diff --git a/lib/widgets/tutorial_widget.dart b/lib/widgets/tutorial_widget.dart
index 7fa08ec..3e4557e 100644
--- a/lib/widgets/tutorial_widget.dart
+++ b/lib/widgets/tutorial_widget.dart
@@ -178,7 +178,7 @@ class TutorialWidget with Trans, Logging {
children: [
ElevatedButton(
style: ElevatedButton.styleFrom(
- primary: Colors.transparent,
+ backgroundColor: Colors.transparent,
),
onPressed: () => {bloc.add(TutorialNext(text: bloc.checks[0]))},
child: Text("« " + t(bloc.checks[0]),
@@ -186,7 +186,7 @@ class TutorialWidget with Trans, Logging {
),
ElevatedButton(
style: ElevatedButton.styleFrom(
- primary: Colors.transparent,
+ backgroundColor: Colors.transparent,
),
onPressed: () => {bloc.add(TutorialNext(text: bloc.checks[1]))},
child: Text(t(bloc.checks[1]) + " »",
@@ -196,7 +196,7 @@ class TutorialWidget with Trans, Logging {
)
: ElevatedButton(
style: ElevatedButton.styleFrom(
- primary: Colors.transparent,
+ backgroundColor: Colors.transparent,
),
onPressed: () => {
//tooltip!.rebuild(context),
diff --git a/lib/widgets/victory_widget.dart b/lib/widgets/victory_widget.dart
index 8f002e1..bc6e7b9 100644
--- a/lib/widgets/victory_widget.dart
+++ b/lib/widgets/victory_widget.dart
@@ -16,7 +16,7 @@ class _VictoryConfettiState extends State {
@override
void initState() {
_controllerBottomCenter = ConfettiController(duration: const Duration(seconds: 2));
- SchedulerBinding.instance!.addPostFrameCallback((_) {
+ SchedulerBinding.instance.addPostFrameCallback((_) {
Future.delayed(Duration(milliseconds: 500)).then((value) => _controllerBottomCenter.play());
});
super.initState();
diff --git a/pubspec.lock b/pubspec.lock
index 0d9ae12..31c934d 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -867,7 +867,7 @@ packages:
name: matomo_tracker
url: "https://pub.dartlang.org"
source: hosted
- version: "1.5.0"
+ version: "1.6.0"
meta:
dependency: transitive
description:
@@ -1092,6 +1092,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.0"
+ posthog_flutter:
+ dependency: "direct main"
+ description:
+ name: posthog_flutter
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.0.3"
process:
dependency: transitive
description:
@@ -1321,20 +1328,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.9.0"
- sqflite:
- dependency: "direct main"
- description:
- name: sqflite
- url: "https://pub.dartlang.org"
- source: hosted
- version: "2.1.0+1"
- sqflite_common:
- dependency: transitive
- description:
- name: sqflite_common
- url: "https://pub.dartlang.org"
- source: hosted
- version: "2.3.0"
stack_trace:
dependency: transitive
description:
@@ -1426,13 +1419,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "20.3.50"
- synchronized:
- dependency: transitive
- description:
- name: synchronized
- url: "https://pub.dartlang.org"
- source: hosted
- version: "3.0.0+2"
term_glyph:
dependency: transitive
description:
@@ -1517,27 +1503,20 @@ 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: "4.8.1"
+ version: "4.10.0"
url_launcher:
dependency: "direct main"
description:
name: url_launcher
url: "https://pub.dartlang.org"
source: hosted
- version: "6.1.6"
+ version: "6.1.5"
url_launcher_android:
dependency: transitive
description:
@@ -1784,5 +1763,5 @@ packages:
source: hosted
version: "3.1.0"
sdks:
- dart: ">=2.18.0-0 <3.0.0"
- flutter: ">=3.3.0-0"
+ dart: ">=2.17.0 <3.0.0"
+ flutter: ">=3.0.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index c6220bb..272711a 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -67,19 +67,20 @@ dependencies:
keyboard_actions: ^3.4.0
mailto: ^2.0.0
- matomo_tracker: ^1.5.0
+ matomo_tracker: ^1.6.0
mockito: ^5.3.2
modal_progress_hud_nsn: ^0.3.0
package_info: ^2.0.2
percent_indicator: ^4.0.0
+ posthog_flutter: ^2.0.3
purchases_flutter: ^3.9.5
rainbow_color: ^2.0.1
- sentry_flutter: ^6.13.0
+ sentry_flutter: ^6.9.1
sign_in_with_apple: ^4.1.0
- sqflite: ^2.1.0+1
+ #sqflite: ^2.1.0+1
stop_watch_timer: ^2.0.0
syncfusion_flutter_gauges: ^20.3.50
@@ -91,7 +92,7 @@ dependencies:
timeline_tile: ^2.0.0
toggle_switch: ^2.0.1
- upgrader: ^4.8.1
+ upgrader: ^4.10.0
url_launcher: ^6.0.9
wakelock: ^0.6.2
diff --git a/test/exercise_plan_repository_test.dart b/test/exercise_plan_repository_test.dart
index bf5f0f2..57d1638 100644
--- a/test/exercise_plan_repository_test.dart
+++ b/test/exercise_plan_repository_test.dart
@@ -1,10 +1,10 @@
-import 'package:aitrainer_app/model/cache.dart';
+/*import 'package:aitrainer_app/model/cache.dart';
import 'package:aitrainer_app/model/exercise_plan.dart';
import 'package:aitrainer_app/model/exercise_plan_detail.dart';
import 'package:aitrainer_app/model/model_change.dart';
import 'package:test/test.dart';
-import 'mocks.dart';
-
+import 'mocks.dart';*/
+/*
main() {
late SimExercisePlanRepository _exercisePlanRepository;
late int _customerId;
@@ -141,3 +141,5 @@ main() {
});
});
}
+
+*/
\ No newline at end of file
diff --git a/test/widget_test.db.dart b/test/widget_test.db.dart
index d9c2e2c..b9c5ad8 100644
--- a/test/widget_test.db.dart
+++ b/test/widget_test.db.dart
@@ -17,10 +17,11 @@ import 'package:bloc_test/bloc_test.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; */
-import 'package:aitrainer_app/helper/database.dart';
-import 'package:flutter_test/flutter_test.dart';
+//import 'package:aitrainer_app/helper/database.dart';
+//import 'package:flutter_test/flutter_test.dart';
//import 'package:mockito/mockito.dart';
+/*
void main() {
group('SQFLite', () {
setUp(() async {
@@ -39,3 +40,4 @@ void main() {
});
});
}
+*/
\ No newline at end of file
diff --git a/test/widget_test.login.dart b/test/widget_test.login.dart
index 3689722..3a1ddd0 100644
--- a/test/widget_test.login.dart
+++ b/test/widget_test.login.dart
@@ -6,7 +6,7 @@
// tree, read text, and verify that the values of widget properties are correct.
//import 'package:aitrainer_app/bloc/login_form_bloc.dart';
-import 'package:aitrainer_app/helper/database.dart';
+//import 'package:aitrainer_app/helper/database.dart';
import 'package:aitrainer_app/library_keys.dart';
import 'package:aitrainer_app/util/app_localization.dart';
import 'package:aitrainer_app/model/user.dart';
@@ -52,7 +52,7 @@ void main() {
late MockCommon common;
setUp(() async {
- await DB().initDb();
+ //await DB().initDb();
common = MockCommon();
loginWidget = MaterialApp(home: LoginPage(), localizationsDelegates: [
diff --git a/test_driver/service/customer_service.dart b/test_driver/service/customer_service.dart
index b454397..c753ec7 100644
--- a/test_driver/service/customer_service.dart
+++ b/test_driver/service/customer_service.dart
@@ -1,9 +1,10 @@
-import 'package:aitrainer_app/model/customer.dart';
-import '../../lib/helper/database.dart';
-
+//import 'package:aitrainer_app/model/customer.dart';
+//import '../../lib/helper/database.dart';
+/*
class CustomerApi {
Future addCustomer(Customer customer) async {
//print(" ===== add new customer: " + customer.toSQL().toString();
await DB().getDB().insert("customer", customer.toJson());
}
}
+*/
\ No newline at end of file