|
|
|
import 'package:json_annotation/json_annotation.dart';
|
|
|
|
|
|
|
|
import '../enums/app_enums.dart';
|
|
|
|
|
|
|
|
part 'health_models.g.dart';
|
|
|
|
int? _parseInt(dynamic value) {
|
|
|
|
if (value == null) return null;
|
|
|
|
if (value is int) return value;
|
|
|
|
if (value is double) return value.toInt();
|
|
|
|
if (value is String) {
|
|
|
|
return int.tryParse(value);
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
double? _parseDouble(dynamic value) {
|
|
|
|
if (value == null) return null;
|
|
|
|
if (value is num) return value.toDouble();
|
|
|
|
if (value is String) {
|
|
|
|
if (value == 'NaN') return double.nan;
|
|
|
|
if (value == 'Infinity') return double.infinity;
|
|
|
|
if (value == '-Infinity') return double.negativeInfinity;
|
|
|
|
return double.tryParse(value);
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class TodayStatusData {
|
|
|
|
const TodayStatusData({
|
|
|
|
this.recentData,
|
|
...
|
...
|
@@ -14,23 +31,50 @@ class TodayStatusData { |
|
|
|
this.sleepDuration,
|
|
|
|
});
|
|
|
|
|
|
|
|
@JsonKey(name: 'recent_data')
|
|
|
|
final TodayStatusRecentData? recentData;
|
|
|
|
@JsonKey(name: 'hrv_data_list')
|
|
|
|
final List<TodayHrvData>? hrvDataList;
|
|
|
|
@JsonKey(name: 'heart_rate_data_list')
|
|
|
|
final List<TodayHeartRateData>? heartRateDataList;
|
|
|
|
@JsonKey(name: 'oxygen_saturation_data_list')
|
|
|
|
final List<TodaySpo2Data>? spo2DataList;
|
|
|
|
@JsonKey(name: 'sleep_duration')
|
|
|
|
final int? sleepDuration;
|
|
|
|
|
|
|
|
factory TodayStatusData.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$TodayStatusDataFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$TodayStatusDataToJson(this);
|
|
|
|
factory TodayStatusData.fromJson(Map<String, dynamic> json) {
|
|
|
|
return TodayStatusData(
|
|
|
|
recentData: json['recent_data'] == null
|
|
|
|
? null
|
|
|
|
: TodayStatusRecentData.fromJson(
|
|
|
|
json['recent_data'] as Map<String, dynamic>),
|
|
|
|
hrvDataList: (json['hrv_data_list'] as List<dynamic>?)
|
|
|
|
?.map((e) => TodayHrvData.fromJson(e as Map<String, dynamic>))
|
|
|
|
.toList(),
|
|
|
|
heartRateDataList: (json['heart_rate_data_list'] as List<dynamic>?)
|
|
|
|
?.map((e) => TodayHeartRateData.fromJson(e as Map<String, dynamic>))
|
|
|
|
.toList(),
|
|
|
|
spo2DataList: (json['oxygen_saturation_data_list'] as List<dynamic>?)
|
|
|
|
?.map((e) => TodaySpo2Data.fromJson(e as Map<String, dynamic>))
|
|
|
|
.toList(),
|
|
|
|
sleepDuration: _parseInt(json['sleep_duration']),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (recentData != null) val['recent_data'] = recentData!.toJson();
|
|
|
|
if (hrvDataList != null) {
|
|
|
|
val['hrv_data_list'] = hrvDataList!.map((e) => e.toJson()).toList();
|
|
|
|
}
|
|
|
|
if (heartRateDataList != null) {
|
|
|
|
val['heart_rate_data_list'] =
|
|
|
|
heartRateDataList!.map((e) => e.toJson()).toList();
|
|
|
|
}
|
|
|
|
if (spo2DataList != null) {
|
|
|
|
val['oxygen_saturation_data_list'] =
|
|
|
|
spo2DataList!.map((e) => e.toJson()).toList();
|
|
|
|
}
|
|
|
|
if (sleepDuration != null) val['sleep_duration'] = sleepDuration;
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class TodayStatusRecentData {
|
|
|
|
const TodayStatusRecentData({
|
|
|
|
this.heartRate,
|
|
...
|
...
|
@@ -41,27 +85,41 @@ class TodayStatusRecentData { |
|
|
|
this.steps,
|
|
|
|
});
|
|
|
|
|
|
|
|
@JsonKey(name: 'heart_rate')
|
|
|
|
final int? heartRate;
|
|
|
|
@JsonKey(name: 'oxygen_saturation')
|
|
|
|
final double? spo2;
|
|
|
|
final int? move;
|
|
|
|
final int? exercise;
|
|
|
|
final int? stand;
|
|
|
|
final int? steps;
|
|
|
|
|
|
|
|
factory TodayStatusRecentData.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$TodayStatusRecentDataFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$TodayStatusRecentDataToJson(this);
|
|
|
|
factory TodayStatusRecentData.fromJson(Map<String, dynamic> json) {
|
|
|
|
return TodayStatusRecentData(
|
|
|
|
heartRate: _parseInt(json['heart_rate']),
|
|
|
|
spo2: _parseDouble(json['oxygen_saturation']),
|
|
|
|
move: _parseInt(json['move']),
|
|
|
|
exercise: _parseInt(json['exercise']),
|
|
|
|
stand: _parseInt(json['stand']),
|
|
|
|
steps: _parseInt(json['steps']),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (heartRate != null) val['heart_rate'] = heartRate;
|
|
|
|
if (spo2 != null) val['oxygen_saturation'] = spo2;
|
|
|
|
if (move != null) val['move'] = move;
|
|
|
|
if (exercise != null) val['exercise'] = exercise;
|
|
|
|
if (stand != null) val['stand'] = stand;
|
|
|
|
if (steps != null) val['steps'] = steps;
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class TodayHrvData {
|
|
|
|
const TodayHrvData({this.time, this.value, this.hrvBaseline});
|
|
|
|
|
|
|
|
final int? time;
|
|
|
|
final double? value;
|
|
|
|
@JsonKey(name: 'hrv_baseline')
|
|
|
|
final double? hrvBaseline;
|
|
|
|
|
|
|
|
HrvStatus? get hrvStatus {
|
|
...
|
...
|
@@ -78,39 +136,68 @@ class TodayHrvData { |
|
|
|
return HrvStatus.normal;
|
|
|
|
}
|
|
|
|
|
|
|
|
factory TodayHrvData.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$TodayHrvDataFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$TodayHrvDataToJson(this);
|
|
|
|
factory TodayHrvData.fromJson(Map<String, dynamic> json) {
|
|
|
|
return TodayHrvData(
|
|
|
|
time: _parseInt(json['time']),
|
|
|
|
value: _parseDouble(json['value']),
|
|
|
|
hrvBaseline: _parseDouble(json['hrv_baseline']),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (time != null) val['time'] = time;
|
|
|
|
if (value != null) val['value'] = value;
|
|
|
|
if (hrvBaseline != null) val['hrv_baseline'] = hrvBaseline;
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class TodayHeartRateData {
|
|
|
|
const TodayHeartRateData({this.index, this.minimum, this.maximum});
|
|
|
|
|
|
|
|
@JsonKey(name: 'bi_hour_index')
|
|
|
|
final int? index;
|
|
|
|
final int? minimum;
|
|
|
|
final int? maximum;
|
|
|
|
|
|
|
|
factory TodayHeartRateData.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$TodayHeartRateDataFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$TodayHeartRateDataToJson(this);
|
|
|
|
factory TodayHeartRateData.fromJson(Map<String, dynamic> json) {
|
|
|
|
return TodayHeartRateData(
|
|
|
|
index: _parseInt(json['bi_hour_index']),
|
|
|
|
minimum: _parseInt(json['minimum']),
|
|
|
|
maximum: _parseInt(json['maximum']),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (index != null) val['bi_hour_index'] = index;
|
|
|
|
if (minimum != null) val['minimum'] = minimum;
|
|
|
|
if (maximum != null) val['maximum'] = maximum;
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class TodaySpo2Data {
|
|
|
|
const TodaySpo2Data({this.index, this.average});
|
|
|
|
|
|
|
|
@JsonKey(name: 'bi_hour_index')
|
|
|
|
final int? index;
|
|
|
|
final double? average;
|
|
|
|
|
|
|
|
factory TodaySpo2Data.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$TodaySpo2DataFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$TodaySpo2DataToJson(this);
|
|
|
|
factory TodaySpo2Data.fromJson(Map<String, dynamic> json) {
|
|
|
|
return TodaySpo2Data(
|
|
|
|
index: _parseInt(json['bi_hour_index']),
|
|
|
|
average: _parseDouble(json['average']),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (index != null) val['bi_hour_index'] = index;
|
|
|
|
if (average != null) val['average'] = average;
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class PkCurrentMonthData {
|
|
|
|
const PkCurrentMonthData({
|
|
|
|
this.userWinAmount,
|
|
...
|
...
|
@@ -119,21 +206,36 @@ class PkCurrentMonthData { |
|
|
|
this.monthRecordList,
|
|
|
|
});
|
|
|
|
|
|
|
|
@JsonKey(name: 'user_win')
|
|
|
|
final int? userWinAmount;
|
|
|
|
@JsonKey(name: 'pair_user_win')
|
|
|
|
final int? partnerWinAmount;
|
|
|
|
@JsonKey(name: 'data_today')
|
|
|
|
final PkRecord? todayRecord;
|
|
|
|
@JsonKey(name: 'month_data_list')
|
|
|
|
final List<PkRecord>? monthRecordList;
|
|
|
|
|
|
|
|
factory PkCurrentMonthData.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$PkCurrentMonthDataFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$PkCurrentMonthDataToJson(this);
|
|
|
|
factory PkCurrentMonthData.fromJson(Map<String, dynamic> json) {
|
|
|
|
return PkCurrentMonthData(
|
|
|
|
userWinAmount: _parseInt(json['user_win']),
|
|
|
|
partnerWinAmount: _parseInt(json['pair_user_win']),
|
|
|
|
todayRecord: json['data_today'] == null
|
|
|
|
? null
|
|
|
|
: PkRecord.fromJson(json['data_today'] as Map<String, dynamic>),
|
|
|
|
monthRecordList: (json['month_data_list'] as List<dynamic>?)
|
|
|
|
?.map((e) => PkRecord.fromJson(e as Map<String, dynamic>))
|
|
|
|
.toList(),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (userWinAmount != null) val['user_win'] = userWinAmount;
|
|
|
|
if (partnerWinAmount != null) val['pair_user_win'] = partnerWinAmount;
|
|
|
|
if (todayRecord != null) val['data_today'] = todayRecord!.toJson();
|
|
|
|
if (monthRecordList != null) {
|
|
|
|
val['month_data_list'] = monthRecordList!.map((e) => e.toJson()).toList();
|
|
|
|
}
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class PkRecord {
|
|
|
|
const PkRecord({
|
|
|
|
this.date,
|
|
...
|
...
|
@@ -148,29 +250,44 @@ class PkRecord { |
|
|
|
});
|
|
|
|
|
|
|
|
final int? date;
|
|
|
|
@JsonKey(name: 'user_score')
|
|
|
|
final int? userScore;
|
|
|
|
@JsonKey(name: 'user_move')
|
|
|
|
final int? userMove;
|
|
|
|
@JsonKey(name: 'user_stand')
|
|
|
|
final int? userStand;
|
|
|
|
@JsonKey(name: 'user_steps')
|
|
|
|
final int? userSteps;
|
|
|
|
@JsonKey(name: 'pair_user_score')
|
|
|
|
final int? partnerScore;
|
|
|
|
@JsonKey(name: 'pair_user_move')
|
|
|
|
final int? partnerMove;
|
|
|
|
@JsonKey(name: 'pair_user_stand')
|
|
|
|
final int? partnerStand;
|
|
|
|
@JsonKey(name: 'pair_user_steps')
|
|
|
|
final int? partnerSteps;
|
|
|
|
|
|
|
|
factory PkRecord.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$PkRecordFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$PkRecordToJson(this);
|
|
|
|
factory PkRecord.fromJson(Map<String, dynamic> json) {
|
|
|
|
return PkRecord(
|
|
|
|
date: _parseInt(json['date']),
|
|
|
|
userScore: _parseInt(json['user_score']),
|
|
|
|
userMove: _parseInt(json['user_move']),
|
|
|
|
userStand: _parseInt(json['user_stand']),
|
|
|
|
userSteps: _parseInt(json['user_steps']),
|
|
|
|
partnerScore: _parseInt(json['pair_user_score']),
|
|
|
|
partnerMove: _parseInt(json['pair_user_move']),
|
|
|
|
partnerStand: _parseInt(json['pair_user_stand']),
|
|
|
|
partnerSteps: _parseInt(json['pair_user_steps']),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (date != null) val['date'] = date;
|
|
|
|
if (userScore != null) val['user_score'] = userScore;
|
|
|
|
if (userMove != null) val['user_move'] = userMove;
|
|
|
|
if (userStand != null) val['user_stand'] = userStand;
|
|
|
|
if (userSteps != null) val['user_steps'] = userSteps;
|
|
|
|
if (partnerScore != null) val['pair_user_score'] = partnerScore;
|
|
|
|
if (partnerMove != null) val['pair_user_move'] = partnerMove;
|
|
|
|
if (partnerStand != null) val['pair_user_stand'] = partnerStand;
|
|
|
|
if (partnerSteps != null) val['pair_user_steps'] = partnerSteps;
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class SleepStatisticsData {
|
|
|
|
const SleepStatisticsData({
|
|
|
|
this.avgSleepDuration,
|
|
...
|
...
|
@@ -182,53 +299,90 @@ class SleepStatisticsData { |
|
|
|
this.asleepTimeDistributionList,
|
|
|
|
});
|
|
|
|
|
|
|
|
@JsonKey(name: 'avg_sleep_duration')
|
|
|
|
final int? avgSleepDuration;
|
|
|
|
@JsonKey(name: 'awake_percentage')
|
|
|
|
final double? awakePercentage;
|
|
|
|
@JsonKey(name: 'core_percentage')
|
|
|
|
final double? corePercentage;
|
|
|
|
@JsonKey(name: 'deep_percentage')
|
|
|
|
final double? deepPercentage;
|
|
|
|
@JsonKey(name: 'rem_percentage')
|
|
|
|
final double? remPercentage;
|
|
|
|
@JsonKey(name: 'sleep_trend_list')
|
|
|
|
final List<SleepTrend>? sleepTrendList;
|
|
|
|
@JsonKey(name: 'asleep_time_trend_list')
|
|
|
|
final List<AsleepTimeDistribution>? asleepTimeDistributionList;
|
|
|
|
|
|
|
|
factory SleepStatisticsData.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$SleepStatisticsDataFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$SleepStatisticsDataToJson(this);
|
|
|
|
factory SleepStatisticsData.fromJson(Map<String, dynamic> json) {
|
|
|
|
return SleepStatisticsData(
|
|
|
|
avgSleepDuration: _parseInt(json['avg_sleep_duration']),
|
|
|
|
awakePercentage: _parseDouble(json['awake_percentage']),
|
|
|
|
corePercentage: _parseDouble(json['core_percentage']),
|
|
|
|
deepPercentage: _parseDouble(json['deep_percentage']),
|
|
|
|
remPercentage: _parseDouble(json['rem_percentage']),
|
|
|
|
sleepTrendList: (json['sleep_trend_list'] as List<dynamic>?)
|
|
|
|
?.map((e) => SleepTrend.fromJson(e as Map<String, dynamic>))
|
|
|
|
.toList(),
|
|
|
|
asleepTimeDistributionList: (json['asleep_time_trend_list'] as List<dynamic>?)
|
|
|
|
?.map((e) => AsleepTimeDistribution.fromJson(e as Map<String, dynamic>))
|
|
|
|
.toList(),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (avgSleepDuration != null) val['avg_sleep_duration'] = avgSleepDuration;
|
|
|
|
if (awakePercentage != null) val['awake_percentage'] = awakePercentage;
|
|
|
|
if (corePercentage != null) val['core_percentage'] = corePercentage;
|
|
|
|
if (deepPercentage != null) val['deep_percentage'] = deepPercentage;
|
|
|
|
if (remPercentage != null) val['rem_percentage'] = remPercentage;
|
|
|
|
if (sleepTrendList != null) {
|
|
|
|
val['sleep_trend_list'] = sleepTrendList!.map((e) => e.toJson()).toList();
|
|
|
|
}
|
|
|
|
if (asleepTimeDistributionList != null) {
|
|
|
|
val['asleep_time_trend_list'] =
|
|
|
|
asleepTimeDistributionList!.map((e) => e.toJson()).toList();
|
|
|
|
}
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class SleepTrend {
|
|
|
|
const SleepTrend({this.timeKey, this.average});
|
|
|
|
|
|
|
|
@JsonKey(name: 'time_key')
|
|
|
|
final int? timeKey;
|
|
|
|
final int? average;
|
|
|
|
|
|
|
|
factory SleepTrend.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$SleepTrendFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$SleepTrendToJson(this);
|
|
|
|
factory SleepTrend.fromJson(Map<String, dynamic> json) {
|
|
|
|
return SleepTrend(
|
|
|
|
timeKey: _parseInt(json['time_key']),
|
|
|
|
average: _parseInt(json['average']),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (timeKey != null) val['time_key'] = timeKey;
|
|
|
|
if (average != null) val['average'] = average;
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class AsleepTimeDistribution {
|
|
|
|
const AsleepTimeDistribution({this.timeKey, this.average});
|
|
|
|
|
|
|
|
@JsonKey(name: 'time_key')
|
|
|
|
final int? timeKey;
|
|
|
|
final String? average;
|
|
|
|
|
|
|
|
factory AsleepTimeDistribution.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$AsleepTimeDistributionFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$AsleepTimeDistributionToJson(this);
|
|
|
|
factory AsleepTimeDistribution.fromJson(Map<String, dynamic> json) {
|
|
|
|
return AsleepTimeDistribution(
|
|
|
|
timeKey: _parseInt(json['time_key']),
|
|
|
|
average: json['average'] as String?,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (timeKey != null) val['time_key'] = timeKey;
|
|
|
|
if (average != null) val['average'] = average;
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class ActivityBurnStatisticsData {
|
|
|
|
const ActivityBurnStatisticsData({
|
|
|
|
this.totalCaloriesBurned,
|
|
...
|
...
|
@@ -242,69 +396,127 @@ class ActivityBurnStatisticsData { |
|
|
|
this.activityTargetInfo,
|
|
|
|
});
|
|
|
|
|
|
|
|
@JsonKey(name: 'total_move')
|
|
|
|
final int? totalCaloriesBurned;
|
|
|
|
@JsonKey(name: 'avg_move')
|
|
|
|
final double? avgCaloriesBurned;
|
|
|
|
@JsonKey(name: 'max_move')
|
|
|
|
final CaloriesBurnedValue? maxCaloriesBurned;
|
|
|
|
@JsonKey(name: 'min_move')
|
|
|
|
final CaloriesBurnedValue? minCaloriesBurned;
|
|
|
|
@JsonKey(name: 'total_steps')
|
|
|
|
final int? totalSteps;
|
|
|
|
@JsonKey(name: 'total_stand')
|
|
|
|
final int? totalStand;
|
|
|
|
@JsonKey(name: 'move_trend_list')
|
|
|
|
final List<CaloriesBurnedTrend>? caloriesBurnedTrendList;
|
|
|
|
@JsonKey(name: 'excercise_trend_list')
|
|
|
|
final List<ExerciseTimeTrend>? exerciseTimeTrendList;
|
|
|
|
@JsonKey(name: 'activity_target_info')
|
|
|
|
final ActivityTargetInfo? activityTargetInfo;
|
|
|
|
|
|
|
|
factory ActivityBurnStatisticsData.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$ActivityBurnStatisticsDataFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$ActivityBurnStatisticsDataToJson(this);
|
|
|
|
factory ActivityBurnStatisticsData.fromJson(Map<String, dynamic> json) {
|
|
|
|
return ActivityBurnStatisticsData(
|
|
|
|
totalCaloriesBurned: _parseInt(json['total_move']),
|
|
|
|
avgCaloriesBurned: _parseDouble(json['avg_move']),
|
|
|
|
maxCaloriesBurned: json['max_move'] == null
|
|
|
|
? null
|
|
|
|
: CaloriesBurnedValue.fromJson(json['max_move'] as Map<String, dynamic>),
|
|
|
|
minCaloriesBurned: json['min_move'] == null
|
|
|
|
? null
|
|
|
|
: CaloriesBurnedValue.fromJson(json['min_move'] as Map<String, dynamic>),
|
|
|
|
totalSteps: _parseInt(json['total_steps']),
|
|
|
|
totalStand: _parseInt(json['total_stand']),
|
|
|
|
caloriesBurnedTrendList: (json['move_trend_list'] as List<dynamic>?)
|
|
|
|
?.map((e) => CaloriesBurnedTrend.fromJson(e as Map<String, dynamic>))
|
|
|
|
.toList(),
|
|
|
|
exerciseTimeTrendList: (json['excercise_trend_list'] as List<dynamic>?)
|
|
|
|
?.map((e) => ExerciseTimeTrend.fromJson(e as Map<String, dynamic>))
|
|
|
|
.toList(),
|
|
|
|
activityTargetInfo: json['activity_target_info'] == null
|
|
|
|
? null
|
|
|
|
: ActivityTargetInfo.fromJson(
|
|
|
|
json['activity_target_info'] as Map<String, dynamic>),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (totalCaloriesBurned != null) val['total_move'] = totalCaloriesBurned;
|
|
|
|
if (avgCaloriesBurned != null) val['avg_move'] = avgCaloriesBurned;
|
|
|
|
if (maxCaloriesBurned != null) val['max_move'] = maxCaloriesBurned!.toJson();
|
|
|
|
if (minCaloriesBurned != null) val['min_move'] = minCaloriesBurned!.toJson();
|
|
|
|
if (totalSteps != null) val['total_steps'] = totalSteps;
|
|
|
|
if (totalStand != null) val['total_stand'] = totalStand;
|
|
|
|
if (caloriesBurnedTrendList != null) {
|
|
|
|
val['move_trend_list'] =
|
|
|
|
caloriesBurnedTrendList!.map((e) => e.toJson()).toList();
|
|
|
|
}
|
|
|
|
if (exerciseTimeTrendList != null) {
|
|
|
|
val['excercise_trend_list'] =
|
|
|
|
exerciseTimeTrendList!.map((e) => e.toJson()).toList();
|
|
|
|
}
|
|
|
|
if (activityTargetInfo != null) {
|
|
|
|
val['activity_target_info'] = activityTargetInfo!.toJson();
|
|
|
|
}
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class CaloriesBurnedValue {
|
|
|
|
const CaloriesBurnedValue({this.date, this.value});
|
|
|
|
|
|
|
|
final int? date;
|
|
|
|
final int? value;
|
|
|
|
|
|
|
|
factory CaloriesBurnedValue.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$CaloriesBurnedValueFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$CaloriesBurnedValueToJson(this);
|
|
|
|
factory CaloriesBurnedValue.fromJson(Map<String, dynamic> json) {
|
|
|
|
return CaloriesBurnedValue(
|
|
|
|
date: _parseInt(json['date']),
|
|
|
|
value: _parseInt(json['value']),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (date != null) val['date'] = date;
|
|
|
|
if (value != null) val['value'] = value;
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class CaloriesBurnedTrend {
|
|
|
|
const CaloriesBurnedTrend({this.timeKey, this.value});
|
|
|
|
|
|
|
|
@JsonKey(name: 'time_key')
|
|
|
|
final int? timeKey;
|
|
|
|
final int? value;
|
|
|
|
|
|
|
|
factory CaloriesBurnedTrend.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$CaloriesBurnedTrendFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$CaloriesBurnedTrendToJson(this);
|
|
|
|
factory CaloriesBurnedTrend.fromJson(Map<String, dynamic> json) {
|
|
|
|
return CaloriesBurnedTrend(
|
|
|
|
timeKey: _parseInt(json['time_key']),
|
|
|
|
value: _parseInt(json['value']),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (timeKey != null) val['time_key'] = timeKey;
|
|
|
|
if (value != null) val['value'] = value;
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class ExerciseTimeTrend {
|
|
|
|
const ExerciseTimeTrend({this.timeKey, this.value});
|
|
|
|
|
|
|
|
@JsonKey(name: 'time_key')
|
|
|
|
final int? timeKey;
|
|
|
|
final int? value;
|
|
|
|
|
|
|
|
factory ExerciseTimeTrend.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$ExerciseTimeTrendFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$ExerciseTimeTrendToJson(this);
|
|
|
|
factory ExerciseTimeTrend.fromJson(Map<String, dynamic> json) {
|
|
|
|
return ExerciseTimeTrend(
|
|
|
|
timeKey: _parseInt(json['time_key']),
|
|
|
|
value: _parseInt(json['value']),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (timeKey != null) val['time_key'] = timeKey;
|
|
|
|
if (value != null) val['value'] = value;
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class ActivityTargetInfo {
|
|
|
|
const ActivityTargetInfo({this.move, this.step, this.stand});
|
|
|
|
|
|
...
|
...
|
@@ -312,12 +524,23 @@ class ActivityTargetInfo { |
|
|
|
final int? step;
|
|
|
|
final int? stand;
|
|
|
|
|
|
|
|
factory ActivityTargetInfo.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$ActivityTargetInfoFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$ActivityTargetInfoToJson(this);
|
|
|
|
factory ActivityTargetInfo.fromJson(Map<String, dynamic> json) {
|
|
|
|
return ActivityTargetInfo(
|
|
|
|
move: _parseInt(json['move']),
|
|
|
|
step: _parseInt(json['step']),
|
|
|
|
stand: _parseInt(json['stand']),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (move != null) val['move'] = move;
|
|
|
|
if (step != null) val['step'] = step;
|
|
|
|
if (stand != null) val['stand'] = stand;
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class HrvStatisticsData {
|
|
|
|
const HrvStatisticsData({
|
|
|
|
this.avgHrv,
|
|
...
|
...
|
@@ -329,54 +552,99 @@ class HrvStatisticsData { |
|
|
|
this.hrvDistributionList,
|
|
|
|
});
|
|
|
|
|
|
|
|
@JsonKey(name: 'avg_hrv')
|
|
|
|
final double? avgHrv;
|
|
|
|
@JsonKey(name: 'avg_hrv_baseline')
|
|
|
|
final double? avgHrvBaseline;
|
|
|
|
@JsonKey(name: 'avg_walking_heart_rate')
|
|
|
|
final double? avgWalkingHeartRate;
|
|
|
|
@JsonKey(name: 'avg_resting_heart_rate')
|
|
|
|
final double? avgRestingHeartRate;
|
|
|
|
@JsonKey(name: 'avg_sleeping_heart_rate')
|
|
|
|
final double? avgSleepingHeartRate;
|
|
|
|
@JsonKey(name: 'hrv_trend_list')
|
|
|
|
final List<HrvTrend>? hrvTrendList;
|
|
|
|
@JsonKey(name: 'hrv_distribution_list')
|
|
|
|
final List<HrvDistribution>? hrvDistributionList;
|
|
|
|
|
|
|
|
factory HrvStatisticsData.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$HrvStatisticsDataFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$HrvStatisticsDataToJson(this);
|
|
|
|
factory HrvStatisticsData.fromJson(Map<String, dynamic> json) {
|
|
|
|
return HrvStatisticsData(
|
|
|
|
avgHrv: _parseDouble(json['avg_hrv']),
|
|
|
|
avgHrvBaseline: _parseDouble(json['avg_hrv_baseline']),
|
|
|
|
avgWalkingHeartRate: _parseDouble(json['avg_walking_heart_rate']),
|
|
|
|
avgRestingHeartRate: _parseDouble(json['avg_resting_heart_rate']),
|
|
|
|
avgSleepingHeartRate: _parseDouble(json['avg_sleeping_heart_rate']),
|
|
|
|
hrvTrendList: (json['hrv_trend_list'] as List<dynamic>?)
|
|
|
|
?.map((e) => HrvTrend.fromJson(e as Map<String, dynamic>))
|
|
|
|
.toList(),
|
|
|
|
hrvDistributionList: (json['hrv_distribution_list'] as List<dynamic>?)
|
|
|
|
?.map((e) => HrvDistribution.fromJson(e as Map<String, dynamic>))
|
|
|
|
.toList(),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (avgHrv != null) val['avg_hrv'] = avgHrv;
|
|
|
|
if (avgHrvBaseline != null) val['avg_hrv_baseline'] = avgHrvBaseline;
|
|
|
|
if (avgWalkingHeartRate != null) {
|
|
|
|
val['avg_walking_heart_rate'] = avgWalkingHeartRate;
|
|
|
|
}
|
|
|
|
if (avgRestingHeartRate != null) {
|
|
|
|
val['avg_resting_heart_rate'] = avgRestingHeartRate;
|
|
|
|
}
|
|
|
|
if (avgSleepingHeartRate != null) {
|
|
|
|
val['avg_sleeping_heart_rate'] = avgSleepingHeartRate;
|
|
|
|
}
|
|
|
|
if (hrvTrendList != null) {
|
|
|
|
val['hrv_trend_list'] = hrvTrendList!.map((e) => e.toJson()).toList();
|
|
|
|
}
|
|
|
|
if (hrvDistributionList != null) {
|
|
|
|
val['hrv_distribution_list'] =
|
|
|
|
hrvDistributionList!.map((e) => e.toJson()).toList();
|
|
|
|
}
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class HrvTrend {
|
|
|
|
const HrvTrend({this.timeKey, this.average});
|
|
|
|
|
|
|
|
@JsonKey(name: 'time_key')
|
|
|
|
final int? timeKey;
|
|
|
|
final double? average;
|
|
|
|
|
|
|
|
factory HrvTrend.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$HrvTrendFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$HrvTrendToJson(this);
|
|
|
|
factory HrvTrend.fromJson(Map<String, dynamic> json) {
|
|
|
|
return HrvTrend(
|
|
|
|
timeKey: _parseInt(json['time_key']),
|
|
|
|
average: _parseDouble(json['average']),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (timeKey != null) val['time_key'] = timeKey;
|
|
|
|
if (average != null) val['average'] = average;
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class HrvDistribution {
|
|
|
|
const HrvDistribution({this.timeKey, this.dayCounts});
|
|
|
|
|
|
|
|
@JsonKey(name: 'time_key')
|
|
|
|
final int? timeKey;
|
|
|
|
@JsonKey(name: 'day_counts')
|
|
|
|
final HrvDistributionDayCount? dayCounts;
|
|
|
|
|
|
|
|
factory HrvDistribution.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$HrvDistributionFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$HrvDistributionToJson(this);
|
|
|
|
factory HrvDistribution.fromJson(Map<String, dynamic> json) {
|
|
|
|
return HrvDistribution(
|
|
|
|
timeKey: _parseInt(json['time_key']),
|
|
|
|
dayCounts: json['day_counts'] == null
|
|
|
|
? null
|
|
|
|
: HrvDistributionDayCount.fromJson(
|
|
|
|
json['day_counts'] as Map<String, dynamic>),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (timeKey != null) val['time_key'] = timeKey;
|
|
|
|
if (dayCounts != null) val['day_counts'] = dayCounts!.toJson();
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@JsonSerializable()
|
|
|
|
class HrvDistributionDayCount {
|
|
|
|
const HrvDistributionDayCount({
|
|
|
|
this.stressful,
|
|
...
|
...
|
@@ -388,7 +656,19 @@ class HrvDistributionDayCount { |
|
|
|
final int? normal;
|
|
|
|
final int? energetic;
|
|
|
|
|
|
|
|
factory HrvDistributionDayCount.fromJson(Map<String, dynamic> json) =>
|
|
|
|
_$HrvDistributionDayCountFromJson(json);
|
|
|
|
Map<String, dynamic> toJson() => _$HrvDistributionDayCountToJson(this);
|
|
|
|
factory HrvDistributionDayCount.fromJson(Map<String, dynamic> json) {
|
|
|
|
return HrvDistributionDayCount(
|
|
|
|
stressful: _parseInt(json['stressful']),
|
|
|
|
normal: _parseInt(json['normal']),
|
|
|
|
energetic: _parseInt(json['energetic']),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, dynamic> toJson() {
|
|
|
|
final val = <String, dynamic>{};
|
|
|
|
if (stressful != null) val['stressful'] = stressful;
|
|
|
|
if (normal != null) val['normal'] = normal;
|
|
|
|
if (energetic != null) val['energetic'] = energetic;
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
} |
...
|
...
|
|