WT 1.1.14 tutorial positions fix, uxcam settings
This commit is contained in:
parent
3137bc2330
commit
cd0687a529
@ -474,7 +474,7 @@
|
|||||||
"The app functionalitity will be restricted, but please take a tour!":"The app functionalitity will be restricted, but please take a tour!",
|
"The app functionalitity will be restricted, but please take a tour!":"The app functionalitity will be restricted, but please take a tour!",
|
||||||
|
|
||||||
"Activating the basic tutorial":"Activating the basic tutorial",
|
"Activating the basic tutorial":"Activating the basic tutorial",
|
||||||
"Basic Tutorial":"Basic Tutorial",
|
"Basic Tutorial":"Tutorial",
|
||||||
"Activate":"Activate",
|
"Activate":"Activate",
|
||||||
|
|
||||||
"Try free for 3 days!":"Try it without risk for 3 days! In this period you can cancel any time without lasting your account.",
|
"Try free for 3 days!":"Try it without risk for 3 days! In this period you can cancel any time without lasting your account.",
|
||||||
|
@ -466,8 +466,8 @@
|
|||||||
"The app functionalitity will be restricted, but please take a tour!":"Az applikációt korlátozottan tudod így használni, de tégy egy túrát!",
|
"The app functionalitity will be restricted, but please take a tour!":"Az applikációt korlátozottan tudod így használni, de tégy egy túrát!",
|
||||||
|
|
||||||
"Activating the basic tutorial":"Bemutató aktiválása",
|
"Activating the basic tutorial":"Bemutató aktiválása",
|
||||||
"Basic Tutorial":"Alap bemutató",
|
"Basic Tutorial":"Tutorial",
|
||||||
"Activate":"Aktivál",
|
"Activate":"Aktiválás",
|
||||||
|
|
||||||
"Try free for 3 days!":"Próbáld ki kockázat nélkül 3 napig! Ebben az időszakban bármikor lemondhatod, anélkül, hogy megterhelnénk a számládat.",
|
"Try free for 3 days!":"Próbáld ki kockázat nélkül 3 napig! Ebben az időszakban bármikor lemondhatod, anélkül, hogy megterhelnénk a számládat.",
|
||||||
"View other alternatives":"Megnézek egy másik lehetőséget"
|
"View other alternatives":"Megnézek egy másik lehetőséget"
|
||||||
|
@ -388,7 +388,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 4;
|
CURRENT_PROJECT_VERSION = 5;
|
||||||
DEVELOPMENT_TEAM = SFJJBDCU6Z;
|
DEVELOPMENT_TEAM = SFJJBDCU6Z;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
@ -531,7 +531,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 4;
|
CURRENT_PROJECT_VERSION = 5;
|
||||||
DEVELOPMENT_TEAM = SFJJBDCU6Z;
|
DEVELOPMENT_TEAM = SFJJBDCU6Z;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
@ -566,7 +566,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CURRENT_PROJECT_VERSION = 4;
|
CURRENT_PROJECT_VERSION = 5;
|
||||||
DEVELOPMENT_TEAM = SFJJBDCU6Z;
|
DEVELOPMENT_TEAM = SFJJBDCU6Z;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
FRAMEWORK_SEARCH_PATHS = (
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
@ -12,7 +12,7 @@ part 'tutorial_state.dart';
|
|||||||
|
|
||||||
class TutorialBloc extends Bloc<TutorialEvent, TutorialState> with Logging {
|
class TutorialBloc extends Bloc<TutorialEvent, TutorialState> with Logging {
|
||||||
late String tutorialName;
|
late String tutorialName;
|
||||||
final double mediaHeightBase = 390;
|
final double mediaHeightBase = 675;
|
||||||
bool isActive = false;
|
bool isActive = false;
|
||||||
bool canActivate = false;
|
bool canActivate = false;
|
||||||
|
|
||||||
@ -78,8 +78,6 @@ class TutorialBloc extends Bloc<TutorialEvent, TutorialState> with Logging {
|
|||||||
this.showCheckText = action!.showCheckText == true;
|
this.showCheckText = action!.showCheckText == true;
|
||||||
this.parent = action!.parent;
|
this.parent = action!.parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
calculateHeight();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,17 +108,6 @@ class TutorialBloc extends Bloc<TutorialEvent, TutorialState> with Logging {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void calculateHeight() {
|
|
||||||
int count = getElementCount('<p>');
|
|
||||||
count += getElementCount('<br/>');
|
|
||||||
double lines = (actualText!.length / 32 + count);
|
|
||||||
if (lines < 5) {
|
|
||||||
lines = lines + 2;
|
|
||||||
}
|
|
||||||
calculatedHeight = lines * 15;
|
|
||||||
print("Calculated Height: $calculatedHeight length: ${actualText!.length} lines: $lines count: $count");
|
|
||||||
}
|
|
||||||
|
|
||||||
int getElementCount(String elem) {
|
int getElementCount(String elem) {
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
@ -180,7 +167,6 @@ class TutorialBloc extends Bloc<TutorialEvent, TutorialState> with Logging {
|
|||||||
print("Step: $step");
|
print("Step: $step");
|
||||||
setNextStepData(step);
|
setNextStepData(step);
|
||||||
|
|
||||||
print("Menu rebuild $menuBloc");
|
|
||||||
if (menuBloc != null) {
|
if (menuBloc != null) {
|
||||||
menuBloc!.add(MenuCreate());
|
menuBloc!.add(MenuCreate());
|
||||||
}
|
}
|
||||||
@ -200,7 +186,6 @@ class TutorialBloc extends Bloc<TutorialEvent, TutorialState> with Logging {
|
|||||||
isActive = false;
|
isActive = false;
|
||||||
canActivate = false;
|
canActivate = false;
|
||||||
ActivityDone? activityDone = ActivityDone.tutorialBasic.searchByString(tutorialName);
|
ActivityDone? activityDone = ActivityDone.tutorialBasic.searchByString(tutorialName);
|
||||||
print("activity Finished: $activityDone");
|
|
||||||
if (activityDone != null) {
|
if (activityDone != null) {
|
||||||
await Cache().setActivityDonePrefs(activityDone);
|
await Cache().setActivityDonePrefs(activityDone);
|
||||||
}
|
}
|
||||||
|
@ -192,10 +192,9 @@ Future<void> initFlurry() async {
|
|||||||
Smartlook.enableCrashlytics(true);
|
Smartlook.enableCrashlytics(true);
|
||||||
Smartlook.setEventTrackingMode(EventTrackingMode.FULL_TRACKING); */
|
Smartlook.setEventTrackingMode(EventTrackingMode.FULL_TRACKING); */
|
||||||
|
|
||||||
FlutterUxcam.optIntoSchematicRecordings();
|
|
||||||
// FlutterUxcam.optIntoVideoRecording();
|
|
||||||
FlutterUxcam.startWithKey("wvdstyoml4tiwfd");
|
|
||||||
}
|
}
|
||||||
|
FlutterUxcam.startWithKey("wvdstyoml4tiwfd");
|
||||||
|
FlutterUxcam.optIntoSchematicRecordings();
|
||||||
}
|
}
|
||||||
|
|
||||||
class WorkoutTestApp extends StatelessWidget {
|
class WorkoutTestApp extends StatelessWidget {
|
||||||
|
@ -216,6 +216,7 @@ class _ExerciseLogPage extends State<ExerciseLogPage> with Trans, Common {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void evaluation(ExerciseRepository exerciseRepository, Exercise exercise) {
|
void evaluation(ExerciseRepository exerciseRepository, Exercise exercise) {
|
||||||
|
if (Cache().userLoggedIn != null) {
|
||||||
if (!Cache().hasPurchased) {
|
if (!Cache().hasPurchased) {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
@ -237,6 +238,7 @@ class _ExerciseLogPage extends State<ExerciseLogPage> with Trans, Common {
|
|||||||
Navigator.of(context).pushNamed('evaluationPage', arguments: args);
|
Navigator.of(context).pushNamed('evaluationPage', arguments: args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void confirmationDialog(ExerciseLogBloc bloc, Exercise exercise) {
|
void confirmationDialog(ExerciseLogBloc bloc, Exercise exercise) {
|
||||||
ExerciseType? exerciseType = bloc.exerciseRepository.getExerciseTypeById(exercise.exerciseTypeId!);
|
ExerciseType? exerciseType = bloc.exerciseRepository.getExerciseTypeById(exercise.exerciseTypeId!);
|
||||||
|
@ -30,7 +30,7 @@ class _MyDevelopmentMuscleState extends State<MyDevelopmentMusclePage> with Comm
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
if (!Cache().hasPurchased) {
|
if (!Cache().hasPurchased && Cache().userLoggedIn != null) {
|
||||||
Timer(
|
Timer(
|
||||||
Duration(milliseconds: 2000),
|
Duration(milliseconds: 2000),
|
||||||
() => {
|
() => {
|
||||||
|
@ -99,6 +99,8 @@ class _MyExercisePlanPage extends State<MyExercisePlanPage> with Trans, Logging
|
|||||||
image: "asset/image/exercise_plan_suggested.jpg",
|
image: "asset/image/exercise_plan_suggested.jpg",
|
||||||
left: 2,
|
left: 2,
|
||||||
onTap: () => {
|
onTap: () => {
|
||||||
|
if (Cache().userLoggedIn != null)
|
||||||
|
{
|
||||||
Track().track(TrackingEvent.my_suggested_plan),
|
Track().track(TrackingEvent.my_suggested_plan),
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
@ -112,6 +114,7 @@ class _MyExercisePlanPage extends State<MyExercisePlanPage> with Trans, Logging
|
|||||||
onCancel: () => {Navigator.of(context).pop()},
|
onCancel: () => {Navigator.of(context).pop()},
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
|
}
|
||||||
},
|
},
|
||||||
isLocked: true,
|
isLocked: true,
|
||||||
),
|
),
|
||||||
@ -128,6 +131,8 @@ class _MyExercisePlanPage extends State<MyExercisePlanPage> with Trans, Logging
|
|||||||
image: "asset/image/exercise_plan_stars.jpg",
|
image: "asset/image/exercise_plan_stars.jpg",
|
||||||
left: 5,
|
left: 5,
|
||||||
onTap: () => {
|
onTap: () => {
|
||||||
|
if (Cache().userLoggedIn != null)
|
||||||
|
{
|
||||||
Track().track(TrackingEvent.my_special_plan),
|
Track().track(TrackingEvent.my_special_plan),
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
@ -141,38 +146,10 @@ class _MyExercisePlanPage extends State<MyExercisePlanPage> with Trans, Logging
|
|||||||
onCancel: () => {Navigator.of(context).pop()},
|
onCancel: () => {Navigator.of(context).pop()},
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
|
}
|
||||||
},
|
},
|
||||||
isLocked: true,
|
isLocked: true,
|
||||||
),
|
),
|
||||||
/* ImageButton(
|
|
||||||
width: imageWidth,
|
|
||||||
textAlignment: Alignment.topLeft,
|
|
||||||
text: t("Star's Exercise Plan"),
|
|
||||||
style: GoogleFonts.robotoMono(
|
|
||||||
textStyle: TextStyle(
|
|
||||||
fontSize: 14,
|
|
||||||
color: Colors.white,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
backgroundColor: Colors.black54.withOpacity(0.4))),
|
|
||||||
image: "asset/image/exercise_plan_stars.jpg",
|
|
||||||
left: 5,
|
|
||||||
onTap: () => {
|
|
||||||
|
|
||||||
showDialog(
|
|
||||||
context: context,
|
|
||||||
builder: (BuildContext context) {
|
|
||||||
return DialogPremium(
|
|
||||||
unlocked: false,
|
|
||||||
unlockRound: 2,
|
|
||||||
function: "Star's Exercise Plan",
|
|
||||||
unlockedText: "",
|
|
||||||
onTap: () => {Navigator.of(context).pop()},
|
|
||||||
onCancel: () => {Navigator.of(context).pop()},
|
|
||||||
);
|
|
||||||
})
|
|
||||||
},
|
|
||||||
isLocked: true,
|
|
||||||
), */
|
|
||||||
hiddenPlanWidget(exerciseRepository),
|
hiddenPlanWidget(exerciseRepository),
|
||||||
hiddenTrainingWidget(),
|
hiddenTrainingWidget(),
|
||||||
]),
|
]),
|
||||||
|
@ -24,43 +24,42 @@ class TutorialWidget with Trans, Logging {
|
|||||||
|
|
||||||
void tip(BuildContext context) {
|
void tip(BuildContext context) {
|
||||||
setContext(context);
|
setContext(context);
|
||||||
|
if (tooltip != null && tooltip!.isOpen) {
|
||||||
|
tooltip!.rebuild();
|
||||||
|
}
|
||||||
var renderBox = context.findRenderObject() as RenderBox;
|
var renderBox = context.findRenderObject() as RenderBox;
|
||||||
final overlay = Overlay.of(context)!.context.findRenderObject() as RenderBox?;
|
final overlay = Overlay.of(context)!.context.findRenderObject() as RenderBox?;
|
||||||
|
|
||||||
var targetGlobalCenter = renderBox.localToGlobal(renderBox.size.center(Offset.zero), ancestor: overlay);
|
var targetGlobalCenter = renderBox.localToGlobal(renderBox.size.center(Offset.zero), ancestor: overlay);
|
||||||
|
|
||||||
final TutorialBloc bloc = BlocProvider.of<TutorialBloc>(context);
|
final TutorialBloc bloc = BlocProvider.of<TutorialBloc>(context);
|
||||||
|
final double mediaSize = MediaQuery.of(context).size.width;
|
||||||
if (tooltip != null && tooltip!.isOpen) {
|
final double mediaHeight = MediaQuery.of(context).size.height;
|
||||||
tooltip!.rebuild();
|
|
||||||
}
|
|
||||||
|
|
||||||
Rect? area;
|
Rect? area;
|
||||||
if (bloc.action != null) {
|
if (bloc.action != null) {
|
||||||
area = bloc.action!.showBubble == true
|
area = bloc.action!.showBubble == true
|
||||||
? Rect.fromLTWH(targetGlobalCenter.dx - bloc.action!.bubbleX, targetGlobalCenter.dy - bloc.action!.bubbleY,
|
? Rect.fromLTWH(mediaSize / 2 - 220, targetGlobalCenter.dy - bloc.action!.bubbleY, bloc.action!.bubbleWidth.toDouble(),
|
||||||
bloc.action!.bubbleWidth.toDouble(), bloc.action!.bubbleHeight.toDouble())
|
bloc.action!.bubbleHeight.toDouble())
|
||||||
//? Rect.fromLTWH(targetGlobalCenter.dx - 60, targetGlobalCenter.dy + 120, 420, 320)
|
//? Rect.fromLTWH(targetGlobalCenter.dx - 60, targetGlobalCenter.dy + 120, 420, 320)
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
final double mediaSize = MediaQuery.of(context).size.width;
|
|
||||||
final double mediaHeight = MediaQuery.of(context).size.width;
|
|
||||||
final double distortion = mediaHeight / bloc.mediaHeightBase;
|
final double distortion = mediaHeight / bloc.mediaHeightBase;
|
||||||
|
|
||||||
double fontSize = 14;
|
double fontSize = 14;
|
||||||
if (mediaSize > 400) {
|
if (mediaSize > 800) {
|
||||||
fontSize = 15;
|
fontSize = 16;
|
||||||
} else if (mediaSize < 375) {
|
} else if (mediaSize < 600) {
|
||||||
fontSize = 13;
|
fontSize = 13;
|
||||||
}
|
}
|
||||||
|
|
||||||
double calculatedTop = bloc.top! / distortion;
|
double calculatedTop = bloc.top != null ? bloc.top! : 20.0;
|
||||||
//-((1 - distortion) * 100 * (fontSize));
|
|
||||||
if (calculatedTop < 0) {
|
if (calculatedTop < 0) {
|
||||||
calculatedTop = 10;
|
calculatedTop = 10;
|
||||||
}
|
}
|
||||||
print("Height: $mediaHeight, distortion: $distortion top: ${bloc.top!} calculated $calculatedTop");
|
print("Height: $mediaHeight, width: $mediaSize distortion: $distortion top: ${bloc.top!} calculated $calculatedTop");
|
||||||
|
print("targetCenter X ${targetGlobalCenter.dx}");
|
||||||
|
|
||||||
tooltip = SuperTooltip(
|
tooltip = SuperTooltip(
|
||||||
top: calculatedTop,
|
top: calculatedTop,
|
||||||
|
@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
|||||||
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
||||||
# Read more about iOS versioning at
|
# Read more about iOS versioning at
|
||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
version: 1.1.14+68
|
version: 1.1.14+71
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.12.0 <3.0.0"
|
sdk: ">=2.12.0 <3.0.0"
|
||||||
|
Loading…
Reference in New Issue
Block a user