@@ -44,12 +44,14 @@ class AddOrUpdateAlarmController extends GetxController {
44
44
final shakeTimes = 0. obs;
45
45
final isPedometerEnabled = false .obs;
46
46
final numberOfSteps = 0. obs;
47
- var ownerId = '' ;
47
+ var ownerId = '' .obs; // id -> owner of the alarm
48
+ var ownerName = '' .obs; // name -> owner of the alarm
49
+ var userId = '' .obs; // id -> loggedin user
50
+ var userName = '' .obs; // name -> loggedin user
48
51
final mutexLock = false .obs;
49
- var lastEditedUserId = '' ;
50
- var ownerName = '' ;
52
+ var lastEditedUserId = '' .obs;
51
53
final sharedUserIds = < String > [].obs;
52
- AlarmModel ? alarmRecord = Get .arguments ;
54
+ var alarmRecord = Rxn < AlarmModel >( null ) ;
53
55
final RxMap offsetDetails = {}.obs;
54
56
final offsetDuration = 0. obs;
55
57
final isOffsetBefore = true .obs;
@@ -97,7 +99,7 @@ class AddOrUpdateAlarmController extends GetxController {
97
99
Future <List <UserModel ?>> fetchUserDetailsForSharedUsers () async {
98
100
List <UserModel ?> userDetails = [];
99
101
100
- for (String userId in alarmRecord? .sharedUserIds ?? []) {
102
+ for (String userId in alarmRecord.value ? .sharedUserIds ?? []) {
101
103
userDetails.add (await FirestoreDb .fetchUserDetails (userId));
102
104
}
103
105
@@ -398,9 +400,10 @@ class AddOrUpdateAlarmController extends GetxController {
398
400
399
401
createAlarm (AlarmModel alarmData) async {
400
402
if (isSharedAlarmEnabled.value == true ) {
401
- alarmRecord = await FirestoreDb .addAlarm (userModel.value, alarmData);
403
+ alarmRecord.value =
404
+ await FirestoreDb .addAlarm (userModel.value, alarmData);
402
405
} else {
403
- alarmRecord = await IsarDb .addAlarm (alarmData);
406
+ alarmRecord.value = await IsarDb .addAlarm (alarmData);
404
407
}
405
408
406
409
Future .delayed (const Duration (seconds: 1 ), () {
@@ -626,25 +629,23 @@ class AddOrUpdateAlarmController extends GetxController {
626
629
if (isSharedAlarmEnabled.value == true ) {
627
630
// Making sure the alarm wasn't suddenly updated to be an
628
631
// online (shared) alarm
629
- if (await IsarDb .doesAlarmExist (alarmRecord! .alarmID) == false ) {
630
- alarmData.firestoreId = alarmRecord! .firestoreId;
631
- await FirestoreDb .updateAlarm (alarmRecord! .ownerId, alarmData);
632
+ if (await IsarDb .doesAlarmExist (alarmRecord.value ! .alarmID) == false ) {
633
+ alarmData.firestoreId = alarmRecord.value ! .firestoreId;
634
+ await FirestoreDb .updateAlarm (alarmRecord.value ! .ownerId, alarmData);
632
635
} else {
633
636
// Deleting alarm on IsarDB to ensure no duplicate entry
634
- await IsarDb .deleteAlarm (alarmRecord! .isarId);
637
+ await IsarDb .deleteAlarm (alarmRecord.value ! .isarId);
635
638
createAlarm (alarmData);
636
639
}
637
640
} else {
638
641
// Making sure the alarm wasn't suddenly updated to be an offline alarm
639
- if (await IsarDb .doesAlarmExist (alarmRecord! .alarmID) == true ) {
640
- alarmData.isarId = alarmRecord! .isarId;
642
+ if (await IsarDb .doesAlarmExist (alarmRecord.value ! .alarmID) == true ) {
643
+ alarmData.isarId = alarmRecord.value ! .isarId;
641
644
await IsarDb .updateAlarm (alarmData);
642
645
} else {
643
646
// Deleting alarm on firestore to ensure no duplicate entry
644
647
await FirestoreDb .deleteAlarm (
645
- userModel.value,
646
- alarmRecord! .firestoreId! ,
647
- );
648
+ userModel.value, alarmRecord.value! .firestoreId! );
648
649
createAlarm (alarmData);
649
650
}
650
651
}
@@ -660,39 +661,40 @@ class AddOrUpdateAlarmController extends GetxController {
660
661
void onInit () async {
661
662
super .onInit ();
662
663
664
+ alarmRecord.value = Get .arguments;
663
665
userModel.value = homeController.userModel.value;
664
666
if (userModel.value != null ) {
665
- ownerId = userModel.value! .id;
666
- ownerName = userModel.value! .fullName;
667
- lastEditedUserId = userModel.value! .id;
667
+ userId.value = userModel.value! .id;
668
+ userName.value = userModel.value! .fullName;
669
+ lastEditedUserId.value = userModel.value! .id;
668
670
}
669
671
670
672
// listens to the userModel declared in homeController and updates on signup event
671
673
homeController.userModel.stream.listen ((UserModel ? user) {
672
674
userModel.value = user;
673
675
if (user != null ) {
674
- ownerId = user.id;
675
- ownerName = user.fullName;
676
- lastEditedUserId = user.id;
676
+ userId.value = user.id;
677
+ userName.value = user.fullName;
678
+ lastEditedUserId.value = user.id;
677
679
}
678
680
});
679
681
680
682
if (Get .arguments != null ) {
681
- snoozeDuration.value = alarmRecord! .snoozeDuration;
682
- gradient.value = alarmRecord! .gradient;
683
- volMin.value = alarmRecord! .volMin;
684
- volMax.value = alarmRecord! .volMax;
685
- isOneTime.value = alarmRecord! .isOneTime;
686
- deleteAfterGoesOff.value = alarmRecord! .deleteAfterGoesOff;
687
- label.value = alarmRecord! .label;
688
- customRingtoneName.value = alarmRecord! .ringtoneName;
689
- note.value = alarmRecord! .note;
690
- showMotivationalQuote.value = alarmRecord! .showMotivationalQuote;
691
-
692
- sharedUserIds.value = alarmRecord! .sharedUserIds! ;
683
+ snoozeDuration.value = alarmRecord.value ! .snoozeDuration;
684
+ gradient.value = alarmRecord.value ! .gradient;
685
+ volMin.value = alarmRecord.value ! .volMin;
686
+ volMax.value = alarmRecord.value ! .volMax;
687
+ isOneTime.value = alarmRecord.value ! .isOneTime;
688
+ deleteAfterGoesOff.value = alarmRecord.value ! .deleteAfterGoesOff;
689
+ label.value = alarmRecord.value ! .label;
690
+ customRingtoneName.value = alarmRecord.value ! .ringtoneName;
691
+ note.value = alarmRecord.value ! .note;
692
+ showMotivationalQuote.value = alarmRecord.value ! .showMotivationalQuote;
693
+
694
+ sharedUserIds.value = alarmRecord.value ! .sharedUserIds! ;
693
695
// Reinitializing all values here
694
696
selectedTime.value = Utils .timeOfDayToDateTime (
695
- Utils .stringToTimeOfDay (alarmRecord! .alarmTime),
697
+ Utils .stringToTimeOfDay (alarmRecord.value ! .alarmTime),
696
698
);
697
699
hours.value = selectedTime.value.hour;
698
700
minutes.value = selectedTime.value.minute;
@@ -716,16 +718,16 @@ class AddOrUpdateAlarmController extends GetxController {
716
718
repeatDays,
717
719
);
718
720
719
- repeatDays.value = alarmRecord! .days;
721
+ repeatDays.value = alarmRecord.value ! .days;
720
722
// Shows the selected days in UI
721
723
daysRepeating.value = Utils .getRepeatDays (repeatDays);
722
724
723
725
// Setting the old values for all the auto dismissal
724
- isActivityenabled.value = alarmRecord! .isActivityEnabled;
725
- activityInterval.value = alarmRecord! .activityInterval ~ / 60000 ;
726
+ isActivityenabled.value = alarmRecord.value ! .isActivityEnabled;
727
+ activityInterval.value = alarmRecord.value ! .activityInterval ~ / 60000 ;
726
728
727
- isLocationEnabled.value = alarmRecord! .isLocationEnabled;
728
- selectedPoint.value = Utils .stringToLatLng (alarmRecord! .location);
729
+ isLocationEnabled.value = alarmRecord.value ! .isLocationEnabled;
730
+ selectedPoint.value = Utils .stringToLatLng (alarmRecord.value ! .location);
729
731
// Shows the marker in UI
730
732
markersList.add (
731
733
Marker (
@@ -738,53 +740,63 @@ class AddOrUpdateAlarmController extends GetxController {
738
740
),
739
741
);
740
742
741
- isWeatherEnabled.value = alarmRecord! .isWeatherEnabled;
743
+ isWeatherEnabled.value = alarmRecord.value ! .isWeatherEnabled;
742
744
weatherTypes.value = Utils .getFormattedWeatherTypes (selectedWeather);
743
745
744
- isMathsEnabled.value = alarmRecord! .isMathsEnabled;
745
- numMathsQuestions.value = alarmRecord! .numMathsQuestions;
746
- mathsDifficulty.value = Difficulty .values[alarmRecord! .mathsDifficulty];
747
- mathsSliderValue.value = alarmRecord! .mathsDifficulty.toDouble ();
746
+ isMathsEnabled.value = alarmRecord.value! .isMathsEnabled;
747
+ numMathsQuestions.value = alarmRecord.value! .numMathsQuestions;
748
+ mathsDifficulty.value =
749
+ Difficulty .values[alarmRecord.value! .mathsDifficulty];
750
+ mathsSliderValue.value = alarmRecord.value! .mathsDifficulty.toDouble ();
751
+
752
+ isShakeEnabled.value = alarmRecord.value! .isShakeEnabled;
753
+ shakeTimes.value = alarmRecord.value! .shakeTimes;
748
754
749
- isShakeEnabled .value = alarmRecord! .isShakeEnabled ;
750
- shakeTimes .value = alarmRecord! .shakeTimes ;
755
+ isPedometerEnabled .value = alarmRecord.value ! .isPedometerEnabled ;
756
+ numberOfSteps .value = alarmRecord.value ! .numberOfSteps ;
751
757
752
- isPedometerEnabled.value = alarmRecord! .isPedometerEnabled;
753
- numberOfSteps.value = alarmRecord! .numberOfSteps;
758
+ isQrEnabled.value = alarmRecord.value! .isQrEnabled;
759
+ qrValue.value = alarmRecord.value! .qrValue;
760
+ detectedQrValue.value = alarmRecord.value! .qrValue;
754
761
755
- isQrEnabled.value = alarmRecord! .isQrEnabled;
756
- qrValue.value = alarmRecord! .qrValue;
757
- detectedQrValue.value = alarmRecord! .qrValue;
762
+ alarmID = alarmRecord.value! .alarmID;
758
763
759
- alarmID = alarmRecord! .alarmID;
760
- ownerId = alarmRecord! .ownerId;
761
- ownerName = alarmRecord! .ownerName;
762
- mutexLock.value = alarmRecord! .mutexLock;
764
+ // if alarmRecord is null or alarmRecord.ownerId is null,
765
+ // then assign the current logged-in user as the owner.
766
+ if (alarmRecord.value == null || alarmRecord.value! .ownerId.isEmpty) {
767
+ ownerId.value = userId.value;
768
+ ownerName.value = userName.value;
769
+ } else {
770
+ ownerId.value = alarmRecord.value! .ownerId;
771
+ ownerName.value = alarmRecord.value! .ownerName;
772
+ }
763
773
764
- isSharedAlarmEnabled.value = alarmRecord! .isSharedAlarmEnabled;
774
+ mutexLock.value = alarmRecord.value! .mutexLock;
775
+ isSharedAlarmEnabled.value = alarmRecord.value! .isSharedAlarmEnabled;
765
776
766
777
if (isSharedAlarmEnabled.value) {
767
778
selectedTime.value = Utils .timeOfDayToDateTime (
768
- Utils .stringToTimeOfDay (alarmRecord! .mainAlarmTime! ),
779
+ Utils .stringToTimeOfDay (alarmRecord.value ! .mainAlarmTime! ),
769
780
);
770
781
771
782
mainAlarmTime.value = Utils .timeOfDayToDateTime (
772
- Utils .stringToTimeOfDay (alarmRecord! .mainAlarmTime! ),
783
+ Utils .stringToTimeOfDay (alarmRecord.value ! .mainAlarmTime! ),
773
784
);
774
- offsetDetails.value = alarmRecord! .offsetDetails! ;
775
- offsetDuration.value =
776
- alarmRecord ! .offsetDetails! [userModel.value! .id]['offsetDuration' ];
777
- isOffsetBefore.value =
778
- alarmRecord ! .offsetDetails! [userModel.value! .id]['isOffsetBefore' ];
785
+ offsetDetails.value = alarmRecord.value ! .offsetDetails! ;
786
+ offsetDuration.value = alarmRecord
787
+ .value ! .offsetDetails! [userModel.value! .id]['offsetDuration' ];
788
+ isOffsetBefore.value = alarmRecord
789
+ .value ! .offsetDetails! [userModel.value! .id]['isOffsetBefore' ];
779
790
}
780
791
781
792
// Set lock only if its not locked
782
793
if (isSharedAlarmEnabled.value == true &&
783
- alarmRecord! .mutexLock == false ) {
784
- alarmRecord! .mutexLock = true ;
785
- alarmRecord! .lastEditedUserId = userModel.value! .id;
786
- await FirestoreDb .updateAlarm (alarmRecord! .ownerId, alarmRecord! );
787
- alarmRecord! .mutexLock = false ;
794
+ alarmRecord.value! .mutexLock == false ) {
795
+ alarmRecord.value! .mutexLock = true ;
796
+ alarmRecord.value! .lastEditedUserId = userModel.value! .id;
797
+ await FirestoreDb .updateAlarm (
798
+ alarmRecord.value! .ownerId, alarmRecord.value! );
799
+ alarmRecord.value! .mutexLock = false ;
788
800
mutexLock.value = false ;
789
801
}
790
802
} else {
@@ -956,16 +968,29 @@ class AddOrUpdateAlarmController extends GetxController {
956
968
// We also make sure the doc was not already locked
957
969
// If it was suddenly enabled, it will be created newly anyway
958
970
if (isSharedAlarmEnabled.value == true &&
959
- alarmRecord! .isSharedAlarmEnabled == true &&
960
- alarmRecord! .mutexLock == false ) {
971
+ alarmRecord.value ! .isSharedAlarmEnabled == true &&
972
+ alarmRecord.value ! .mutexLock == false ) {
961
973
AlarmModel updatedModel = updatedAlarmModel ();
962
- updatedModel.firestoreId = alarmRecord! .firestoreId;
974
+ updatedModel.firestoreId = alarmRecord.value ! .firestoreId;
963
975
await FirestoreDb .updateAlarm (updatedModel.ownerId, updatedModel);
964
976
}
965
977
}
966
978
}
967
979
968
980
AlarmModel updatedAlarmModel () {
981
+ String _ownerId = '' ;
982
+ String _ownerName = '' ;
983
+
984
+ // if alarmRecord is null or alarmRecord.ownerId is null,
985
+ // then assign the current logged-in user as the owner.
986
+
987
+ if (alarmRecord.value == null || alarmRecord.value! .ownerId.isEmpty) {
988
+ _ownerId = userId.value;
989
+ _ownerName = userName.value;
990
+ } else {
991
+ _ownerId = alarmRecord.value! .ownerId;
992
+ _ownerName = alarmRecord.value! .ownerName;
993
+ }
969
994
return AlarmModel (
970
995
snoozeDuration: snoozeDuration.value,
971
996
volMax: volMax.value,
@@ -978,11 +1003,11 @@ class AddOrUpdateAlarmController extends GetxController {
978
1003
Utils .timeOfDayToString (TimeOfDay .fromDateTime (selectedTime.value)),
979
1004
offsetDetails: offsetDetails,
980
1005
sharedUserIds: sharedUserIds,
981
- lastEditedUserId: lastEditedUserId,
1006
+ lastEditedUserId: lastEditedUserId.value ,
982
1007
mutexLock: mutexLock.value,
983
1008
alarmID: alarmID,
984
- ownerId: alarmRecord ! .ownerId ,
985
- ownerName: ownerName ,
1009
+ ownerId: _ownerId ,
1010
+ ownerName: _ownerName ,
986
1011
activityInterval: activityInterval.value * 60000 ,
987
1012
days: repeatDays.toList (),
988
1013
alarmTime:
0 commit comments