From 36e1844b4da455fc4734714c35702a6bb69fe67c Mon Sep 17 00:00:00 2001 From: JEdits20 Date: Fri, 16 May 2025 19:03:40 +0200 Subject: [PATCH 1/4] Added loading of user weight and height to onboarding_second_page_body.dart --- .../onboarding/onboarding_screen.dart | 7 +++-- .../widgets/onboarding_second_page_body.dart | 28 ++++++++++++++++++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/lib/features/onboarding/onboarding_screen.dart b/lib/features/onboarding/onboarding_screen.dart index 4092d2cd9..49b3eac75 100644 --- a/lib/features/onboarding/onboarding_screen.dart +++ b/lib/features/onboarding/onboarding_screen.dart @@ -121,17 +121,20 @@ class _OnboardingScreenState extends State { )), PageViewModel( titleWidget: const SizedBox(), - // empty decoration: _pageDecoration, image: _defaultImageWidget, bodyWidget: OnboardingSecondPageBody( setButtonContent: _setSecondPageData, + initialHeight: _onboardingBloc.userSelection.height, + initialWeight: _onboardingBloc.userSelection.weight, + initialUsesImperial: _onboardingBloc.userSelection.usesImperialUnits, ), footer: HighlightButton( buttonLabel: S.of(context).buttonNextLabel, onButtonPressed: () => _scrollToPage(3), buttonActive: _secondPageButtonActive, - )), + ), + ), PageViewModel( titleWidget: const SizedBox(), // empty diff --git a/lib/features/onboarding/presentation/widgets/onboarding_second_page_body.dart b/lib/features/onboarding/presentation/widgets/onboarding_second_page_body.dart index 7b4ce05bf..dfc655362 100644 --- a/lib/features/onboarding/presentation/widgets/onboarding_second_page_body.dart +++ b/lib/features/onboarding/presentation/widgets/onboarding_second_page_body.dart @@ -7,7 +7,17 @@ class OnboardingSecondPageBody extends StatefulWidget { final Function(bool active, double? selectedHeight, double? selectedWeight, bool usesImperialUnits) setButtonContent; - const OnboardingSecondPageBody({super.key, required this.setButtonContent}); + final double? initialHeight; + final double? initialWeight; + final bool initialUsesImperial; + + const OnboardingSecondPageBody({ + super.key, + required this.setButtonContent, + this.initialHeight, + this.initialWeight, + this.initialUsesImperial = false, + }); @override State createState() => @@ -23,6 +33,20 @@ class _OnboardingSecondPageBodyState extends State { bool get _isImperialSelected => _isUnitSelected[1]; + @override + void initState() { + super.initState(); + if(widget.initialUsesImperial){ + _parsedHeight = UnitCalc.cmToFeet(widget.initialHeight != null ? widget.initialHeight! : 0.0); + _parsedWeight = UnitCalc.kgToLbs(widget.initialWeight != null ? widget.initialWeight! : 0.0); + }else{ + _parsedHeight = widget.initialHeight?.round().toDouble(); + _parsedWeight = widget.initialWeight; + } + _isUnitSelected[0] = !widget.initialUsesImperial; + _isUnitSelected[1] = widget.initialUsesImperial; + } + @override Widget build(BuildContext context) { return SizedBox( @@ -39,6 +63,7 @@ class _OnboardingSecondPageBodyState extends State { Form( key: _heightFormKey, child: TextFormField( + initialValue: _isImperialSelected ? _parsedHeight?.toString() : _parsedHeight?.toString().split('.')[0], onChanged: (text) { if (_heightFormKey.currentState!.validate()) { _parsedHeight = double.tryParse(text.replaceAll(',', '.')); @@ -103,6 +128,7 @@ class _OnboardingSecondPageBodyState extends State { Form( key: _weightFormKey, child: TextFormField( + initialValue: _parsedWeight?.toString(), onChanged: (text) { if (_weightFormKey.currentState!.validate()) { _parsedWeight = double.tryParse(text); From 7d520508acfc72a9bd32380141ed176dc448ee61 Mon Sep 17 00:00:00 2001 From: JEdits20 Date: Fri, 16 May 2025 19:22:12 +0200 Subject: [PATCH 2/4] Added loading of checkboxes to onboarding_intro_page_body.dart --- lib/features/onboarding/onboarding_screen.dart | 2 ++ .../onboarding_intro_page_body.dart | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/features/onboarding/onboarding_screen.dart b/lib/features/onboarding/onboarding_screen.dart index 49b3eac75..631e0e4c5 100644 --- a/lib/features/onboarding/onboarding_screen.dart +++ b/lib/features/onboarding/onboarding_screen.dart @@ -100,6 +100,8 @@ class _OnboardingScreenState extends State { image: _defaultImageWidget, bodyWidget: OnboardingIntroPageBody( setPageContent: _setIntroPageData, + initialAcceptedPolicy: _introPageButtonActive, + initialAcceptedDataCollection: _onboardingBloc.userSelection.acceptDataCollection, ), footer: HighlightButton( buttonLabel: S.of(context).buttonStartLabel, diff --git a/lib/features/onboarding/presentation/onboarding_intro_page_body.dart b/lib/features/onboarding/presentation/onboarding_intro_page_body.dart index 83c612164..81bfde43f 100644 --- a/lib/features/onboarding/presentation/onboarding_intro_page_body.dart +++ b/lib/features/onboarding/presentation/onboarding_intro_page_body.dart @@ -7,10 +7,17 @@ import 'package:opennutritracker/generated/l10n.dart'; import 'package:url_launcher/url_launcher.dart'; class OnboardingIntroPageBody extends StatefulWidget { - const OnboardingIntroPageBody({super.key, required this.setPageContent}); - final Function(bool active, bool acceptedDataCollection) setPageContent; + final bool initialAcceptedPolicy; + final bool initialAcceptedDataCollection; + + const OnboardingIntroPageBody({ + super.key, + required this.setPageContent, + this.initialAcceptedPolicy = false, + this.initialAcceptedDataCollection = false + }); @override State createState() => _OnboardingIntroPageBodyState(); @@ -20,6 +27,13 @@ class _OnboardingIntroPageBodyState extends State { bool _acceptedPolicy = false; bool _acceptedDataCollection = false; + @override + void initState() { + super.initState(); + _acceptedPolicy = widget.initialAcceptedPolicy; + _acceptedDataCollection = widget.initialAcceptedDataCollection; + } + @override Widget build(BuildContext context) { return FutureBuilder( From e18cf8d9812a9e9ec9efc6675664b2b1c158777b Mon Sep 17 00:00:00 2001 From: JEdits20 Date: Fri, 16 May 2025 19:41:56 +0200 Subject: [PATCH 3/4] Added loading of gender and date of birth to onboarding_first_page_body.dart --- .../onboarding/onboarding_screen.dart | 3 +++ .../widgets/onboarding_first_page_body.dart | 23 +++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/features/onboarding/onboarding_screen.dart b/lib/features/onboarding/onboarding_screen.dart index 631e0e4c5..7a78b01f9 100644 --- a/lib/features/onboarding/onboarding_screen.dart +++ b/lib/features/onboarding/onboarding_screen.dart @@ -115,6 +115,9 @@ class _OnboardingScreenState extends State { image: _defaultImageWidget, bodyWidget: OnboardingFirstPageBody( setPageContent: _setFirstPageData, + initiallySelectedDate: _onboardingBloc.userSelection.birthday, + initialMaleSelected: _onboardingBloc.userSelection.gender == UserGenderSelectionEntity.genderMale, + initialFemaleSelected: _onboardingBloc.userSelection.gender == UserGenderSelectionEntity.genderFemale, ), footer: HighlightButton( buttonLabel: S.of(context).buttonNextLabel, diff --git a/lib/features/onboarding/presentation/widgets/onboarding_first_page_body.dart b/lib/features/onboarding/presentation/widgets/onboarding_first_page_body.dart index 20af5b166..d214734c7 100644 --- a/lib/features/onboarding/presentation/widgets/onboarding_first_page_body.dart +++ b/lib/features/onboarding/presentation/widgets/onboarding_first_page_body.dart @@ -8,7 +8,17 @@ class OnboardingFirstPageBody extends StatefulWidget { bool active, UserGenderSelectionEntity? gender, DateTime? birthday) setPageContent; - const OnboardingFirstPageBody({super.key, required this.setPageContent}); + final DateTime? initiallySelectedDate; + final bool initialMaleSelected; + final bool initialFemaleSelected; + + const OnboardingFirstPageBody({ + super.key, + required this.setPageContent, + this.initiallySelectedDate, + this.initialMaleSelected = false, + this.initialFemaleSelected = false + }); @override State createState() => @@ -22,6 +32,15 @@ class _OnboardingFirstPageBodyState extends State { bool _maleSelected = false; bool _femaleSelected = false; + @override + void initState() { + super.initState(); + _selectedDate = widget.initiallySelectedDate; + _maleSelected = widget.initialMaleSelected; + _femaleSelected = widget.initialFemaleSelected; + _selectedDate != null ? _dateInput.text = DateFormat('yyyy-MM-dd').format(_selectedDate!) : null; + } + @override Widget build(BuildContext context) { return SizedBox( @@ -86,7 +105,7 @@ class _OnboardingFirstPageBodyState extends State { void onDateInputClicked() async { final pickedDate = await showDatePicker( context: context, - initialDate: DateTime.now(), + initialDate: _selectedDate ?? DateTime.now(), firstDate: DateTime(1900), lastDate: DateTime(2100)); if (pickedDate != null) { From a60711800904705ce35ceef7bc1304b53935321d Mon Sep 17 00:00:00 2001 From: JEdits20 Date: Fri, 16 May 2025 19:57:54 +0200 Subject: [PATCH 4/4] Added loading of activity to onboarding_third_page_body.dart and loading of the goal to onboarding_fourth_page_body.dart --- .../onboarding/onboarding_screen.dart | 7 ++++++ .../widgets/onboarding_fourth_page_body.dart | 20 +++++++++++++++- .../widgets/onboarding_third_page_body.dart | 23 ++++++++++++++++++- 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/lib/features/onboarding/onboarding_screen.dart b/lib/features/onboarding/onboarding_screen.dart index 7a78b01f9..7d7f7d712 100644 --- a/lib/features/onboarding/onboarding_screen.dart +++ b/lib/features/onboarding/onboarding_screen.dart @@ -147,6 +147,10 @@ class _OnboardingScreenState extends State { image: _defaultImageWidget, bodyWidget: OnboardingThirdPageBody( setButtonContent: _setThirdPageButton, + initialSedentarySelected: _onboardingBloc.userSelection.activity == UserActivitySelectionEntity.sedentary, + initialLowActiveSelected: _onboardingBloc.userSelection.activity == UserActivitySelectionEntity.lowActive, + initialActiveSelected: _onboardingBloc.userSelection.activity == UserActivitySelectionEntity.active, + initialVeryActiveSelected: _onboardingBloc.userSelection.activity == UserActivitySelectionEntity.veryActive, ), footer: HighlightButton( buttonLabel: S.of(context).buttonNextLabel, @@ -160,6 +164,9 @@ class _OnboardingScreenState extends State { image: _defaultImageWidget, bodyWidget: OnboardingFourthPageBody( setButtonContent: _setFourthPageButton, + initiallyLooseWeightSelected: _onboardingBloc.userSelection.goal == UserGoalSelectionEntity.loseWeight, + initiallyMaintainWeightSelected: _onboardingBloc.userSelection.goal == UserGoalSelectionEntity.maintainWeight, + initiallyGainWeightSelected: _onboardingBloc.userSelection.goal == UserGoalSelectionEntity.gainWeigh, ), footer: HighlightButton( buttonLabel: S.of(context).buttonNextLabel, diff --git a/lib/features/onboarding/presentation/widgets/onboarding_fourth_page_body.dart b/lib/features/onboarding/presentation/widgets/onboarding_fourth_page_body.dart index 3dfefcaad..f75630ed8 100644 --- a/lib/features/onboarding/presentation/widgets/onboarding_fourth_page_body.dart +++ b/lib/features/onboarding/presentation/widgets/onboarding_fourth_page_body.dart @@ -6,7 +6,17 @@ class OnboardingFourthPageBody extends StatefulWidget { final Function(bool active, UserGoalSelectionEntity? selectedGoal) setButtonContent; - const OnboardingFourthPageBody({super.key, required this.setButtonContent}); + final bool initiallyLooseWeightSelected; + final bool initiallyMaintainWeightSelected; + final bool initiallyGainWeightSelected; + + const OnboardingFourthPageBody({ + super.key, + required this.setButtonContent, + this.initiallyLooseWeightSelected = false, + this.initiallyMaintainWeightSelected = false, + this.initiallyGainWeightSelected = false + }); @override State createState() => @@ -18,6 +28,14 @@ class _OnboardingFourthPageBodyState extends State { bool _maintainWeightSelected = false; bool _gainWeightSelected = false; + @override + void initState() { + super.initState(); + _looseWeightSelected = widget.initiallyLooseWeightSelected; + _maintainWeightSelected = widget.initiallyMaintainWeightSelected; + _gainWeightSelected = widget.initiallyGainWeightSelected; + } + @override Widget build(BuildContext context) { return SizedBox( diff --git a/lib/features/onboarding/presentation/widgets/onboarding_third_page_body.dart b/lib/features/onboarding/presentation/widgets/onboarding_third_page_body.dart index b9616da54..09ec89aee 100644 --- a/lib/features/onboarding/presentation/widgets/onboarding_third_page_body.dart +++ b/lib/features/onboarding/presentation/widgets/onboarding_third_page_body.dart @@ -7,7 +7,19 @@ class OnboardingThirdPageBody extends StatefulWidget { final Function(bool active, UserActivitySelectionEntity? selectedActivity) setButtonContent; - const OnboardingThirdPageBody({super.key, required this.setButtonContent}); + final bool initialSedentarySelected; + final bool initialLowActiveSelected; + final bool initialActiveSelected; + final bool initialVeryActiveSelected; + + const OnboardingThirdPageBody({ + super.key, + required this.setButtonContent, + this.initialSedentarySelected = false, + this.initialLowActiveSelected = false, + this.initialActiveSelected = false, + this.initialVeryActiveSelected = false + }); @override State createState() => @@ -20,6 +32,15 @@ class _OnboardingThirdPageBodyState extends State { bool _activeSelected = false; bool _veryActiveSelected = false; + @override + void initState() { + super.initState(); + _sedentarySelected = widget.initialSedentarySelected; + _lowActiveSelected = widget.initialLowActiveSelected; + _activeSelected = widget.initialActiveSelected; + _veryActiveSelected = widget.initialVeryActiveSelected; + } + @override Widget build(BuildContext context) { return SizedBox(