diff --git a/android/app/google-services.json b/android/app/google-services.json index 5befc36..62fbaea 100644 --- a/android/app/google-services.json +++ b/android/app/google-services.json @@ -10,7 +10,7 @@ "client_info": { "mobilesdk_app_id": "1:679409052782:android:dba155ac0859d7fea78a7f", "android_client_info": { - "package_name": "com.cloudSolutions.mohemmtest" + "package_name": "hmg.cloudSolutions.mohem" } }, "oauth_client": [ diff --git a/lib/api/marathon/marathon_api_client.dart b/lib/api/marathon/marathon_api_client.dart index 5b1dfc8..28fad0f 100644 --- a/lib/api/marathon/marathon_api_client.dart +++ b/lib/api/marathon/marathon_api_client.dart @@ -29,6 +29,7 @@ class MarathonApiClient { (json) { MarathonGenericModel marathonModel = MarathonGenericModel.fromJson(json); AppState().setMarathonToken = marathonModel.data["token"] ?? ""; + print("marathonToken: ${"AppState(): ${AppState().getMarathonToken}"}"); return marathonModel.data["token"] ?? ""; }, ApiConsts.marathonParticipantLoginUrl, diff --git a/lib/provider/chat_provider_model.dart b/lib/provider/chat_provider_model.dart index 24c4532..57abd3a 100644 --- a/lib/provider/chat_provider_model.dart +++ b/lib/provider/chat_provider_model.dart @@ -82,7 +82,6 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin { } Future buildHubConnection() async { - chatHubConnection = await getHubConnection(); await chatHubConnection.start(); if (kDebugMode) { @@ -1265,7 +1264,7 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin { await Directory(dirPath).create(); await File('$dirPath/.nomedia').create(); } - File file = File("$dirPath/${data.currentUserId}-${data.targetUserId}-${DateTime.now().microsecondsSinceEpoch}." + ext); + File file = File("$dirPath/${data.currentUserId}-${data.targetUserId}-${DateTime.now().microsecondsSinceEpoch}" + ext); await file.writeAsBytes(bytes); return file.path; } @@ -1297,7 +1296,7 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin { ChatUser( id: int.parse(element.eMPLOYEENUMBER!), email: element.eMPLOYEEEMAILADDRESS, - userName: element.eMPLOYEEDISPLAYNAME, + userName: element.eMPLOYEENAME, phone: element.eMPLOYEEMOBILENUMBER, userStatus: 0, unreadMessageCount: 0, @@ -1305,8 +1304,8 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin { isTyping: false, isImageLoading: false, image: element.eMPLOYEEIMAGE ?? "", - isImageLoaded: true, - userLocalDownlaodedImage: await downloadImageLocal(element.eMPLOYEEIMAGE ?? "", element.eMPLOYEENUMBER!), + isImageLoaded: element.eMPLOYEEIMAGE == null ? false : true, + userLocalDownlaodedImage:element.eMPLOYEEIMAGE == null ? null : await downloadImageLocal(element.eMPLOYEEIMAGE ?? "", element.eMPLOYEENUMBER!), ), ); } @@ -1319,7 +1318,7 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin { ChatUser( id: int.parse(element.eMPLOYEENUMBER!), email: element.eMPLOYEEEMAILADDRESS, - userName: element.eMPLOYEEDISPLAYNAME, + userName: element.eMPLOYEENAME, phone: element.eMPLOYEEMOBILENUMBER, userStatus: 0, unreadMessageCount: 0, @@ -1327,8 +1326,8 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin { isTyping: false, isImageLoading: false, image: element.eMPLOYEEIMAGE ?? "", - isImageLoaded: true, - userLocalDownlaodedImage: await downloadImageLocal(element.eMPLOYEEIMAGE ?? "", element.eMPLOYEENUMBER!), + isImageLoaded: element.eMPLOYEEIMAGE == null ? false : true, + userLocalDownlaodedImage: element.eMPLOYEEIMAGE == null ? null : await downloadImageLocal(element.eMPLOYEEIMAGE ?? "", element.eMPLOYEENUMBER!), ), ); } diff --git a/lib/ui/chat/chat_bubble.dart b/lib/ui/chat/chat_bubble.dart index 824ab48..93fea00 100644 --- a/lib/ui/chat/chat_bubble.dart +++ b/lib/ui/chat/chat_bubble.dart @@ -1,10 +1,10 @@ -import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; -import 'package:flutter/services.dart'; -import 'package:audio_waveforms/audio_waveforms.dart' as awf; + import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:just_audio/just_audio.dart'; import 'package:mohem_flutter_app/api/chat/chat_api_client.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; @@ -16,9 +16,9 @@ import 'package:mohem_flutter_app/models/chat/get_single_user_chat_list_model.da import 'package:mohem_flutter_app/provider/chat_provider_model.dart'; import 'package:mohem_flutter_app/ui/chat/chat_full_image_preview.dart'; import 'package:mohem_flutter_app/ui/chat/common.dart'; +import 'package:path_provider/path_provider.dart'; import 'package:provider/provider.dart'; import 'package:rxdart/rxdart.dart'; -import 'package:just_audio/just_audio.dart'; class ChatBubble extends StatelessWidget { ChatBubble({Key? key, required this.dateTime, required this.cItem}) : super(key: key); @@ -82,7 +82,8 @@ class ChatBubble extends StatelessWidget { Utils.hideLoading(context); await data.voiceController!.play(); } catch (e) { - Utils.showToast("Cannot open file."); + Utils.hideLoading(context); + Utils.showToast(e.toString()); } } } @@ -438,5 +439,3 @@ class ChatBubble extends StatelessWidget { ); } } - - diff --git a/lib/ui/chat/my_team_screen.dart b/lib/ui/chat/my_team_screen.dart index 6b68a58..1752295 100644 --- a/lib/ui/chat/my_team_screen.dart +++ b/lib/ui/chat/my_team_screen.dart @@ -84,24 +84,24 @@ class _MyTeamScreenState extends State { ), ), ), - Positioned( - right: 5, - bottom: 1, - child: Container( - width: 10, - height: 10, - decoration: BoxDecoration( - color: m.teamMembersList![index].userStatus == 1 ? MyColors.green2DColor : Colors.red, - ), - ).circle(10), - ) + // Positioned( + // right: 5, + // bottom: 1, + // child: Container( + // width: 10, + // height: 10, + // decoration: BoxDecoration( + // color: m.teamMembersList![index].userStatus == 1 ? MyColors.green2DColor : Colors.red, + // ), + // ).circle(10), + // ) ], ), Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - (m.teamMembersList![index].userName!.replaceFirst(".", " ").capitalizeFirstofEach ?? "").toText14(color: MyColors.darkTextColor).paddingOnly(left: 11, top: 13), + (m.teamMembersList![index].userName! ?? "").toText14(color: MyColors.darkTextColor).paddingOnly(left: 11, top: 13), ], ).expanded, // SizedBox( @@ -128,16 +128,15 @@ class _MyTeamScreenState extends State { ], ), ).onPress(() { - print(jsonEncode(m.teamMembersList[index])); - // Navigator.pushNamed( - // context, - // AppRoutes.chatDetailed, - // arguments: ChatDetailedScreenParams(m.teamMembersList![index], true), - // ).then( - // (Object? value) { - // m.clearSelections(); - // }, - // ); + Navigator.pushNamed( + context, + AppRoutes.chatDetailed, + arguments: ChatDetailedScreenParams(m.teamMembersList![index], true), + ).then( + (Object? value) { + m.clearSelections(); + }, + ); }); }, separatorBuilder: (BuildContext context, int index) => const Divider(color: MyColors.lightGreyE5Color).paddingOnly(left: 70), diff --git a/lib/ui/marathon/marathon_provider.dart b/lib/ui/marathon/marathon_provider.dart index 21c5915..1b825e8 100644 --- a/lib/ui/marathon/marathon_provider.dart +++ b/lib/ui/marathon/marathon_provider.dart @@ -435,7 +435,6 @@ class MarathonProvider extends ChangeNotifier { } bool checkIfPrivilegedForMarathon() { - return true; for (PrivilegeListModel element in AppState().privilegeListModel!) { if (element.serviceName == "Marathon") { if (element.previlege != null) { @@ -451,20 +450,18 @@ class MarathonProvider extends ChangeNotifier { notifyListeners(); isPrivilegedWithMarathon = checkIfPrivilegedForMarathon(); if (isPrivilegedWithMarathon) { - await MarathonApiClient().getMarathonToken().whenComplete(() async { - marathonDetailModel = await MarathonApiClient().getMarathonDetails(); - updateTotalSecondsToWaitForMarathon = marathonDetailModel.marathonBufferTime ?? 30; - if (marathonDetailModel.id == null) { - isUpComingMarathon = false; - isLoading = false; - notifyListeners(); - return; - } - if (DateTime.parse(marathonDetailModel.startTime!).isAfter(DateTime.now())) { - itsMarathonTime = false; - } - populateQuestionStatusesList(); - }); + marathonDetailModel = await MarathonApiClient().getMarathonDetails(); + updateTotalSecondsToWaitForMarathon = marathonDetailModel.marathonBufferTime ?? 30; + if (marathonDetailModel.id == null) { + isUpComingMarathon = false; + isLoading = false; + notifyListeners(); + return; + } + if (DateTime.parse(marathonDetailModel.startTime!).isAfter(DateTime.now())) { + itsMarathonTime = false; + } + populateQuestionStatusesList(); } isLoading = false; notifyListeners(); diff --git a/lib/ui/profile/add_update_family_member.dart b/lib/ui/profile/add_update_family_member.dart index 2c2d7ad..9633aa6 100644 --- a/lib/ui/profile/add_update_family_member.dart +++ b/lib/ui/profile/add_update_family_member.dart @@ -25,6 +25,14 @@ import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; +class FamilyMemberScreenParams { + String? actionType; + int relationID; + int? flag; + + FamilyMemberScreenParams(this.relationID, {this.actionType, this.flag}); +} + class AddUpdateFamilyMember extends StatefulWidget { const AddUpdateFamilyMember({Key? key}) : super(key: key); @@ -38,7 +46,8 @@ class _AddUpdateFamilyMemberState extends State { List getContactDffStructureList = []; List getContactDetailsList = []; SubmitContactTransactionList? submitContactTransactionList; - dynamic args; + //dynamic args; + FamilyMemberScreenParams? params; String? date = "MM/DD/YYYY"; Duration dateTime = DateTime.now().timeZoneOffset; String dateTime1 = DateTime.now().timeZoneName; @@ -54,9 +63,9 @@ class _AddUpdateFamilyMemberState extends State { try { Utils.showLoading(context); getBasicDetDffStructureList = await ProfileApiClient().getBasicDetDffStructure(); - getContactColsStructureList = await ProfileApiClient().getContactColsStructureList(args['actionType']); + getContactColsStructureList = await ProfileApiClient().getContactColsStructureList(params!.actionType.toString()); getContactDffStructureList = await ProfileApiClient().getContactDffStructureList(); - if (args['actionType'] == "ADD") { + if (params!.actionType == "ADD") { getBasicDetDffStructureList?.forEach((element) { element?.getContactDetailsList = new GetContactDetailsList(); }); @@ -66,8 +75,8 @@ class _AddUpdateFamilyMemberState extends State { getContactDffStructureList?.forEach((element) { element?.getContactDetailsList = new GetContactDetailsList(); }); - } else if (args['actionType'] == "UPDATE") { - getContactDetailsList = await ProfileApiClient().getContactDetailsList(args['relationID']); + } else if (params!.actionType == "UPDATE") { + getContactDetailsList = await ProfileApiClient().getContactDetailsList(params!.relationID); getBasicDetDffStructureList?.forEach((element) { element?.getContactDetailsList = getContactDetailsList?.singleWhere((userDetail) => userDetail?.aPPLICATIONCOLUMNNAME == element?.aPPLICATIONCOLUMNNAME); @@ -90,8 +99,8 @@ class _AddUpdateFamilyMemberState extends State { @override Widget build(BuildContext context) { - if (args == null) { - args = ModalRoute.of(context)!.settings.arguments; + if (params == null) { + params = ModalRoute.of(context)!.settings.arguments as FamilyMemberScreenParams; callAddAndUpdateFamilyMember(); } return Scaffold( @@ -100,7 +109,7 @@ class _AddUpdateFamilyMemberState extends State { title: LocaleKeys.profile_familyDetails.tr(), ), backgroundColor: MyColors.backgroundColor, - body: args['flag'] == 1 + body: params!.flag == 1 ? Column( children: [ ListView(physics: const BouncingScrollPhysics(), padding: const EdgeInsets.all(21), children: [ @@ -110,7 +119,7 @@ class _AddUpdateFamilyMemberState extends State { itemBuilder: (BuildContext cxt, int parentIndex) { return parseDynamicFormatTypeCols(getContactColsStructureList![parentIndex], parentIndex); }, - separatorBuilder: (cxt, index) => 0.height, + separatorBuilder: (BuildContext cxt, int index) => 0.height, itemCount: getContactColsStructureList!.length), 12.height, ListView.separated( @@ -119,7 +128,7 @@ class _AddUpdateFamilyMemberState extends State { itemBuilder: (BuildContext cxt, int parentIndex) { return parseDynamicFormatTypeBasicDetDff(getBasicDetDffStructureList![parentIndex], parentIndex); }, - separatorBuilder: (cxt, index) => 0.height, + separatorBuilder: (BuildContext cxt, int index) => 0.height, itemCount: getBasicDetDffStructureList!.length), ListView.separated( physics: const NeverScrollableScrollPhysics(), @@ -127,18 +136,17 @@ class _AddUpdateFamilyMemberState extends State { itemBuilder: (BuildContext cxt, int parentIndex) { return parseDynamicFormatTypeContactDff(getContactDffStructureList![parentIndex], parentIndex); }, - separatorBuilder: (cxt, index) => 0.height, + separatorBuilder: (BuildContext cxt, int index) => 0.height, itemCount: getContactDffStructureList!.length), - ]).expanded, + ],).expanded, DefaultButton(LocaleKeys.next.tr(), () async { submitUpdateForm(); }).insideContainer, ], ) - : args['flag'] == 2 + : params!.flag == 2 ? Column( children: [ - // getContactDetailsList!.isEmpty ListView(physics: const BouncingScrollPhysics(), padding: const EdgeInsets.all(21), children: [ ListView.separated( physics: const NeverScrollableScrollPhysics(), @@ -146,7 +154,7 @@ class _AddUpdateFamilyMemberState extends State { itemBuilder: (BuildContext cxt, int parentIndex) { return parseDynamicFormatTypeCols(getContactColsStructureList![parentIndex], parentIndex); }, - separatorBuilder: (cxt, index) => 0.height, + separatorBuilder: (BuildContext cxt, int index) => 0.height, itemCount: getContactColsStructureList!.length), 12.height, ListView.separated( @@ -155,7 +163,7 @@ class _AddUpdateFamilyMemberState extends State { itemBuilder: (BuildContext cxt, int parentIndex) { return parseDynamicFormatTypeBasicDetDff(getBasicDetDffStructureList![parentIndex], parentIndex); }, - separatorBuilder: (cxt, index) => 0.height, + separatorBuilder: (BuildContext cxt, int index) => 0.height, itemCount: getBasicDetDffStructureList!.length), ListView.separated( physics: const NeverScrollableScrollPhysics(), @@ -163,7 +171,7 @@ class _AddUpdateFamilyMemberState extends State { itemBuilder: (BuildContext cxt, int parentIndex) { return parseDynamicFormatTypeContactDff(getContactDffStructureList![parentIndex], parentIndex); }, - separatorBuilder: (cxt, index) => 0.height, + separatorBuilder: (BuildContext cxt, int index) => 0.height, itemCount: getContactDffStructureList!.length), ]).expanded, DefaultButton(LocaleKeys.next.tr(), () async { @@ -197,13 +205,12 @@ class _AddUpdateFamilyMemberState extends State { model.getContactDetailsList!.sEGMENTVALUEDSP = getContactColsStructureList[index]!.objectValuesList![popupIndex].mEANING.toString(); model.getContactDetailsList!.vARCHAR2VALUE = getContactColsStructureList[index]!.objectValuesList![popupIndex].cODE.toString(); setState(() {}); - }); + },); } else { return DynamicTextFieldWidget( (model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""), (model!.getContactDetailsList!.sEGMENTVALUEDSP ?? ""), - //isInputTypeNum: true, - onChange: (text) { + onChange: (String text) { model!.getContactDetailsList!.sEGMENTVALUEDSP = text; }, ).paddingOnly(bottom: 12); @@ -213,7 +220,7 @@ class _AddUpdateFamilyMemberState extends State { (model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""), (model!.getContactDetailsList!.sEGMENTVALUEDSP ?? ""), isInputTypeNum: true, - onChange: (text) { + onChange: (String text) { model!.getContactDetailsList!.sEGMENTVALUEDSP = text; }, ).paddingOnly(bottom: 12); @@ -257,13 +264,12 @@ class _AddUpdateFamilyMemberState extends State { model.getContactDetailsList!.vARCHAR2VALUE = getBasicDetDffStructureList[index]!.eSERVICESVS![popupIndex].iDCOLUMNNAME.toString(); setState(() {}); - }); + },); } else { return DynamicTextFieldWidget( (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", - // isInputTypeNum: true, - onChange: (text) { + onChange: (String text) { model.getContactDetailsList!.sEGMENTVALUEDSP = text; }, ).paddingOnly(bottom: 12); @@ -273,7 +279,7 @@ class _AddUpdateFamilyMemberState extends State { (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", isInputTypeNum: true, - onChange: (text) { + onChange: (String text) { model.getContactDetailsList!.sEGMENTVALUEDSP = text; }, ).paddingOnly(bottom: 12); @@ -316,12 +322,12 @@ class _AddUpdateFamilyMemberState extends State { model.getContactDetailsList!.sEGMENTVALUEDSP = getContactDffStructureList[index]!.eSERVICESVS![popupIndex].vALUECOLUMNNAME.toString(); model.getContactDetailsList!.vARCHAR2VALUE = getContactDffStructureList[index]!.eSERVICESVS![popupIndex].iDCOLUMNNAME.toString(); setState(() {}); - }); + },); } else { return DynamicTextFieldWidget( (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", - onChange: (text) { + onChange: (String text) { model.getContactDetailsList!.sEGMENTVALUEDSP = text; }, ).paddingOnly(bottom: 12); @@ -331,7 +337,7 @@ class _AddUpdateFamilyMemberState extends State { (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", isInputTypeNum: true, - onChange: (text) { + onChange: (String text) { model.getContactDetailsList!.sEGMENTVALUEDSP = text; }, ).paddingOnly(bottom: 12); @@ -359,13 +365,13 @@ class _AddUpdateFamilyMemberState extends State { if (!Platform.isIOS) { await showCupertinoModalPopup( context: context, - builder: (cxt) => Container( + builder: (BuildContext cxt) => Container( height: 250, color: Colors.white, child: CupertinoDatePicker( backgroundColor: Colors.white, mode: CupertinoDatePickerMode.date, - onDateTimeChanged: (value) { + onDateTimeChanged: (DateTime value) { if (value != null && value != selectedDate) { time = value; } @@ -470,7 +476,6 @@ class _AddUpdateFamilyMemberState extends State { Utils.hideLoading(context); setState(() {}); } catch (ex) { - print(ex); Utils.hideLoading(context); Utils.handleException(ex, context, null); } diff --git a/lib/ui/profile/family_members.dart b/lib/ui/profile/family_members.dart index 6c564e3..ffded0b 100644 --- a/lib/ui/profile/family_members.dart +++ b/lib/ui/profile/family_members.dart @@ -12,6 +12,7 @@ import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; +import 'package:mohem_flutter_app/ui/profile/add_update_family_member.dart'; import 'package:mohem_flutter_app/ui/profile/profile_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; @@ -140,7 +141,7 @@ class _FamilyMembersState extends State { LocaleKeys.addNewFamilyMember.tr(), menuEntries.updateButton == 'Y' ? () async { - Navigator.pushNamed(context, AppRoutes.addUpdateFamilyMember, arguments: {"relationID": relationId, "flag": 1, "actionType": "ADD"}); + Navigator.pushNamed(context, AppRoutes.addUpdateFamilyMember, arguments: FamilyMemberScreenParams( relationId, flag: 1, actionType: "ADD")); // ProfileScreen(); } : null) @@ -166,7 +167,7 @@ class _FamilyMembersState extends State { Navigator.pushNamed( context, AppRoutes.addUpdateFamilyMember, - arguments: {"relationID": relationId, "flag": 2, "actionType": "UPDATE"}, + arguments:FamilyMemberScreenParams(relationId, flag: 2, actionType: "UPDATE"), ); }, ); @@ -202,7 +203,7 @@ class _FamilyMembersState extends State { LocaleKeys.ok.tr(), ), onPressed: () { - Navigator.pushNamed(context, AppRoutes.deleteFamilyMember, arguments: relationId); + Navigator.pushNamed(context, AppRoutes.deleteFamilyMember, arguments: FamilyMemberScreenParams(relationId)); // continueDynamicForms(); }, ); diff --git a/pubspec.yaml b/pubspec.yaml index e2092b0..d0758c5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.0.0+1 +version: 3.1.5+300015 environment: sdk: ">=2.16.0 <3.0.0"