#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);
}