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

flutter 解析json另类封装方式,哈哈哈

日常学习,仅供参考,不喜 勿喷

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

核心代码

dart 复制代码
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<T> ==========================================================================
  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());
    });
  });

  /// <T> ==========================================================================
  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);
  });

  /// <Sting>/<int>/<bool> ==========================================================================

  ///可以转换  数据类型 String int bool
  String jsonData3 =
      '{"code":200,"message":"操作成功","isboolean":true,"data":true}';

  ttzq().listPost3<bool>(jsonData3).then((value) {
    print("结果:${value}"  );
  });


  return 0;
}

//结构类

dart 复制代码
//json解析
import 'package:json_annotation/json_annotation.dart';

@JsonSerializable()
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};

}
dart 复制代码
//json解析
import 'package:json_annotation/json_annotation.dart';

@JsonSerializable()
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};
}

导入架包

dart 复制代码
dependencies:
  flutter:
    sdk: flutter

  #json:
  json_annotation: ^4.8.0
相关推荐
wuxianda10301 小时前
uniapp项目上架苹果商店4.3a被拒,3天极速解决方案2026.5.8
前端·人工智能·flutter·uni-app·ios上架·苹果上架·苹果4.3a
Kiyra4 小时前
Query Rewrite 不是越智能越好:RAG 检索的精确词保护与动态召回
redis·websocket·junit·单元测试·json
Msshu1235 小时前
XSP25全协议 100W PD快充诱骗芯片_串口读电压电流信息
hive·云计算·json·database·memcached
水火既济__5 小时前
hive中加载json数据建表(大规模)
hive·hadoop·json
Han_han9196 小时前
List系列集合:
数据结构·windows·list
朝新_6 小时前
【LangChain】输出解析器 Str/Pydantic/JSON 解析器用法详解 告别模型乱输出
microsoft·langchain·json
段子子6 小时前
【在flutter项目中使用get_cli初始化项目】
flutter
W蘭7 小时前
Flutter从入门到实战-03-综合案例实战
flutter
jiejiejiejie_8 小时前
Flutter For OpenHarmony:共享元素转场的 OpenHarmony 平台实战
flutter
Zender Han8 小时前
Flutter Edge-to-Edge 介绍及适配使用指南
android·flutter·ios