Flutter: - Как разобрать JSON из класса модели во флаттере?

Я разбираю JSON, например, из ключа и значений, как показано ниже, во флаттере.

 Future<LoginBean> login() async {
    var body = json.encode({"MOB": "1112223330", "KEY": "123456"});

    return http.post(
        Uri.encodeFull(
            "https://MY_Server/Users/login"),
        body: body.toString(),
        headers: {'Content-type': 'application/json'}).then((response) {
      print("Response Status : $response");

      if (response.statusCode == 200) {
         Map userMap = jsonDecode(json);
         var user = new LoginBean.fromJson(userMap);

         debugPrint("here is the response==>>>> $user");
      }
    });
  }

Есть ли другой способ проанализировать JSON в классе Model, как мы это делаем в Android, пожалуйста, проверьте приведенный ниже пример.

Gson gson = new Gson();

MY_LOGIN_BEAN loginBean = gson.fromJson(response, MY_LOGIN_BEAN.class);

Я ссылался на эти ссылки, но не получил решения, пожалуйста, проверьте ниже: -
1). Связь
2). Связь
3). Связь

Это мой ответ JSON

{"status":1,"message":"Login Successfully","data":{"userid":"101","Authorization":"eyJ1c2VyaWQiOiIxMDEiLCJ0b2tlbiI6IjVjYWRkYzUzMWY4YzAifQ= = ","roles":"2","firstname":"Ravindra","lastname":"kushwaha","fullname":"Ravindra kushwaha","wallet_amount":"845.00","mobile":"1112223330","email":"[email protected]","chat_id":"","qrcode_image":"https://dapplepay.consagous.co.in/uploads/coupon_qr/11C1f7ApJM8r.png","redirect_to_verify":"0","notification_status":"0","country_code":"91","Is_Allowed_Transaction":"1","profile_image":"https://dapplepay.consagous.co.in/uploads/user/1553600479DapplePay1553600454461.png","fingerprint_status":"0"}}

Я пробовал для него строки кода ниже, пожалуйста, посмотрите на него, но я не добился успеха.

  class LoginBean {
  int status;
  String message;
  Data data;

  LoginBean({
    this.status,
    this.message,
    this.data,
  });


  static Map<String, dynamic> toMap(LoginBean loginBean){
    var map = Map<String, dynamic>();
    map['status'] = loginBean.status;
    map['message'] = loginBean.message;
    map['data'] = Data.toMap(loginBean);
    return map;
  }

  LoginBean.map(dynamic obj) {
    this.status = obj["status"];
    this.message = obj["message"];
    if (obj['data'] != null) {
      this.data = new Data.map(obj['data']);
    }
  }

  factory LoginBean.fromJson(dynamic json) {
    print('here we gooo');
    return LoginBean(
        status: json['status'],
        message: json['message'],
        data: new Data.fromJson(json['data'])
    );
  }

}

class Data {
  String userid;
  String authorization;
  String roles;
  String firstname;
  String lastname;
  String fullname;
  String walletAmount;
  String mobile;
  String email;
  String chatId;
  String qrcodeImage;
  String redirectToVerify;
  String notificationStatus;
  String countryCode;
  String isAllowedTransaction;
  String profileImage;
  String fingerprintStatus;


  Data.map(dynamic json) {
    this.userid = json['userid'];
    this.authorization = json['authorization'];
    this.roles = json['roles'];
    this.firstname = json['firstname'];
    this.lastname = json['lastname'];
    this.fullname = json['fullname'];
    this.walletAmount = json['walletAmount'];
    this.mobile = json['mobile'];
    this.email = json['email'];
    this.chatId = json['chatId'];
    this.qrcodeImage = json['qrcodeImage'];
    this.redirectToVerify = json['redirectToVerify'];
    this.notificationStatus = json['notificationStatus'];
    this.countryCode= json['countryCode'];
    this.isAllowedTransaction = json['isAllowedTransaction'];
    this.profileImage = json['profileImage'];
    this.fingerprintStatus = json['fingerprintStatus'];
  }


  static Map<String, dynamic> toMap(LoginBean loginBean){
    var map = Map<String, dynamic>();
    map['userid'] = loginBean.data.userid;
    map['authorization'] = loginBean.data.authorization;
    map['roles'] = loginBean.data.roles;
    map['firstname'] = loginBean.data.firstname;
    map['lastname'] = loginBean.data.lastname;
    map['fullname'] = loginBean.data.fullname;
    map['walletAmount'] = loginBean.data.walletAmount;
    map['mobile'] = loginBean.data.mobile;
    map['email'] = loginBean.data.email;
    map['chatId'] = loginBean.data.chatId;
    map['qrcodeImage'] = loginBean.data.qrcodeImage;
    map['redirectToVerify'] = loginBean.data.redirectToVerify;
    map['notificationStatus'] = loginBean.data.notificationStatus;
    map['countryCode'] = loginBean.data.countryCode;
    map['isAllowedTransaction'] = loginBean.data.isAllowedTransaction;
    map['profileImage'] = loginBean.data.profileImage;
    map['fingerprintStatus'] = loginBean.data.fingerprintStatus;
    return map;
  }

