From 19fe7a9e4d9f24027c9913e70963d255124a0ad2 Mon Sep 17 00:00:00 2001 From: AsMaa-AhMeed Date: Tue, 13 Dec 2022 18:56:18 +0200 Subject: [PATCH] finish: spagiti code of home screen implementation --- .../cubits/card_cubit/card_data_cubit.dart | 19 ++ .../cubits/card_cubit/card_data_state.dart | 21 ++ .../cubits/hospital_cubit/hospital_cubit.dart | 19 ++ .../cubits/hospital_cubit/hospital_state.dart | 21 ++ .../specialty_cubit/specialty_cubit.dart | 19 ++ .../specialty_cubit/specialty_state.dart | 21 ++ lib/api/hospital_card.dart | 104 ++++++++ lib/api/models/card_data_model.dart | 11 + lib/api/models/hospital_model.dart | 16 ++ lib/api/models/speciality_model.dart | 5 + lib/api/repository/card_data_repository.dart | 19 ++ lib/api/repository/hospital_repo_model.dart | 20 ++ lib/api/repository/speciality_repo.dart | 17 ++ lib/app/app/constants.dart | 5 +- lib/app/app/main_app.dart | 11 +- .../screens/main/view/main_screen.dart | 223 +++++++++++++++--- .../screens/sign_in/view/sign_in_screen.dart | 12 +- .../widgets/home_card/home_card.dart | 20 +- .../hospital_card_item.dart | 7 +- 19 files changed, 541 insertions(+), 49 deletions(-) create mode 100644 lib/api/cubits/card_cubit/card_data_cubit.dart create mode 100644 lib/api/cubits/card_cubit/card_data_state.dart create mode 100644 lib/api/cubits/hospital_cubit/hospital_cubit.dart create mode 100644 lib/api/cubits/hospital_cubit/hospital_state.dart create mode 100644 lib/api/cubits/specialty_cubit/specialty_cubit.dart create mode 100644 lib/api/cubits/specialty_cubit/specialty_state.dart create mode 100644 lib/api/hospital_card.dart create mode 100644 lib/api/models/card_data_model.dart create mode 100644 lib/api/models/hospital_model.dart create mode 100644 lib/api/models/speciality_model.dart create mode 100644 lib/api/repository/card_data_repository.dart create mode 100644 lib/api/repository/hospital_repo_model.dart create mode 100644 lib/api/repository/speciality_repo.dart diff --git a/lib/api/cubits/card_cubit/card_data_cubit.dart b/lib/api/cubits/card_cubit/card_data_cubit.dart new file mode 100644 index 0000000..11efc71 --- /dev/null +++ b/lib/api/cubits/card_cubit/card_data_cubit.dart @@ -0,0 +1,19 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:medita_patient/api/cubits/card_cubit/card_data_state.dart'; +import 'package:medita_patient/api/models/card_data_model.dart'; +import 'package:medita_patient/api/repository/card_data_repository.dart'; + +class CardDataCubit extends Cubit { + CardDataCubit() : super(CardDataInitial()); + + void getCardData() async { + try { + emit(CardDataLoading()); + final List listOfCards = + await CardRepository().getCardData(); + emit(CardDataSuccess(listOfCards)); + } on Exception catch (error) { + emit(CardDataFailure(error)); + } + } +} diff --git a/lib/api/cubits/card_cubit/card_data_state.dart b/lib/api/cubits/card_cubit/card_data_state.dart new file mode 100644 index 0000000..2d3ef0c --- /dev/null +++ b/lib/api/cubits/card_cubit/card_data_state.dart @@ -0,0 +1,21 @@ +import 'package:medita_patient/api/models/card_data_model.dart'; + +abstract class CardDataState {} + +class CardDataSuccess extends CardDataState { + final List? listOfCards; + CardDataSuccess(this.listOfCards); +} + +class CardDataInitial extends CardDataState {} + +class CardDataLoading extends CardDataState {} + +class CardDataFailure extends CardDataState { + final Exception? error; + CardDataFailure(this.error); +} + +class CardDataNotFound extends CardDataState {} + +class CardDataNotInternetConnection extends CardDataState {} diff --git a/lib/api/cubits/hospital_cubit/hospital_cubit.dart b/lib/api/cubits/hospital_cubit/hospital_cubit.dart new file mode 100644 index 0000000..8a3ad33 --- /dev/null +++ b/lib/api/cubits/hospital_cubit/hospital_cubit.dart @@ -0,0 +1,19 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:medita_patient/api/cubits/hospital_cubit/hospital_state.dart'; +import 'package:medita_patient/api/models/hospital_model.dart'; +import 'package:medita_patient/api/repository/hospital_repo_model.dart'; + +class HospitalDataCubit extends Cubit { + HospitalDataCubit() : super(HospitalInitial()); + + void getHospitalData() async { + try { + emit(HospitalLoading()); + final List listOfHospitals = + await HospitalRepoModel().getHospitalsData(); + emit(HospitalSuccess(listOfHospitals)); + } on Exception catch (error) { + emit(HospitalFailure(error)); + } + } +} diff --git a/lib/api/cubits/hospital_cubit/hospital_state.dart b/lib/api/cubits/hospital_cubit/hospital_state.dart new file mode 100644 index 0000000..35be125 --- /dev/null +++ b/lib/api/cubits/hospital_cubit/hospital_state.dart @@ -0,0 +1,21 @@ +import 'package:medita_patient/api/models/hospital_model.dart'; + +abstract class HospitalDataState {} + +class HospitalSuccess extends HospitalDataState { + final List? listOfHospitals; + HospitalSuccess(this.listOfHospitals); +} + +class HospitalInitial extends HospitalDataState {} + +class HospitalLoading extends HospitalDataState {} + +class HospitalFailure extends HospitalDataState { + final Exception? error; + HospitalFailure(this.error); +} + +class HospitalNotFound extends HospitalDataState {} + +class HospitalNotInternetConnection extends HospitalDataState {} diff --git a/lib/api/cubits/specialty_cubit/specialty_cubit.dart b/lib/api/cubits/specialty_cubit/specialty_cubit.dart new file mode 100644 index 0000000..3d2f1a6 --- /dev/null +++ b/lib/api/cubits/specialty_cubit/specialty_cubit.dart @@ -0,0 +1,19 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:medita_patient/api/cubits/specialty_cubit/specialty_state.dart'; +import 'package:medita_patient/api/models/speciality_model.dart'; +import 'package:medita_patient/api/repository/speciality_repo.dart'; + +class SpecialtyCubit extends Cubit { + SpecialtyCubit() : super(SpecialtyInitial()); + + void getSpecialty() async { + try { + emit(SpecialtyLoading()); + final List listOfCards = + await SpecialityRepo().getSpecialityData(); + emit(SpecialtySuccess(listOfCards)); + } on Exception catch (error) { + emit(SpecialtyFailure(error)); + } + } +} diff --git a/lib/api/cubits/specialty_cubit/specialty_state.dart b/lib/api/cubits/specialty_cubit/specialty_state.dart new file mode 100644 index 0000000..f645d61 --- /dev/null +++ b/lib/api/cubits/specialty_cubit/specialty_state.dart @@ -0,0 +1,21 @@ +import 'package:medita_patient/api/models/speciality_model.dart'; + +abstract class SpecialtyState {} + +class SpecialtySuccess extends SpecialtyState { + final List? listOfSpeciality; + SpecialtySuccess(this.listOfSpeciality); +} + +class SpecialtyInitial extends SpecialtyState {} + +class SpecialtyLoading extends SpecialtyState {} + +class SpecialtyFailure extends SpecialtyState { + final Exception? error; + SpecialtyFailure(this.error); +} + +class SpecialtyNotFound extends SpecialtyState {} + +class SpecialtyNotInternetConnection extends SpecialtyState {} diff --git a/lib/api/hospital_card.dart b/lib/api/hospital_card.dart new file mode 100644 index 0000000..6ef0d11 --- /dev/null +++ b/lib/api/hospital_card.dart @@ -0,0 +1,104 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:medita_patient/api/models/hospital_model.dart'; +import 'package:medita_patient/app/data/models/data/hospital/hospital.dart'; +import 'package:medita_patient/app/presentation/manager/asset_manager.dart'; +import 'package:medita_patient/app/presentation/manager/color_manager.dart'; +import 'package:medita_patient/app/presentation/manager/values_manager.dart'; +import 'package:medita_patient/app/presentation/widgets/svg_icon_button/svg_icon_button.dart'; + +class HospitalItem extends StatelessWidget { + const HospitalItem({ + required this.listOfHospitals, + Key? key, + }) : super(key: key); + final List listOfHospitals; + + @override + Widget build(BuildContext context) { + return ListView.builder( + shrinkWrap: true, + scrollDirection: Axis.vertical, + physics: const NeverScrollableScrollPhysics(), + itemCount: listOfHospitals.length, + itemBuilder: (context, index) => Padding( + padding: const EdgeInsets.symmetric(horizontal: AppPadding.p6), + child: Card( + elevation: AppSize.s0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(AppSize.s25), + ), + child: Padding( + padding: const EdgeInsets.all(AppSize.s8), + child: Row( + children: [ + Expanded( + flex: 1, + child: ClipRRect( + borderRadius: + const BorderRadius.all(Radius.circular(AppSize.s20)), + child: Image.network( + listOfHospitals[index].image, + height: AppSize.s120, + fit: BoxFit.cover, + ), + ), + ), + Expanded( + flex: 2, + child: Padding( + padding: const EdgeInsets.only(left: AppSize.s16), + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Text( + listOfHospitals[index].name, + style: Theme.of(context) + .textTheme + .titleMedium + ?.copyWith(fontWeight: FontWeight.bold), + maxLines: 2, + ), + ), + SvgIconButton( + svgPath: ImageAsset.outlinedHeartSvg, + onPressed: () {}, + ) + ], + ), + const Divider(), + Text("Location : ${listOfHospitals[index].location}"), + const SizedBox(height: AppSize.s5), + Row( + children: [ + SvgPicture.asset( + ImageAsset.filledStareSvg, + color: ColorManager.gold, + ), + const SizedBox(width: AppSize.s5), + Text(listOfHospitals[index].rates.isEmpty + ? "0.0" + : listOfHospitals[index] + .rates + .length + .toString()), + const SizedBox(width: AppSize.s5), + Text( + "(${listOfHospitals[index].rates.length} reviews)"), + ], + ) + ], + ), + ), + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/lib/api/models/card_data_model.dart b/lib/api/models/card_data_model.dart new file mode 100644 index 0000000..07422a8 --- /dev/null +++ b/lib/api/models/card_data_model.dart @@ -0,0 +1,11 @@ +class CardDataModel { + int id; + String title; + String body; + String image; + CardDataModel( + {required this.id, + required this.body, + required this.image, + required this.title}); +} diff --git a/lib/api/models/hospital_model.dart b/lib/api/models/hospital_model.dart new file mode 100644 index 0000000..6a13293 --- /dev/null +++ b/lib/api/models/hospital_model.dart @@ -0,0 +1,16 @@ +import 'package:medita_patient/api/models/speciality_model.dart'; + +class HospitalDataModel { + final String name; + final String location; + final List rates; + final String image; + final List specialities; + + HospitalDataModel( + {required this.name, + required this.image, + required this.location, + required this.rates, + required this.specialities}); +} diff --git a/lib/api/models/speciality_model.dart b/lib/api/models/speciality_model.dart new file mode 100644 index 0000000..6bd3dfb --- /dev/null +++ b/lib/api/models/speciality_model.dart @@ -0,0 +1,5 @@ +class SpecialityModel { + final int id; + final String name; + SpecialityModel({required this.id, required this.name}); +} diff --git a/lib/api/repository/card_data_repository.dart b/lib/api/repository/card_data_repository.dart new file mode 100644 index 0000000..718dd14 --- /dev/null +++ b/lib/api/repository/card_data_repository.dart @@ -0,0 +1,19 @@ +import 'package:dio/dio.dart'; +import 'package:medita_patient/api/models/card_data_model.dart'; + +class CardRepository { + Future> getCardData() async { + final response = await Dio() + .get('https://6081-154-239-215-52.eu.ngrok.io/clinic/list-banners'); + + final List listOfCards = + List.from(response.data.map((element) { + return CardDataModel( + id: element['id'], + body: element['body'], + image: element['image'], + title: element['title']); + })); + return listOfCards; + } +} diff --git a/lib/api/repository/hospital_repo_model.dart b/lib/api/repository/hospital_repo_model.dart new file mode 100644 index 0000000..3aaab18 --- /dev/null +++ b/lib/api/repository/hospital_repo_model.dart @@ -0,0 +1,20 @@ +import 'package:dio/dio.dart'; +import 'package:medita_patient/api/models/hospital_model.dart'; + +class HospitalRepoModel { + Future> getHospitalsData() async { + final response = await Dio() + .get('https://6081-154-239-215-52.eu.ngrok.io/clinic/list-hospitals'); + + final List listOfHospitals = + List.from(response.data.map((element) { + return HospitalDataModel( + name: element['name'], + image: element['image'], + location: element['location'], + rates: element['rates'], + specialities: element['specialities']); + })); + return listOfHospitals; + } +} diff --git a/lib/api/repository/speciality_repo.dart b/lib/api/repository/speciality_repo.dart new file mode 100644 index 0000000..f88464c --- /dev/null +++ b/lib/api/repository/speciality_repo.dart @@ -0,0 +1,17 @@ +import 'package:dio/dio.dart'; +import 'package:medita_patient/api/models/speciality_model.dart'; + +class SpecialityRepo { + Future> getSpecialityData() async { + final response = await Dio().get( + 'https://6081-154-239-215-52.eu.ngrok.io/clinic/list-specialities'); + final List listOfSpeciality = + List.from(response.data.map((element) { + return SpecialityModel( + id: element['id'], + name: element['name'], + ); + })); + return listOfSpeciality; + } +} diff --git a/lib/app/app/constants.dart b/lib/app/app/constants.dart index 523e0c9..70a5ba5 100644 --- a/lib/app/app/constants.dart +++ b/lib/app/app/constants.dart @@ -1,7 +1,6 @@ - class ApiConstants { // Server baseUrl - static const String baseUrl = "https://fed7-197-56-88-67.eu.ngrok.io/"; + static const String baseUrl = "https://6081-154-239-215-52.eu.ngrok.io/"; // main app url static const String _authenticationUrl = "authentication"; static const String _clinicUrl = "clinic"; @@ -13,4 +12,4 @@ class ApiConstants { // Clinic Urls static const String listHospitals = "$_clinicUrl/list-hospitals"; -} \ No newline at end of file +} diff --git a/lib/app/app/main_app.dart b/lib/app/app/main_app.dart index d51977d..6674c83 100644 --- a/lib/app/app/main_app.dart +++ b/lib/app/app/main_app.dart @@ -1,5 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:medita_patient/api/cubits/card_cubit/card_data_cubit.dart'; +import 'package:medita_patient/api/cubits/hospital_cubit/hospital_cubit.dart'; +import 'package:medita_patient/api/cubits/specialty_cubit/specialty_cubit.dart'; import 'package:medita_patient/app/app/di.dart'; import 'package:medita_patient/app/domain/use_cases/hospital/list_near_hospitals.dart'; import 'package:medita_patient/app/domain/use_cases/login/login_use_case.dart'; @@ -23,10 +26,16 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MultiBlocProvider( providers: [ + BlocProvider(create: (_) => CardDataCubit()), + BlocProvider(create: (_) => SpecialtyCubit()), + BlocProvider(create: (_) => HospitalDataCubit()), BlocProvider(create: (_) => OnBoardingScreenCubit()..init()), BlocProvider(create: (_) => SignInCubit(diInstance())), BlocProvider(create: (_) => SignUpCubit(diInstance())), - BlocProvider(create: (_) => NearHospitalsScreenCubit(diInstance())..init()), + BlocProvider( + create: (_) => + NearHospitalsScreenCubit(diInstance()) + ..init()), ], child: MaterialApp( debugShowCheckedModeBanner: false, diff --git a/lib/app/presentation/screens/main/view/main_screen.dart b/lib/app/presentation/screens/main/view/main_screen.dart index 7796d37..fb9b608 100644 --- a/lib/app/presentation/screens/main/view/main_screen.dart +++ b/lib/app/presentation/screens/main/view/main_screen.dart @@ -1,14 +1,41 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:medita_patient/api/cubits/card_cubit/card_data_state.dart'; +import 'package:medita_patient/api/cubits/card_cubit/card_data_cubit.dart'; +import 'package:medita_patient/api/cubits/hospital_cubit/hospital_cubit.dart'; +import 'package:medita_patient/api/cubits/hospital_cubit/hospital_state.dart'; +import 'package:medita_patient/api/cubits/specialty_cubit/specialty_cubit.dart'; +import 'package:medita_patient/api/cubits/specialty_cubit/specialty_state.dart'; +import 'package:medita_patient/api/hospital_card.dart'; +import 'package:medita_patient/api/models/card_data_model.dart'; +import 'package:medita_patient/api/repository/card_data_repository.dart'; +import 'package:medita_patient/app/presentation/manager/string_manager.dart'; import 'package:medita_patient/app/presentation/manager/values_manager.dart'; import 'package:medita_patient/app/presentation/widgets/fake_search_button/fake_search_button.dart'; import 'package:medita_patient/app/presentation/widgets/home_card/home_card.dart'; +import 'package:medita_patient/app/presentation/widgets/hospital_card_item/hospital_card_item.dart'; import 'package:smooth_page_indicator/smooth_page_indicator.dart'; +import '../../../../../api/models/speciality_model.dart'; import '../../../manager/color_manager.dart'; import '../../../widgets/main_app_bar/main_app_bar.dart'; -class MainScreen extends StatelessWidget { +class MainScreen extends StatefulWidget { const MainScreen({Key? key}) : super(key: key); + @override + State createState() => _MainScreenState(); +} + +class _MainScreenState extends State { + @override + void initState() { + // TODO: implement initState + super.initState(); + context.read().getCardData(); + context.read().getSpecialty(); + context.read().getHospitalData(); + } + @override Widget build(BuildContext context) { PageController pageController = PageController(); @@ -23,42 +50,174 @@ class MainScreen extends StatelessWidget { padding: EdgeInsets.all(AppPadding.p16), child: FakeSearchButton(), ), - Stack( - alignment: Alignment.bottomCenter, - children: [ - SizedBox( - width: double.infinity, - height: AppSize.s200, - child: PageView.builder( - physics: const BouncingScrollPhysics(), - controller: pageController, - itemCount: 3, - itemBuilder: (BuildContext context, int index) { - return const HomeCard(); - }, - ), - ), - Center( - child: Padding( - padding: const EdgeInsets.only(bottom: 16.0), - child: SmoothPageIndicator( - controller: pageController, - count: 3, - effect: const ExpandingDotsEffect( - dotWidth: 6, - dotHeight: 6, - activeDotColor: ColorManager.white, - ), - ), - ), - ) - ], - ), + BlocBuilder( + builder: ((context, state) { + if (state is CardDataLoading) { + return const Center( + child: CircularProgressIndicator(), + ); + } + if (state is CardDataSuccess) { + final listOfCards = state.listOfCards; + return CardData( + pageController: pageController, listOfCards: listOfCards!); + } + if (state is CardDataFailure) { + return const Text('No Internet Connection!'); + } + return const Text('Try Again Later!'); + })), + titleSection('Specialty'), + BlocBuilder( + builder: ((context, state) { + if (state is SpecialtyLoading) { + return const Center( + child: CircularProgressIndicator(), + ); + } + if (state is SpecialtySuccess) { + final listOfSpeciality = state.listOfSpeciality; + return SpecialtySecion(doctorSpeciality: listOfSpeciality!); + } + if (state is SpecialtyFailure) { + return const Text('No Internet Connection!'); + } + return const Text('Try Again Later!'); + })), + titleSection('Top Hospitals'), + BlocBuilder( + builder: ((context, state) { + if (state is HospitalLoading) { + return const Center( + child: CircularProgressIndicator(), + ); + } + if (state is HospitalSuccess) { + final listOfHospitals = state.listOfHospitals; + return HospitalItem(listOfHospitals: listOfHospitals!); + } + if (state is SpecialtyFailure) { + return const Text('No Internet Connection!'); + } + return const Text('Try Again Later!'); + })), ], ), ), ); } + + titleSection(String title) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: AppSize.s8), + child: ListTile( + onTap: (() {}), + title: Text(title, + softWrap: true, + style: Theme.of(context) + .textTheme + .titleLarge + ?.copyWith(fontWeight: FontWeight.bold)), + trailing: Text( + StringManager.seeAll, + style: Theme.of(context).textTheme.titleLarge?.copyWith( + color: ColorManager.lightBlue, + fontSize: AppSize.s16, + fontWeight: FontWeight.bold), + ), + ), + ); + } } +class SpecialtySecion extends StatelessWidget { + final List doctorSpeciality; + const SpecialtySecion({Key? key, required this.doctorSpeciality}) + : super(key: key); + @override + Widget build(BuildContext context) { + return SizedBox( + height: AppSize.s50, + child: ListView.separated( + scrollDirection: Axis.horizontal, + itemCount: doctorSpeciality.length, + itemBuilder: (_, int index) { + var name = doctorSpeciality[index]; + return Padding( + padding: const EdgeInsets.only( + left: AppSize.s10, bottom: AppSize.s12), + child: FilterChip( + label: Text( + name.name, + style: TextStyle( + color: + index == 0 ? Colors.white : ColorManager.lightBlue), + ), + onSelected: (bool value) {}, + backgroundColor: index == 0 + ? Theme.of(context).primaryColor + : Colors.transparent, + shape: StadiumBorder( + side: BorderSide( + color: Theme.of(context).primaryColor, width: 1.5)), + ), + ); + }, + separatorBuilder: (_, __) { + return const SizedBox( + width: AppSize.s10, + ); + })); + } +} + +class CardData extends StatelessWidget { + const CardData({ + Key? key, + required this.pageController, + required this.listOfCards, + }) : super(key: key); + + final PageController pageController; + final List listOfCards; + + @override + Widget build(BuildContext context) { + return Stack( + alignment: Alignment.bottomCenter, + children: [ + SizedBox( + width: double.infinity, + height: AppSize.s200, + child: PageView.builder( + physics: const BouncingScrollPhysics(), + controller: pageController, + itemCount: listOfCards.length, + itemBuilder: (BuildContext context, int index) { + return HomeCard( + image: listOfCards[index].image, + body: listOfCards[index].body, + title: listOfCards[index].title, + ); + }, + ), + ), + Center( + child: Padding( + padding: const EdgeInsets.only(bottom: 16.0), + child: SmoothPageIndicator( + controller: pageController, + count: 3, + effect: const ExpandingDotsEffect( + dotWidth: 6, + dotHeight: 6, + activeDotColor: ColorManager.white, + ), + ), + ), + ) + ], + ); + } +} diff --git a/lib/app/presentation/screens/sign_in/view/sign_in_screen.dart b/lib/app/presentation/screens/sign_in/view/sign_in_screen.dart index 4f5477d..6dd608e 100644 --- a/lib/app/presentation/screens/sign_in/view/sign_in_screen.dart +++ b/lib/app/presentation/screens/sign_in/view/sign_in_screen.dart @@ -26,8 +26,10 @@ class SignInScreen extends StatelessWidget { Widget build(BuildContext context) { SignInCubit signInCubit = SignInCubit.get(context); - _emailTextEditingController.addListener(() => signInCubit.setEmail(_emailTextEditingController.text)); - _passwordTextEditingController.addListener(() => signInCubit.setPassword(_passwordTextEditingController.text)); + _emailTextEditingController.addListener( + () => signInCubit.setEmail(_emailTextEditingController.text)); + _passwordTextEditingController.addListener( + () => signInCubit.setPassword(_passwordTextEditingController.text)); return BlocConsumer( listener: (_, state) { @@ -118,7 +120,8 @@ class SignInScreen extends StatelessWidget { child: const Text(StringManager.signIn), onPressed: () { if (_formKey.currentState!.validate()) { - signInCubit.login(); + // signInCubit.login(); + signInCubit.navigateToNavigationScreen(context); } }, ), @@ -149,7 +152,8 @@ class SignInScreen extends StatelessWidget { children: [ const Text(StringManager.haveAnAccount), TextButton( - onPressed: () => signInCubit.navigateToSignUpScreen(context), + onPressed: () => + signInCubit.navigateToSignUpScreen(context), child: const Text(StringManager.signUp), ) ], diff --git a/lib/app/presentation/widgets/home_card/home_card.dart b/lib/app/presentation/widgets/home_card/home_card.dart index 0650913..c795a7a 100644 --- a/lib/app/presentation/widgets/home_card/home_card.dart +++ b/lib/app/presentation/widgets/home_card/home_card.dart @@ -6,7 +6,12 @@ import '../../manager/string_manager.dart'; import '../../manager/values_manager.dart'; class HomeCard extends StatelessWidget { - const HomeCard({Key? key}) : super(key: key); + final String image; + final String title; + final String body; + const HomeCard( + {Key? key, required this.image, required this.body, required this.title}) + : super(key: key); @override Widget build(BuildContext context) { @@ -17,11 +22,12 @@ class HomeCard extends StatelessWidget { borderRadius: BorderRadius.circular(AppSize.s16), ), child: Stack( - children: [ + children: [ ClipRRect( - borderRadius: const BorderRadius.all(Radius.circular(AppSize.s16)), - child: Image.asset( - ImageAsset.doctorModel, + borderRadius: + const BorderRadius.all(Radius.circular(AppSize.s16)), + child: Image.network( + image, fit: BoxFit.cover, width: double.infinity, ), @@ -33,14 +39,14 @@ class HomeCard extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - "Medical Checks!", + title, style: Theme.of(context) .textTheme .titleLarge ?.copyWith(color: ColorManager.white), ), Text( - "Check your health condition regularly to minimize the incidence of of disease in the future", + body, style: Theme.of(context) .textTheme .caption diff --git a/lib/app/presentation/widgets/hospital_card_item/hospital_card_item.dart b/lib/app/presentation/widgets/hospital_card_item/hospital_card_item.dart index 2d67b7a..e9c370e 100644 --- a/lib/app/presentation/widgets/hospital_card_item/hospital_card_item.dart +++ b/lib/app/presentation/widgets/hospital_card_item/hospital_card_item.dart @@ -30,7 +30,8 @@ class HospitalCardItem extends StatelessWidget { Expanded( flex: 1, child: ClipRRect( - borderRadius: const BorderRadius.all(Radius.circular(AppSize.s20)), + borderRadius: + const BorderRadius.all(Radius.circular(AppSize.s20)), child: Image.network( hospital.imageUrl, height: AppSize.s120, @@ -77,7 +78,9 @@ class HospitalCardItem extends StatelessWidget { color: ColorManager.gold, ), const SizedBox(width: AppSize.s5), - Text(hospital.rates.isEmpty ? "0.0" : hospital.rates.length.toString()), + Text(hospital.rates.isEmpty + ? "0.0" + : hospital.rates.length.toString()), const SizedBox(width: AppSize.s5), Text("(${hospital.rates.length} reviews)"), ],