Как передать имя пользовательского параметра в общую модель данных с помощью JsonSerializable во Flutter?

У меня есть общая модель данных во Flutter, использующая JsonSerializable. Я хочу передать пользовательское имя параметра (например, "statistics") вместо фиксированного имени в методах fromJson и toJson. Вот моя текущая реализация:

Возможно, мы можем создать еще один параметр, например, имя 'N', и проанализировать его в методах fromJson и toJson. Или, может быть, это вообще невозможно.

import 'package:json_annotation/json_annotation.dart';

part 'data_model.g.dart';

@JsonSerializable(genericArgumentFactories: true)
class DataModel<T, P> {
  final int? total;
  final List<T> items;
  final P? param;

  DataModel({
    this.total,
    required this.items,
    this.param,
  });

  factory DataModel.fromJson(
    Map<String, dynamic> json,
    T Function(Object?) fromJsonT,
    P Function(Object?) fromJsonP,
  ) {
    final List<dynamic> itemsJson = json['items'] as List<dynamic>;
    final List<T> items = itemsJson
        .map<T>((item) => fromJsonT(item as Map<String, dynamic>))
        .toList();

    final dynamic paramJson = json['statistics'] as dynamic; // <- pass the param name instead of 'statistics'
    final P? pamPam = fromJsonP(paramJson);

    return DataModel<T, P>(
      total: (json['total'] != null && json['total'] is int)
          ? json['total'] as int
          : null,
      param: pamPam,
      items: items,
    );
  }

  Map<String, dynamic> toJson(Object? Function(T) toJsonT, Object? Function(P) toJsonP) {
    final List<dynamic> itemsJson =
        items.map<dynamic>((item) => toJsonT(item)).toList();

    return {
      'total': total,
      'statistics': toJsonP, // <- pass the param name instead of 'statistics'
      'items': itemsJson,
    };
  }
}

Гордей
Вопрос задан21 февраля 2024 г.

1 Ответ

2
Елизар
Ответ получен16 сентября 2024 г.

Ваш ответ

Загрузить файл.