• flutter 解析json另类封装方式 List<bean>,哈哈哈


    flutter 解析json另类封装方式,哈哈哈
    日常学习,仅供参考,不喜 勿喷

    http请求数据泛型解析封装,需要判断泛型数据类型再根据类型解析,本文只抽取了list演示

    核心代码

    import 'dart:convert';
    
    import 'package:webwsyn/http/bean/login_list.dart';
    import 'package:webwsyn/http/bean/model.dart';
    
    class ttzq {
      Future<List<T>> listPost<T>(
          String data, T Function(dynamic data) parseModel) async {
        try {
          final jsonMap = jsonDecode(data);
          print('接收数据:' + data);
    
          Model<List<dynamic>> response1 = Model<List<dynamic>>.fromJson(jsonMap);
    
          List<dynamic> list = response1.data as List;
    
          return list.map((e) => parseModel(e)).toList();
        } catch (e) {
          throw Exception('Failed to send POST request ${e}');
        }
      }
    
      Future<T> listPost2<T>(
          String data, T Function(dynamic data) parseModel) async {
        try {
          final jsonMap = jsonDecode(data);
    
          Model<dynamic> response1 = Model<dynamic>.fromJson(jsonMap);
    
          return parseModel(response1.data);
        } catch (e) {
          throw Exception('Failed to send POST request ${e}');
        }
      }
    
      Future<T> listPost3<T>(String data) async {
        try {
          final jsonMap = jsonDecode(data);
    
          Model<dynamic> response1 = Model<dynamic>.fromJson(jsonMap);
    
          return response1.data as T;
          //return parseModel(response1.data);
        } catch (e) {
          throw Exception('Failed to send POST request ${e}');
        }
      }
    }
    
    ///测试方法
    Future<int> main() async {
      /// List ==========================================================================
      String jsonData =
          '{"code":200,"message":"操作成功","isboolean":true,"data":[{"id":1,"name":"admin","password":"123456"},{"id":2,"name":"admin","password":"123456"}]}';
    
      ttzq()
          .listPost<LoginList>(jsonData, (data) => LoginList.fromJson(data))
          .then((value) {
    
        //print(value[0].password);
         // 打印返回的数据
    
        value.forEach((element) {
          print(element.toJson());
        });
      });
    
      ///  ==========================================================================
      String jsonData2 = '{"code":200,"message":"操作成功","isboolean":true,"data":{"id":1,"name":"admin","password":"123456"}}';
      ttzq().listPost2(jsonData2,(data) => LoginList.fromJson(data)).then((value) {
        print('=============================');
        print(value.password);
      });
    
      /// // ==========================================================================
    
      ///可以转换  数据类型 String int bool
      String jsonData3 =
          '{"code":200,"message":"操作成功","isboolean":true,"data":true}';
    
      ttzq().listPost3<bool>(jsonData3).then((value) {
        print("结果:${value}"  );
      });
    
    
      return 0;
    }
    
    
    

    //结构类

    //json解析
    import 'package:json_annotation/json_annotation.dart';
    
    ()
    class LoginList {
      late int id;
    
      late String name;
    
      late String password;
    
      LoginList.fromJson(Map<String, dynamic> json) {
        id = json['id'] as int;
        if (json.containsKey('name')) {
          name = json['name'] as String;
        }
        if (json.containsKey('password')) {
          password = json['password'] as String;
        }
      }
    
      Map<String, dynamic> toJson() =>
          {'id': id, 'name': name, 'password': password};
    
    }
    
    
    //json解析
    import 'package:json_annotation/json_annotation.dart';
    
    ()
    class Model<T> {
      late bool isboolean;
      late int code;
      late T data;
      late String message;
    
      Model({
        required this.isboolean,
        required this.code,
        required this.data,
        required this.message,
      });
    
      Model.fromJson(Map<String, dynamic> json) {
        isboolean = json['isboolean'] as bool;
        code = json['code'] as int;
        if (json.containsKey('message')) {
          message = json['message'] as String;
        }
        if (json.containsKey('data')) {
          data = json['data'] as T;
        }
      }
    
      Map<String, dynamic> toJson() =>
          {'isboolean': isboolean, 'code': code, 'message': message, 'data': data};
    }
    
    

    导入架包

    dependencies:
      flutter:
        sdk: flutter
    
      #json:
      json_annotation: ^4.8.0
    
  • 相关阅读:
    pinia中使用reactive声明变量,子页面使用时,值未改变,即不是响应式的(解决方法)
    el-cascader回显只选中不显示的问题
    阿里云新用户:定义,专享福利及优惠活动
    SQL 教程之 10 个 SQL 操作用于 80% 的数据操作
    金九银十招聘季, 自动化测试面试题分享
    2022-08-02~04 第四小组 修身课 学习笔记(every day)
    【重构map】【重构filter】【重构Some】【重构reduce方法】【重构flat函数】
    HTTP 到 HTTPS 再到 HSTS 的转变
    Unity UGUI(一)基础组件
    BAT面经总结,阿里巴巴、百度、京东、饿了么offer拿到手软!
  • 原文地址:https://blog.csdn.net/ZQ200720/article/details/139462677