Merge branch 'master_mohemm_flutter' into development_haroon

# Conflicts:
#	ios/Runner/Info.plist
#	lib/app_state/app_state.dart
development_haroon
haroon amjad 2 years ago
commit c3376c0e3b

@ -1,5 +1,5 @@
buildscript { buildscript {
ext.kotlin_version = '1.6.0' ext.kotlin_version = '1.7.20'
repositories { repositories {
google() google()
mavenCentral() mavenCentral()

@ -201,13 +201,15 @@ class DashboardApiClient {
}, url, postParams); }, url, postParams);
} }
Future setAdvertisementViewed(String masterID, int advertisementId) async { Future setAdvertisementViewed(String masterID, int advertisementId, String ackValue) async {
String url = "${ApiConsts.cocRest}Mohemm_ITG_UpdateAdvertisementAsViewed"; String url = "${ApiConsts.cocRest}Mohemm_ITG_UpdateAdvertisementAsViewed";
Map<String, dynamic> postParams = { Map<String, dynamic> postParams = {
"ItgNotificationMasterId": masterID, "ItgNotificationMasterId": masterID,
"EmployeeNumber": AppState().memberInformationList!.eMPLOYEENUMBER.toString(), "EmployeeNumber": AppState().memberInformationList!.eMPLOYEENUMBER.toString(),
"ItgAdvertisement": {"advertisementId": advertisementId, "acknowledgment": true} //Mobile Id "ItgAdvertisementId": advertisementId,
"ItgAcknowledgment": ackValue,
// "ItgAdvertisement": {"ItgAdvertisementId": advertisementId, "ItgAcknowledgment": ackValue} //Mobile Id
}; };
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {

@ -90,7 +90,7 @@ class AppState {
String get getHuaweiPushToken => _huaweiPushToken; String get getHuaweiPushToken => _huaweiPushToken;
final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 33, versionID: 4.9, mobileType: Platform.isAndroid ? "android" : "ios"); final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 33, versionID: 5.0, mobileType: Platform.isAndroid ? "android" : "ios");
void setPostParamsInitConfig() { void setPostParamsInitConfig() {
isAuthenticated = false; isAuthenticated = false;

@ -10,6 +10,9 @@ class Advertisement {
this.pageSize, this.pageSize,
this.pageNo, this.pageNo,
this.languageId, this.languageId,
this.isOptional,
this.skipButtonTextEn,
this.skipButtonTextAr,
}); });
final int? advertisementId; final int? advertisementId;
@ -22,6 +25,9 @@ class Advertisement {
final dynamic pageSize; final dynamic pageSize;
final dynamic pageNo; final dynamic pageNo;
final dynamic languageId; final dynamic languageId;
final bool? isOptional;
final String? skipButtonTextEn;
final String? skipButtonTextAr;
factory Advertisement.fromJson(Map<String, dynamic> json) => Advertisement( factory Advertisement.fromJson(Map<String, dynamic> json) => Advertisement(
advertisementId: json["advertisementId"] == null ? null : json["advertisementId"], advertisementId: json["advertisementId"] == null ? null : json["advertisementId"],
@ -34,6 +40,9 @@ class Advertisement {
pageSize: json["pageSize"], pageSize: json["pageSize"],
pageNo: json["pageNo"], pageNo: json["pageNo"],
languageId: json["languageId"], languageId: json["languageId"],
isOptional: json["isOptional"] == null ? null : json["isOptional"],
skipButtonTextEn: json["skipBtnTextEn"] == null ? null : json["skipBtnTextEn"],
skipButtonTextAr: json["skipBtnTextAr"] == null ? null : json["skipBtnTextAr"],
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {

@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_countdown_timer/index.dart'; import 'package:flutter_countdown_timer/index.dart';
import 'package:lottie/lottie.dart'; import 'package:lottie/lottie.dart';
import 'package:mohem_flutter_app/api/dashboard_api_client.dart'; import 'package:mohem_flutter_app/api/dashboard_api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/lottie_consts.dart'; import 'package:mohem_flutter_app/classes/lottie_consts.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
@ -15,6 +16,7 @@ import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/main.dart'; import 'package:mohem_flutter_app/main.dart';
import 'package:mohem_flutter_app/models/itg/advertisement.dart' as ads; import 'package:mohem_flutter_app/models/itg/advertisement.dart' as ads;
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:video_player/video_player.dart'; import 'package:video_player/video_player.dart';
@ -86,11 +88,6 @@ class _ITGAdsScreenState extends State<ITGAdsScreen> {
Future<VideoPlayerController> createVideoPlayer(String encodedBytes) async { Future<VideoPlayerController> createVideoPlayer(String encodedBytes) async {
try { try {
// Uint8List decodedBytes = base64Decode(encodedBytes.split("base64,").last);
// Directory appDocumentsDirectory = await getApplicationDocumentsDirectory(); // 1
// File file = Io.File("${appDocumentsDirectory.path}/myAdsVideo.mp4");
// file.writeAsBytesSync(decodedBytes);
// VideoPlayerController controller = VideoPlayerController.file(file);
VideoPlayerController controller = VideoPlayerController.network(advertisementData!.viewAttachFileColl!.first.base64String!); VideoPlayerController controller = VideoPlayerController.network(advertisementData!.viewAttachFileColl!.first.base64String!);
await controller.initialize(); await controller.initialize();
await controller.play(); await controller.play();
@ -113,8 +110,6 @@ class _ITGAdsScreenState extends State<ITGAdsScreen> {
@override @override
void dispose() { void dispose() {
if (_controller != null) _controller.dispose(); if (_controller != null) _controller.dispose();
// player.stop();
// player.dispose();
super.dispose(); super.dispose();
} }
@ -158,41 +153,54 @@ class _ITGAdsScreenState extends State<ITGAdsScreen> {
), ),
50.height, 50.height,
ValueListenableBuilder<bool>( ValueListenableBuilder<bool>(
valueListenable: hasTimerEnded, valueListenable: hasTimerEnded,
builder: (context, val, child) { builder: (context, val, child) {
if (hasTimerEndedBool) { if (hasTimerEndedBool) {
return Container( return Row(
padding: const EdgeInsets.all(16), decoration: Utils.containerRadius(MyColors.white, 10), child: const Icon(Icons.thumb_up, color: MyColors.gradiantEndColor)) mainAxisAlignment: MainAxisAlignment.center,
.onPress(() { children: [
try { Container(
DashboardApiClient().setAdvertisementViewed(masterID!, advertisementData!.advertisementId!).then((value) { padding: const EdgeInsets.all(16), decoration: Utils.containerRadius(MyColors.white, 10), child: const Icon(Icons.thumb_up, color: MyColors.gradiantEndColor))
logger.d(value); .onPress(() {
try {
Navigator.pop(context); Navigator.pop(context);
}); DashboardApiClient().setAdvertisementViewed(masterID!, advertisementData!.advertisementId!, "Like").then((value) {
} catch (ex) { logger.d(value);
logger.wtf(ex); });
Utils.handleException(ex, context, null); } catch (ex) {
} logger.wtf(ex);
}); Utils.handleException(ex, context, null);
} else { }
return Container(); }),
} 20.width,
}), Container(
padding: const EdgeInsets.all(16), decoration: Utils.containerRadius(MyColors.white, 10), child: const Icon(Icons.thumb_down, color: MyColors.gradiantEndColor))
// DefaultButton(LocaleKeys.home.tr(), () async { .onPress(() {
// DashboardApiClient().setAdvertisementViewed(masterID!, advertisementData!.advertisementId!).then((value) { try {
// logger.d(value); Navigator.pop(context);
// }); DashboardApiClient().setAdvertisementViewed(masterID!, advertisementData!.advertisementId!, "Dislike").then((value) {
// }).paddingOnly(left: 50, right: 50) logger.d(value);
});
// ElevatedButton( } catch (ex) {
// onPressed: () async { logger.wtf(ex);
// // DashboardApiClient().setAdvertisementViewed(widget.addMasterId, widget.advertisement!.advertisementId!).then((value) { Utils.handleException(ex, context, null);
// // logger.d(value); }
// // }); }),
// }, ],
// child: const Text("Go To Dashboard"), );
// ) } else {
return Container();
}
},
),
20.height,
if (advertisementData?.isOptional ?? false)
DefaultButton(AppState().isArabic(context) ? advertisementData?.skipButtonTextAr ?? "Skip" : advertisementData?.skipButtonTextEn ?? "Skip", () async {
Navigator.pop(context);
DashboardApiClient().setAdvertisementViewed(masterID!, advertisementData!.advertisementId!, "Skip").then((value) {
logger.d(value);
});
}).paddingOnly(left: 100, right: 100)
], ],
); );
} else { } else {
@ -212,9 +220,9 @@ class _ITGAdsScreenState extends State<ITGAdsScreen> {
Container(padding: const EdgeInsets.all(16), decoration: Utils.containerRadius(MyColors.white, 10), child: const Icon(Icons.thumb_up, color: MyColors.gradiantEndColor)).onPress( Container(padding: const EdgeInsets.all(16), decoration: Utils.containerRadius(MyColors.white, 10), child: const Icon(Icons.thumb_up, color: MyColors.gradiantEndColor)).onPress(
() { () {
try { try {
DashboardApiClient().setAdvertisementViewed(masterID!, advertisementData!.advertisementId!).then((value) { Navigator.pop(context);
DashboardApiClient().setAdvertisementViewed(masterID!, advertisementData!.advertisementId!, "Like").then((value) {
logger.d(value); logger.d(value);
Navigator.pop(context);
}); });
} catch (ex) { } catch (ex) {
logger.wtf(ex); logger.wtf(ex);

@ -8,7 +8,7 @@ import 'package:mohem_flutter_app/classes/utils.dart';
class Location { class Location {
static void havePermission(Function(bool) callback) { static void havePermission(Function(bool) callback) {
Geolocator.checkPermission().then((value) async { Geolocator.checkPermission().then((value) async {
if (value == LocationPermission.denied) { if (value == LocationPermission.denied || value == LocationPermission.deniedForever) {
value = await Geolocator.requestPermission(); value = await Geolocator.requestPermission();
callback(![LocationPermission.denied, LocationPermission.deniedForever].contains(value)); callback(![LocationPermission.denied, LocationPermission.deniedForever].contains(value));
} else { } else {

@ -54,8 +54,6 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
} }
void checkAttendanceAvailability() async { void checkAttendanceAvailability() async {
String? deviceID = await PlatformDeviceId.getDeviceId;
print("Platform Device ID: $deviceID");
bool isAvailable = await NfcManager.instance.isAvailable(); bool isAvailable = await NfcManager.instance.isAvailable();
setState(() { setState(() {
AppState().privilegeListModel!.forEach((PrivilegeListModel element) { AppState().privilegeListModel!.forEach((PrivilegeListModel element) {
@ -124,7 +122,7 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
LocaleKeys.markAttendance.tr().toSectionHeading(), LocaleKeys.markAttendance.tr().toSectionHeading(),
LocaleKeys.selectMethodOfAttendance.tr().tr().toText11(color: const Color(0xff535353)), LocaleKeys.selectMethodOfAttendance.tr().toText11(color: const Color(0xff535353)),
GridView( GridView(
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true, shrinkWrap: true,
@ -132,60 +130,145 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
gridDelegate: gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: (MediaQuery.of(context).size.width < 550) ? 3 : 5, childAspectRatio: 1 / 1, crossAxisSpacing: 8, mainAxisSpacing: 8), SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: (MediaQuery.of(context).size.width < 550) ? 3 : 5, childAspectRatio: 1 / 1, crossAxisSpacing: 8, mainAxisSpacing: 8),
children: <Widget>[ children: <Widget>[
// if (isNfcEnabled)
attendanceMethod("NFC", "assets/images/nfc.svg", isNfcEnabled, () { attendanceMethod("NFC", "assets/images/nfc.svg", isNfcEnabled, () {
// if (isNfcLocationEnabled) { if (AppState().getIsHuawei) {
checkHuaweiLocationPermission("NFC");
} else {
Location.isEnabled((bool isEnabled) {
if (isEnabled) {
Location.havePermission((bool permission) {
if (permission) {
Location.getCurrentLocation(
(Position position, bool isMocked) {
if (isMocked) {
markFakeAttendance("NFC", position.latitude.toString() ?? "", position.longitude.toString() ?? "");
} else {
performNfcAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? "");
}
},
context,
);
} else {
showDialog(
context: context,
builder: (BuildContext cxt) => ConfirmDialog(
message: "You need to give location permission to mark attendance",
onTap: () async {
Navigator.pop(context);
await Geolocator.openAppSettings();
},
),
);
}
});
} else {
showDialog(
context: context,
builder: (BuildContext cxt) => ConfirmDialog(
message: "You need to enable location services to mark attendance",
onTap: () async {
Navigator.pop(context);
await Geolocator.openLocationSettings();
},
),
);
}
});
}
}),
if (isWifiEnabled)
attendanceMethod("Wifi", "assets/images/wufu.svg", isWifiEnabled, () {
if (AppState().getIsHuawei) { if (AppState().getIsHuawei) {
checkHuaweiLocationPermission("NFC"); checkHuaweiLocationPermission("WIFI");
} else { } else {
Location.getCurrentLocation((Position position, bool isMocked) { Location.isEnabled((bool isEnabled) {
if (isMocked) { if (isEnabled) {
markFakeAttendance("NFC", position.latitude.toString() ?? "", position.longitude.toString() ?? ""); Location.havePermission((bool permission) {
if (permission) {
Location.getCurrentLocation(
(Position position, bool isMocked) {
if (isMocked) {
markFakeAttendance("WIFI", position.latitude.toString() ?? "", position.longitude.toString() ?? "");
} else {
performWifiAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? "");
}
},
context,
);
} else {
showDialog(
context: context,
builder: (BuildContext cxt) => ConfirmDialog(
message: "You need to give location permission to mark attendance",
onTap: () async {
Navigator.pop(context);
await Geolocator.openAppSettings();
},
),
);
}
});
} else { } else {
performNfcAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? ""); showDialog(
context: context,
builder: (BuildContext cxt) => ConfirmDialog(
message: "You need to enable location services to mark attendance",
onTap: () async {
Navigator.pop(context);
await Geolocator.openLocationSettings();
},
),
);
} }
}, context); });
} }
// } else {
// performNfcAttendance(widget.model);
// }
}),
if (isWifiEnabled)
attendanceMethod("Wifi", "assets/images/wufu.svg", isWifiEnabled, () {
// if (isWifiLocationEnabled) {
if (AppState().getIsHuawei) {
checkHuaweiLocationPermission("WIFI");
} else {
Location.getCurrentLocation((Position position, bool isMocked) {
if (isMocked) {
markFakeAttendance("WIFI", position.latitude.toString() ?? "", position.longitude.toString() ?? "");
} else {
performWifiAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? "");
}
}, context);
}
// } else {
// performWifiAttendance(widget.model);
// }
}), }),
if (isQrEnabled) if (isQrEnabled)
attendanceMethod("QR", "assets/images/ic_qr.svg", isQrEnabled, () async { attendanceMethod("QR", "assets/images/ic_qr.svg", isQrEnabled, () async {
// if (isQrLocationEnabled) { if (AppState().getIsHuawei) {
if (AppState().getIsHuawei) { checkHuaweiLocationPermission("QR");
checkHuaweiLocationPermission("QR"); } else {
} else { Location.isEnabled((bool isEnabled) {
Location.getCurrentLocation((Position position, bool isMocked) { if (isEnabled) {
if (isMocked) { Location.havePermission((bool permission) {
markFakeAttendance("QR", position.latitude.toString() ?? "", position.longitude.toString() ?? ""); if (permission) {
} else { Location.getCurrentLocation(
performQrCodeAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? ""); (Position position, bool isMocked) {
} if (isMocked) {
}, context); markFakeAttendance("QR", position.latitude.toString() ?? "", position.longitude.toString() ?? "");
} } else {
// } else { performQrCodeAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? "");
// performQrCodeAttendance(widget.model); }
// } },
// performQrCodeAttendance(model); context,
);
} else {
showDialog(
context: context,
builder: (BuildContext cxt) => ConfirmDialog(
message: "You need to give location permission to mark attendance",
onTap: () async {
Navigator.pop(context);
await Geolocator.openAppSettings();
},
),
);
}
});
} else {
showDialog(
context: context,
builder: (BuildContext cxt) => ConfirmDialog(
message: "You need to enable location services to mark attendance",
onTap: () async {
Navigator.pop(context);
await Geolocator.openLocationSettings();
},
),
);
}
});
}
}), }),
], ],
) )

Loading…
Cancel
Save