flutter - 未处理的异常:键入“列表”' 不是类型 'Map 的子类型
问题描述
E/flutter ( 3391): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'
E/flutter ( 3391): #0 new LoginResponseModel.fromJson (package:flutter_woocomerce/model/login_model.dart:21:53)
E/flutter ( 3391): #1 APIServices.loginCustomer (package:flutter_woocomerce/api_service.dart:63:36)
E/flutter ( 3391): <asynchronous suspension>
E/flutter ( 3391): #2 _LoginPageState._uiSetup.<anonymous closure> (package:flutter_woocomerce/pages/login_page.dart:137:36)
E/flutter ( 3391): #3 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:993:19)
E/flutter ( 3391): #4 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1111:38)
E/flutter ( 3391): #5 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:183:24)
E/flutter ( 3391): #6 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:598:11)
E/flutter ( 3391): #7 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:287:5)
E/flutter ( 3391): #8 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:222:7)
E/flutter ( 3391): #9 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:476:9)
E/flutter ( 3391): #10 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:77:12)
E/flutter ( 3391): #11 PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:122:9)
E/flutter ( 3391): #12 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8)
E/flutter ( 3391): #13 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:120:18)
E/flutter ( 3391): #14 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:106:7)
E/flutter ( 3391): #15 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:358:19)
E/flutter ( 3391): #16 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:338:22)
E/flutter ( 3391): #17 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:267:11)
E/flutter ( 3391): #18 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:295:7)
E/flutter ( 3391): #19 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:240:7)
E/flutter ( 3391): #20 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:213:7)
E/flutter ( 3391): #21 _rootRunUnary (dart:async/zone.dart:1206:13)
E/flutter ( 3391): #22 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 3391): #23 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter ( 3391): #24 _invoke1 (dart:ui/hooks.dart:265:10)
E/flutter ( 3391): #25 _dispatchPointerDataPacket (dart:ui/hooks.dart:174:5)
E/flutter ( 3391): mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
//登录模型
class LoginResponseModel {
bool success;
int statusCode;
String code;
String message;
Data data;
LoginResponseModel({
this.success,
this.statusCode,
this.code,
this.message,
this.data,
});
LoginResponseModel.fromJson(Map<String, dynamic> json) {
success = json['success'];
statusCode = json['statusCode'];
code = json['code'];
message = json['message'];
data = json['data'] != null ? Data.fromJson(json['data']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = Map<String, dynamic>();
data['success'] = this.success;
data['statusCode'] = this.statusCode;
data['code'] = this.code;
data['message'] = this.message;
if (this.data != null) {
data['data'] = this.data.toJson() ;
}
return data;
}
}
class Data {
String token;
int id;
String email;
String niceName;
String firstName;
String lastName;
String displayName;
Data({
this.token,
this.id,
this.email,
this.niceName,
this.firstName,
this.lastName,
this.displayName,
});
Data.fromJson(Map<String, dynamic> json) {
token = json['token'];
id = json['id'];
email = json['email'];
niceName = json['niceName'];
firstName = json['firstName'];
lastName = json['lastName'];
displayName = json['displayName'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = Map<String, dynamic>();
data['token'] = this.token;
data['id'] = this.id;
data['email'] = this.email;
data['niceName'] = this.niceName;
data['firstName'] = this.firstName;
data['lastName'] = this.lastName;
data['displayName'] = this.displayName;
return data;
}
}
api服务
import 'dart:convert';
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter_woocomerce/config.dart';
import 'package:flutter_woocomerce/model/customer.dart';
import 'package:flutter_woocomerce/model/login_model.dart';
class APIServices {
Future<bool> createCustomer(CustomerModel) async {
var authToken =
base64.encode(utf8.encode(Config.key + ':' + Config.secret));
bool ret = false;
try {
var response = await Dio().post(
Config.url + Config.customerURL,
data: CustomerModel.toJson(),
options: Options(
headers: {
HttpHeaders.authorizationHeader: 'Basic $authToken',
HttpHeaders.contentTypeHeader: 'application/json',
}
)
);
if (response.statusCode == 201) {
ret = true;
}
} on DioError catch (e) {
if (e.response.statusCode == 404) {
ret = false;
} else {
ret = false;
}
}
return ret;
}
Future<LoginResponseModel> loginCustomer(String username,
String password) async {
LoginResponseModel model;
try {
var response = await Dio().post(
Config.tokenURL,
data: {
"username": username,
"password": password,
},
options: Options(
headers: {
HttpHeaders
.contentTypeHeader: 'application/x-www-form-urlencoded',
}
)
);
if (response.statusCode == 200) {
model = LoginResponseModel.fromJson(response.data);
}
} on DioError catch (e) {
print(e.message);
}
return model;
}
}
解决方案
从向您显示的“错误”中,响应类型是List<dynamic>
. 在LoginResponseModel.fromJson
方法中debugPrint
您的响应并检查并确保其类型为Map<String, dynamic>
.
推荐阅读
- flutter - 如何使用打印预览创建定制的打印设计,并最终使用 Flutter Dart 使用蓝牙热敏打印机进行打印?
- c# - C# 获取请求标头并返回已排序的实体
- c++ - 对“NetUserEnum”的未定义引用和对“NetApiBufferFree”错误的未定义引用
- excel - 如何在 SAP VBA 脚本中创建循环
- c++ - 如何反转 c 风格的字符串
- jquery - 找到没有类的第一个div,然后添加一个类
- javascript - Vuejs 路由器不会在实时服务器上加载
- selenium -
通过添加图表自定义黄瓜报告(除了默认图表) - r - 如何使用 dplyr R 跨多个列应用汇总
- python - ImportError:DLL加载失败:在python中找不到指定的模块