i have recently migrated my code to null safety. got the below error in dart migrate command.
The argument type 'List<Slots?>?' can't be assigned to the parameter type 'List?' at lib/responsemodels/appointment/calendar/calendar_response.g.dart:17:5
Highlighted the error throwing line below
calendar_response.dart
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'calendar_response.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
CalenderResponse _$CalenderResponseFromJson(Map<String, dynamic> json) {
return CalenderResponse(
json['createdAt'] as String?,
json['dayInWeek'] as String?,
json['isHavingSlot'] as String?,
json['message'] as String?,
json['schedulerId'] as String?,
json['selectedDate'] as String?,
**(json['slotTimings'] as List?)
?.map(
(e) => e == null ? null : Slots.fromJson(e as Map<String, dynamic>))
?.toList(),**
json['status'] as String?,
json['updatedAt'] as String?,
json['currenttime'] as String?,
);
}
CalenderAvailableDatesResponse _$CalenderAvailableDatesResponseFromJson(
Map<String, dynamic> json) {
return CalenderAvailableDatesResponse(
(json['dateList'] as List?)?.map((e) => e as String).toList(),
json['message'] as String?,
json['status'] as String?,
json['currenttime'] as String?);
}
slots_response.dart
import 'package:json_annotation/json_annotation.dart';
part 'slots_response.g.dart';
@JsonSerializable(createToJson: false)
class SlotsResponse {
final String? status;
final String? message;
final List<SlotsGroups>? availableGroups;
SlotsResponse(this.availableGroups, this.message, this.status);
factory SlotsResponse.fromJson(Map<String, dynamic> map) =>
_$SlotsResponseFromJson(map);
}
@JsonSerializable(createToJson: false)
class SlotsGroups {
final String? groupId;
final String? vendorId;
final String? groupName;
final String? status;
final String? createdAt;
final String? updatedAt;
final List<Slots>? availSlots;
SlotsGroups(this.availSlots, this.createdAt, this.groupId, this.groupName,
this.status, this.updatedAt, this.vendorId);
factory SlotsGroups.fromJson(Map<String, dynamic> map) =>
_$SlotsGroupsFromJson(map);
}
@JsonSerializable(createToJson: false)
class Slots {
late final String? slotId;
late final String? startTime;
late final String? endTime;
late final String? duration;
late final String? startDateStrTime;
late final String? endDateStrTime;
late final String? stGivenString;
late final String? endGivenString;
late final String? status;
late final String? createdAt;
late final String? updatedAt;
late final String? isAnyAppointment;
late final BookingDetails? bookingDetails;
Slots(
this.createdAt,
this.duration,
this.endDateStrTime,
this.endGivenString,
this.endTime,
this.slotId,
this.stGivenString,
this.bookingDetails,
this.isAnyAppointment,
this.startDateStrTime,
this.startTime,
this.status,
this.updatedAt);
factory Slots.fromJson(Map<String, dynamic> map) => _$SlotsFromJson(map);
}
@JsonSerializable(createToJson: false)
class BookingDetails {
final String? customerName;
final String? serviceName;
BookingDetails(this.customerName, this.serviceName);
factory BookingDetails.fromJson(Map<String, dynamic> map) =>
_$BookingDetailsFromJson(map);
}
calendar_response.dart
import 'package:awomowa/responsemodels/appointment/slots/slots_response.dart';
import 'package:json_annotation/json_annotation.dart';
part 'calendar_response.g.dart';
@JsonSerializable(createToJson: false)
class CalenderResponse {
final String? status;
final String? message;
final String? isHavingSlot;
final String? schedulerId;
final String? dayInWeek;
final String? selectedDate;
final String? createdAt;
final String? updatedAt;
final List<Slots>? slotTimings;
final String? currenttime;
CalenderResponse(
this.createdAt,
this.dayInWeek,
this.isHavingSlot,
this.message,
this.schedulerId,
this.selectedDate,
this.slotTimings,
this.status,
this.updatedAt,
this.currenttime);
factory CalenderResponse.fromJson(Map<String, dynamic> map) =>
_$CalenderResponseFromJson(map);
}
@JsonSerializable(createToJson: false)
class CalenderAvailableDatesResponse {
final String? status;
final String? message;
final List<String>? dateList;
final String? currenttime;
CalenderAvailableDatesResponse(this.dateList, this.message, this.status,this.currenttime);
factory CalenderAvailableDatesResponse.fromJson(Map<String, dynamic> map) =>
_$CalenderAvailableDatesResponseFromJson(map);
}
CodePudding user response:
The problem is that the function used in map
can return null
. In other words: its return type is Slots?
, and not Slots
.
To solve it you can filter the null values out of the list to turn the list from List<Slots?>
to List<Slots>
like this
(json['slotTimings'] as List?)
?.map(
(e) => e == null ? null : Slots.fromJson(e as Map<String, dynamic>))
.whereType<Slots>().toList(),
CodePudding user response:
I presume you are using json_annotation
, json_serializable
with build_runner
. As is being specified in the **.g
file.
// GENERATED CODE - DO NOT MODIFY BY HAND
You should modify your model file to accommodate the issue/situation you have there and then and then run:
flutter pub run build_runner build
or
flutter pub run build_runner build --delete-conflicting-outputs