dapatkanJadualWaktuSolat function
Future<List<WaktuSolat> ?>
dapatkanJadualWaktuSolat(
- ZonWaktuSolat zonWaktuSolat, {
- TempohJadual tempohJadual = TempohJadual.harini,
- DateTime? mula,
- DateTime? tamat,
untuk mendapatkan waktu solat
memerlukan zonWaktuSolat
dan boleh dipilih melalui enum ZonWaktuSolat atau melalui
method tentukanZon().
Untuk tempohJadual
, secara lalai akan menggunakan waktu solat hari ini namun boleh memilih juga
untuk tempoh waktu lain yang terdapat di enum TempohJadual.
Untuk TempohJadual.durasi, pastikan disertakan juga dengan mula
dan tamat
dalam jenis DateTime
Implementation
Future<List<WaktuSolat>?> dapatkanJadualWaktuSolat(
ZonWaktuSolat zonWaktuSolat, {
TempohJadual tempohJadual = TempohJadual.harini,
DateTime? mula,
DateTime? tamat,
}) async {
final DateFormat dateFormat = DateFormat('yyyy-MM-dd');
List<WaktuSolat>? senaraiWaktuSolat = [];
late http.Response? response;
final Uri url = Uri.parse(
_urlPath('&zone=${zonWaktuSolat.name}&period=${tempohJadual.nama}'));
try {
if (tempohJadual == TempohJadual.durasi) {
final formatTarikhMula = dateFormat.format(mula!);
final formatTarikhTamat = dateFormat.format(tamat!);
response = await http.post(
url,
headers: <String, String>{
'Content-Type': 'application/x-www-form-urlencoded',
},
body: 'datestart=$formatTarikhMula&dateend=$formatTarikhTamat',
);
} else {
response = await http.get(url);
}
final json = await jsonDecode(response.body);
for (var items in json["prayerTime"]) {
var temp = WaktuSolat.fromJson(items);
senaraiWaktuSolat.add(temp);
}
return senaraiWaktuSolat;
} on FormatException {
if (mula?.year != tamat?.year) {
throw ('Ralat pada pelayan: Maaf, tidak dapat memberikan jadual waktu solat jika tahun berbeza');
} else if (tempohJadual == TempohJadual.minggu) {
final harini = DateTime.now();
final tujuhHariSelepasHarini = harini.add(Duration(days: 7));
if (harini.year != tujuhHariSelepasHarini.year) {
throw ('Ralat pada pelayan: Maaf, tidak dapat memberikan jadual waktu solat jika tahun berbeza');
}
}
} catch (e) {
// tak berikan nilai pada param tarikhMula atau tarikhTamat jika gunakan TempohJadual.durasi
if (tempohJadual == TempohJadual.durasi) {
if (mula == null && tamat == null) {
throw ('Ralat: tiada nilai pada "tarikhMula" & "tarikhTamat"');
} else if (mula == null) {
throw ('Ralat: tiada nilai pada "tarikhMula"');
} else if (tamat == null) {
throw ('Ralat: tiada nilai pada "tarikhTamat"');
} else {
throw ('Ralat: $e');
}
}
if (response?.statusCode != 200) {
throw ('Ralat menghubungi pelayan. Huraian: $e');
} else {
throw ('Ralat: $e');
}
}
return null;
}