There are a couple of issues in your method
getItems(event) {
  if (event != '') {
    this.students = this.students.filter((v) => {
      return (v.name.toLowerCase().indexOf(event.srcElement.value.toLowerCase()) > -1);
    });
    this.showList = true;
  } else {
    this.showList = false;
  }
  console.log('count: ', event.srcElement.value, this.students.length);
}
Firstly, event is not a string based on what you have passed from your Angular markup, $event, so if (event != '') will always be true.
So we actually want to compare the value of the event, with '' to make sure there is text entered.
We can solve both issues with a minor refactoring as follows
getItems(event: Event) {
  const value = event.target.value;
  if (value !== '') {
    this.students = this.students.filter((v) => {
      return (v.name.toLowerCase().indexOf(value.toLowerCase()) > -1);
    });
    this.showList = true;
  } else {
    this.showList = false;
  }
  console.log('count: ', value, this.students.length);
}
As Micheal D astutely observes, if we assign the filtered students to students property, we will lose the ability to reset any filtering because we won't have the original array.
To resolve this, we need to store the original students in a dedicated property so we can reset our filtered collection back to it. In fact, we should do this when the filter value is emtpty
// original students array.
students: Student[] = [];
// filtered array we iterate over in search results
matchingStudents = [];
getItems(event: Event) {
  const value = event.target.value;
  if (value !== '') {
    this.matchingStudents = this.students.filter((v) => {
      return (v.name.toLowerCase().indexOf(value.toLowerCase()) > -1);
    });
    this.showList = true;
  } else {
    this.showList = false;
  }
  console.log('count: ', value, this.matchingStudents.length);
}
Finally, I'll do some additional cleanup since your filter can be simplified making it simultaneously more readable and concise
getItems(event: Event) {
  const value = (event.target.value || '').toLowerCase();
  this.showList = value !== '';
  if (showList) {
    this.matchingStudents = this.students.filter(v => v.name.toLowerCase().includes(value));
  }
  console.log('count: ', value, this.students.length);
}
Template
// search bar
<ion-searchbar (ionInput)="getItems($event)"></ion-searchbar>
// results
<ion-list *ngIf="showList" class="studentsList">
  <ion-item *ngFor="let student of matchingStudents">
    {{student.name}}
  </ion-item>
</ion-list>
     
    
i.e. tomif (event != '')in one place andevent.srcElement.valuein another. Also,eventwill never be''or anystringand thusshowlistwill always betrueconsole.log('count: ', event.srcElement.value, this.students.length)?const value = event.target.value; if (value) {}. Use value everywhere else as well instead ofevent.srcElement.value