From eea339446103a38e0eaf687ce534bd2a90b8a517 Mon Sep 17 00:00:00 2001 From: FaizHashmiCS22 Date: Wed, 4 Oct 2023 12:25:12 +0300 Subject: [PATCH] Widgets Info Completed --- assets/icons/mosque.png | Bin 8924 -> 0 bytes assets/icons/mosque.svg | 1 + lib/core/api.dart | 12 ++- lib/core/config/config.dart | 2 +- .../response_models/prayers_widget_model.dart | 31 +++++-- lib/header/app_header.dart | 87 ++++++++++-------- lib/home/app_provider.dart | 52 +++++++++-- lib/home/home_screen.dart | 2 +- pubspec.lock | 8 ++ pubspec.yaml | 1 + 10 files changed, 131 insertions(+), 65 deletions(-) delete mode 100644 assets/icons/mosque.png create mode 100644 assets/icons/mosque.svg diff --git a/assets/icons/mosque.png b/assets/icons/mosque.png deleted file mode 100644 index 6d736d7bee9b52e873fcace9b5a3209a4685ac10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8924 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 axyX$`Hy>u*mLc#a3PiB9wn 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