Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

finish: spagiti code of home screen implementation #11

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions lib/api/cubits/card_cubit/card_data_cubit.dart
Original file line number Diff line number Diff line change
@@ -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<CardDataState> {
CardDataCubit() : super(CardDataInitial());

void getCardData() async {
try {
emit(CardDataLoading());
final List<CardDataModel> listOfCards =
await CardRepository().getCardData();
emit(CardDataSuccess(listOfCards));
} on Exception catch (error) {
emit(CardDataFailure(error));
}
}
}
21 changes: 21 additions & 0 deletions lib/api/cubits/card_cubit/card_data_state.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import 'package:medita_patient/api/models/card_data_model.dart';

abstract class CardDataState {}

class CardDataSuccess extends CardDataState {
final List<CardDataModel>? 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 {}
19 changes: 19 additions & 0 deletions lib/api/cubits/hospital_cubit/hospital_cubit.dart
Original file line number Diff line number Diff line change
@@ -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<HospitalDataState> {
HospitalDataCubit() : super(HospitalInitial());

void getHospitalData() async {
try {
emit(HospitalLoading());
final List<HospitalDataModel> listOfHospitals =
await HospitalRepoModel().getHospitalsData();
emit(HospitalSuccess(listOfHospitals));
} on Exception catch (error) {
emit(HospitalFailure(error));
}
}
}
21 changes: 21 additions & 0 deletions lib/api/cubits/hospital_cubit/hospital_state.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import 'package:medita_patient/api/models/hospital_model.dart';

abstract class HospitalDataState {}

class HospitalSuccess extends HospitalDataState {
final List<HospitalDataModel>? 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 {}
19 changes: 19 additions & 0 deletions lib/api/cubits/specialty_cubit/specialty_cubit.dart
Original file line number Diff line number Diff line change
@@ -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<SpecialtyState> {
SpecialtyCubit() : super(SpecialtyInitial());

void getSpecialty() async {
try {
emit(SpecialtyLoading());
final List<SpecialityModel> listOfCards =
await SpecialityRepo().getSpecialityData();
emit(SpecialtySuccess(listOfCards));
} on Exception catch (error) {
emit(SpecialtyFailure(error));
}
}
}
21 changes: 21 additions & 0 deletions lib/api/cubits/specialty_cubit/specialty_state.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import 'package:medita_patient/api/models/speciality_model.dart';

abstract class SpecialtyState {}

class SpecialtySuccess extends SpecialtyState {
final List<SpecialityModel>? 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 {}
104 changes: 104 additions & 0 deletions lib/api/hospital_card.dart
Original file line number Diff line number Diff line change
@@ -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<HospitalDataModel> 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: <Widget>[
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: <Widget>[
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)"),
],
)
],
),
),
),
],
),
),
),
),
);
}
}
11 changes: 11 additions & 0 deletions lib/api/models/card_data_model.dart
Original file line number Diff line number Diff line change
@@ -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});
}
16 changes: 16 additions & 0 deletions lib/api/models/hospital_model.dart
Original file line number Diff line number Diff line change
@@ -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});
}
5 changes: 5 additions & 0 deletions lib/api/models/speciality_model.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class SpecialityModel {
final int id;
final String name;
SpecialityModel({required this.id, required this.name});
}
19 changes: 19 additions & 0 deletions lib/api/repository/card_data_repository.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import 'package:dio/dio.dart';
import 'package:medita_patient/api/models/card_data_model.dart';

class CardRepository {
Future<List<CardDataModel>> getCardData() async {
final response = await Dio()
.get('https://6081-154-239-215-52.eu.ngrok.io/clinic/list-banners');

final List<CardDataModel> listOfCards =
List<CardDataModel>.from(response.data.map((element) {
return CardDataModel(
id: element['id'],
body: element['body'],
image: element['image'],
title: element['title']);
}));
return listOfCards;
}
}
20 changes: 20 additions & 0 deletions lib/api/repository/hospital_repo_model.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import 'package:dio/dio.dart';
import 'package:medita_patient/api/models/hospital_model.dart';

class HospitalRepoModel {
Future<List<HospitalDataModel>> getHospitalsData() async {
final response = await Dio()
.get('https://6081-154-239-215-52.eu.ngrok.io/clinic/list-hospitals');

final List<HospitalDataModel> listOfHospitals =
List<HospitalDataModel>.from(response.data.map((element) {
return HospitalDataModel(
name: element['name'],
image: element['image'],
location: element['location'],
rates: element['rates'],
specialities: element['specialities']);
}));
return listOfHospitals;
}
}
17 changes: 17 additions & 0 deletions lib/api/repository/speciality_repo.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import 'package:dio/dio.dart';
import 'package:medita_patient/api/models/speciality_model.dart';

class SpecialityRepo {
Future<List<SpecialityModel>> getSpecialityData() async {
final response = await Dio().get(
'https://6081-154-239-215-52.eu.ngrok.io/clinic/list-specialities');
final List<SpecialityModel> listOfSpeciality =
List<SpecialityModel>.from(response.data.map((element) {
return SpecialityModel(
id: element['id'],
name: element['name'],
);
}));
return listOfSpeciality;
}
}
5 changes: 2 additions & 3 deletions lib/app/app/constants.dart
Original file line number Diff line number Diff line change
@@ -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";
Expand All @@ -13,4 +12,4 @@ class ApiConstants {

// Clinic Urls
static const String listHospitals = "$_clinicUrl/list-hospitals";
}
}
11 changes: 10 additions & 1 deletion lib/app/app/main_app.dart
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -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<LoginUseCase>())),
BlocProvider(create: (_) => SignUpCubit(diInstance<RegisterUseCase>())),
BlocProvider(create: (_) => NearHospitalsScreenCubit(diInstance<ListNearHospitalsUseCase>())..init()),
BlocProvider(
create: (_) =>
NearHospitalsScreenCubit(diInstance<ListNearHospitalsUseCase>())
..init()),
],
child: MaterialApp(
debugShowCheckedModeBanner: false,
Expand Down
Loading