【问题标题】:Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>未处理的异常:类型 'List<dynamic>' 不是类型 'Map<String, dynamic> 的子类型
【发布时间】:2020-10-24 00:07:18
【问题描述】:
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;
  }


}

my code in github

【问题讨论】:

    标签: flutter


    【解决方案1】:

    从显示的“错误”中,响应类型为List&lt;dynamic&gt;。在LoginResponseModel.fromJson 方法debugPrint 中您的响应并检查并确保其类型为Map&lt;String, dynamic&gt;。

    【讨论】:

    • sleem{success: false, statusCode: 403, code: jwt_auth_bad_config, message: JWT 配置不正确。, data: []} E/flutter (17063): [ERROR:flutter/lib/ ui/ui_dart_state.cc(177)] 未处理的异常:FormatException:意外字符(在字符 2 处)
    • 这是响应
    【解决方案2】:

    您在上面的评论中更新的响应显示响应中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;
      }
    

    这一行:

    data = json['data'] != null ? Data.fromJson(json['data']) : null;
    

    解决方案:

    您正在尝试将数组数据转换为Data 对象,而您实际上需要将其解析为List,如下所示:

    data = json['data'] != null ? List<dynamic>.from(json["data"]) : null;
    

    或

    如果列表是Data 对象,则:

    data = json['data'] != null ? List<Data>.from(json["data"].map((x) => Data.fromJson(x))) : null;
    

    【讨论】:

    • 同样的错误兄弟 sleem{success: false, statusCode: 403, code: jwt_auth_bad_config, message: JWT is not configurated., data: []} E/flutter (22265): [ERROR:flutter /lib/ui/ui_dart_state.cc(177)] 未处理的异常:FormatException:意外字符(在字符 2)
    猜你喜欢
    • 2019-09-26
    • 2021-05-21
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 2021-08-03
    • 2021-12-29
    • 2021-10-11
    相关资源
    最近更新 更多