Widgets Info Completed

master
FaizHashmiCS22 2 years ago
parent 74aefd4b05
commit eea3394461

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

@ -0,0 +1 @@
<svg id="solid" enable-background="new 0 0 100 100" height="512" viewBox="0 0 100 100" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m58.5 87v3h-4v-3c0-1.105.895-2 2-2s2 .895 2 2z"/><path d="m30.414 43.586c.375-.375.586-.884.586-1.414v-2.172c0-1.105-.895-2-2-2h-2v-5c0-3.866-3.134-7-7-7s-7 3.134-7 7v5h-2c-1.105 0-2 .895-2 2v2.172c0 .53.211 1.039.586 1.414l2.414 2.414v15h-5c-1.103.003-1.997.897-2 2v3.04c.001.607.277 1.18.75 1.56l4.25 3.4v19h12v-7c.005-1.655 1.345-2.995 3-3v-3c.005-1.655 1.345-2.995 3-3h.95c-.02-.71-.02-1.74.05-3 .181-3.391.768-6.749 1.75-10h-2.75v-15zm-7.414 17.414h-2v-3c0-.552-.448-1-1-1s-1 .448-1 1v3h-2v-3c0-1.657 1.343-3 3-3s3 1.343 3 3z"/><path d="m20.414 22c-2.113.002-3.827-1.71-3.829-3.823-.001-1.017.403-1.992 1.122-2.71.384-.397 1.017-.408 1.414-.025s.408 1.017.025 1.414c-.008.008-.016.017-.025.025-.699.729-.674 1.887.056 2.586.707.678 1.823.678 2.53 0 .384-.397 1.017-.408 1.414-.025.397.384.408 1.017.025 1.414-.008.008-.016.017-.025.025-.718.718-1.692 1.121-2.707 1.119z"/><path d="m20 26.5c-.552 0-1-.448-1-1v-4.5c0-.552.448-1 1-1s1 .448 1 1v4.5c0 .552-.448 1-1 1z"/><path d="m53.15 36.94c.74-1.77 2.13-5.28 2.23-6.82.08-1.23-.9-3.62-.8-4.85.15-1.91 2.42-7.27 2.42-7.27s2.27 5.36 2.42 7.27c.1 1.23-.88 3.62-.8 4.85.1 1.54 1.49 5.05 2.23 6.82z"/><path d="m83.05 74h-52.1c-.12-4.09.31-20.99 14.8-29.66 2.556-1.627 5.001-3.421 7.32-5.37h7.83c2.266 2.029 4.728 3.828 7.35 5.37 14.49 8.67 14.92 25.57 14.8 29.66z"/><path d="m27 82v-5c0-.552.448-1 1-1h58c.552 0 1 .448 1 1v5z"/><path d="m90 83v7h-29.5v-3c0-2.209-1.791-4-4-4s-4 1.791-4 4v3h-28.5v-7c0-.552.448-1 1-1h64c.552 0 1 .448 1 1z"/></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -102,7 +102,7 @@ class API {
return widgetsConfigModel;
}
static Future<WeathersWidgetModel> getWeatherDetailsFromServer(String cityId, {required Function(dynamic) onFailure}) async {
static Future<WeathersWidgetModel?> 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<List<PrayersWidgetModel?>> getPrayerDetailsFromServer({
static Future<PrayersWidgetModel?> 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> 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;
}
}

@ -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";

@ -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<String, dynamic> 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<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
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}';
}
}

@ -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,

@ -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<void> 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<PrayersWidgetModel?> currentPrayersWidgetModel = [];
PrayersWidgetModel currentPrayersWidgetModel = PrayersWidgetModel();
Future<void> getPrayerDetailsFromServer() async {
List<PrayersWidgetModel?> 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();
});
}

@ -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<AppProvider>();
return AppScaffold(
appProvider: appProvider,
appBar: AppHeader(),

@ -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:

@ -45,6 +45,7 @@ dependencies:
shared_preferences: ^2.2.1
#signalr core
signalr_core: ^1.1.1
intl: ^0.18.1

Loading…
Cancel
Save