  factory Data.fromJson(dynamic json) {
    return Data(
      userid: json['userid'],
      authorization: json['authorization'],
      roles: json['roles'],
      firstname: json['firstname'],
      lastname: json['lastname'],
      fullname: json['fullname'],
      walletAmount: json['walletAmount'],
      mobile: json['mobile'],
      email: json['email'],
      chatId: json['chatId'],
      qrcodeImage: json['qrcodeImage'],
      redirectToVerify: json['redirectToVerify'],
      notificationStatus: json['notificationStatus'],
      countryCode: json['countryCode'],
      isAllowedTransaction: json['isAllowedTransaction'],
      profileImage: json['profileImage'],
      fingerprintStatus: json['fingerprintStatus'],

    );
  }

  Data({
    this.userid,
    this.authorization,
    this.roles,
    this.firstname,
    this.lastname,
    this.fullname,
    this.walletAmount,
    this.mobile,
    this.email,
    this.chatId,
    this.qrcodeImage,
    this.redirectToVerify,
    this.notificationStatus,
    this.countryCode,
    this.isAllowedTransaction,
    this.profileImage,
    this.fingerprintStatus,
  });
}

Я получаю приведенное ниже исключение из приведенного выше кода, в то время как я использую класс модели для анализа JSON.

2019-04-10 18:59:28.553 11121-11153/democom.first_flutter_app E/flutter: [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String'
    #0      _LoginScreen.login.<anonymous closure> (package:first_flutter_app/onBording/login_screen.dart:139:34)
    #1      _rootRunUnary (dart:async/zone.dart:1132:38)
    #2      _CustomZone.runUnary (dart:async/zone.dart:1029:19)
    #3      _FutureListener.handleValue (dart:async/future_impl.dart:126:18)
    #4      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:639:45)
    #5      Future._propagateToListeners (dart:async/future_impl.dart:668:32)
    #6      Future._complete (dart:async/future_impl.dart:473:7)
    #7      _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
    #8      _AsyncAwaitCompleter.complete (dart:async/runtime/libasync_patch.dart:28:18)
    #9      _completeOnAsyncReturn (dart:async/runtime/libasync_patch.dart:294:13)
    #10     _withClient (package:http/http.dart)
    <asynchronous suspension>
    #11     post (package:http/http.dart:70:3)
    #12     _LoginScreen.login (package:first_flutter_app/onBording/login_screen.dart:129:12)
    <asynchronous suspension>
    #13     _LoginScreen.build.<anonymous closure>.<anonymous closure> (package:first_flutter_app/onBording/login_screen.dart:102:25)
    #14     _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:513:14)
    #15     _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:568:30)
    #16     GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:120:24)
    #17     TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
    #18     TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7)
    #19     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:369:9)
    #20     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12)
    #21     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11)
    #22     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:214:19)
    #23     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:192:22)
    #24     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:149:7)
    #25     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
    #26     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
    #27     _rootRunUnary (dart:async/zone.dart:1136:13)
    #28     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
    #29     _CustomZone.runUnaryGuarded (dart:async/zone.dart:931:7)
    #30     _invoke1 (dart:ui/hooks.dart:223:10)
    #31     _dispatchPointerDataPacket (dart:ui/hooks.dart:144:5)

см. flutter.dev/docs/development/data-and-backend/json

pskink 10.04.2019 14:25

Спасибо @pskink за вклад. Дай знать в ближайшее время

Ravindra Kushwaha 10.04.2019 14:26

@pskink Попробовали ваше решение, но не получили решения, я редактирую вопросы

Ravindra Kushwaha 10.04.2019 15:07

С какой проблемой вы столкнулись? ваш идентификатор пользователя должен быть правильным. (Хотя вы не печатаете его должным образом в соответствии с тем, что вы вставили.)

Keerti Purswani 10.04.2019 15:28

@KeertiPurswani Пожалуйста, взгляните на вопрос выше, я отредактировал вопрос, у меня есть исключение, пожалуйста, посмотрите на него.

Ravindra Kushwaha 10.04.2019 15:33

Какой у вас код в строке 139 в login_screen_dart?

Keerti Purswani 10.04.2019 15:36

Это мой код в строке 139Map userMap = jsonDecode(json);, посмотрите на мой метод выше login()

Ravindra Kushwaha 10.04.2019 15:37

Привет всем, DownVoter, пожалуйста, дайте мне объяснение, прежде чем понизить вопрос.

Ravindra Kushwaha 10.04.2019 15:39

Ты должен расшифровать response.body чувак. Я думаю, вы делали это правильно раньше.

Keerti Purswani 10.04.2019 15:41

@KeertiPurswani Я расшифровываю Json, опять та же проблема

Ravindra Kushwaha 10.04.2019 15:57

@pskink что такое runTimeProperty?

Ravindra Kushwaha 10.04.2019 15:58
var userMap = jsonDecode(response?.body); Используйте это и расскажите о своем результате.
Keerti Purswani 10.04.2019 16:00

Почему бы вам не использовать атрибут @JsonSerializable для десериализации из Документация по флаттеру?

Amir.n3t 10.04.2019 16:28

@Amir попробует это завтра, так как я еще не вышел

Ravindra Kushwaha 10.04.2019 17:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
14
3 582
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы декодируете json, когда вы должны декодировать тело, полученное в ответ, вот так -

var userMap = jsonDecode(response?.body);

Другие вопросы по теме