onboarding screen added.

pull/57/head
Sikander Saleem 1 month ago
parent 005157fe5e
commit c35c38aeb1

@ -233,7 +233,7 @@ class LocationUtils {
HmsLocation.Location data = await locationService.getLastLocation(); HmsLocation.Location data = await locationService.getLastLocation();
if (data.latitude == null || data.longitude == null) { if (data.latitude == null || data.longitude == null) {
appState.resetLocation(); appState.resetLocation();
HmsLocation.LocationRequest request = HmsLocation.LocationRequest() HmsLocation.LocationRequest request = HmsLocation.LocationRequest()
..priority = HmsLocation.LocationRequest.PRIORITY_HIGH_ACCURACY ..priority = HmsLocation.LocationRequest.PRIORITY_HIGH_ACCURACY
..interval = 1000 // 1 second ..interval = 1000 // 1 second

@ -0,0 +1,162 @@
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/extensions/int_extensions.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:lottie/lottie.dart';
class OnboardingScreen extends StatefulWidget {
OnboardingScreen({Key? key}) : super(key: key);
@override
_OnboardingScreenState createState() {
return _OnboardingScreenState();
}
}
class _OnboardingScreenState extends State<OnboardingScreen> {
int selectedIndex = 0;
late PageController pageController;
void goToHomePage() => Navigator.of(context).pushReplacement(FadePage(page: LandingNavigation()));
@override
void initState() {
super.initState();
pageController = PageController();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColors.whiteColor,
body: SafeArea(
top: false,
left: false,
right: false,
child: Column(
spacing: 24,
children: [
PageView(
controller: pageController,
children: [
onboardingView(
AppAnimations.onboarding_1,
"Booking appointment has never been easy".needTranslation,
"In few clicks find yourself having consultation with the doctor of your choice.".needTranslation,
),
onboardingView(
AppAnimations.onboarding_2,
"Access the medical history on finger tips".needTranslation,
"Keep track on your medical history including labs, prescription, insurance, etc".needTranslation,
),
],
onPageChanged: (int index) {
selectedIndex = index;
setState(() {});
},
).expanded,
Row(
spacing: 4.h,
children: [
AnimatedContainer(
duration: const Duration(milliseconds: 250),
height: 6.h,
width: selectedIndex == 0 ? 18.h : 6.h,
decoration: BoxDecoration(color: selectedIndex == 0 ? AppColors.textColor : AppColors.inputLabelTextColor, borderRadius: BorderRadius.circular(30)),
),
AnimatedContainer(
duration: const Duration(milliseconds: 250),
height: 6.h,
width: selectedIndex == 1 ? 18.h : 6.h,
decoration: BoxDecoration(color: selectedIndex == 1 ? AppColors.textColor : AppColors.inputLabelTextColor, borderRadius: BorderRadius.circular(30)),
),
],
).paddingOnly(left: 24, right: 24),
Row(
children: [
AnimatedSwitcher(
duration: const Duration(milliseconds: 250),
transitionBuilder: (child, anim) => FadeTransition(opacity: anim, child: child),
child: selectedIndex == 0
? CustomButton(
text: "Skip".needTranslation,
onPressed: () => goToHomePage(),
width: 86,
backgroundColor: Color(0xffFEE9EA),
textColor: AppColors.primaryRedColor,
borderWidth: 0,
borderColor: Colors.transparent,
).paddingOnly(left: 24)
: const SizedBox.shrink(),
),
const Spacer(),
AnimatedContainer(
duration: const Duration(milliseconds: 400),
curve: Curves.easeInOut,
width: selectedIndex == 0 ? 86 : MediaQuery.of(context).size.width - 48,
margin: EdgeInsets.only(left: 24, right: 24),
decoration: BoxDecoration(
color: AppColors.primaryRedColor,
borderRadius: BorderRadius.circular(12),
),
child: AnimatedSwitcher(
duration: const Duration(milliseconds: 250),
transitionBuilder: (child, anim) => FadeTransition(opacity: anim, child: child),
child: selectedIndex == 0
? CustomButton(
icon: AppAssets.arrow_forward,
width: 86,
text: "".needTranslation,
backgroundColor: Colors.transparent,
onPressed: () {
pageController.animateToPage(1, duration: Duration(milliseconds: 400), curve: Curves.easeInOut);
})
: CustomButton(
text: "Get Started".needTranslation,
fontWeight: FontWeight.w500,
fontSize: 16,
textOverflow: TextOverflow.ellipsis,
backgroundColor: Colors.transparent,
onPressed: () => goToHomePage(),
),
),
),
],
),
],
),
),
);
}
Widget onboardingView(String icon, String heading, String body) {
return Column(
mainAxisAlignment: MainAxisAlignment.end,
spacing: 12,
children: [
Lottie.asset(icon, repeat: true, reverse: false, frameRate: FrameRate(60), width: MediaQuery.sizeOf(context).width - 50, height: MediaQuery.sizeOf(context).width - 50),
12.height,
Text(
heading,
style: TextStyle(fontSize: 36, fontWeight: FontWeight.w600, color: AppColors.textColor, letterSpacing: -0.4, height: 1),
),
Text(
body,
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500, color: AppColors.greyTextColor, letterSpacing: 0, height: 26 / 16),
),
],
).paddingOnly(left: 24, right: 24);
}
}

@ -5,6 +5,7 @@ import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/app_export.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/presentation/authentication/login.dart'; import 'package:hmg_patient_app_new/presentation/authentication/login.dart';
import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:lottie/lottie.dart'; import 'package:lottie/lottie.dart';
@ -29,7 +30,7 @@ class _SplashAnimationScreenState extends State<SplashAnimationScreen> with Sing
_controller = AnimationController(vsync: this); _controller = AnimationController(vsync: this);
_controller.addListener(() { _controller.addListener(() {
if (_controller.status == AnimationStatus.completed) { if (_controller.status == AnimationStatus.completed) {
Navigator.of(context).pushReplacement(FadePage(page: widget.routeWidget ?? LoginScreen())); Navigator.of(context).pushReplacement(FadePage(page: widget.routeWidget ?? LandingNavigation()));
} }
}); });
} }

