Merge branch 'master_mohemm_flutter' into development_haroon

# Conflicts:
#	ios/Runner.xcodeproj/project.pbxproj
#	lib/app_state/app_state.dart
#	lib/ui/login/login_screen.dart
merge-requests/3/head
haroon amjad 3 years ago
commit 246c9500c7

@ -1 +1,128 @@
{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"}]} {
"images":[
{
"idiom":"iphone",
"size":"20x20",
"scale":"2x",
"filename":"Icon-App-20x20@2x.png"
},
{
"idiom":"iphone",
"size":"20x20",
"scale":"3x",
"filename":"Icon-App-20x20@3x.png"
},
{
"idiom":"iphone",
"size":"29x29",
"scale":"1x",
"filename":"Icon-App-29x29@1x.png"
},
{
"idiom":"iphone",
"size":"29x29",
"scale":"2x",
"filename":"Icon-App-29x29@2x.png"
},
{
"idiom":"iphone",
"size":"29x29",
"scale":"3x",
"filename":"Icon-App-29x29@3x.png"
},
{
"idiom":"iphone",
"size":"40x40",
"scale":"2x",
"filename":"Icon-App-40x40@2x.png"
},
{
"idiom":"iphone",
"size":"40x40",
"scale":"3x",
"filename":"Icon-App-40x40@3x.png"
},
{
"idiom":"iphone",
"size":"60x60",
"scale":"2x",
"filename":"Icon-App-60x60@2x.png"
},
{
"idiom":"iphone",
"size":"60x60",
"scale":"3x",
"filename":"Icon-App-60x60@3x.png"
},
{
"idiom":"iphone",
"size":"76x76",
"scale":"2x",
"filename":"Icon-App-76x76@2x.png"
},
{
"idiom":"ipad",
"size":"20x20",
"scale":"1x",
"filename":"Icon-App-20x20@1x.png"
},
{
"idiom":"ipad",
"size":"20x20",
"scale":"2x",
"filename":"Icon-App-20x20@2x.png"
},
{
"idiom":"ipad",
"size":"29x29",
"scale":"1x",
"filename":"Icon-App-29x29@1x.png"
},
{
"idiom":"ipad",
"size":"29x29",
"scale":"2x",
"filename":"Icon-App-29x29@2x.png"
},
{
"idiom":"ipad",
"size":"40x40",
"scale":"1x",
"filename":"Icon-App-40x40@1x.png"
},
{
"idiom":"ipad",
"size":"40x40",
"scale":"2x",
"filename":"Icon-App-40x40@2x.png"
},
{
"idiom":"ipad",
"size":"76x76",
"scale":"1x",
"filename":"Icon-App-76x76@1x.png"
},
{
"idiom":"ipad",
"size":"76x76",
"scale":"2x",
"filename":"Icon-App-76x76@2x.png"
},
{
"idiom":"ipad",
"size":"83.5x83.5",
"scale":"2x",
"filename":"Icon-App-83.5x83.5@2x.png"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"scale" : "1x",
"filename" : "ItunesArtwork@2x.png"
}
],
"info":{
"version":1,
"author":"easyappicon"
}
}

@ -31,7 +31,8 @@ class ChatApiClient {
"employeeNumber": AppState().memberInformationList!.eMPLOYEENUMBER.toString(), "employeeNumber": AppState().memberInformationList!.eMPLOYEENUMBER.toString(),
"password": "FxIu26rWIKoF8n6mpbOmAjDLphzFGmpG", "password": "FxIu26rWIKoF8n6mpbOmAjDLphzFGmpG",
"isMobile": true, "isMobile": true,
"deviceToken": AppState().getDeviceToken, "deviceToken":AppState().getIsHuawei ? AppState().getHuaweiPushToken : AppState().getDeviceToken,
"isHuaweiDevice": AppState().getIsHuawei,
}, },
); );

