flutter入門到放棄5

json數(shù)據(jù)格式轉換

  • 使用json_serializable庫
  1. pubspec.yaml文件中添加依賴
dependencies:
  json_annotation: ^4.4.0

dev_dependencies:
  build_runner: ^2.1.4
  json_serializable: ^6.7.1
  1. 使用@JsonSerializable注解標記類
import 'package:json_annotation/json_annotation.dart';

import '../dio/HttpState.dart';
part 'BaseResponse.g.dart';

@JsonSerializable(genericArgumentFactories: true)
class BaseResponse<T> {
  int status = 0;
  T? data;
  String? title;

  BaseResponse({
    required this.data,
    required this.status,
    required this.title,
  });

  bool isSuccess() {
    return status == HttpState.SUCCESS;
  }

  String getMessageAndCodeWithEmpty() {
    if (title == null) {
      return "";
    } else {
      return "${title!}:$status";
    }
  }

  factory BaseResponse.fromJson(
    Map<String, dynamic> json,
    T Function(dynamic json) fromJsonT,
  ) =>
      _$BaseResponseFromJson<T>(json, fromJsonT);

  Map<String, dynamic> toJson(Object? Function(T value) toJsonT) =>
      _$BaseResponseToJson<T>(this, toJsonT);
}
  1. 運行以下命令生成序列化文件
    flutter pub run build_runner build
  2. 導入生成一個名為xx.g.dart的文件
  3. 泛型處理
part 'UserInfo.g.dart';
 @JsonSerializable(explicitToJson: true)
class UserInfo {
  String? name;
  int age = 0;
  String? email;

  UserInfo({
    required this.name,
    required this.age,
    required this.email,
  });

  factory UserInfo.fromJson(Map<String, dynamic> json) =>
      _$UserInfoFromJson(json);

  Map<String, dynamic> toJson() => _$UserInfoToJson(this);
}

BaseResponse和UserInfo中的factory直接調用xx.g.dart文件

測試

  void _checkJson(){
    String jsonString = '{"status":200,"data":{"name":"張三","age":18}}';
    Map<String,dynamic> jsonData = json.decode(jsonString);
    BaseResponse<UserInfo>? response = BaseResponse<UserInfo>.fromJson(jsonData, (json) => UserInfo.fromJson(json));
    Log.e("用戶名稱:${response.data?.name}");
  }

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容