_TypeError - 类型“Null”不是“String”类型的子类型; - 颤振
我收到这个错误:
类型“String”不是 get 方法 flutter 中类型“Null”的子类型
来自后端的 get 方法 flutter API 响应
{
"ticketId": "5ea260c9-0b70-482d-b8ca-7f811a96bd29",
"ticketNumber": 1524,
"subject": "Subjet 112",
"priority": "Low",
"description": "Postman api post",
"anyAttachment": false,
"status": "Open",
"createdAt": "2022-03-20T05:08:37.672Z",
"requesterName": "Ayana Mohan",
"requesterUUID": "90bf9452-b690-47f2-aa0c-4b3809fdb023",
"requesterPhone": "1231423123",
"requesterEmail": "[email protected]",
"customerId": "c8595a40-ea63-4883-9f94-e79f2545dee3",
"ticketType": "Incident",
"categoryId": null,
"category": null,
"assigneeUUID": null,
"assigneeName": null,
"assigneeEmail": null,
"assigneePhone": null,
"groupUUID": null,
"groupName": null,
"rcaTitle": null,
"rca": null,
"rcaSolution": null,
"rcaWorkaround": null,
"rcsSymptoms": null,
"rcaBy": null,
"rcaDate": null,
"rcaTag": [],
"formControl": [],
"classified": null,
"initiatedBy": null,
"initiationComment": null,
"impact": null,
"risk": null,
"downtimeStart": null,
"downtimeEnd": null,
"assetName": null,
"serviceName": null,
"applicationName": null,
"submissionStatus": null,
"planningStatus": null,
"implementationStatus": null,
"reviewStatus": null,
"closeStatus": null,
"finalStatus": null,
"ticketView": null,
"completeDate": null,
"cabRequired": null,
"rolloutPlan": null,
"backoutPlan": null,
"impactAnalysis": null,
"reason": null,
"workflowStatus": null,
"releasePlan": null,
"testComment": null,
"testResult": null,
"closeComment": null,
"closeResult": null,
"refTicketId": null,
"tenantId": "8e963a4d-75d3-4727-b92d-44f24ef80aad"
}
:这是我使用的 get API 函数
Future<List<UserTicketResponseModel>> getAllUserIssueTicket() async {
List<UserTicketResponseModel> userTicketModel = [];
final _token = await getToken();
try {
http.Response response = await http.get(
Uri.parse(ticketingBaseUrl + USER_TICKET),
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer $_token",
},
);
userTicketLoading = true;
var userTickets = jsonDecode(response.body);
userTicketModel = userTickets
.map((tickets) => UserTicketResponseModel.fromJson(tickets))
.toList();
notifyListeners();
return userTicketModel;
} on SocketException {
throw 'No Internet Connection';
}
}
模型类:
import 'dart:convert';
UserTicketResponseModel userTicketResponseModelFromJson(String str) =>
UserTicketResponseModel.fromJson(json.decode(str));
String userTicketResponseModelToJson(UserTicketResponseModel data) =>
json.encode(data.toJson());
class UserTicketResponseModel {
UserTicketResponseModel({
required this.ticketId,
required this.ticketNumber,
required this.subject,
required this.priority,
required this.description,
required this.anyAttachment,
required this.status,
required this.createdAt,
required this.requesterName,
required this.requesterUuid,
required this.requesterPhone,
required this.requesterEmail,
required this.customerId,
required this.ticketType,
required this.categoryId,
required this.category,
required this.assigneeUuid,
required this.assigneeName,
required this.assigneeEmail,
required this.assigneePhone,
required this.groupUuid,
required this.groupName,
required this.rcaTitle,
required this.rca,
required this.rcaSolution,
required this.rcaWorkaround,
required this.rcsSymptoms,
required this.rcaBy,
required this.rcaDate,
required this.rcaTag,
required this.formControl,
required this.classified,
required this.initiatedBy,
required this.initiationComment,
required this.impact,
required this.risk,
required this.downtimeStart,
required this.downtimeEnd,
required this.assetName,
required this.serviceName,
required this.applicationName,
required this.submissionStatus,
required this.planningStatus,
required this.implementationStatus,
required this.reviewStatus,
required this.closeStatus,
required this.finalStatus,
required this.ticketView,
required this.completeDate,
required this.cabRequired,
required this.rolloutPlan,
required this.backoutPlan,
required this.impactAnalysis,
required this.reason,
required this.workflowStatus,
required this.releasePlan,
required this.testComment,
required this.testResult,
required this.closeComment,
required this.closeResult,
required this.refTicketId,
required this.tenantId,
});
String ticketId;
int ticketNumber;
String subject;
String priority;
String description;
bool anyAttachment;
String status;
DateTime createdAt;
String requesterName;
String requesterUuid;
String requesterPhone;
String requesterEmail;
String customerId;
String ticketType;
dynamic categoryId;
dynamic category;
dynamic assigneeUuid;
dynamic assigneeName;
dynamic assigneeEmail;
dynamic assigneePhone;
dynamic groupUuid;
dynamic groupName;
dynamic rcaTitle;
dynamic rca;
dynamic rcaSolution;
dynamic rcaWorkaround;
dynamic rcsSymptoms;
dynamic rcaBy;
dynamic rcaDate;
List<dynamic> rcaTag;
dynamic formControl;
dynamic classified;
dynamic initiatedBy;
dynamic initiationComment;
dynamic impact;
dynamic risk;
dynamic downtimeStart;
dynamic downtimeEnd;
dynamic assetName;
dynamic serviceName;
dynamic applicationName;
dynamic submissionStatus;
dynamic planningStatus;
dynamic implementationStatus;
dynamic reviewStatus;
dynamic closeStatus;
dynamic finalStatus;
dynamic ticketView;
dynamic completeDate;
dynamic cabRequired;
dynamic rolloutPlan;
dynamic backoutPlan;
dynamic impactAnalysis;
dynamic reason;
dynamic workflowStatus;
dynamic releasePlan;
dynamic testComment;
dynamic testResult;
dynamic closeComment;
dynamic closeResult;
dynamic refTicketId;
String tenantId;
factory UserTicketResponseModel.fromJson(Map<String, dynamic> json) =>
UserTicketResponseModel(
ticketId: json["ticketId"],
ticketNumber: json["ticketNumber"],
subject: json["subject"],
priority: json["priority"],
description: json["description"],
anyAttachment: json["anyAttachment"],
status: json["status"],
createdAt: DateTime.parse(json["createdAt"]),
requesterName: json["requesterName"],
requesterUuid: json["requesterUUID"],
requesterPhone: json["requesterPhone"],
requesterEmail: json["requesterEmail"],
customerId: json["customerId"],
ticketType: json["ticketType"],
categoryId: json["categoryId"],
category: json["category"],
assigneeUuid: json["assigneeUUID"],
assigneeName: json["assigneeName"],
assigneeEmail: json["assigneeEmail"],
assigneePhone: json["assigneePhone"],
groupUuid: json["groupUUID"],
groupName: json["groupName"],
rcaTitle: json["rcaTitle"],
rca: json["rca"],
rcaSolution: json["rcaSolution"],
rcaWorkaround: json["rcaWorkaround"],
rcsSymptoms: json["rcsSymptoms"],
rcaBy: json["rcaBy"],
rcaDate: json["rcaDate"],
rcaTag: List<dynamic>.from(json["rcaTag"].map((x) => x)),
formControl: json["formControl"],
classified: json["classified"],
initiatedBy: json["initiatedBy"],
initiationComment: json["initiationComment"],
impact: json["impact"],
risk: json["risk"],
downtimeStart: json["downtimeStart"],
downtimeEnd: json["downtimeEnd"],
assetName: json["assetName"],
serviceName: json["serviceName"],
applicationName: json["applicationName"],
submissionStatus: json["submissionStatus"],
planningStatus: json["planningStatus"],
implementationStatus: json["implementationStatus"],
reviewStatus: json["reviewStatus"],
closeStatus: json["closeStatus"],
finalStatus: json["finalStatus"],
ticketView: json["ticketView"],
completeDate: json["completeDate"],
cabRequired: json["cabRequired"],
rolloutPlan: json["rolloutPlan"],
backoutPlan: json["backoutPlan"],
impactAnalysis: json["impactAnalysis"],
reason: json["reason"],
workflowStatus: json["workflowStatus"],
releasePlan: json["releasePlan"],
testComment: json["testComment"],
testResult: json["testResult"],
closeComment: json["closeComment"],
closeResult: json["closeResult"],
refTicketId: json["refTicketId"],
tenantId: json["tenantId"],
);
Map<String, dynamic> toJson() => {
"ticketId": ticketId,
"ticketNumber": ticketNumber,
"subject": subject,
"priority": priority,
"description": description,
"anyAttachment": anyAttachment,
"status": status,
"createdAt": createdAt.toIso8601String(),
"requesterName": requesterName,
"requesterUUID": requesterUuid,
"requesterPhone": requesterPhone,
"requesterEmail": requesterEmail,
"customerId": customerId,
"ticketType": ticketType,
"categoryId": categoryId,
"category": category,
"assigneeUUID": assigneeUuid,
"assigneeName": assigneeName,
"assigneeEmail": assigneeEmail,
"assigneePhone": assigneePhone,
"groupUUID": groupUuid,
"groupName": groupName,
"rcaTitle": rcaTitle,
"rca": rca,
"rcaSolution": rcaSolution,
"rcaWorkaround": rcaWorkaround,
"rcsSymptoms": rcsSymptoms,
"rcaBy": rcaBy,
"rcaDate": rcaDate,
"rcaTag": List<dynamic>.from(rcaTag.map((x) => x)),
"formControl": formControl,
"classified": classified,
"initiatedBy": initiatedBy,
"initiationComment": initiationComment,
"impact": impact,
"risk": risk,
"downtimeStart": downtimeStart,
"downtimeEnd": downtimeEnd,
"assetName": assetName,
"serviceName": serviceName,
"applicationName": applicationName,
"submissionStatus": submissionStatus,
"planningStatus": planningStatus,
"implementationStatus": implementationStatus,
"reviewStatus": reviewStatus,
"closeStatus": closeStatus,
"finalStatus": finalStatus,
"ticketView": ticketView,
"completeDate": completeDate,
"cabRequired": cabRequired,
"rolloutPlan": rolloutPlan,
"backoutPlan": backoutPlan,
"impactAnalysis": impactAnalysis,
"reason": reason,
"workflowStatus": workflowStatus,
"releasePlan": releasePlan,
"testComment": testComment,
"testResult": testResult,
"closeComment": closeComment,
"closeResult": closeResult,
"refTicketId": refTicketId,
"tenantId": tenantId,
};
}
这是我的监听函数:
List<UserTicketResponseModel> _userTicketModel = [];
@override
void initState() {
super.initState();
getUserTickets();
}
Future<void> getUserTickets() async {
UserTicketProvider provider =
Provider.of<UserTicketProvider>(context, listen: false);
_userTicketModel = await provider.getAllUserIssueTicket();
print("User Tickets Main: " + _userTicketModel.toString());
}
body: ListView.builder(
itemCount: _userTicketModel.length,
itemBuilder: (context, index) {
return SingleChildScrollView(
child: UserTicketsList(
ticketNumber: _userTicketModel[index].ticketNumber.toString(),
requester: _userTicketModel[index].requesterName.toString(),
subject: _userTicketModel[index].subject.toString(),
priorityType: _userTicketModel[index].priority.toString(),
statusType: _userTicketModel[index].status.toString(),
),
);
},
),
当我运行时应用程序在模型类中发生异常并显示此错误:
_TypeError 类型“Null”不是类型“String”的子类型
我是初学者,我不明白问题是什么!我尝试使用 ??
或 String?
进行模型类 null 检查,但不起作用!
I got this error:
type 'String' is not a subtype of type 'Null' in get method flutter
API response from backend:
{
"ticketId": "5ea260c9-0b70-482d-b8ca-7f811a96bd29",
"ticketNumber": 1524,
"subject": "Subjet 112",
"priority": "Low",
"description": "Postman api post",
"anyAttachment": false,
"status": "Open",
"createdAt": "2022-03-20T05:08:37.672Z",
"requesterName": "Ayana Mohan",
"requesterUUID": "90bf9452-b690-47f2-aa0c-4b3809fdb023",
"requesterPhone": "1231423123",
"requesterEmail": "[email protected]",
"customerId": "c8595a40-ea63-4883-9f94-e79f2545dee3",
"ticketType": "Incident",
"categoryId": null,
"category": null,
"assigneeUUID": null,
"assigneeName": null,
"assigneeEmail": null,
"assigneePhone": null,
"groupUUID": null,
"groupName": null,
"rcaTitle": null,
"rca": null,
"rcaSolution": null,
"rcaWorkaround": null,
"rcsSymptoms": null,
"rcaBy": null,
"rcaDate": null,
"rcaTag": [],
"formControl": [],
"classified": null,
"initiatedBy": null,
"initiationComment": null,
"impact": null,
"risk": null,
"downtimeStart": null,
"downtimeEnd": null,
"assetName": null,
"serviceName": null,
"applicationName": null,
"submissionStatus": null,
"planningStatus": null,
"implementationStatus": null,
"reviewStatus": null,
"closeStatus": null,
"finalStatus": null,
"ticketView": null,
"completeDate": null,
"cabRequired": null,
"rolloutPlan": null,
"backoutPlan": null,
"impactAnalysis": null,
"reason": null,
"workflowStatus": null,
"releasePlan": null,
"testComment": null,
"testResult": null,
"closeComment": null,
"closeResult": null,
"refTicketId": null,
"tenantId": "8e963a4d-75d3-4727-b92d-44f24ef80aad"
}
This is the get API function that I use
Future<List<UserTicketResponseModel>> getAllUserIssueTicket() async {
List<UserTicketResponseModel> userTicketModel = [];
final _token = await getToken();
try {
http.Response response = await http.get(
Uri.parse(ticketingBaseUrl + USER_TICKET),
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer $_token",
},
);
userTicketLoading = true;
var userTickets = jsonDecode(response.body);
userTicketModel = userTickets
.map((tickets) => UserTicketResponseModel.fromJson(tickets))
.toList();
notifyListeners();
return userTicketModel;
} on SocketException {
throw 'No Internet Connection';
}
}
Model Class:
import 'dart:convert';
UserTicketResponseModel userTicketResponseModelFromJson(String str) =>
UserTicketResponseModel.fromJson(json.decode(str));
String userTicketResponseModelToJson(UserTicketResponseModel data) =>
json.encode(data.toJson());
class UserTicketResponseModel {
UserTicketResponseModel({
required this.ticketId,
required this.ticketNumber,
required this.subject,
required this.priority,
required this.description,
required this.anyAttachment,
required this.status,
required this.createdAt,
required this.requesterName,
required this.requesterUuid,
required this.requesterPhone,
required this.requesterEmail,
required this.customerId,
required this.ticketType,
required this.categoryId,
required this.category,
required this.assigneeUuid,
required this.assigneeName,
required this.assigneeEmail,
required this.assigneePhone,
required this.groupUuid,
required this.groupName,
required this.rcaTitle,
required this.rca,
required this.rcaSolution,
required this.rcaWorkaround,
required this.rcsSymptoms,
required this.rcaBy,
required this.rcaDate,
required this.rcaTag,
required this.formControl,
required this.classified,
required this.initiatedBy,
required this.initiationComment,
required this.impact,
required this.risk,
required this.downtimeStart,
required this.downtimeEnd,
required this.assetName,
required this.serviceName,
required this.applicationName,
required this.submissionStatus,
required this.planningStatus,
required this.implementationStatus,
required this.reviewStatus,
required this.closeStatus,
required this.finalStatus,
required this.ticketView,
required this.completeDate,
required this.cabRequired,
required this.rolloutPlan,
required this.backoutPlan,
required this.impactAnalysis,
required this.reason,
required this.workflowStatus,
required this.releasePlan,
required this.testComment,
required this.testResult,
required this.closeComment,
required this.closeResult,
required this.refTicketId,
required this.tenantId,
});
String ticketId;
int ticketNumber;
String subject;
String priority;
String description;
bool anyAttachment;
String status;
DateTime createdAt;
String requesterName;
String requesterUuid;
String requesterPhone;
String requesterEmail;
String customerId;
String ticketType;
dynamic categoryId;
dynamic category;
dynamic assigneeUuid;
dynamic assigneeName;
dynamic assigneeEmail;
dynamic assigneePhone;
dynamic groupUuid;
dynamic groupName;
dynamic rcaTitle;
dynamic rca;
dynamic rcaSolution;
dynamic rcaWorkaround;
dynamic rcsSymptoms;
dynamic rcaBy;
dynamic rcaDate;
List<dynamic> rcaTag;
dynamic formControl;
dynamic classified;
dynamic initiatedBy;
dynamic initiationComment;
dynamic impact;
dynamic risk;
dynamic downtimeStart;
dynamic downtimeEnd;
dynamic assetName;
dynamic serviceName;
dynamic applicationName;
dynamic submissionStatus;
dynamic planningStatus;
dynamic implementationStatus;
dynamic reviewStatus;
dynamic closeStatus;
dynamic finalStatus;
dynamic ticketView;
dynamic completeDate;
dynamic cabRequired;
dynamic rolloutPlan;
dynamic backoutPlan;
dynamic impactAnalysis;
dynamic reason;
dynamic workflowStatus;
dynamic releasePlan;
dynamic testComment;
dynamic testResult;
dynamic closeComment;
dynamic closeResult;
dynamic refTicketId;
String tenantId;
factory UserTicketResponseModel.fromJson(Map<String, dynamic> json) =>
UserTicketResponseModel(
ticketId: json["ticketId"],
ticketNumber: json["ticketNumber"],
subject: json["subject"],
priority: json["priority"],
description: json["description"],
anyAttachment: json["anyAttachment"],
status: json["status"],
createdAt: DateTime.parse(json["createdAt"]),
requesterName: json["requesterName"],
requesterUuid: json["requesterUUID"],
requesterPhone: json["requesterPhone"],
requesterEmail: json["requesterEmail"],
customerId: json["customerId"],
ticketType: json["ticketType"],
categoryId: json["categoryId"],
category: json["category"],
assigneeUuid: json["assigneeUUID"],
assigneeName: json["assigneeName"],
assigneeEmail: json["assigneeEmail"],
assigneePhone: json["assigneePhone"],
groupUuid: json["groupUUID"],
groupName: json["groupName"],
rcaTitle: json["rcaTitle"],
rca: json["rca"],
rcaSolution: json["rcaSolution"],
rcaWorkaround: json["rcaWorkaround"],
rcsSymptoms: json["rcsSymptoms"],
rcaBy: json["rcaBy"],
rcaDate: json["rcaDate"],
rcaTag: List<dynamic>.from(json["rcaTag"].map((x) => x)),
formControl: json["formControl"],
classified: json["classified"],
initiatedBy: json["initiatedBy"],
initiationComment: json["initiationComment"],
impact: json["impact"],
risk: json["risk"],
downtimeStart: json["downtimeStart"],
downtimeEnd: json["downtimeEnd"],
assetName: json["assetName"],
serviceName: json["serviceName"],
applicationName: json["applicationName"],
submissionStatus: json["submissionStatus"],
planningStatus: json["planningStatus"],
implementationStatus: json["implementationStatus"],
reviewStatus: json["reviewStatus"],
closeStatus: json["closeStatus"],
finalStatus: json["finalStatus"],
ticketView: json["ticketView"],
completeDate: json["completeDate"],
cabRequired: json["cabRequired"],
rolloutPlan: json["rolloutPlan"],
backoutPlan: json["backoutPlan"],
impactAnalysis: json["impactAnalysis"],
reason: json["reason"],
workflowStatus: json["workflowStatus"],
releasePlan: json["releasePlan"],
testComment: json["testComment"],
testResult: json["testResult"],
closeComment: json["closeComment"],
closeResult: json["closeResult"],
refTicketId: json["refTicketId"],
tenantId: json["tenantId"],
);
Map<String, dynamic> toJson() => {
"ticketId": ticketId,
"ticketNumber": ticketNumber,
"subject": subject,
"priority": priority,
"description": description,
"anyAttachment": anyAttachment,
"status": status,
"createdAt": createdAt.toIso8601String(),
"requesterName": requesterName,
"requesterUUID": requesterUuid,
"requesterPhone": requesterPhone,
"requesterEmail": requesterEmail,
"customerId": customerId,
"ticketType": ticketType,
"categoryId": categoryId,
"category": category,
"assigneeUUID": assigneeUuid,
"assigneeName": assigneeName,
"assigneeEmail": assigneeEmail,
"assigneePhone": assigneePhone,
"groupUUID": groupUuid,
"groupName": groupName,
"rcaTitle": rcaTitle,
"rca": rca,
"rcaSolution": rcaSolution,
"rcaWorkaround": rcaWorkaround,
"rcsSymptoms": rcsSymptoms,
"rcaBy": rcaBy,
"rcaDate": rcaDate,
"rcaTag": List<dynamic>.from(rcaTag.map((x) => x)),
"formControl": formControl,
"classified": classified,
"initiatedBy": initiatedBy,
"initiationComment": initiationComment,
"impact": impact,
"risk": risk,
"downtimeStart": downtimeStart,
"downtimeEnd": downtimeEnd,
"assetName": assetName,
"serviceName": serviceName,
"applicationName": applicationName,
"submissionStatus": submissionStatus,
"planningStatus": planningStatus,
"implementationStatus": implementationStatus,
"reviewStatus": reviewStatus,
"closeStatus": closeStatus,
"finalStatus": finalStatus,
"ticketView": ticketView,
"completeDate": completeDate,
"cabRequired": cabRequired,
"rolloutPlan": rolloutPlan,
"backoutPlan": backoutPlan,
"impactAnalysis": impactAnalysis,
"reason": reason,
"workflowStatus": workflowStatus,
"releasePlan": releasePlan,
"testComment": testComment,
"testResult": testResult,
"closeComment": closeComment,
"closeResult": closeResult,
"refTicketId": refTicketId,
"tenantId": tenantId,
};
}
This is my listen function:
List<UserTicketResponseModel> _userTicketModel = [];
@override
void initState() {
super.initState();
getUserTickets();
}
Future<void> getUserTickets() async {
UserTicketProvider provider =
Provider.of<UserTicketProvider>(context, listen: false);
_userTicketModel = await provider.getAllUserIssueTicket();
print("User Tickets Main: " + _userTicketModel.toString());
}
body: ListView.builder(
itemCount: _userTicketModel.length,
itemBuilder: (context, index) {
return SingleChildScrollView(
child: UserTicketsList(
ticketNumber: _userTicketModel[index].ticketNumber.toString(),
requester: _userTicketModel[index].requesterName.toString(),
subject: _userTicketModel[index].subject.toString(),
priorityType: _userTicketModel[index].priority.toString(),
statusType: _userTicketModel[index].status.toString(),
),
);
},
),
When I run the app, in model class Exception occurred and showed this error:
_TypeError type 'Null' is not a subtype of type 'String'
I'm a beginner and I don't understand what the problem is! I tried model class null check with ??
or as String?
but not working!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论