@ -60,7 +60,7 @@ class LoginApiClient {
Future<MemberLoginListModel?> memberLogin(String username, String password) async { Future<MemberLoginListModel?> memberLogin(String username, String password) async {
String url = "${ApiConsts.erpRest}MemberLogin"; String url = "${ApiConsts.erpRest}MemberLogin";
Map<String, dynamic> postParams = {"P_APP_VERSION": "HMG", "P_LANGUAGE": "US", "P_PASSWORD": password, "P_USER_NAME": username}; Map<String, dynamic> postParams = {"P_APP_VERSION": "CS", "P_LANGUAGE": "US", "P_PASSWORD": password, "P_USER_NAME": username};
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) { return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json); GenericResponseModel responseData = GenericResponseModel.fromJson(json);

@ -34,6 +34,20 @@ class MarathonApiClient {
); );
} }
Future<int> getMarathonersCount({required String marathonId}) async {
Response response = await ApiClient().getJsonForResponse(
ApiConsts.marathonGetMarathonersCount + '?marathonId=$marathonId',
token: AppState().getMarathonToken == null || AppState().getMarathonToken == "" ? await getMarathonToken() : AppState().getMarathonToken,
);
var json = jsonDecode(response.body);
logger.i("json in getMarathonersCount: $json");
MarathonGenericModel marathonGenericModel = MarathonGenericModel.fromJson(json);
return marathonGenericModel.data as int;
}
Future<String> getProjectId() async { Future<String> getProjectId() async {
return await ApiClient().postJsonForObject( return await ApiClient().postJsonForObject(
(json) { (json) {
@ -89,6 +103,7 @@ class MarathonApiClient {
); );
} }
Future<QuestionModel> getNextQuestion({required String? questionId, required String marathonId}) async { Future<QuestionModel> getNextQuestion({required String? questionId, required String marathonId}) async {
Map<String, String?> jsonObject = <String, String?>{ Map<String, String?> jsonObject = <String, String?>{
"previousQuestionId": questionId, "previousQuestionId": questionId,

@ -166,7 +166,7 @@ class ProfileApiClient {
], ],
"P_CONTACT_RELATIONSHIP_ID": contactRelationId, "P_CONTACT_RELATIONSHIP_ID": contactRelationId,
"P_ACTION": actionType, "P_ACTION": actionType,
"PayrollCodeStr": AppState().postParamsObject?.payrollCodeStr, "PayrollCodeStr": "CS",
"LegislationCodeStr": "SA", "LegislationCodeStr": "SA",
}; };
postParams.addAll(AppState().postParamsJson); postParams.addAll(AppState().postParamsJson);

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

@ -37,6 +37,7 @@ class ApiConsts {
static String marathonSubmitAnswerUrl = marathonBaseUrl + "question/submit"; static String marathonSubmitAnswerUrl = marathonBaseUrl + "question/submit";
static String marathonQualifiersUrl = marathonBaseUrl + "winner/getWinner/"; static String marathonQualifiersUrl = marathonBaseUrl + "winner/getWinner/";
static String marathonSelectedWinner = marathonBaseUrl + "winner/getSelectedWinner/"; static String marathonSelectedWinner = marathonBaseUrl + "winner/getSelectedWinner/";
static String marathonGetMarathonersCount = marathonBaseUrl + "Participant/GetRemainingParticipants";
//DummyCards for the UI //DummyCards for the UI
static CardContent dummyQuestion = const CardContent(); static CardContent dummyQuestion = const CardContent();

@ -100,9 +100,7 @@ class AppNotifications {
debugPrint("HUAWEI PUSH TOKEN: $_huaweiToken"); debugPrint("HUAWEI PUSH TOKEN: $_huaweiToken");
} }
void _onTokenError(Object error) { void _onTokenError(Object error) {}
print("TOKEN ERROOORRRRR!!!!:");
}
Future<void> initTokenStream(Function loginCallback) async { Future<void> initTokenStream(Function loginCallback) async {
huawei_push.Push.getTokenStream.listen(_onTokenEvent, onError: _onTokenError).onData((data) { huawei_push.Push.getTokenStream.listen(_onTokenEvent, onError: _onTokenError).onData((data) {

@ -22,6 +22,17 @@ extension TrimString on String {
} }
} }
String displayLocalizedContent({required bool isPhoneLangArabic,required int selectedLanguage,required String englishContent,required String arabicContent}) {
if (selectedLanguage == 1) {
return englishContent;
} else if (selectedLanguage == 2) {
return arabicContent;
} else if (selectedLanguage == 3) {
return isPhoneLangArabic ? arabicContent : englishContent;
}
return englishContent;
}
extension EmailValidator on String { extension EmailValidator on String {
Widget get toWidget => Text(this); Widget get toWidget => Text(this);

@ -38,7 +38,7 @@ class _UnsafeDeviceScreenState extends State<AppUpdateScreen> {
21.height, 21.height,
DefaultButton(LocaleKeys.ok.tr(), () async { DefaultButton(LocaleKeys.ok.tr(), () async {
if (Platform.isAndroid || Platform.isIOS) { if (Platform.isAndroid || Platform.isIOS) {
var appId = Platform.isAndroid ? 'com.cloudsolutions.alhabibmohemm' : '1480157255'; var appId = Platform.isAndroid ? 'hmg.cloudSolutions.mohem' : '1468856602';
var url = Uri.parse( var url = Uri.parse(
Platform.isAndroid ? "market://details?id=$appId" : "https://apps.apple.com/app/id$appId", Platform.isAndroid ? "market://details?id=$appId" : "https://apps.apple.com/app/id$appId",
); );

@ -14,7 +14,7 @@ class BusinessCardDialog extends StatelessWidget {
child: Container( child: Container(
// width: MediaQuery.of(context).size.height / 2, // width: MediaQuery.of(context).size.height / 2,
color: Colors.white, color: Colors.white,
margin: EdgeInsets.all(12), margin: EdgeInsets.all(21),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -30,11 +30,11 @@ class BusinessCardDialog extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
Image.asset( Image.asset(
"assets/images/logos/bn_hmg_logo.png", "assets/images/logos/bn_cloud_soloution.jpg",
width: 120, width: 80,
height: 120, height: 80,
), ),
// 12.height, 12.height,
(AppState().memberInformationList!.eMPLOYEENAME ?? "").toText20(isBold: true), (AppState().memberInformationList!.eMPLOYEENAME ?? "").toText20(isBold: true),
], ],
), ),

@ -18,7 +18,6 @@ import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/main.dart'; import 'package:mohem_flutter_app/main.dart';
import 'package:mohem_flutter_app/models/offers_and_discounts/get_offers_list.dart'; import 'package:mohem_flutter_app/models/offers_and_discounts/get_offers_list.dart';
import 'package:mohem_flutter_app/models/privilege_list_model.dart';
import 'package:mohem_flutter_app/provider/chat_provider_model.dart'; import 'package:mohem_flutter_app/provider/chat_provider_model.dart';
import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/ui/landing/widget/app_drawer.dart'; import 'package:mohem_flutter_app/ui/landing/widget/app_drawer.dart';
@ -63,9 +62,7 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
data = Provider.of<DashboardProviderModel>(context, listen: false); data = Provider.of<DashboardProviderModel>(context, listen: false);
marathonProvider = Provider.of<MarathonProvider>(context, listen: false); marathonProvider = Provider.of<MarathonProvider>(context, listen: false);
cProvider = Provider.of<ChatProviderModel>(context, listen: false); cProvider = Provider.of<ChatProviderModel>(context, listen: false);
if (checkIfPrivilegedForChat()) { _bHubCon();
_bHubCon();
}
_onRefresh(true); _onRefresh(true);
}); });
} }
@ -133,6 +130,11 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
void _onRefresh(bool isFromInit) async { void _onRefresh(bool isFromInit) async {
data.initProvider(); data.initProvider();
// data.getITGNotification().then((value) {
// print("--------------------detail_1-----------------");
// print(value!.result!.data!.notificationMasterId);
// print(value.result!.data!.notificationTitle);
// });
data.fetchListMenu(); data.fetchListMenu();
data.fetchAttendanceTracking(context); data.fetchAttendanceTracking(context);
data.fetchWorkListCounter(context); data.fetchWorkListCounter(context);
@ -141,7 +143,7 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
data.fetchMenuEntries(); data.fetchMenuEntries();
data.getCategoryOffersListAPI(context); data.getCategoryOffersListAPI(context);
marathonProvider.getMarathonDetailsFromApi(); marathonProvider.getMarathonDetailsFromApi();
if (!cProvider.disbaleChatForThisUser && !isFromInit && checkIfPrivilegedForChat()) checkHubCon(); if (!cProvider.disbaleChatForThisUser && !isFromInit) checkHubCon();
_refreshController.refreshCompleted(); _refreshController.refreshCompleted();
} }
@ -557,7 +559,7 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
children: [ children: [
SvgPicture.asset( SvgPicture.asset(
"assets/icons/chat/chat.svg", "assets/icons/chat/chat.svg",
color: !checkIfPrivilegedForChat() ? MyColors.lightGreyE3Color : currentIndex == 4 color: currentIndex == 4
? MyColors.grey3AColor ? MyColors.grey3AColor
: cProvider.disbaleChatForThisUser : cProvider.disbaleChatForThisUser
? MyColors.lightGreyE3Color ? MyColors.lightGreyE3Color
@ -565,7 +567,7 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
).paddingAll(4), ).paddingAll(4),
Consumer<ChatProviderModel>( Consumer<ChatProviderModel>(
builder: (BuildContext cxt, ChatProviderModel data, Widget? child) { builder: (BuildContext cxt, ChatProviderModel data, Widget? child) {
return !checkIfPrivilegedForChat() ? const SizedBox() : Positioned( return Positioned(
right: 0, right: 0,
top: 0, top: 0,
child: Container( child: Container(
@ -598,7 +600,7 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
} else if (index == 3) { } else if (index == 3) {
Navigator.pushNamed(context, AppRoutes.itemsForSale); Navigator.pushNamed(context, AppRoutes.itemsForSale);
} else if (index == 4) { } else if (index == 4) {
if (!cProvider.disbaleChatForThisUser && checkIfPrivilegedForChat()) { if (!cProvider.disbaleChatForThisUser) {
Navigator.pushNamed(context, AppRoutes.chat); Navigator.pushNamed(context, AppRoutes.chat);
} }
} }
@ -608,17 +610,6 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
); );
} }
bool checkIfPrivilegedForChat() {
for (PrivilegeListModel element in AppState().privilegeListModel!) {
if (element.serviceName?.toLowerCase() == "chat") {
if (element.previlege != null) {
return element.previlege!;
}
}
}
return false;
}
void navigateToDetails(OffersListModel offersListModelObj) { void navigateToDetails(OffersListModel offersListModelObj) {
List<OffersListModel> getOffersDetailList = []; List<OffersListModel> getOffersDetailList = [];
getOffersDetailList.clear(); getOffersDetailList.clear();

@ -43,7 +43,7 @@ class _ForgotPasswordScreenState extends State<ForgotPasswordScreen> {
} }
Utils.showLoading(context); Utils.showLoading(context);
try { try {
_basicMemberInformation = await LoginApiClient().getBasicUserInformation("HMG", employeeId.text); _basicMemberInformation = await LoginApiClient().getBasicUserInformation("CS", employeeId.text);
genericResponseModel = await LoginApiClient().sendPublicActivationCode(_basicMemberInformation?.pMOBILENUMBER, employeeId.text); genericResponseModel = await LoginApiClient().sendPublicActivationCode(_basicMemberInformation?.pMOBILENUMBER, employeeId.text);
Utils.hideLoading(context); Utils.hideLoading(context);
OtpDialog( OtpDialog(

@ -28,6 +28,7 @@ import 'package:mohem_flutter_app/models/member_login_list_model.dart';
import 'package:mohem_flutter_app/models/privilege_list_model.dart'; import 'package:mohem_flutter_app/models/privilege_list_model.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/input_widget.dart'; import 'package:mohem_flutter_app/widgets/input_widget.dart';
// import 'package:safe_device/safe_device.dart'; // import 'package:safe_device/safe_device.dart';
import 'package:wifi_iot/wifi_iot.dart'; import 'package:wifi_iot/wifi_iot.dart';
@ -113,12 +114,7 @@ class _LoginScreenState extends State<LoginScreen> {
await FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true); await FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
} }
}); });
} catch (ex) { } catch (ex) {}
Utils.hideLoading(context);
checkLoginInfo();
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
await FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
}
} else { } else {
await Firebase.initializeApp(); await Firebase.initializeApp();
_firebaseMessaging = FirebaseMessaging.instance; _firebaseMessaging = FirebaseMessaging.instance;

@ -17,7 +17,18 @@ class MarathonIntroScreen extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
MarathonProvider provider = context.watch<MarathonProvider>(); MarathonProvider provider = context.watch<MarathonProvider>();
return Scaffold( return Scaffold(
appBar: AppBarWidget(context, title: LocaleKeys.brainMarathon.tr()), appBar: AppBarWidget(
context,
title: LocaleKeys.brainMarathon.tr(),
onHomeTapped: () {
Navigator.pop(context);
context.setLocale(provider.savedLocale);
},
onBackTapped: () {
Navigator.pop(context);
context.setLocale(provider.savedLocale);
},
),
body: Column( body: Column(
children: <Widget>[ children: <Widget>[
ListView( ListView(

@ -1,7 +1,7 @@
import 'dart:async'; import 'dart:async';
import 'dart:developer';
import 'package:appinio_swiper/appinio_swiper.dart'; import 'package:appinio_swiper/appinio_swiper.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/marathon/demo_marathon_repo.dart'; import 'package:mohem_flutter_app/api/marathon/demo_marathon_repo.dart';
@ -32,7 +32,7 @@ class MarathonProvider extends ChangeNotifier {
int? selectedOptionIndex; int? selectedOptionIndex;
String? selectedOptionId; String? selectedOptionId;
int? totalQualifiers; int? totalQualifiers;
Locale savedLocale = const Locale("en", "US");
String? gapTimeImage; String? gapTimeImage;
String? gapTimeText; String? gapTimeText;
int? gapTimeType; int? gapTimeType;
@ -135,7 +135,6 @@ class MarathonProvider extends ChangeNotifier {
late VideoPlayerController videoController; late VideoPlayerController videoController;
Future<void> initializeVideoPlayer() async { Future<void> initializeVideoPlayer() async {
log("VIDEO PLAYER INITIALIZED!!!");
videoController = VideoPlayerController.network(ApiConsts.marathonBaseUrlServices + marathonDetailModel.sponsors!.first.video!); videoController = VideoPlayerController.network(ApiConsts.marathonBaseUrlServices + marathonDetailModel.sponsors!.first.video!);
await videoController.initialize(); await videoController.initialize();
await videoController.play(); await videoController.play();
@ -297,6 +296,18 @@ class MarathonProvider extends ChangeNotifier {
//************************************************ FUNCTIONS ********************************************************** //************************************************ FUNCTIONS **********************************************************
void updateLanguageAsPerMarathon(BuildContext context, MarathonDetailModel detailModel) {
savedLocale = context.locale;
if (detailModel.selectedLanguage == 1) {
context.setLocale(const Locale("en", "US"));
} else if (detailModel.selectedLanguage == 2) {
context.setLocale(const Locale("ar", "SA"));
} else if (detailModel.selectedLanguage == 3) {
} else {
context.setLocale(const Locale("en", "US"));
}
}
Future<bool> callSubmitOptionApi() async { Future<bool> callSubmitOptionApi() async {
return await MarathonApiClient().submitSelectedOption(marathonId: marathonDetailModel.id!, questionId: currentQuestion.id, selectedAnswerId: selectedOptionId); return await MarathonApiClient().submitSelectedOption(marathonId: marathonDetailModel.id!, questionId: currentQuestion.id, selectedAnswerId: selectedOptionId);
} }
@ -347,6 +358,7 @@ class MarathonProvider extends ChangeNotifier {
} }
startTimerForQuestion(); startTimerForQuestion();
updateCardData(); updateCardData();
totalMarathoners = await MarathonApiClient().getMarathonersCount(marathonId: marathonDetailModel.id!);
Navigator.pushReplacementNamed(AppRoutes.navigatorKey.currentContext!, AppRoutes.marathonScreen); Navigator.pushReplacementNamed(AppRoutes.navigatorKey.currentContext!, AppRoutes.marathonScreen);
} else { } else {
currentQuestion = AppState().getIsDemoMarathon currentQuestion = AppState().getIsDemoMarathon
@ -512,6 +524,7 @@ class MarathonProvider extends ChangeNotifier {
answerStatusesList[i] = QuestionCardStatus.question; answerStatusesList[i] = QuestionCardStatus.question;
} }
} }
AppRoutes.navigatorKey.currentContext!.setLocale(savedLocale);
notifyListeners(); notifyListeners();
} }

@ -78,7 +78,12 @@ class MarathonScreen extends StatelessWidget {
16.height, 16.height,
Column( Column(
children: <Widget>[ children: <Widget>[
(AppState().isArabic(context) ? AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr : AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn)!.toText22( displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: provider.demoMarathonDetailModel.selectedLanguage!,
arabicContent: AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr!,
englishContent: AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn!,
).toText22(
color: MyColors.grey3AColor, color: MyColors.grey3AColor,
isCentered: true, isCentered: true,
), ),
@ -92,7 +97,12 @@ class MarathonScreen extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[ children: <Widget>[
"${LocaleKeys.sponsoredBy.tr()} ".toText14(color: MyColors.grey77Color), "${LocaleKeys.sponsoredBy.tr()} ".toText14(color: MyColors.grey77Color),
(AppState().isArabic(context) ? provider.demoMarathonDetailModel.sponsors!.first.nameAr ?? "" : provider.demoMarathonDetailModel.sponsors!.first.nameEn ?? "").toText14( displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: provider.demoMarathonDetailModel.selectedLanguage!,
englishContent: provider.demoMarathonDetailModel.sponsors!.first.nameEn!,
arabicContent: provider.demoMarathonDetailModel.sponsors!.first.nameAr!,
).toText14(
color: MyColors.darkTextColor, color: MyColors.darkTextColor,
isBold: true, isBold: true,
), ),
@ -160,7 +170,12 @@ class MarathonScreen extends StatelessWidget {
provider.iAmWinner provider.iAmWinner
? Column( ? Column(
children: <Widget>[ children: <Widget>[
(AppState().isArabic(context) ? AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr : AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn)!.toText22( displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: provider.marathonDetailModel.selectedLanguage ?? 0,
arabicContent: AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr ?? "",
englishContent: AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn ?? "",
).toText24(
color: MyColors.grey3AColor, color: MyColors.grey3AColor,
isCentered: true, isCentered: true,
), ),
@ -170,10 +185,15 @@ class MarathonScreen extends StatelessWidget {
) )
: const SizedBox(), : const SizedBox(),
if (provider.selectedWinners != null) ...<Widget>[ if (provider.selectedWinners != null) ...<Widget>[
provider.selectedWinners!.length == 1 provider.selectedWinners!.length == 1 && !provider.iAmWinner
? Column( ? Column(
children: <Widget>[ children: <Widget>[
(AppState().isArabic(context) ? provider.selectedWinners![0].nameEn : provider.selectedWinners![0].nameEn)!.toText24( displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: provider.marathonDetailModel.selectedLanguage ?? 0,
arabicContent: provider.selectedWinners![0].nameAr ?? "",
englishContent: provider.selectedWinners![0].nameEn ?? "",
).toText24(
color: MyColors.grey3AColor, color: MyColors.grey3AColor,
isCentered: true, isCentered: true,
), ),
@ -191,10 +211,15 @@ class MarathonScreen extends StatelessWidget {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
(AppState().isArabic(context) ? provider.selectedWinners![index].nameEn : provider.selectedWinners![index].nameEn)!.toText16( displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: provider.marathonDetailModel.selectedLanguage ?? 0,
arabicContent: provider.selectedWinners![index].nameAr ?? "",
englishContent: provider.selectedWinners![index].nameEn ?? "",
).toText16(
color: MyColors.grey3AColor, color: MyColors.grey3AColor,
), ),
provider.selectedWinners!.first.employeeId!.toText16(color: MyColors.grey57Color), provider.selectedWinners![index].employeeId!.toText16(color: MyColors.grey57Color),
], ],
); );
}, },
@ -206,7 +231,12 @@ class MarathonScreen extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[ children: <Widget>[
"${LocaleKeys.sponsoredBy.tr()} ".toText14(color: MyColors.grey77Color), "${LocaleKeys.sponsoredBy.tr()} ".toText14(color: MyColors.grey77Color),
(AppState().isArabic(context) ? provider.marathonDetailModel.sponsors!.first.nameAr ?? "" : provider.marathonDetailModel.sponsors!.first.nameEn ?? "").toText14( displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: provider.marathonDetailModel.selectedLanguage!,
arabicContent: provider.marathonDetailModel.sponsors!.first.nameAr ?? "",
englishContent: provider.marathonDetailModel.sponsors!.first.nameEn ?? "",
).toText14(
color: MyColors.darkTextColor, color: MyColors.darkTextColor,
isBold: true, isBold: true,
), ),
@ -231,7 +261,7 @@ class MarathonScreen extends StatelessWidget {
); );
} }
Widget getNameContainer(BuildContext context) { Widget getNameContainer(BuildContext context, MarathonProvider provider) {
return Container( return Container(
height: 50, height: 50,
padding: const EdgeInsets.symmetric(horizontal: 20), padding: const EdgeInsets.symmetric(horizontal: 20),
@ -243,8 +273,12 @@ class MarathonScreen extends StatelessWidget {
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
(AppState().isArabic(context) ? AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr! : AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn!) displayLocalizedContent(
.toText17(isBold: true, color: MyColors.white), isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: (!AppState().getIsDemoMarathon ? provider.marathonDetailModel.selectedLanguage : provider.demoMarathonDetailModel.selectedLanguage) ?? 0,
arabicContent: AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEAr ?? "",
englishContent: AppState().memberInformationList!.eMPLOYEEDISPLAYNAMEEn ?? "",
).toText17(isBold: true, color: MyColors.white),
AppState().memberInformationList!.eMPLOYEENUMBER!.toText17(isBold: true, color: MyColors.white), AppState().memberInformationList!.eMPLOYEENUMBER!.toText17(isBold: true, color: MyColors.white),
], ],
), ),
@ -310,7 +344,7 @@ class MarathonScreen extends StatelessWidget {
MarathonProgressContainer(provider: provider).paddingOnly(left: 21, right: 21), MarathonProgressContainer(provider: provider).paddingOnly(left: 21, right: 21),
], ],
if (provider.questionCardStatus == QuestionCardStatus.findingWinner && !provider.isUserOutOfGame) ...<Widget>[ if (provider.questionCardStatus == QuestionCardStatus.findingWinner && !provider.isUserOutOfGame) ...<Widget>[
getNameContainer(context), getNameContainer(context, provider),
], ],
QuestionCardBuilder( QuestionCardBuilder(
onQuestion: (BuildContext context) => const QuestionCard(), onQuestion: (BuildContext context) => const QuestionCard(),

@ -434,7 +434,12 @@ class MarathonBanner extends StatelessWidget {
), ),
Flexible( Flexible(
child: Text( child: Text(
(AppState().isArabic(context) ? provider.marathonDetailModel.titleAr ?? "" : provider.marathonDetailModel.titleEn ?? "").trimString(isTablet ? 25 : 15), displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: provider.marathonDetailModel.selectedLanguage ?? 0,
englishContent: provider.marathonDetailModel.titleEn ?? "",
arabicContent: provider.marathonDetailModel.titleAr ?? "",
),
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: TextStyle( style: TextStyle(
fontStyle: FontStyle.italic, fontStyle: FontStyle.italic,
@ -525,10 +530,7 @@ class MarathonBanner extends StatelessWidget {
], ],
).onPress(() async { ).onPress(() async {
int remainingTimeInMinutes = DateTime.parse(provider.marathonDetailModel.startTime!).difference(DateTime.now()).inMinutes; int remainingTimeInMinutes = DateTime.parse(provider.marathonDetailModel.startTime!).difference(DateTime.now()).inMinutes;
if (remainingTimeInMinutes > 5 && provider.marathonDetailModel.sponsors != null && provider.marathonDetailModel.sponsors!.isNotEmpty) { if (remainingTimeInMinutes > 5 && provider.marathonDetailModel.sponsors != null && provider.marathonDetailModel.sponsors!.isNotEmpty) {
log("IF CALLED!!!");
log("Remaining Time: $remainingTimeInMinutes");
Utils.showLoading(context); Utils.showLoading(context);
try { try {
await provider.initializeVideoPlayer().then((_) { await provider.initializeVideoPlayer().then((_) {
@ -537,20 +539,16 @@ class MarathonBanner extends StatelessWidget {
Navigator.pushNamed(context, AppRoutes.marathonSponsorVideoScreen); Navigator.pushNamed(context, AppRoutes.marathonSponsorVideoScreen);
}); });
} catch (e) { } catch (e) {
// if (kDebugMode) { if (kDebugMode) {
log("Error in VideoPlayer: ${e.toString()}"); log("Error in VideoPlayer: ${e.toString()}");
// } }
Utils.hideLoading(context); Utils.hideLoading(context);
Navigator.pushNamed(context, AppRoutes.marathonIntroScreen).then((value) { Navigator.pushNamed(context, AppRoutes.marathonIntroScreen);
print("Back to home!!!");
});
} }
} else { } else {
log("ELSE CALLED!!!"); Navigator.pushNamed(context, AppRoutes.marathonIntroScreen);
Navigator.pushNamed(context, AppRoutes.marathonIntroScreen).then((value) {
print("Back to home!!!");
});
} }
provider.updateLanguageAsPerMarathon(context, provider.isUpComingMarathon ? provider.marathonDetailModel : provider.demoMarathonDetailModel);
}), }),
) )
: getNoUpcomingMarathonWidget(context); : getNoUpcomingMarathonWidget(context);

@ -39,11 +39,23 @@ class MarathonDetailsCard extends StatelessWidget {
), ),
7.height, 7.height,
LocaleKeys.contestTopicAbout.tr().toText16(color: MyColors.grey77Color), LocaleKeys.contestTopicAbout.tr().toText16(color: MyColors.grey77Color),
"${AppState().isArabic(context) ? marathonDetailModel.titleAr : marathonDetailModel.titleEn}".toText20(color: MyColors.textMixColor, isBold: true), displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: marathonDetailModel.selectedLanguage ?? 0,
englishContent: marathonDetailModel.titleEn ?? "",
arabicContent: marathonDetailModel.titleAr ?? "",
).toText20(color: MyColors.textMixColor, isBold: true),
Row( Row(
children: <Widget>[ children: <Widget>[
Flexible( Flexible(
child: "${AppState().isArabic(context) ? marathonDetailModel.descAr : marathonDetailModel.descEn}".toText14(color: MyColors.grey77Color), child: displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: marathonDetailModel.selectedLanguage ?? 0,
englishContent: marathonDetailModel.descEn ?? "",
arabicContent: marathonDetailModel.descAr ?? "",
).toText14(
color: MyColors.grey77Color,
),
) )
], ],
), ),
@ -57,18 +69,22 @@ class MarathonDetailsCard extends StatelessWidget {
child: SizedBox( child: SizedBox(
height: 30, height: 30,
child: ListView.builder( child: ListView.builder(
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
shrinkWrap: true, shrinkWrap: true,
itemCount: marathonDetailModel.sponsors!.first.sponsorPrizes!.length, itemCount: marathonDetailModel.sponsors!.first.sponsorPrizes!.length,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
SponsorPrizes prizes = marathonDetailModel.sponsors!.first.sponsorPrizes![index]; SponsorPrizes prizes = marathonDetailModel.sponsors!.first.sponsorPrizes![index];
return Container( return Container(
decoration: BoxDecoration(color: MyColors.backgroundColor, borderRadius: BorderRadius.circular(100), border: Border.all(color: MyColors.grey57Color.withOpacity(0.1))), decoration: BoxDecoration(color: MyColors.backgroundColor, borderRadius: BorderRadius.circular(100), border: Border.all(color: MyColors.grey57Color.withOpacity(0.1))),
child: "${AppState().isArabic(context) ? prizes.marathonPrizeAr : prizes.marathonPrizeEn}" child: displayLocalizedContent(
.toText16(color: MyColors.greenColor, isBold: true) isPhoneLangArabic: AppState().isArabic(context),
.paddingOnly(left: 5, right: 5), selectedLanguage: marathonDetailModel.selectedLanguage ?? 0,
).paddingOnly(left: 5); englishContent: prizes.marathonPrizeEn ?? "",
}), arabicContent: prizes.marathonPrizeAr ?? "",
).toText16(color: MyColors.greenColor, isBold: true).paddingOnly(left: 5, right: 5),
).paddingOnly(left: 5);
},
),
), ),
) )
], ],
@ -77,7 +93,12 @@ class MarathonDetailsCard extends StatelessWidget {
Row( Row(
children: <Widget>[ children: <Widget>[
"${LocaleKeys.sponsoredBy.tr()} ".toText16(color: MyColors.grey77Color), "${LocaleKeys.sponsoredBy.tr()} ".toText16(color: MyColors.grey77Color),
"${AppState().isArabic(context) ? marathonDetailModel.sponsors?.first.nameAr : marathonDetailModel.sponsors?.first.nameEn}".toText16(color: MyColors.darkTextColor, isBold: true), displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: marathonDetailModel.selectedLanguage ?? 0,
englishContent: marathonDetailModel.sponsors?.first.nameEn ?? "",
arabicContent: marathonDetailModel.sponsors?.first.nameAr ?? "",
).toText16(color: MyColors.darkTextColor, isBold: true),
], ],
), ),
10.height, 10.height,

@ -3,8 +3,6 @@ import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
import 'package:provider/provider.dart';
class MarathonHeader extends StatelessWidget { class MarathonHeader extends StatelessWidget {
const MarathonHeader({Key? key}) : super(key: key); const MarathonHeader({Key? key}) : super(key: key);

@ -85,7 +85,12 @@ class CardContent extends StatelessWidget {
child: Padding( child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 13, vertical: 15), padding: const EdgeInsets.symmetric(horizontal: 13, vertical: 15),
child: Text( child: Text(
AppState().isArabic(context) ? "${provider.currentQuestion.titleAr}" ?? "" : provider.currentQuestion.titleEn ?? "", displayLocalizedContent(
isPhoneLangArabic: AppState().isArabic(context),
selectedLanguage: (AppState().getIsDemoMarathon ? provider.demoMarathonDetailModel.selectedLanguage : provider.marathonDetailModel.selectedLanguage) ?? 0,
englishContent: provider.currentQuestion.titleEn ?? "",
arabicContent: provider.currentQuestion.titleAr ?? "",
),
style: const TextStyle( style: const TextStyle(
color: MyColors.white, color: MyColors.white,
fontSize: 16, fontSize: 16,
@ -170,9 +175,12 @@ class AnswerTileForText extends StatelessWidget {
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
decoration: MyDecorations.getAnswersContainerColor(provider.currentQuestion.questionOptions![index].optionStatus!), decoration: MyDecorations.getAnswersContainerColor(provider.currentQuestion.questionOptions![index].optionStatus!),
child: Center( child: Center(
child: (AppState().isArabic(context) ? provider.currentQuestion.questionOptions![index].titleAr! : provider.currentQuestion.questionOptions![index].titleEn!) child: displayLocalizedContent(
.toText16(color: provider.isUserOutOfGame ? MyColors.darkTextColor : getAnswerTextColor(provider.currentQuestion.questionOptions![index].optionStatus!)) isPhoneLangArabic: AppState().isArabic(context),
.paddingOnly(top: 13, bottom: 13), selectedLanguage: (AppState().getIsDemoMarathon ? provider.demoMarathonDetailModel.selectedLanguage : provider.marathonDetailModel.selectedLanguage) ?? 0,
englishContent: provider.currentQuestion.questionOptions![index].titleEn ?? "",
arabicContent: provider.currentQuestion.questionOptions![index].titleAr ?? "",
).toText16(color: provider.isUserOutOfGame ? MyColors.darkTextColor : getAnswerTextColor(provider.currentQuestion.questionOptions![index].optionStatus!)).paddingOnly(top: 13, bottom: 13),
), ),
), ),
); );

@ -4,6 +4,9 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:geolocator/geolocator.dart'; import 'package:geolocator/geolocator.dart';
import 'package:huawei_location/location/fused_location_provider_client.dart';
import 'package:huawei_location/location/location_request.dart';
import 'package:huawei_location/location/location_settings_request.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/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/colors.dart';
@ -39,6 +42,8 @@ class MarkAttendanceWidget extends StatefulWidget {
class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> { class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
bool isNfcEnabled = false, isNfcLocationEnabled = false, isQrEnabled = false, isQrLocationEnabled = false, isWifiEnabled = false, isWifiLocationEnabled = false; bool isNfcEnabled = false, isNfcLocationEnabled = false, isQrEnabled = false, isQrLocationEnabled = false, isWifiEnabled = false, isWifiLocationEnabled = false;
int _locationUpdateCbId = 0;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -95,13 +100,17 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
// if (isNfcEnabled) // if (isNfcEnabled)
attendanceMethod("NFC", "assets/images/nfc.svg", isNfcEnabled, () { attendanceMethod("NFC", "assets/images/nfc.svg", isNfcEnabled, () {
if (isNfcLocationEnabled) { if (isNfcLocationEnabled) {
Location.getCurrentLocation((Position position, bool isMocked) { if (AppState().getIsHuawei) {
if (isMocked) { getHuaweiCurrentLocation("NFC");
markFakeAttendance("NFC", position.latitude.toString() ?? "", position.longitude.toString() ?? ""); } else {
} else { Location.getCurrentLocation((Position position, bool isMocked) {
performNfcAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? ""); if (isMocked) {
} markFakeAttendance("NFC", position.latitude.toString() ?? "", position.longitude.toString() ?? "");
}, context); } else {
performNfcAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? "");
}
}, context);
}
} else { } else {
performNfcAttendance(widget.model); performNfcAttendance(widget.model);
} }
@ -109,13 +118,17 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
if (isWifiEnabled) if (isWifiEnabled)
attendanceMethod("Wifi", "assets/images/wufu.svg", isWifiEnabled, () { attendanceMethod("Wifi", "assets/images/wufu.svg", isWifiEnabled, () {
if (isWifiLocationEnabled) { if (isWifiLocationEnabled) {
Location.getCurrentLocation((Position position, bool isMocked) { if (AppState().getIsHuawei) {
if (isMocked) { getHuaweiCurrentLocation("WIFI");
markFakeAttendance("WIFI", position.latitude.toString() ?? "", position.longitude.toString() ?? ""); } else {
} else { Location.getCurrentLocation((Position position, bool isMocked) {
performWifiAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? ""); if (isMocked) {
} markFakeAttendance("WIFI", position.latitude.toString() ?? "", position.longitude.toString() ?? "");
}, context); } else {
performWifiAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? "");
}
}, context);
}
} else { } else {
performWifiAttendance(widget.model); performWifiAttendance(widget.model);
} }
@ -124,13 +137,17 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
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 (isQrLocationEnabled) {
Location.getCurrentLocation((Position position, bool isMocked) { if (AppState().getIsHuawei) {
if (isMocked) { getHuaweiCurrentLocation("QR");
markFakeAttendance("QR", position.latitude.toString() ?? "", position.longitude.toString() ?? ""); } else {
} else { Location.getCurrentLocation((Position position, bool isMocked) {
performQrCodeAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? ""); if (isMocked) {
} markFakeAttendance("QR", position.latitude.toString() ?? "", position.longitude.toString() ?? "");
}, context); } else {
performQrCodeAttendance(widget.model, lat: position.latitude.toString() ?? "", lng: position.longitude.toString() ?? "");
}
}, context);
}
} else { } else {
performQrCodeAttendance(widget.model); performQrCodeAttendance(widget.model);
} }
@ -143,6 +160,33 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
); );
} }
void getHuaweiCurrentLocation(String attendanceType) {
FusedLocationProviderClient locationService = FusedLocationProviderClient();
LocationRequest locationRequest = LocationRequest();
locationRequest.priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY;
locationRequest.interval = 1000;
List<LocationRequest> locationRequestList = <LocationRequest>[locationRequest];
LocationSettingsRequest locationSettingsRequest = LocationSettingsRequest(requests: locationRequestList);
locationService.checkLocationSettings(locationSettingsRequest).then((settings) async {
await locationService.getLastLocation().then((value) {
if (attendanceType == "QR") {
performQrCodeAttendance(widget.model, lat: value.latitude.toString() ?? "", lng: value.longitude.toString() ?? "");
}
if (attendanceType == "WIFI") {
performWifiAttendance(widget.model, lat: value.latitude.toString() ?? "", lng: value.longitude.toString() ?? "");
}
if (attendanceType == "NFC") {
performNfcAttendance(widget.model, lat: value.latitude.toString() ?? "", lng: value.longitude.toString() ?? "");
}
});
}).catchError((error) {
if (error.code == "LOCATION_SETTINGS_NOT_AVAILABLE") {
// Location service not enabled.
}
});
}
Future<void> performNfcAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async { Future<void> performNfcAttendance(DashboardProviderModel model, {String lat = "0", String lng = "0"}) async {
if (Platform.isIOS) { if (Platform.isIOS) {
Utils.readNFc(onRead: (String nfcId) async { Utils.readNFc(onRead: (String nfcId) async {
@ -252,12 +296,26 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
bool status = await model.fetchAttendanceTracking(context); bool status = await model.fetchAttendanceTracking(context);
Utils.hideLoading(context); Utils.hideLoading(context);
await closeWifiRequest(); await closeWifiRequest();
showMDialog( if (g?.messageStatus == 2) {
context, showDialog(
backgroundColor: Colors.transparent, barrierDismissible: true,
isDismissable: false, context: context,
child: SuccessDialog(widget.isFromDashboard), builder: (cxt) => ConfirmDialog(
); message: g?.errorEndUserMessage ?? "",
onTap: () {
Navigator.pop(context);
},
onCloseTap: () {},
),
);
} else {
showMDialog(
context,
backgroundColor: Colors.transparent,
isDismissable: false,
child: SuccessDialog(widget.isFromDashboard),
);
}
} catch (ex) { } catch (ex) {
await closeWifiRequest(); await closeWifiRequest();
Utils.hideLoading(context); Utils.hideLoading(context);
@ -292,12 +350,26 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 1, isGpsRequired: isQrLocationEnabled, lat: lat, long: lng, QRValue: qrCodeValue); GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 1, isGpsRequired: isQrLocationEnabled, lat: lat, long: lng, QRValue: qrCodeValue);
bool status = await model.fetchAttendanceTracking(context); bool status = await model.fetchAttendanceTracking(context);
Utils.hideLoading(context); Utils.hideLoading(context);
showMDialog( if (g?.messageStatus == 2) {
context, showDialog(
backgroundColor: Colors.transparent, barrierDismissible: true,
isDismissable: true, context: context,
child: SuccessDialog(widget.isFromDashboard), builder: (cxt) => ConfirmDialog(
); message: g?.errorEndUserMessage ?? "",
onTap: () {
Navigator.pop(context);
},
onCloseTap: () {},
),
);
} else {
showMDialog(
context,
backgroundColor: Colors.transparent,
isDismissable: true,
child: SuccessDialog(widget.isFromDashboard),
);
}
} catch (ex) { } catch (ex) {
print(ex); print(ex);
Utils.hideLoading(context); Utils.hideLoading(context);

@ -68,6 +68,8 @@ class _QrScannerDialogState extends State<QrScannerDialog> {
} }
}); });
}); });
controller.pauseCamera();
controller.resumeCamera();
} }
@override @override

Loading…
Cancel
Save