@ -6,7 +6,8 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:flutter_zoom_videosdk/native/zoom_videosdk.dart'; import 'package:flutter_zoom_videosdk/native/zoom_videosdk.dart';
import 'package:hmg_patient_app_new/splash_animation_screen.dart'; import 'package:hmg_patient_app_new/presentation/onboarding/onboarding_screen.dart';
import 'package:hmg_patient_app_new/presentation/onboarding/splash_animation_screen.dart';
import 'package:hmg_patient_app_new/core/api_consts.dart'; import 'package:hmg_patient_app_new/core/api_consts.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/app_export.dart';
@ -35,7 +36,7 @@ class SplashPage extends StatefulWidget {
class _SplashScreenState extends State<SplashPage> { class _SplashScreenState extends State<SplashPage> {
late AuthenticationViewModel authVm; late AuthenticationViewModel authVm;
bool isNewDesign = false; bool isNewDesign = true;
Future<void> initializeStuff() async { Future<void> initializeStuff() async {
Timer( Timer(
@ -50,7 +51,7 @@ class _SplashScreenState extends State<SplashPage> {
LocalNotification.init(onNotificationClick: (payload) {}); LocalNotification.init(onNotificationClick: (payload) {});
if (isNewDesign) { if (isNewDesign) {
Navigator.of(context).pushReplacement(FadePage(page: SplashAnimationScreen())); Navigator.of(context).pushReplacement(FadePage(page: SplashAnimationScreen(routeWidget: OnboardingScreen())));
} else { } else {
Navigator.of(context).pushReplacement( Navigator.of(context).pushReplacement(
CustomPageRoute( CustomPageRoute(

@ -20,7 +20,9 @@ class CustomButton extends StatelessWidget {
final bool isDisabled; final bool isDisabled;
final Color? iconColor; final Color? iconColor;
final double height; final double height;
final double? width;
final double iconSize; final double iconSize;
final TextOverflow? textOverflow;
CustomButton({ CustomButton({
Key? key, Key? key,
@ -39,7 +41,9 @@ class CustomButton extends StatelessWidget {
this.icon, this.icon,
this.iconColor = Colors.white, this.iconColor = Colors.white,
this.height = 56, this.height = 56,
this.width,
this.iconSize = 24, this.iconSize = 24,
this.textOverflow,
}) : super(key: key); }) : super(key: key);
@override @override
@ -48,6 +52,7 @@ class CustomButton extends StatelessWidget {
onTap: isDisabled ? null : onPressed, onTap: isDisabled ? null : onPressed,
child: Container( child: Container(
height: height, height: height,
width: width,
padding: padding, padding: padding,
decoration: RoundedRectangleBorder().toSmoothCornerDecoration( decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
color: isDisabled ? Colors.transparent : backgroundColor, color: isDisabled ? Colors.transparent : backgroundColor,
@ -69,6 +74,7 @@ class CustomButton extends StatelessWidget {
padding: EdgeInsets.only(top: 2.5), padding: EdgeInsets.only(top: 2.5),
child: Text( child: Text(
text, text,
overflow: textOverflow,
style: context.dynamicTextStyle( style: context.dynamicTextStyle(
fontSize: fontSize.fSize, fontSize: fontSize.fSize,
color: isDisabled ? textColor.withOpacity(0.5) : textColor, color: isDisabled ? textColor.withOpacity(0.5) : textColor,

Loading…
Cancel
Save