тип ‘Null » не может быть присвоен типу пользовательского класса

#flutter #dart

Вопрос:

Я долгое время работал с flutter, и эта новая нулевая безопасность просто нарушает мой код.

Я создал класс модели данных для хранения значений в виде объекта следующим образом:

 class MyClass{
  int x;
  String y;
  MyClass({this.x, this.y});
  .. .. ..rest of the code
}
 

Теперь в провайдере у меня есть список объектов MyClass для хранения данных из БД.
Здесь я использую firstWhere() для поиска требуемого объекта по идентификатору.

 MyClass getObj(int id){
   return list.firstWhere((obj) => obj.id == id, orElse: ()=>null);
}
 

Но это продолжает выдавать ошибку:

тип ‘Null » не может быть присвоен, так как он не является подтипом MyClass

Я попробовал сначала все, а также другие решения, но безрезультатно.

Ответ №1:

Вы пытаетесь вернуть значение null в ненулевой функции. Попробуйте сделать MyClass недействительным, добавив? После такого класса

MyClass? getObj(int id){ return list.firstWhere((obj) => obj.id == id, orElse: ()=>null); }

Ответ №2:

Сообщение об ошибке, которое вы получаете, связано с тем, что возвращаемый тип orElse функции должен быть ненулевым (в документах подпись есть E и нет E? ).

Если ожидается возврат null из getObj и вы готовы обработать этот случай в другом месте кода , который вызывает getObj , затем измените тип возвращаемого метода на MyClass? (вместо MyClass ) и используйте firstWhereOrNull , как вы упомянули:

 MyClass? getObj(int id){
  return list.firstWhereOrNull((obj) => obj.x == id);
}