diff --git a/assets/icons/mosque.png b/assets/icons/mosque.png
deleted file mode 100644
index 6d736d7..0000000
Binary files a/assets/icons/mosque.png and /dev/null differ
diff --git a/assets/icons/mosque.svg b/assets/icons/mosque.svg
new file mode 100644
index 0000000..2eded13
--- /dev/null
+++ b/assets/icons/mosque.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/lib/core/api.dart b/lib/core/api.dart
index 9e66b0b..8df4e3b 100644
--- a/lib/core/api.dart
+++ b/lib/core/api.dart
@@ -102,7 +102,7 @@ class API {
return widgetsConfigModel;
}
- static Future getWeatherDetailsFromServer(String cityId, {required Function(dynamic) onFailure}) async {
+ static Future getWeatherDetailsFromServer(String cityId, {required Function(dynamic) onFailure}) async {
final body = {"cityID": cityId};
WeathersWidgetModel weathersWidgetModel = WeathersWidgetModel();
await BaseAppClient.post(_weatherForecastGetBy5Days,
@@ -116,21 +116,23 @@ class API {
return weathersWidgetModel;
}
- static Future> getPrayerDetailsFromServer({
+ static Future getPrayerDetailsFromServer({
required double latitude,
required double longitude,
required Function(dynamic) onFailure,
}) async {
final body = {"latitude": latitude, "longitude": longitude};
+
+ PrayersWidgetModel currentPrayersWidgetModel = PrayersWidgetModel();
await BaseAppClient.post(_prayerTimeToday,
body: body,
onSuccess: (response, status) {
if (status == 200 && response["data"] != null) {
- List prayersWidgetModel = (response["data"] as List).map((e) => PrayersWidgetModel.fromJson(e)).toList();
- return prayersWidgetModel;
+ final prayersWidgetModel = (response["data"] as List).map((e) => PrayersWidgetModel.fromJson(e)).toList().first;
+ currentPrayersWidgetModel = prayersWidgetModel;
}
},
onFailure: (error, status) => log("error: ${error.toString()}"));
- return [];
+ return currentPrayersWidgetModel;
}
}
diff --git a/lib/core/config/config.dart b/lib/core/config/config.dart
index 6556230..55addbe 100644
--- a/lib/core/config/config.dart
+++ b/lib/core/config/config.dart
@@ -37,7 +37,7 @@ class AppGlobal {
static String vaccinationIcon = "assets/images/vaccination_icon.svg";
//Widgets
- static String mosqueIcon = "assets/icons/mosque.png";
+ static String mosqueIcon = "assets/icons/mosque.svg";
static String weatherIcon = "assets/icons/weather.svg";
static String cloudIcon = "assets/icons/cloudy.svg";
diff --git a/lib/core/response_models/prayers_widget_model.dart b/lib/core/response_models/prayers_widget_model.dart
index c985644..84f8a70 100644
--- a/lib/core/response_models/prayers_widget_model.dart
+++ b/lib/core/response_models/prayers_widget_model.dart
@@ -1,11 +1,13 @@
+import 'package:intl/intl.dart';
+
class PrayersWidgetModel {
- String? fajr;
+ int? fajr;
String? sunrise;
- String? dhuhr;
- String? asr;
+ int? dhuhr;
+ int? asr;
String? sunset;
- String? maghrib;
- String? isha;
+ int? maghrib;
+ int? isha;
String? imsak;
String? midnight;
String? firstthird;
@@ -15,13 +17,13 @@ class PrayersWidgetModel {
PrayersWidgetModel({this.fajr, this.sunrise, this.dhuhr, this.asr, this.sunset, this.maghrib, this.isha, this.imsak, this.midnight, this.firstthird, this.lastthird, this.dateFor});
PrayersWidgetModel.fromJson(Map json) {
- fajr = json['fajr'];
+ fajr = dateTimeConversion(json['dateFor'], json['fajr']);
sunrise = json['sunrise'];
- dhuhr = json['dhuhr'];
- asr = json['asr'];
+ dhuhr = dateTimeConversion(json['dateFor'], json['dhuhr']);
+ asr = dateTimeConversion(json['dateFor'], json['asr']);
sunset = json['sunset'];
- maghrib = json['maghrib'];
- isha = json['isha'];
+ maghrib = dateTimeConversion(json['dateFor'], json['maghrib']);
+ isha = dateTimeConversion(json['dateFor'], json['isha']);
imsak = json['imsak'];
midnight = json['midnight'];
firstthird = json['firstthird'];
@@ -29,6 +31,10 @@ class PrayersWidgetModel {
dateFor = json['dateFor'];
}
+ static dateTimeConversion(String date, String time) {
+ return DateFormat('DD MMM yyyy hh:mm').parse("$date $time").millisecondsSinceEpoch;
+ }
+
Map toJson() {
final Map data = {};
data['fajr'] = fajr;
@@ -45,4 +51,9 @@ class PrayersWidgetModel {
data['dateFor'] = dateFor;
return data;
}
+
+ @override
+ String toString() {
+ return 'PrayersWidgetModel{fajr: $fajr, sunrise: $sunrise, dhuhr: $dhuhr, asr: $asr, sunset: $sunset, maghrib: $maghrib, isha: $isha, imsak: $imsak, midnight: $midnight, firstthird: $firstthird, lastthird: $lastthird, dateFor: $dateFor}';
+ }
}
diff --git a/lib/header/app_header.dart b/lib/header/app_header.dart
index 0ba8bcd..b2f1518 100644
--- a/lib/header/app_header.dart
+++ b/lib/header/app_header.dart
@@ -10,49 +10,58 @@ import 'package:queuing_system/widget/data_display/app_texts_widget.dart';
class AppHeader extends StatelessWidget with PreferredSizeWidget {
const AppHeader({Key? key}) : super(key: key);
- Widget getWeatherWidget(AppProvider appProvider) {
- if (appProvider.currentWeathersWidgetModel.maxTemp == null || appProvider.currentWeathersWidgetModel.minTemp == null || appProvider.currentWeathersWidgetModel.iconPhrase == null) {
- return const SizedBox.shrink();
- }
- return Row(
- children: [
- SvgPicture.asset(
- AppGlobal.weatherIcon,
- height: SizeConfig.getHeightMultiplier() * 2.5,
- color: Colors.white,
- ),
- const SizedBox(width: 10),
- Padding(
- padding: const EdgeInsets.only(top: 15),
- child: AppText(
- "Max: ${appProvider.currentWeathersWidgetModel.maxTemp}°C , Min: ${appProvider.currentWeathersWidgetModel.minTemp}°C",
+ getWeatherIcon() {}
+
+ Widget getWeatherWidget() {
+ return Consumer(builder: (BuildContext context, AppProvider appProvider, Widget? child) {
+ if (appProvider.currentWeathersWidgetModel.maxTemp == null || appProvider.currentWeathersWidgetModel.minTemp == null || appProvider.currentWeathersWidgetModel.iconPhrase == null) {
+ return const SizedBox.shrink();
+ }
+ return Row(
+ children: [
+ SvgPicture.asset(
+ AppGlobal.weatherIcon,
+ height: SizeConfig.getHeightMultiplier() * 2.5,
color: Colors.white,
- fontSize: SizeConfig.getHeightMultiplier() * 1.3,
),
- ),
- ],
- );
+ const SizedBox(width: 10),
+ Padding(
+ padding: const EdgeInsets.only(top: 15),
+ child: AppText(
+ "Max: ${appProvider.currentWeathersWidgetModel.maxTemp}°C , Min: ${appProvider.currentWeathersWidgetModel.minTemp}°C",
+ color: Colors.white,
+ fontSize: SizeConfig.getHeightMultiplier() * 1.3,
+ ),
+ ),
+ ],
+ );
+ });
}
- Widget getPrayerWidget(AppProvider appProvider) {
- return Row(
- children: [
- Image.asset(
- AppGlobal.mosqueIcon,
- height: SizeConfig.getHeightMultiplier() * 2.5,
- color: Colors.white,
- ),
- const SizedBox(width: 10),
- Padding(
- padding: const EdgeInsets.only(top: 15),
- child: AppText(
- "Next Prayer: Dhuhr (11:49am)",
+ Widget getPrayerWidget() {
+ return Consumer(builder: (BuildContext context, AppProvider appProvider, Widget? child) {
+ if (appProvider.nextPrayerToShowWithTime.isEmpty) {
+ return const SizedBox.shrink();
+ }
+ return Row(
+ children: [
+ SvgPicture.asset(
+ AppGlobal.mosqueIcon,
+ height: SizeConfig.getHeightMultiplier() * 2.5,
color: Colors.white,
- fontSize: SizeConfig.getHeightMultiplier() * 1.3,
),
- ),
- ],
- );
+ const SizedBox(width: 10),
+ Padding(
+ padding: const EdgeInsets.only(top: 15),
+ child: AppText(
+ "Next Prayer: ${appProvider.nextPrayerToShowWithTime}",
+ color: Colors.white,
+ fontSize: SizeConfig.getHeightMultiplier() * 1.3,
+ ),
+ ),
+ ],
+ );
+ });
}
@override
@@ -84,8 +93,8 @@ class AppHeader extends StatelessWidget with PreferredSizeWidget {
color: Colors.white,
),
),
- getPrayerWidget(appProvider),
- getWeatherWidget(appProvider),
+ getPrayerWidget(),
+ getWeatherWidget(),
SvgPicture.asset(
"assets/images/hmglogo.svg",
height: Utils.getHeight() * 0.5,
diff --git a/lib/home/app_provider.dart b/lib/home/app_provider.dart
index 7606cf5..ac3a8a4 100644
--- a/lib/home/app_provider.dart
+++ b/lib/home/app_provider.dart
@@ -5,6 +5,7 @@ import 'dart:io';
import 'package:connectivity/connectivity.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_tts/flutter_tts.dart';
+import 'package:intl/intl.dart';
import 'package:just_audio/just_audio.dart';
import 'package:queuing_system/core/api.dart';
import 'package:queuing_system/core/response_models/call_config_model.dart';
@@ -99,23 +100,55 @@ class AppProvider extends ChangeNotifier {
}
}
- PrayersWidgetModel nextPrayerToShow = PrayersWidgetModel();
-
- Future getTheNextPrayerToShow() async {
+ String nextPrayerToShowWithTime = '';
+ void getNextPrayerToShow() {
+ log("Checking Namaz time!");
+ final current = DateTime.now();
+ if (DateTime.fromMillisecondsSinceEpoch(currentPrayersWidgetModel.fajr!).isAfter(current)) {
+ final namazTime = DateFormat('hh:mm a').format(DateTime.fromMillisecondsSinceEpoch(currentPrayersWidgetModel.fajr!));
+ nextPrayerToShowWithTime = "Fajr ($namazTime)";
+ notifyListeners();
+ return;
+ }
+ if (DateTime.fromMillisecondsSinceEpoch(currentPrayersWidgetModel.dhuhr!).isAfter(current)) {
+ final namazTime = DateFormat('hh:mm a').format(DateTime.fromMillisecondsSinceEpoch(currentPrayersWidgetModel.dhuhr!));
+ nextPrayerToShowWithTime = "Dhuhr ($namazTime)";
+ notifyListeners();
+ return;
+ }
+ if (DateTime.fromMillisecondsSinceEpoch(currentPrayersWidgetModel.asr!).isAfter(current)) {
+ final namazTime = DateFormat('hh:mm a').format(DateTime.fromMillisecondsSinceEpoch(currentPrayersWidgetModel.asr!));
+ nextPrayerToShowWithTime = "Asar ($namazTime)";
+ notifyListeners();
+ return;
+ }
+ if (DateTime.fromMillisecondsSinceEpoch(currentPrayersWidgetModel.maghrib!).isAfter(current)) {
+ final namazTime = DateFormat('hh:mm a').format(DateTime.fromMillisecondsSinceEpoch(currentPrayersWidgetModel.maghrib!));
+ nextPrayerToShowWithTime = "Maghrib ($namazTime)";
+ notifyListeners();
+ return;
+ }
+ if (DateTime.fromMillisecondsSinceEpoch(currentPrayersWidgetModel.isha!).isAfter(current)) {
+ final namazTime = DateFormat('hh:mm a').format(DateTime.fromMillisecondsSinceEpoch(currentPrayersWidgetModel.isha!));
+ nextPrayerToShowWithTime = "Isha ($namazTime)";
+ notifyListeners();
+ return;
+ }
}
- List currentPrayersWidgetModel = [];
+ PrayersWidgetModel currentPrayersWidgetModel = PrayersWidgetModel();
Future getPrayerDetailsFromServer() async {
- List prayersWidgetModel = await API.getPrayerDetailsFromServer(
+ PrayersWidgetModel? prayersWidgetModel = await API.getPrayerDetailsFromServer(
latitude: currentWidgetsConfigModel!.projectLatitude ?? 0,
longitude: currentWidgetsConfigModel!.projectLongitude ?? 0,
onFailure: (error) => log("Api call failed with this error: ${error.toString()}"));
- if (prayersWidgetModel.isNotEmpty) {
+ if (prayersWidgetModel != null) {
currentPrayersWidgetModel = prayersWidgetModel;
- log("I got this data: ${prayersWidgetModel.toString()}");
+ log("I got this data from Prayers: ${prayersWidgetModel.toString()}");
+ getNextPrayerToShow();
notifyListeners();
}
}
@@ -143,8 +176,8 @@ class AppProvider extends ChangeNotifier {
}
DateTime current = DateTime.now();
- Stream timer = Stream.periodic(const Duration(hours: 1), (i) {
- current = current.add(const Duration(hours: 1));
+ Stream timer = Stream.periodic(const Duration(minutes: 1), (i) {
+ current = current.add(const Duration(minutes: 1));
return current;
});
@@ -162,6 +195,7 @@ class AppProvider extends ChangeNotifier {
await getPrayerDetailsFromServer();
}
}
+ getNextPrayerToShow();
});
}
diff --git a/lib/home/home_screen.dart b/lib/home/home_screen.dart
index b39fb28..6b936d3 100644
--- a/lib/home/home_screen.dart
+++ b/lib/home/home_screen.dart
@@ -1,4 +1,3 @@
-
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:queuing_system/core/base/app_scaffold_widget.dart';
@@ -15,6 +14,7 @@ class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final appProvider = context.watch();
+
return AppScaffold(
appProvider: appProvider,
appBar: AppHeader(),
diff --git a/pubspec.lock b/pubspec.lock
index f396328..ffbeefe 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -200,6 +200,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.0.2"
+ intl:
+ dependency: "direct main"
+ description:
+ name: intl
+ sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.18.1"
js:
dependency: transitive
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 3d20df2..a7e65a1 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -45,6 +45,7 @@ dependencies:
shared_preferences: ^2.2.1
#signalr core
signalr_core: ^1.1.1
+ intl: ^0.18.1