Merge branch 'master' into 'development'

Master

See merge request Cloud_Solution/doctor_app_flutter!169
pull/173/head
Mohammad Aljammal 4 years ago
commit 93feb5c6c9

@ -29,7 +29,8 @@ Helpers helpers = new Helpers();
body: null);
* */
class BaseAppClient {
static post(
//TODO change the post fun to nun static when you change all service
post(
String endPoint, {
Map<String, dynamic> body,
Function(dynamic response, int statusCode) onSuccess,

@ -0,0 +1 @@
enum ViewState { Idle, Busy, Error, BusyLocal, ErrorLocal }

@ -0,0 +1,75 @@
class HospitalsModel {
String desciption;
dynamic desciptionN;
int iD;
String legalName;
String legalNameN;
String name;
dynamic nameN;
String phoneNumber;
String setupID;
int distanceInKilometers;
bool isActive;
String latitude;
String longitude;
int mainProjectID;
dynamic projectOutSA;
bool usingInDoctorApp;
HospitalsModel({this.desciption,
this.desciptionN,
this.iD,
this.legalName,
this.legalNameN,
this.name,
this.nameN,
this.phoneNumber,
this.setupID,
this.distanceInKilometers,
this.isActive,
this.latitude,
this.longitude,
this.mainProjectID,
this.projectOutSA,
this.usingInDoctorApp});
HospitalsModel.fromJson(Map<String, dynamic> json) {
desciption = json['Desciption'];
desciptionN = json['DesciptionN'];
iD = json['ID'];
legalName = json['LegalName'];
legalNameN = json['LegalNameN'];
name = json['Name'];
nameN = json['NameN'];
phoneNumber = json['PhoneNumber'];
setupID = json['SetupID'];
distanceInKilometers = json['DistanceInKilometers'];
isActive = json['IsActive'];
latitude = json['Latitude'];
longitude = json['Longitude'];
mainProjectID = json['MainProjectID'];
projectOutSA = json['ProjectOutSA'];
usingInDoctorApp = json['UsingInDoctorApp'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['Desciption'] = this.desciption;
data['DesciptionN'] = this.desciptionN;
data['ID'] = this.iD;
data['LegalName'] = this.legalName;
data['LegalNameN'] = this.legalNameN;
data['Name'] = this.name;
data['NameN'] = this.nameN;
data['PhoneNumber'] = this.phoneNumber;
data['SetupID'] = this.setupID;
data['DistanceInKilometers'] = this.distanceInKilometers;
data['IsActive'] = this.isActive;
data['Latitude'] = this.latitude;
data['Longitude'] = this.longitude;
data['MainProjectID'] = this.mainProjectID;
data['ProjectOutSA'] = this.projectOutSA;
data['UsingInDoctorApp'] = this.usingInDoctorApp;
return data;
}
}

@ -0,0 +1,8 @@
import 'package:doctor_app_flutter/client/base_app_client.dart';
class BaseService {
String error;
bool hasError = false;
BaseAppClient baseAppClient = BaseAppClient();
//TODO add the user login model when we need it
}

@ -0,0 +1,23 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/model/hospitals_model.dart';
import 'package:doctor_app_flutter/core/service/base/base_service.dart';
///This service just an example
class HospitalService extends BaseService {
List<HospitalsModel> _hospitals = List();
List<HospitalsModel> get hospitals => _hospitals;
Future getHospitals() async {
await baseAppClient.post(GET_PROJECTS,
onSuccess: (dynamic response, int statusCode) {
_hospitals.clear();
response['ListProject'].forEach((hospital) {
_hospitals.add(HospitalsModel.fromJson(hospital));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: Map());
}
}

@ -0,0 +1,17 @@
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:flutter/material.dart';
class BaseViewModel extends ChangeNotifier {
ViewState _state = ViewState.Idle;
bool isInternetConnection = true;
ViewState get state => _state;
String error = "";
//TODO add the user login model when we need it
void setState(ViewState viewState) {
_state = viewState;
notifyListeners();
}
}

@ -0,0 +1,23 @@
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/hospitals_model.dart';
import 'package:doctor_app_flutter/core/service/hospital/hospitals_service.dart';
import '../../locator.dart';
import 'base_view_model.dart';
///This View Model just an example
class HospitalViewModel extends BaseViewModel {
HospitalService _hospitalService = locator<HospitalService>();
List<HospitalsModel> get hospitals => _hospitalService.hospitals;
Future getHospitals() async {
setState(ViewState.Busy);
await _hospitalService.getHospitals();
if (_hospitalService.hasError) {
error = _hospitalService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
}

@ -0,0 +1,15 @@
import 'package:get_it/get_it.dart';
import 'core/service/hospital/hospitals_service.dart';
import 'core/viewModel/hospital_view_model.dart';
GetIt locator = GetIt.instance;
///di
void setupLocator() {
/// Services
locator.registerLazySingleton(() => HospitalService());
/// View Model
locator.registerFactory(() => HospitalViewModel());
}

@ -14,8 +14,12 @@ import './providers/patients_provider.dart';
import './providers/hospital_provider.dart';
import './routes.dart';
import 'config/config.dart';
import 'locator.dart';
void main() => runApp(MyApp());
void main() {
setupLocator();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.

@ -16,7 +16,7 @@ class AuthProvider with ChangeNotifier {
bool isLogin = false;
bool isLoading = true;
DoctorProfileModel doctorProfile;
BaseAppClient baseAppClient = BaseAppClient();
setDoctorProfile(DoctorProfileModel profileModel){
doctorProfile = profileModel;
notifyListeners();
@ -56,7 +56,7 @@ class AuthProvider with ChangeNotifier {
try {
dynamic localRes;
await BaseAppClient.post(LOGIN_URL,
await baseAppClient.post(LOGIN_URL,
onSuccess: (dynamic response, int statusCode) {
localRes = response;
}, onFailure: (String error, int statusCode) {
@ -74,7 +74,7 @@ class AuthProvider with ChangeNotifier {
try {
dynamic localRes;
await BaseAppClient.post(INSERT_DEVICE_IMEI,
await baseAppClient.post(INSERT_DEVICE_IMEI,
onSuccess: (dynamic response, int statusCode) {
localRes = response;
}, onFailure: (String error, int statusCode) {
@ -90,7 +90,7 @@ class AuthProvider with ChangeNotifier {
Future<dynamic> selectDeviceImei(imei) async {
try {
dynamic localRes;
await BaseAppClient.post(SELECT_DEVICE_IMEI,
await baseAppClient.post(SELECT_DEVICE_IMEI,
onSuccess: (dynamic response, int statusCode) {
localRes = response;
}, onFailure: (String error, int statusCode) {
@ -106,7 +106,7 @@ class AuthProvider with ChangeNotifier {
Future sendActivationCodeByOtpNotificationType(activationCodeModel) async {
try {
var localRes;
await BaseAppClient.post(SEND_ACTIVATION_CODE_BY_OTP_NOTIFICATION_TYPE,
await baseAppClient.post(SEND_ACTIVATION_CODE_BY_OTP_NOTIFICATION_TYPE,
onSuccess: (dynamic response, int statusCode) {
localRes = response;
}, onFailure: (String error, int statusCode) {
@ -122,7 +122,7 @@ class AuthProvider with ChangeNotifier {
Future<dynamic> memberCheckActivationCodeNew(activationCodeModel) async {
try {
dynamic localRes;
await BaseAppClient.post(MEMBER_CHECK_ACTIVATION_CODE_NEW,
await baseAppClient.post(MEMBER_CHECK_ACTIVATION_CODE_NEW,
onSuccess: (dynamic response, int statusCode) {
localRes = response;
selectedClinicName =
@ -151,7 +151,7 @@ class AuthProvider with ChangeNotifier {
Future<dynamic> getDocProfiles(docInfo) async {
try {
dynamic localRes;
await BaseAppClient.post(GET_DOC_PROFILES,
await baseAppClient.post(GET_DOC_PROFILES,
onSuccess: (dynamic response, int statusCode) {
localRes = response;
doctorProfile = DoctorProfileModel.fromJson(response['DoctorProfileList'][0]);

@ -11,14 +11,14 @@ class DoctorReplyProvider with ChangeNotifier {
bool isError = false;
String error = '';
RequestDoctorReply _requestDoctorReply = RequestDoctorReply();
BaseAppClient baseAppClient = BaseAppClient();
DoctorReplyProvider() {
getDoctorReply();
}
getDoctorReply() async {
try {
await BaseAppClient.post(GT_MY_PATIENT_QUESTION,
await baseAppClient.post(GT_MY_PATIENT_QUESTION,
body: _requestDoctorReply.toJson(),
onSuccess: (dynamic response, int statusCode) {
response['List_GtMyPatientsQuestions'].forEach((v) {

@ -23,7 +23,7 @@ class DoctorsProvider with ChangeNotifier {
bool isLoading = false;
bool isError = false;
String error = '';
BaseAppClient baseAppClient = BaseAppClient();
resetDefaultValues() {
isLoading = true;
isError = false;
@ -40,7 +40,7 @@ class DoctorsProvider with ChangeNotifier {
resetDefaultValues();
try {
_statsticsForCertainDoctorRequest.generalid = generalId;
await BaseAppClient.post(LIVE_CARE_STATISTICS_FOR_CERTAIN_DOCTOR_URL,
await baseAppClient.post(LIVE_CARE_STATISTICS_FOR_CERTAIN_DOCTOR_URL,
onSuccess: (dynamic response, int statusCode) {
certainDoctorsStasticsList = response['List_LiveCareCertainDoctorsStastics'];
isLoading = false;

@ -3,6 +3,8 @@ import 'package:doctor_app_flutter/config/config.dart';
import 'package:flutter/cupertino.dart';
class HospitalProvider with ChangeNotifier {
BaseAppClient baseAppClient = BaseAppClient();
Future<Map> getProjectsList() async {
const url = GET_PROJECTS;
var info = {
@ -17,7 +19,7 @@ class HospitalProvider with ChangeNotifier {
};
dynamic localRes;
await BaseAppClient.post(url, onSuccess: (response, statusCode) async {
await baseAppClient.post(url, onSuccess: (response, statusCode) async {
localRes = response;
}, onFailure: (String error, int statusCode) {
throw error;

@ -23,6 +23,7 @@ class LiveCareProvider with ChangeNotifier {
bool isFinished = true;
bool hasError = false;
String errorMsg = '';
BaseAppClient baseAppClient = BaseAppClient();
LiveCarePendingListRequest _pendingRequestModel =
LiveCarePendingListRequest();
@ -36,7 +37,7 @@ class LiveCareProvider with ChangeNotifier {
_pendingRequestModel.patientData = PatientData(isOutKSA: false);
resetDefaultValues();
// dynamic localRes;
await BaseAppClient.post(GET_LIVECARE_PENDINGLIST,
await baseAppClient.post(GET_LIVECARE_PENDINGLIST,
onSuccess: (response, statusCode) async {
isFinished = true;
liveCarePendingList = [];
@ -66,7 +67,7 @@ class LiveCareProvider with ChangeNotifier {
newRequest.docSpec = profile["DoctorTitleForProfile"];
newRequest.generalid = 'Cs2020@2016\$2958';
isFinished = false;
await BaseAppClient.post(START_LIVECARE_CALL,
await baseAppClient.post(START_LIVECARE_CALL,
onSuccess: (response, statusCode) async {
isFinished = true;
inCallResponse = StartCallRes.fromJson(response);
@ -84,7 +85,7 @@ class LiveCareProvider with ChangeNotifier {
newRequest.isOutKsa = request.isOutKSA;
newRequest.generalid = 'Cs2020@2016\$2958';
newRequest.vCID = request.vCID; //["VC_ID"];
newRequest.notes = await BaseAppClient.post(TRANSFERT_TO_ADMIN,
newRequest.notes = await baseAppClient.post(TRANSFERT_TO_ADMIN,
onSuccess: (response, statusCode) async {
isFinished = true;
transferToAdmin = response;
@ -101,7 +102,7 @@ class LiveCareProvider with ChangeNotifier {
newRequest.generalid = 'Cs2020@2016\$2958';
newRequest.vCID = request.vCID; //["VC_ID"];
newRequest.isDestroy = isPaitent;
await BaseAppClient.post(END_CALL, onSuccess: (response, statusCode) async {
await baseAppClient.post(END_CALL, onSuccess: (response, statusCode) async {
isFinished = true;
endCallResponse = response;
}, onFailure: (String error, int statusCode) {
@ -116,7 +117,7 @@ class LiveCareProvider with ChangeNotifier {
newRequest.vCID = vcID;
newRequest.doctorId = doctorID;
newRequest.generalid = 'Cs2020@2016\$2958';
await BaseAppClient.post(END_CALL_WITH_CHARGE,
await baseAppClient.post(END_CALL_WITH_CHARGE,
onSuccess: (response, statusCode) async {
isFinished = true;
endCallResponse = response;

@ -13,6 +13,7 @@ class MedicineProvider with ChangeNotifier {
bool isFinished = true;
bool hasError = false;
String errorMsg = '';
BaseAppClient baseAppClient = BaseAppClient();
PharmaciesItemsRequestModel _itemsRequestModel =
PharmaciesItemsRequestModel();
@ -29,7 +30,7 @@ class MedicineProvider with ChangeNotifier {
pharmacyItemsList.clear();
notifyListeners();
try {
await BaseAppClient.post(PHARMACY_ITEMS_URL,
await baseAppClient.post(PHARMACY_ITEMS_URL,
onSuccess: (dynamic response, int statusCode) {
pharmacyItemsList = response['ListPharmcy_Region_enh'];
hasError = false;
@ -51,7 +52,7 @@ class MedicineProvider with ChangeNotifier {
try {
_listRequestModel.itemID = itemId;
isFinished = false;
await BaseAppClient.post(PHARMACY_LIST_URL,
await baseAppClient.post(PHARMACY_LIST_URL,
onSuccess: (dynamic response, int statusCode) {
pharmaciesList = response['PharmList'];
hasError = false;

@ -41,6 +41,7 @@ class PatientsProvider with ChangeNotifier {
List<RadiologyResModel> patientRadiologyList = [];
List<PrescriptionReportForInPatient> prescriptionReportForInPatientList = [];
List<PrescriptionReport> prescriptionReport = [];
BaseAppClient baseAppClient = BaseAppClient();
/*@author: ibrahe albitar
*@Date:2/6/2020
@ -71,7 +72,7 @@ class PatientsProvider with ChangeNotifier {
try {
dynamic localRes;
await BaseAppClient.post(GET_PATIENT + SERVICES_PATIANT[val],
await baseAppClient.post(GET_PATIENT + SERVICES_PATIANT[val],
onSuccess: (dynamic response, int statusCode) {
localRes = response;
}, onFailure: (String error, int statusCode) {
@ -124,7 +125,7 @@ class PatientsProvider with ChangeNotifier {
setBasicData();
try {
await BaseAppClient.post(GET_PATIENT_VITAL_SIGN,
await baseAppClient.post(GET_PATIENT_VITAL_SIGN,
onSuccess: (dynamic response, int statusCode) {
patientVitalSignList = [];
response['List_DoctorPatientVitalSign'].forEach((v) {
@ -174,7 +175,7 @@ class PatientsProvider with ChangeNotifier {
setBasicData();
try {
await BaseAppClient.post(GET_PATIENT_LAB_OREDERS,
await baseAppClient.post(GET_PATIENT_LAB_OREDERS,
onSuccess: (dynamic response, int statusCode) {
patientLabResultOrdersList = [];
response['List_GetLabOreders'].forEach((v) {
@ -203,7 +204,7 @@ class PatientsProvider with ChangeNotifier {
getOutPatientPrescriptions(patient) async {
setBasicData();
try {
await BaseAppClient.post(GET_PRESCRIPTION,
await baseAppClient.post(GET_PRESCRIPTION,
onSuccess: (dynamic response, int statusCode) {
patientPrescriptionsList = [];
response['PatientPrescriptionList'].forEach((v) {
@ -234,7 +235,7 @@ class PatientsProvider with ChangeNotifier {
try {
prescriptionReportForInPatientList = [];
notifyListeners();
await BaseAppClient.post(GET_PRESCRIPTION_REPORT_FOR_IN_PATIENT,
await baseAppClient.post(GET_PRESCRIPTION_REPORT_FOR_IN_PATIENT,
onSuccess: (dynamic response, int statusCode) {
response['List_PrescriptionReportForInPatient'].forEach((v) {
prescriptionReportForInPatientList
@ -259,7 +260,7 @@ class PatientsProvider with ChangeNotifier {
isError = false;
error = "";
notifyListeners();
await BaseAppClient.post(GET_PRESCRIPTION_REPORT,
await baseAppClient.post(GET_PRESCRIPTION_REPORT,
onSuccess: (dynamic response, int statusCode) {
response['ListPRM'].forEach((v) {
prescriptionReport.add(PrescriptionReport.fromJson(v));
@ -299,7 +300,7 @@ class PatientsProvider with ChangeNotifier {
// notifyListeners();
setBasicData();
try {
await BaseAppClient.post(GET_RADIOLOGY,
await baseAppClient.post(GET_RADIOLOGY,
onSuccess: (dynamic response, int statusCode) {
patientRadiologyList = [];
response['List_GetRadOreders'].forEach((v) {
@ -328,7 +329,7 @@ class PatientsProvider with ChangeNotifier {
requestLabResult.orderNo = labOrdersResModel.orderNo;
requestLabResult.invoiceNo = labOrdersResModel.invoiceNo;
requestLabResult.patientTypeID = labOrdersResModel.patientType;
await BaseAppClient.post(GET_PATIENT_LAB_RESULTS,
await baseAppClient.post(GET_PATIENT_LAB_RESULTS,
onSuccess: (dynamic response, int statusCode) {
isError = false;
isLoading = false;
@ -346,7 +347,7 @@ class PatientsProvider with ChangeNotifier {
getPatientInsuranceApprovals(patient) async {
setBasicData();
try {
await BaseAppClient.post(PATIENT_INSURANCE_APPROVALS_URL,
await baseAppClient.post(PATIENT_INSURANCE_APPROVALS_URL,
onSuccess: (dynamic response, int statusCode) {
insuranceApporvalsList = response['List_ApprovalMain_InPatient'];
isLoading = false;
@ -370,7 +371,7 @@ class PatientsProvider with ChangeNotifier {
getPatientProgressNote(patient) async {
setBasicData();
try {
await BaseAppClient.post(PATIENT_PROGRESS_NOTE_URL,
await baseAppClient.post(PATIENT_PROGRESS_NOTE_URL,
onSuccess: (dynamic response, int statusCode) {
patientProgressNoteList = response['List_GetPregressNoteForInPatient'];
isLoading = false;
@ -395,7 +396,7 @@ class PatientsProvider with ChangeNotifier {
setBasicData();
try {
_doctorsByClinicIdRequest.clinicID = clinicId;
await BaseAppClient.post(PATIENT_GET_DOCTOR_BY_CLINIC_URL,
await baseAppClient.post(PATIENT_GET_DOCTOR_BY_CLINIC_URL,
onSuccess: (dynamic response, int statusCode) {
doctorsList = response['List_Doctors_All'];
isLoading = false;
@ -425,7 +426,7 @@ class PatientsProvider with ChangeNotifier {
getClinicsList() async {
setBasicData();
try {
await BaseAppClient.post(PATIENT_GET_CLINIC_BY_PROJECT_URL,
await baseAppClient.post(PATIENT_GET_CLINIC_BY_PROJECT_URL,
onSuccess: (dynamic response, int statusCode) {
clinicsList = response['List_Clinic_All'];
isLoading = false;
@ -456,7 +457,7 @@ class PatientsProvider with ChangeNotifier {
getReferralFrequancyList() async {
setBasicData();
try {
await BaseAppClient.post(PATIENT_GET_LIST_REFERAL_URL,
await baseAppClient.post(PATIENT_GET_LIST_REFERAL_URL,
onSuccess: (dynamic response, int statusCode) {
referalFrequancyList = response['list_STPReferralFrequency'];
isLoading = false;
@ -521,7 +522,7 @@ class PatientsProvider with ChangeNotifier {
frequency: frequency,
extension: extension,
tokenID: token);
await BaseAppClient.post(PATIENT_REFER_TO_DOCTOR_URL,
await baseAppClient.post(PATIENT_REFER_TO_DOCTOR_URL,
onSuccess: (dynamic response, int statusCode) {
// print('Done : \n $res');
Navigator.pop(context);

@ -25,6 +25,7 @@ class ProjectProvider with ChangeNotifier {
bool isLoading = false;
bool isError = false;
String error = '';
BaseAppClient baseAppClient = BaseAppClient();
Locale get appLocal => _appLocale;
@ -91,7 +92,7 @@ class ProjectProvider with ChangeNotifier {
try {
dynamic localRes;
await BaseAppClient.post(GET_CLINICS_FOR_DOCTOR,
await baseAppClient.post(GET_CLINICS_FOR_DOCTOR,
onSuccess: (dynamic response, int statusCode) {
doctorClinicsList = [];
response['List_DoctorsClinic'].forEach((v) {

@ -14,6 +14,7 @@ class MyReferralPatientProvider with ChangeNotifier {
bool isError = false;
String error = '';
Helpers helpers = Helpers();
BaseAppClient baseAppClient = BaseAppClient();
RequestMyReferralPatientModel _requestMyReferralPatient = RequestMyReferralPatientModel();
@ -25,7 +26,7 @@ class MyReferralPatientProvider with ChangeNotifier {
getMyReferralPatient() async {
try {
await BaseAppClient.post(GET_MY_REFERRAL_PATIENT,
await baseAppClient.post(GET_MY_REFERRAL_PATIENT,
body: _requestMyReferralPatient.toJson(),
onSuccess: (dynamic response, int statusCode) {
response['List_MyReferralPatient'].forEach((v) {
@ -57,7 +58,7 @@ class MyReferralPatientProvider with ChangeNotifier {
_requestAddReferredDoctorRemarks.referredDoctorRemarks = referredDoctorRemarks;
_requestAddReferredDoctorRemarks.lineItemNo = model.lineItemNo;
_requestAddReferredDoctorRemarks.referringDoctor = model.referringDoctor;
await BaseAppClient.post(ADD_REFERRED_DOCTOR_REMARKS,
await baseAppClient.post(ADD_REFERRED_DOCTOR_REMARKS,
body: _requestAddReferredDoctorRemarks.toJson(),
onSuccess: (dynamic body, int statusCode) {
model.referredDoctorRemarks = referredDoctorRemarks;

@ -20,10 +20,12 @@ class MyReferredPatientProvider with ChangeNotifier {
MyReferredPatientProvider() {
getMyReferralPatient();
}
BaseAppClient baseAppClient = BaseAppClient();
getMyReferralPatient() async {
try {
await BaseAppClient.post(GET_MY_REFERRED_PATIENT,
await baseAppClient.post(GET_MY_REFERRED_PATIENT,
body: _requestMyReferralPatient.toJson(),
onSuccess: (dynamic response, int statusCode) {
response['List_MyReferredPatient'].forEach((v) {
@ -62,7 +64,7 @@ class MyReferredPatientProvider with ChangeNotifier {
_verifyreferraldoctorremarks.patientMobileNumber=model.mobileNumber;
_verifyreferraldoctorremarks.patientIdentificationID=model.patientIdentificationNo;
await BaseAppClient.post(GET_MY_REFERRED_PATIENT,
await baseAppClient.post(GET_MY_REFERRED_PATIENT,
body: _verifyreferraldoctorremarks.toJson(),
onSuccess: (dynamic body, int statusCode) {

@ -14,10 +14,12 @@ class ScheduleProvider with ChangeNotifier {
ScheduleProvider() {
getDoctorSchedule();
}
BaseAppClient baseAppClient = BaseAppClient();
getDoctorSchedule() async {
try {
await BaseAppClient.post(GET_DOCTOR_WORKING_HOURS_TABLE,
await baseAppClient.post(GET_DOCTOR_WORKING_HOURS_TABLE,
body: requestSchedule.toJson(),
onSuccess: (dynamic response, int statusCode) {
response['List_DoctorWorkingHoursTable'].forEach((v) {

@ -0,0 +1,50 @@
import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../locator.dart';
class BaseView<T extends BaseViewModel> extends StatefulWidget {
final Widget Function(BuildContext context, T model, Widget child) builder;
final Function(T) onModelReady;
BaseView({
this.builder,
this.onModelReady,
});
@override
_BaseViewState<T> createState() => _BaseViewState<T>();
}
class _BaseViewState<T extends BaseViewModel> extends State<BaseView<T>> {
T model = locator<T>();
bool isLogin = false;
@override
void initState() {
if (widget.onModelReady != null) {
widget.onModelReady(model);
}
super.initState();
}
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<T>(
create: (BuildContext context) => model,
child: Consumer<T>(builder: widget.builder),
);
}
@override
void dispose() {
if (model != null) {
model = null;
}
super.dispose();
}
}

@ -1,4 +1,5 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart';
import 'package:doctor_app_flutter/providers/project_provider.dart';
import 'package:doctor_app_flutter/routes.dart';
import 'package:flutter/material.dart';
@ -7,18 +8,21 @@ import 'package:provider/provider.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import '../../widgets/shared/app_loader_widget.dart';
import 'app_texts_widget.dart';
import 'network_base_view.dart';
class AppScaffold extends StatelessWidget {
String appBarTitle;
Widget body;
bool isLoading;
bool isShowAppBar;
final String appBarTitle;
final Widget body;
final bool isLoading;
final bool isShowAppBar;
final BaseViewModel baseViewModel;
AppScaffold(
{this.appBarTitle = '',
this.body,
this.isLoading = false,
this.isShowAppBar = true});
this.isShowAppBar = true,
this.baseViewModel});
@override
Widget build(BuildContext context) {
@ -30,9 +34,7 @@ class AppScaffold extends StatelessWidget {
? AppBar(
elevation: 0,
backgroundColor: Hexcolor('#515B5D'),
textTheme: TextTheme(
headline6: TextStyle(
color: Colors.white)),
textTheme: TextTheme(headline6: TextStyle(color: Colors.white)),
title: Text(appBarTitle.toUpperCase()),
leading: Builder(builder: (BuildContext context) {
return IconButton(
@ -53,7 +55,13 @@ class AppScaffold extends StatelessWidget {
)
: null,
body: projectProvider.isInternetConnection
? Stack(children: <Widget>[body, buildAppLoaderWidget(isLoading)])
? baseViewModel != null
? NetworkBaseView(
baseViewModel: baseViewModel,
child: body,
)
: Stack(
children: <Widget>[body, buildAppLoaderWidget(isLoading)])
: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
@ -67,7 +75,6 @@ class AppScaffold extends StatelessWidget {
],
),
));
;
}
Widget buildAppLoaderWidget(bool isloading) {

@ -0,0 +1,44 @@
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'app_loader_widget.dart';
import 'errors/dr_app_embedded_error.dart';
class NetworkBaseView extends StatelessWidget {
final BaseViewModel baseViewModel;
final Widget child;
NetworkBaseView({Key key, this.baseViewModel, this.child});
@override
Widget build(BuildContext context) {
return Container(
child: buildBaseViewWidget(),
);
}
buildBaseViewWidget() {
switch (baseViewModel.state) {
case ViewState.ErrorLocal:
case ViewState.Idle:
case ViewState.BusyLocal:
return child;
break;
case ViewState.Busy:
return Padding(
padding: const EdgeInsets.all(8.0),
child: Center(child: const CircularProgressIndicator()),
);
break;
case ViewState.Error:
return Center(
child: DrAppEmbeddedError(
error: baseViewModel.error,
),
);
break;
}
}
}

@ -35,7 +35,7 @@ packages:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.2"
version: "2.5.0-nullsafety.1"
barcode_scan:
dependency: "direct main"
description:
@ -56,7 +56,7 @@ packages:
name: boolean_selector
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
version: "2.1.0-nullsafety.1"
build:
dependency: transitive
description:
@ -133,14 +133,14 @@ packages:
name: characters
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
version: "1.1.0-nullsafety.3"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.3"
version: "1.2.0-nullsafety.1"
charts_common:
dependency: transitive
description:
@ -168,7 +168,7 @@ packages:
name: clock
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
version: "1.1.0-nullsafety.1"
code_builder:
dependency: transitive
description:
@ -182,7 +182,7 @@ packages:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.14.13"
version: "1.15.0-nullsafety.3"
connectivity:
dependency: "direct main"
description:
@ -266,7 +266,7 @@ packages:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
version: "1.2.0-nullsafety.1"
fixnum:
dependency: transitive
description:
@ -315,6 +315,13 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
get_it:
dependency: "direct main"
description:
name: get_it
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.4"
glob:
dependency: transitive
description:
@ -433,14 +440,14 @@ packages:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.8"
version: "0.12.10-nullsafety.1"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.8"
version: "1.3.0-nullsafety.3"
mime:
dependency: transitive
description:
@ -482,7 +489,7 @@ packages:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.7.0"
version: "1.8.0-nullsafety.1"
pedantic:
dependency: transitive
description:
@ -641,7 +648,7 @@ packages:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.7.0"
version: "1.8.0-nullsafety.2"
speech_to_text:
dependency: "direct main"
description:
@ -655,14 +662,14 @@ packages:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "1.9.5"
version: "1.10.0-nullsafety.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
version: "2.1.0-nullsafety.1"
stream_transform:
dependency: transitive
description:
@ -676,21 +683,21 @@ packages:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.5"
version: "1.1.0-nullsafety.1"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
version: "1.2.0-nullsafety.1"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.17"
version: "0.2.19-nullsafety.2"
timing:
dependency: transitive
description:
@ -704,7 +711,7 @@ packages:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "1.3.0-nullsafety.3"
url_launcher:
dependency: "direct main"
description:
@ -739,7 +746,7 @@ packages:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.8"
version: "2.1.0-nullsafety.3"
watcher:
dependency: transitive
description:
@ -762,5 +769,5 @@ packages:
source: hosted
version: "2.2.1"
sdks:
dart: ">=2.9.0-14.0.dev <3.0.0"
dart: ">=2.10.0-110 <2.11.0"
flutter: ">=1.12.13+hotfix.5 <2.0.0"

@ -52,6 +52,10 @@ dependencies:
#flutter_svg: ^0.17.4
percent_indicator: "^2.1.1"
#Dependency Injection
get_it: ^4.0.2
#speech to text
speech_to_text:
path: speech_to_text

Loading…
Cancel
Save