#json #flutter #rest #dart
Вопрос:
Я постоянно получаю одну и ту же ошибку:
При обработке жеста был выдан следующий _CastError: оператор проверки Null, используемый для нулевого значения
Я перепробовал здесь все: конечная функция пустоты(Место)? Место для установки ручки;
Убрал знак вопроса ?
и добавил required
: не сработало
final void Function(Place)? handleOpenPlace; // open place with id final Listlt;Placegt;? places; CustomListTileView({Key? key, this.handleOpenPlace, this.places}) : super(); final String apiURL = 'https://mywebsite/api/'; Futurelt;Listlt;ParseJSONgt;gt; fetchJSON() async { var jsonResponse = await http.get(Uri.parse(apiURL)); if (jsonResponse.statusCode == 200) { final jsonItems = json.decode(jsonResponse.body).castlt;Maplt;String, dynamicgt;gt;(); Listlt;ParseJSONgt; tempList = jsonItems.maplt;ParseJSONgt;((json) { return ParseJSON.fromJson(json); }).toList(); return tempList; } else { throw Exception('Failed To Load Data'); } }
Места, являющиеся списком в Place.dart
И здесь:
widget.handleOpenPlace!(places![index]);
- Удалил
!
, но не получилось. - Добавлено
?
, но не сработало - Попробовал изменить их все: не получилось
Полный код карты:
return Card( child: ListTile( title: Text( items[index].name.toString(), ), onTap: () { widget.handleOpenPlace!(places![index]); }, subtitle: Text( items[index].email.toString(), ), leading: CircleAvatar( backgroundColor: Colors.green, child: Text(items[index].name.toString()[0], style: TextStyle( color: Colors.red, fontSize: 21.0, )), ), ));
Что я здесь делаю не так? Перечисление сообщений работает, но в тот момент, когда я хочу перейти на страницу сведений, это не удается.
Комментарии:
1. Попробуйте сократить использование
!
оператора bang. Я все еще скучаю по частям вашего кода, что это заplaces
переменная ? Очевидно , что вы получаете ошибку отonTap
, и это означает, что либоhandleOpenPlace
функция естьnull
, либоplaces
естьnull
.2. Это места: окончательный списокlt;Местоgt;? места; Это работает? Я не знаю, как я мог бы сделать это не нулевым…
3. Можете ли вы показать
CustomListTileView
реализацию ?4. Я так и сделал, это в посте или вам нужно что-то конкретное?
5. Я имею в виду, покажите мне, как вы это называете, я хочу посмотреть, как вы передаете параметры.
Ответ №1:
Не могли бы вы, пожалуйста, попробовать сделать handleOpenPlace
amp; places
required
?
final void Function(Place) handleOpenPlace; // open place with id final Listlt;Placegt; places; CustomListTileView({Key? key,required this.handleOpenPlace,required this.places}) : super();
И снимите челку !
с onTap
onTap: () { widget.handleOpenPlace(places[index]); },
Таким образом, вы будете в большей безопасности null
и, по крайней мере, сможете разобраться с источником null
броска.
Комментарии:
1. Это дает мне: Ошибка: Должен быть указан требуемый именованный параметр ‘handleOpenPlace’ и: Контекст: Найден этот кандидат, но аргументы не совпадают.
2. Да, это нормально, потому что теперь вы должны предоставить их, когда вы впервые создаете свой
CustomListTileView
. Я все еще не могу понять, как вы называете виджет,CustomListTileView(places:..., handleOpenPlace:...)
.