App crashes when notification is turned off and alarm is set to cancel

////////if notifications layout off button is pressed and cancel alarm function is called then the app crashes///////////

class SettingFragment : Fragment() {
private var _binding: FragmentSettingBinding? = null
private val binding get() = _binding!!

private lateinit var picker : MaterialTimePicker
private lateinit var calendar: Calendar
private lateinit var alarmManager: AlarmManager
private lateinit var pendingIntent: PendingIntent





override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    _binding = FragmentSettingBinding.inflate(inflater, container, false)

    _binding!!.notificationSwitch.setOnClickListener{

        notificationSettings()

    }

    _binding!!.WakeUpTime.setOnClickListener{

        SetCustomTimePickerDay()
    }
    _binding!!.SleepTime.setOnClickListener{
        SetCustomTimePickerNight()


}




    return binding.root
}

////making the notification on off layout visible/invisible
private fun notificationSettings() {
    sleepTimeLayout.isVisible = notificationSwitch.isChecked

    if(!sleepTimeLayout.isVisible){

     // CancelAlarm()



    }


}

@SuppressLint("SetTextI18n")
private fun SetCustomTimePickerDay() {
    picker = MaterialTimePicker.Builder().setTimeFormat(TimeFormat.CLOCK_12H)
        .setHour(12)
        .setMinute(0)
        .setTitleText("Select Reminder Time")
        .build()

    picker.show(parentFragmentManager,"H20Reminder")




    picker.addOnPositiveButtonClickListener {

        if(picker.hour>12 ){

            _binding!!.WakeUpTime.text =
                String.format("%02d",picker.hour-12) + ":" + String.format("%02d",picker.minute)+ " PM"
        }

        else{

            _binding!!.WakeUpTime.text =
                String.format("%02d",picker.hour) + ":" + String.format("%02d",picker.minute)+ " AM"
        }


        calendar= Calendar.getInstance()
        calendar[Calendar.HOUR_OF_DAY] = picker.hour
        calendar[Calendar.MINUTE] = picker.minute
        calendar[Calendar.SECOND] = 0
        calendar[Calendar.MILLISECOND] = 0

        AlarmSch()



}


}

@SuppressLint("SetTextI18n")
private fun SetCustomTimePickerNight() {
    picker = MaterialTimePicker.Builder().setTimeFormat(TimeFormat.CLOCK_12H)
        .setHour(12)
        .setMinute(0)
        .setTitleText("Select Reminder Time")
        .build()

    picker.show(parentFragmentManager,"H20Reminder")




    picker.addOnPositiveButtonClickListener {

        if(picker.hour>12 ){

            _binding!!.SleepTime.text =
                String.format("%02d",picker.hour-12) + ":" + String.format("%02d",picker.minute)+ " PM"
        }

        else{

            _binding!!.SleepTime.text =
                String.format("%02d",picker.hour) + ":" + String.format("%02d",picker.minute)+ " AM"
        }


        calendar= Calendar.getInstance()
        calendar[Calendar.HOUR_OF_DAY] = picker.hour
        calendar[Calendar.MINUTE] = picker.minute
        calendar[Calendar.SECOND] = 0
        calendar[Calendar.MILLISECOND] = 0
    }



    if(calendar.time == SleepTime) {
        CancelAlarm()


    }

}

private fun AlarmSch(){

    alarmManager =  context?.getSystemService(Context.ALARM_SERVICE) as AlarmManager
    val intent = Intent(context, AlarmReciever::class.java)
    pendingIntent = PendingIntent.getBroadcast(context,0,intent,0)

    alarmManager.setRepeating(

        AlarmManager.RTC_WAKEUP,calendar.timeInMillis,
        AlarmManager.INTERVAL_HOUR,pendingIntent

    )


}


private fun CancelAlarm(){
    alarmManager.cancel(pendingIntent)


}

}

Crash is happening because when you tries to cancel alarm , it is not set.
Instead of using lateinit var declare nullable AlarmManager like below code .

private var alarmManager: AlarmManager? = null

To set alarm

    alarmManager?.setRepeating(

        AlarmManager.RTC_WAKEUP,calendar.timeInMillis,
        AlarmManager.INTERVAL_HOUR,pendingIntent

    )

And to cancel Alarm

    alarmManager?.cancel(pendingIntent)