mirror of
https://github.com/wger-project/flutter.git
synced 2026-02-18 00:17:48 +01:00
Remove json serializable code for exercise models
This commit is contained in:
@@ -16,25 +16,10 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'alias.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class Alias {
|
||||
@JsonKey(required: true)
|
||||
final int? id;
|
||||
|
||||
@JsonKey(name: 'translation')
|
||||
final int? translationId;
|
||||
|
||||
@JsonKey(required: true)
|
||||
final String alias;
|
||||
|
||||
const Alias({this.id, required this.translationId, required this.alias});
|
||||
|
||||
// Boilerplate
|
||||
factory Alias.fromJson(Map<String, dynamic> json) => _$AliasFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$AliasToJson(this);
|
||||
}
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'alias.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
Alias _$AliasFromJson(Map<String, dynamic> json) {
|
||||
$checkKeys(json, requiredKeys: const ['id', 'alias']);
|
||||
return Alias(
|
||||
id: (json['id'] as num?)?.toInt(),
|
||||
translationId: (json['translation'] as num?)?.toInt(),
|
||||
alias: json['alias'] as String,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$AliasToJson(Alias instance) => <String, dynamic>{
|
||||
'id': instance.id,
|
||||
'translation': instance.translationId,
|
||||
'alias': instance.alias,
|
||||
};
|
||||
@@ -17,16 +17,9 @@
|
||||
*/
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'category.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class ExerciseCategory extends Equatable {
|
||||
@JsonKey(required: true)
|
||||
final int id;
|
||||
|
||||
@JsonKey(required: true)
|
||||
final String name;
|
||||
|
||||
const ExerciseCategory({required this.id, required this.name});
|
||||
@@ -36,10 +29,6 @@ class ExerciseCategory extends Equatable {
|
||||
return 'Category $id: $name';
|
||||
}
|
||||
|
||||
// Boilerplate
|
||||
factory ExerciseCategory.fromJson(Map<String, dynamic> json) => _$ExerciseCategoryFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$ExerciseCategoryToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [id, name];
|
||||
}
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'category.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
ExerciseCategory _$ExerciseCategoryFromJson(Map<String, dynamic> json) {
|
||||
$checkKeys(json, requiredKeys: const ['id', 'name']);
|
||||
return ExerciseCategory(
|
||||
id: (json['id'] as num).toInt(),
|
||||
name: json['name'] as String,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$ExerciseCategoryToJson(ExerciseCategory instance) => <String, dynamic>{
|
||||
'id': instance.id,
|
||||
'name': instance.name,
|
||||
};
|
||||
@@ -16,19 +16,9 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'comment.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class Comment {
|
||||
@JsonKey(required: true)
|
||||
final int id;
|
||||
|
||||
@JsonKey(name: 'translation')
|
||||
final int translationId;
|
||||
|
||||
@JsonKey(required: true)
|
||||
final String comment;
|
||||
|
||||
const Comment({
|
||||
@@ -36,9 +26,4 @@ class Comment {
|
||||
required this.translationId,
|
||||
required this.comment,
|
||||
});
|
||||
|
||||
// Boilerplate
|
||||
factory Comment.fromJson(Map<String, dynamic> json) => _$CommentFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$CommentToJson(this);
|
||||
}
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'comment.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
Comment _$CommentFromJson(Map<String, dynamic> json) {
|
||||
$checkKeys(json, requiredKeys: const ['id', 'comment']);
|
||||
return Comment(
|
||||
id: (json['id'] as num).toInt(),
|
||||
translationId: (json['translation'] as num).toInt(),
|
||||
comment: json['comment'] as String,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$CommentToJson(Comment instance) => <String, dynamic>{
|
||||
'id': instance.id,
|
||||
'translation': instance.translationId,
|
||||
'comment': instance.comment,
|
||||
};
|
||||
@@ -17,24 +17,13 @@
|
||||
*/
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'equipment.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class Equipment extends Equatable {
|
||||
@JsonKey(required: true)
|
||||
final int id;
|
||||
|
||||
@JsonKey(required: true)
|
||||
final String name;
|
||||
|
||||
const Equipment({required this.id, required this.name});
|
||||
|
||||
// Boilerplate
|
||||
factory Equipment.fromJson(Map<String, dynamic> json) => _$EquipmentFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$EquipmentToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [id, name];
|
||||
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'equipment.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
Equipment _$EquipmentFromJson(Map<String, dynamic> json) {
|
||||
$checkKeys(json, requiredKeys: const ['id', 'name']);
|
||||
return Equipment(
|
||||
id: (json['id'] as num).toInt(),
|
||||
name: json['name'] as String,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$EquipmentToJson(Equipment instance) => <String, dynamic>{
|
||||
'id': instance.id,
|
||||
'name': instance.name,
|
||||
};
|
||||
@@ -15,83 +15,39 @@
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:wger/helpers/consts.dart';
|
||||
import 'package:wger/models/exercises/category.dart';
|
||||
import 'package:wger/models/exercises/equipment.dart';
|
||||
import 'package:wger/models/exercises/exercise_api.dart';
|
||||
import 'package:wger/models/exercises/image.dart';
|
||||
import 'package:wger/models/exercises/language.dart';
|
||||
import 'package:wger/models/exercises/muscle.dart';
|
||||
import 'package:wger/models/exercises/translation.dart';
|
||||
import 'package:wger/models/exercises/video.dart';
|
||||
|
||||
part 'exercise.g.dart';
|
||||
|
||||
@JsonSerializable(explicitToJson: true)
|
||||
class Exercise extends Equatable {
|
||||
final _logger = Logger('ExerciseModel');
|
||||
|
||||
@JsonKey(required: true)
|
||||
late final int id;
|
||||
|
||||
@JsonKey(required: true)
|
||||
late final String uuid;
|
||||
|
||||
@JsonKey(required: true, name: 'variations')
|
||||
late final int? variationId;
|
||||
|
||||
@JsonKey(required: true, name: 'created')
|
||||
late final DateTime? created;
|
||||
|
||||
@JsonKey(required: true, name: 'last_update')
|
||||
late final DateTime? lastUpdate;
|
||||
|
||||
@JsonKey(required: true, name: 'last_update_global')
|
||||
late final DateTime? lastUpdateGlobal;
|
||||
|
||||
@JsonKey(required: true, name: 'category')
|
||||
late int categoryId;
|
||||
|
||||
@JsonKey(includeFromJson: true, includeToJson: true, name: 'categories')
|
||||
ExerciseCategory? category;
|
||||
|
||||
@JsonKey(required: true, name: 'muscles')
|
||||
List<int> musclesIds = [];
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
List<Muscle> muscles = [];
|
||||
|
||||
@JsonKey(required: true, name: 'muscles_secondary')
|
||||
List<int> musclesSecondaryIds = [];
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: true)
|
||||
List<Muscle> musclesSecondary = [];
|
||||
|
||||
@JsonKey(required: true, name: 'equipment')
|
||||
List<int> equipmentIds = [];
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
List<Equipment> equipment = [];
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
List<ExerciseImage> images = [];
|
||||
|
||||
@JsonKey(includeFromJson: true, includeToJson: false)
|
||||
List<Translation> translations = [];
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
List<Video> videos = [];
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
List<String> authors = [];
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
List<String> authorsGlobal = [];
|
||||
|
||||
Exercise({
|
||||
@@ -149,47 +105,6 @@ class Exercise extends Equatable {
|
||||
|
||||
bool get showPlateCalculator => equipment.map((e) => e.id).contains(ID_EQUIPMENT_BARBELL);
|
||||
|
||||
Exercise.fromApiDataString(String baseData, List<Language> languages)
|
||||
: this.fromApiData(ExerciseApiData.fromString(baseData), languages);
|
||||
|
||||
Exercise.fromApiDataJson(Map<String, dynamic> baseData, List<Language> languages)
|
||||
: this.fromApiData(ExerciseApiData.fromJson(baseData), languages);
|
||||
|
||||
Exercise.fromApiData(ExerciseApiData exerciseData, List<Language> languages) {
|
||||
id = exerciseData.id;
|
||||
uuid = exerciseData.uuid;
|
||||
categoryId = exerciseData.category.id;
|
||||
category = exerciseData.category;
|
||||
|
||||
created = exerciseData.created;
|
||||
lastUpdate = exerciseData.lastUpdate;
|
||||
// lastUpdateGlobal = exerciseData.lastUpdateGlobal;
|
||||
|
||||
musclesSecondary = exerciseData.muscles;
|
||||
muscles = exerciseData.muscles;
|
||||
equipment = exerciseData.equipment;
|
||||
category = exerciseData.category;
|
||||
translations = exerciseData.translations.map((e) {
|
||||
e.language = languages.firstWhere(
|
||||
(l) => l.id == e.languageId,
|
||||
|
||||
// workaround for https://github.com/wger-project/flutter/issues/722
|
||||
orElse: () {
|
||||
log('Could not find language for translation ${e.languageId}');
|
||||
return Language(id: e.languageId, shortName: 'unknown', fullName: 'unknown');
|
||||
},
|
||||
);
|
||||
return e;
|
||||
}).toList();
|
||||
videos = exerciseData.videos;
|
||||
images = exerciseData.images;
|
||||
|
||||
authors = exerciseData.authors;
|
||||
authorsGlobal = exerciseData.authorsGlobal;
|
||||
|
||||
variationId = exerciseData.variationId;
|
||||
}
|
||||
|
||||
/// Returns translation for the given language
|
||||
///
|
||||
/// If no translation is found, English will be returned
|
||||
@@ -226,11 +141,6 @@ class Exercise extends Equatable {
|
||||
this.category = category;
|
||||
}
|
||||
|
||||
// Boilerplate
|
||||
factory Exercise.fromJson(Map<String, dynamic> json) => _$ExerciseFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$ExerciseToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
id,
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'exercise.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
Exercise _$ExerciseFromJson(Map<String, dynamic> json) {
|
||||
$checkKeys(
|
||||
json,
|
||||
requiredKeys: const [
|
||||
'id',
|
||||
'uuid',
|
||||
'variations',
|
||||
'created',
|
||||
'last_update',
|
||||
'last_update_global',
|
||||
'category',
|
||||
'muscles',
|
||||
'muscles_secondary',
|
||||
'equipment',
|
||||
],
|
||||
);
|
||||
return Exercise(
|
||||
id: (json['id'] as num).toInt(),
|
||||
uuid: json['uuid'] as String,
|
||||
created: json['created'] == null ? null : DateTime.parse(json['created'] as String),
|
||||
lastUpdate: json['last_update'] == null
|
||||
? null
|
||||
: DateTime.parse(json['last_update'] as String),
|
||||
variationId: (json['variations'] as num?)?.toInt(),
|
||||
categoryId: (json['category'] as num).toInt(),
|
||||
translations: (json['translations'] as List<dynamic>?)
|
||||
?.map((e) => Translation.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
category: json['categories'] == null
|
||||
? null
|
||||
: ExerciseCategory.fromJson(
|
||||
json['categories'] as Map<String, dynamic>,
|
||||
),
|
||||
)
|
||||
..lastUpdateGlobal = json['last_update_global'] == null
|
||||
? null
|
||||
: DateTime.parse(json['last_update_global'] as String)
|
||||
..musclesIds = (json['muscles'] as List<dynamic>).map((e) => (e as num).toInt()).toList()
|
||||
..musclesSecondaryIds = (json['muscles_secondary'] as List<dynamic>)
|
||||
.map((e) => (e as num).toInt())
|
||||
.toList()
|
||||
..equipmentIds = (json['equipment'] as List<dynamic>).map((e) => (e as num).toInt()).toList();
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$ExerciseToJson(Exercise instance) => <String, dynamic>{
|
||||
'id': instance.id,
|
||||
'uuid': instance.uuid,
|
||||
'variations': instance.variationId,
|
||||
'created': instance.created?.toIso8601String(),
|
||||
'last_update': instance.lastUpdate?.toIso8601String(),
|
||||
'last_update_global': instance.lastUpdateGlobal?.toIso8601String(),
|
||||
'category': instance.categoryId,
|
||||
'categories': instance.category?.toJson(),
|
||||
'muscles': instance.musclesIds,
|
||||
'muscles_secondary': instance.musclesSecondaryIds,
|
||||
'musclesSecondary': instance.musclesSecondary.map((e) => e.toJson()).toList(),
|
||||
'equipment': instance.equipmentIds,
|
||||
};
|
||||
@@ -1,91 +0,0 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:wger/models/exercises/category.dart';
|
||||
import 'package:wger/models/exercises/equipment.dart';
|
||||
import 'package:wger/models/exercises/image.dart';
|
||||
import 'package:wger/models/exercises/muscle.dart';
|
||||
import 'package:wger/models/exercises/translation.dart';
|
||||
import 'package:wger/models/exercises/video.dart';
|
||||
|
||||
part 'exercise_api.freezed.dart';
|
||||
part 'exercise_api.g.dart';
|
||||
|
||||
/// Model for an exercise as returned from the exerciseinfo endpoint
|
||||
///
|
||||
/// Basically this is just used as a convenience to create "real" exercise
|
||||
/// objects and nothing more
|
||||
@freezed
|
||||
sealed class ExerciseApiData with _$ExerciseApiData {
|
||||
factory ExerciseApiData({
|
||||
required int id,
|
||||
required String uuid,
|
||||
// ignore: invalid_annotation_target
|
||||
@Default(null) @JsonKey(name: 'variations') int? variationId,
|
||||
// ignore: invalid_annotation_target
|
||||
@JsonKey(name: 'created') required DateTime created,
|
||||
// ignore: invalid_annotation_target
|
||||
@JsonKey(name: 'last_update') required DateTime lastUpdate,
|
||||
// ignore: invalid_annotation_target
|
||||
@JsonKey(name: 'last_update_global') required DateTime lastUpdateGlobal,
|
||||
required ExerciseCategory category,
|
||||
required List<Muscle> muscles,
|
||||
// ignore: invalid_annotation_target
|
||||
@JsonKey(name: 'muscles_secondary') required List<Muscle> musclesSecondary,
|
||||
// ignore: invalid_annotation_target
|
||||
required List<Equipment> equipment,
|
||||
// ignore: invalid_annotation_target
|
||||
@JsonKey(name: 'translations', defaultValue: []) required List<Translation> translations,
|
||||
required List<ExerciseImage> images,
|
||||
required List<Video> videos,
|
||||
// ignore: invalid_annotation_target
|
||||
@JsonKey(name: 'author_history') required List<String> authors,
|
||||
// ignore: invalid_annotation_target
|
||||
@JsonKey(name: 'total_authors_history') required List<String> authorsGlobal,
|
||||
}) = _ExerciseBaseData;
|
||||
|
||||
factory ExerciseApiData.fromString(String input) => _$ExerciseApiDataFromJson(json.decode(input));
|
||||
|
||||
factory ExerciseApiData.fromJson(Map<String, dynamic> json) => _$ExerciseApiDataFromJson(json);
|
||||
}
|
||||
|
||||
/// Model for the search results returned from the /api/v2/exercise/search endpoint
|
||||
///
|
||||
@freezed
|
||||
sealed class ExerciseSearchDetails with _$ExerciseSearchDetails {
|
||||
factory ExerciseSearchDetails({
|
||||
// ignore: invalid_annotation_target
|
||||
@JsonKey(name: 'id') required int translationId,
|
||||
// ignore: invalid_annotation_target
|
||||
@JsonKey(name: 'base_id') required int exerciseId,
|
||||
required String name,
|
||||
required String category,
|
||||
required String? image,
|
||||
// ignore: invalid_annotation_target
|
||||
@JsonKey(name: 'image_thumbnail') required String? imageThumbnail,
|
||||
}) = _ExerciseSearchDetails;
|
||||
|
||||
factory ExerciseSearchDetails.fromJson(Map<String, dynamic> json) =>
|
||||
_$ExerciseSearchDetailsFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
sealed class ExerciseSearchEntry with _$ExerciseSearchEntry {
|
||||
factory ExerciseSearchEntry({
|
||||
required String value,
|
||||
required ExerciseSearchDetails data,
|
||||
}) = _ExerciseSearchEntry;
|
||||
|
||||
factory ExerciseSearchEntry.fromJson(Map<String, dynamic> json) =>
|
||||
_$ExerciseSearchEntryFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
sealed class ExerciseApiSearch with _$ExerciseApiSearch {
|
||||
factory ExerciseApiSearch({
|
||||
required List<ExerciseSearchEntry> suggestions,
|
||||
}) = _ExerciseApiSearch;
|
||||
|
||||
factory ExerciseApiSearch.fromJson(Map<String, dynamic> json) =>
|
||||
_$ExerciseApiSearchFromJson(json);
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,103 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'exercise_api.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
_ExerciseBaseData _$ExerciseBaseDataFromJson(Map<String, dynamic> json) => _ExerciseBaseData(
|
||||
id: (json['id'] as num).toInt(),
|
||||
uuid: json['uuid'] as String,
|
||||
variationId: (json['variations'] as num?)?.toInt() ?? null,
|
||||
created: DateTime.parse(json['created'] as String),
|
||||
lastUpdate: DateTime.parse(json['last_update'] as String),
|
||||
lastUpdateGlobal: DateTime.parse(json['last_update_global'] as String),
|
||||
category: ExerciseCategory.fromJson(
|
||||
json['category'] as Map<String, dynamic>,
|
||||
),
|
||||
muscles: (json['muscles'] as List<dynamic>)
|
||||
.map((e) => Muscle.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
musclesSecondary: (json['muscles_secondary'] as List<dynamic>)
|
||||
.map((e) => Muscle.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
equipment: (json['equipment'] as List<dynamic>)
|
||||
.map((e) => Equipment.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
translations:
|
||||
(json['translations'] as List<dynamic>?)
|
||||
?.map((e) => Translation.fromJson(e as Map<String, dynamic>))
|
||||
.toList() ??
|
||||
[],
|
||||
images: (json['images'] as List<dynamic>)
|
||||
.map((e) => ExerciseImage.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
videos: (json['videos'] as List<dynamic>)
|
||||
.map((e) => Video.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
authors: (json['author_history'] as List<dynamic>).map((e) => e as String).toList(),
|
||||
authorsGlobal: (json['total_authors_history'] as List<dynamic>).map((e) => e as String).toList(),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$ExerciseBaseDataToJson(_ExerciseBaseData instance) => <String, dynamic>{
|
||||
'id': instance.id,
|
||||
'uuid': instance.uuid,
|
||||
'variations': instance.variationId,
|
||||
'created': instance.created.toIso8601String(),
|
||||
'last_update': instance.lastUpdate.toIso8601String(),
|
||||
'last_update_global': instance.lastUpdateGlobal.toIso8601String(),
|
||||
'category': instance.category,
|
||||
'muscles': instance.muscles,
|
||||
'muscles_secondary': instance.musclesSecondary,
|
||||
'equipment': instance.equipment,
|
||||
'translations': instance.translations,
|
||||
'images': instance.images,
|
||||
'videos': instance.videos,
|
||||
'author_history': instance.authors,
|
||||
'total_authors_history': instance.authorsGlobal,
|
||||
};
|
||||
|
||||
_ExerciseSearchDetails _$ExerciseSearchDetailsFromJson(
|
||||
Map<String, dynamic> json,
|
||||
) => _ExerciseSearchDetails(
|
||||
translationId: (json['id'] as num).toInt(),
|
||||
exerciseId: (json['base_id'] as num).toInt(),
|
||||
name: json['name'] as String,
|
||||
category: json['category'] as String,
|
||||
image: json['image'] as String?,
|
||||
imageThumbnail: json['image_thumbnail'] as String?,
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$ExerciseSearchDetailsToJson(
|
||||
_ExerciseSearchDetails instance,
|
||||
) => <String, dynamic>{
|
||||
'id': instance.translationId,
|
||||
'base_id': instance.exerciseId,
|
||||
'name': instance.name,
|
||||
'category': instance.category,
|
||||
'image': instance.image,
|
||||
'image_thumbnail': instance.imageThumbnail,
|
||||
};
|
||||
|
||||
_ExerciseSearchEntry _$ExerciseSearchEntryFromJson(Map<String, dynamic> json) =>
|
||||
_ExerciseSearchEntry(
|
||||
value: json['value'] as String,
|
||||
data: ExerciseSearchDetails.fromJson(
|
||||
json['data'] as Map<String, dynamic>,
|
||||
),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$ExerciseSearchEntryToJson(
|
||||
_ExerciseSearchEntry instance,
|
||||
) => <String, dynamic>{'value': instance.value, 'data': instance.data};
|
||||
|
||||
_ExerciseApiSearch _$ExerciseApiSearchFromJson(Map<String, dynamic> json) => _ExerciseApiSearch(
|
||||
suggestions: (json['suggestions'] as List<dynamic>)
|
||||
.map((e) => ExerciseSearchEntry.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$ExerciseApiSearchToJson(_ExerciseApiSearch instance) => <String, dynamic>{
|
||||
'suggestions': instance.suggestions,
|
||||
};
|
||||
@@ -16,25 +16,11 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'image.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class ExerciseImage {
|
||||
@JsonKey(required: true)
|
||||
final int id;
|
||||
|
||||
@JsonKey(required: true)
|
||||
final String uuid;
|
||||
|
||||
@JsonKey(required: true, name: 'exercise')
|
||||
final int exerciseId;
|
||||
|
||||
@JsonKey(required: true, name: 'image')
|
||||
final String url;
|
||||
|
||||
@JsonKey(name: 'is_main', defaultValue: false)
|
||||
final bool isMain;
|
||||
|
||||
const ExerciseImage({
|
||||
@@ -45,11 +31,6 @@ class ExerciseImage {
|
||||
required this.isMain,
|
||||
});
|
||||
|
||||
// Boilerplate
|
||||
factory ExerciseImage.fromJson(Map<String, dynamic> json) => _$ExerciseImageFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$ExerciseImageToJson(this);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'Image $id: $url';
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'image.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
ExerciseImage _$ExerciseImageFromJson(Map<String, dynamic> json) {
|
||||
$checkKeys(json, requiredKeys: const ['id', 'uuid', 'exercise', 'image']);
|
||||
return ExerciseImage(
|
||||
id: (json['id'] as num).toInt(),
|
||||
uuid: json['uuid'] as String,
|
||||
exerciseId: (json['exercise'] as num).toInt(),
|
||||
url: json['image'] as String,
|
||||
isMain: json['is_main'] as bool? ?? false,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$ExerciseImageToJson(ExerciseImage instance) => <String, dynamic>{
|
||||
'id': instance.id,
|
||||
'uuid': instance.uuid,
|
||||
'exercise': instance.exerciseId,
|
||||
'image': instance.url,
|
||||
'is_main': instance.isMain,
|
||||
};
|
||||
@@ -18,23 +18,12 @@
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:wger/helpers/i18n.dart';
|
||||
|
||||
part 'muscle.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class Muscle extends Equatable {
|
||||
@JsonKey(required: true)
|
||||
final int id;
|
||||
|
||||
@JsonKey(required: true)
|
||||
final String name;
|
||||
|
||||
@JsonKey(required: true, name: 'name_en')
|
||||
final String nameEn;
|
||||
|
||||
@JsonKey(required: true, name: 'is_front')
|
||||
final bool isFront;
|
||||
|
||||
const Muscle({
|
||||
@@ -44,11 +33,6 @@ class Muscle extends Equatable {
|
||||
required this.isFront,
|
||||
});
|
||||
|
||||
// Boilerplate
|
||||
factory Muscle.fromJson(Map<String, dynamic> json) => _$MuscleFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$MuscleToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [id, name, isFront];
|
||||
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'muscle.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
Muscle _$MuscleFromJson(Map<String, dynamic> json) {
|
||||
$checkKeys(json, requiredKeys: const ['id', 'name', 'name_en', 'is_front']);
|
||||
return Muscle(
|
||||
id: (json['id'] as num).toInt(),
|
||||
name: json['name'] as String,
|
||||
nameEn: json['name_en'] as String,
|
||||
isFront: json['is_front'] as bool,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$MuscleToJson(Muscle instance) => <String, dynamic>{
|
||||
'id': instance.id,
|
||||
'name': instance.name,
|
||||
'name_en': instance.nameEn,
|
||||
'is_front': instance.isFront,
|
||||
};
|
||||
@@ -17,44 +17,22 @@
|
||||
*/
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:wger/models/exercises/alias.dart';
|
||||
import 'package:wger/models/exercises/comment.dart';
|
||||
import 'package:wger/models/exercises/exercise.dart';
|
||||
import 'package:wger/models/exercises/language.dart';
|
||||
|
||||
part 'translation.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class Translation extends Equatable {
|
||||
@JsonKey(required: true)
|
||||
final int? id;
|
||||
|
||||
@JsonKey(required: true)
|
||||
final String? uuid;
|
||||
|
||||
@JsonKey(required: true, name: 'language')
|
||||
late int languageId;
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
late Language languageObj;
|
||||
|
||||
@JsonKey(required: true, name: 'created')
|
||||
final DateTime? created;
|
||||
|
||||
@JsonKey(required: true, name: 'exercise')
|
||||
late int? exerciseId;
|
||||
|
||||
@JsonKey(required: true)
|
||||
final String name;
|
||||
|
||||
@JsonKey(required: true)
|
||||
final String description;
|
||||
|
||||
@JsonKey(includeFromJson: true, includeToJson: false)
|
||||
List<Comment> notes = [];
|
||||
|
||||
@JsonKey(includeFromJson: true, includeToJson: false)
|
||||
List<Alias> aliases = [];
|
||||
|
||||
Translation({
|
||||
@@ -85,11 +63,6 @@ class Translation extends Equatable {
|
||||
languageId = language.id;
|
||||
}
|
||||
|
||||
// Boilerplate
|
||||
factory Translation.fromJson(Map<String, dynamic> json) => _$TranslationFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$TranslationToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
id,
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'translation.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
Translation _$TranslationFromJson(Map<String, dynamic> json) {
|
||||
$checkKeys(
|
||||
json,
|
||||
requiredKeys: const [
|
||||
'id',
|
||||
'uuid',
|
||||
'language',
|
||||
'created',
|
||||
'exercise',
|
||||
'name',
|
||||
'description',
|
||||
],
|
||||
);
|
||||
return Translation(
|
||||
id: (json['id'] as num?)?.toInt(),
|
||||
uuid: json['uuid'] as String?,
|
||||
created: json['created'] == null ? null : DateTime.parse(json['created'] as String),
|
||||
name: json['name'] as String,
|
||||
description: json['description'] as String,
|
||||
exerciseId: (json['exercise'] as num?)?.toInt(),
|
||||
)
|
||||
..languageId = (json['language'] as num).toInt()
|
||||
..notes = (json['notes'] as List<dynamic>)
|
||||
.map((e) => Comment.fromJson(e as Map<String, dynamic>))
|
||||
.toList()
|
||||
..aliases = (json['aliases'] as List<dynamic>)
|
||||
.map((e) => Alias.fromJson(e as Map<String, dynamic>))
|
||||
.toList();
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$TranslationToJson(Translation instance) => <String, dynamic>{
|
||||
'id': instance.id,
|
||||
'uuid': instance.uuid,
|
||||
'language': instance.languageId,
|
||||
'created': instance.created?.toIso8601String(),
|
||||
'exercise': instance.exerciseId,
|
||||
'name': instance.name,
|
||||
'description': instance.description,
|
||||
};
|
||||
@@ -16,18 +16,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'variation.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class Variation {
|
||||
@JsonKey(required: true)
|
||||
final int id;
|
||||
|
||||
const Variation({required this.id});
|
||||
|
||||
// Boilerplate
|
||||
factory Variation.fromJson(Map<String, dynamic> json) => _$VariationFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$VariationToJson(this);
|
||||
}
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'variation.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
Variation _$VariationFromJson(Map<String, dynamic> json) {
|
||||
$checkKeys(json, requiredKeys: const ['id']);
|
||||
return Variation(id: (json['id'] as num).toInt());
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$VariationToJson(Variation instance) => <String, dynamic>{
|
||||
'id': instance.id,
|
||||
};
|
||||
@@ -16,49 +16,21 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:wger/helpers/json.dart';
|
||||
|
||||
part 'video.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class Video {
|
||||
@JsonKey(required: true)
|
||||
final int id;
|
||||
|
||||
@JsonKey(required: true)
|
||||
final String uuid;
|
||||
|
||||
@JsonKey(name: 'video', required: true)
|
||||
final String url;
|
||||
|
||||
Uri get uri => Uri.parse(url);
|
||||
|
||||
@JsonKey(name: 'exercise', required: true)
|
||||
final int exerciseId;
|
||||
|
||||
@JsonKey(required: true)
|
||||
final int size;
|
||||
|
||||
@JsonKey(required: true, fromJson: stringToNum, toJson: numToString)
|
||||
final num duration;
|
||||
|
||||
@JsonKey(required: true)
|
||||
final int width;
|
||||
|
||||
@JsonKey(required: true)
|
||||
final int height;
|
||||
|
||||
@JsonKey(required: true)
|
||||
final String codec;
|
||||
|
||||
@JsonKey(name: 'codec_long', required: true)
|
||||
final String codecLong;
|
||||
|
||||
@JsonKey(required: true, name: 'license')
|
||||
final int licenseId;
|
||||
|
||||
@JsonKey(name: 'license_author', required: true)
|
||||
final String? licenseAuthor;
|
||||
|
||||
const Video({
|
||||
@@ -75,9 +47,4 @@ class Video {
|
||||
required this.licenseId,
|
||||
required this.licenseAuthor,
|
||||
});
|
||||
|
||||
// Boilerplate
|
||||
factory Video.fromJson(Map<String, dynamic> json) => _$VideoFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$VideoToJson(this);
|
||||
}
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'video.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
Video _$VideoFromJson(Map<String, dynamic> json) {
|
||||
$checkKeys(
|
||||
json,
|
||||
requiredKeys: const [
|
||||
'id',
|
||||
'uuid',
|
||||
'video',
|
||||
'exercise',
|
||||
'size',
|
||||
'duration',
|
||||
'width',
|
||||
'height',
|
||||
'codec',
|
||||
'codec_long',
|
||||
'license',
|
||||
'license_author',
|
||||
],
|
||||
);
|
||||
return Video(
|
||||
id: (json['id'] as num).toInt(),
|
||||
uuid: json['uuid'] as String,
|
||||
exerciseId: (json['exercise'] as num).toInt(),
|
||||
size: (json['size'] as num).toInt(),
|
||||
url: json['video'] as String,
|
||||
duration: stringToNum(json['duration'] as String?),
|
||||
width: (json['width'] as num).toInt(),
|
||||
height: (json['height'] as num).toInt(),
|
||||
codec: json['codec'] as String,
|
||||
codecLong: json['codec_long'] as String,
|
||||
licenseId: (json['license'] as num).toInt(),
|
||||
licenseAuthor: json['license_author'] as String?,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$VideoToJson(Video instance) => <String, dynamic>{
|
||||
'id': instance.id,
|
||||
'uuid': instance.uuid,
|
||||
'video': instance.url,
|
||||
'exercise': instance.exerciseId,
|
||||
'size': instance.size,
|
||||
'duration': numToString(instance.duration),
|
||||
'width': instance.width,
|
||||
'height': instance.height,
|
||||
'codec': instance.codec,
|
||||
'codec_long': instance.codecLong,
|
||||
'license': instance.licenseId,
|
||||
'license_author': instance.licenseAuthor,
|
||||
};
|
||||
@@ -245,10 +245,6 @@ final class ExerciseStateNotifier extends _$ExerciseStateNotifier {
|
||||
|
||||
// TODO: fix this! Why is the ref of stateProvider always disposed?
|
||||
return state.exercises.where((e) => ids.contains(e.id)).toList();
|
||||
|
||||
return (result['results'] as List)
|
||||
.map((data) => Exercise.fromApiDataJson(data as Map<String, dynamic>, []))
|
||||
.toList();
|
||||
}
|
||||
|
||||
Future<List<Exercise>> searchExerciseLocal(
|
||||
|
||||
@@ -74,7 +74,7 @@ final class ExerciseStateNotifierProvider
|
||||
}
|
||||
}
|
||||
|
||||
String _$exerciseStateNotifierHash() => r'15a583c2d00b76fc792103db1b923e6a07bd1fc2';
|
||||
String _$exerciseStateNotifierHash() => r'95653998a71d77da4e390260738a95767bb1aae1';
|
||||
|
||||
abstract class _$ExerciseStateNotifier extends $Notifier<ExerciseState> {
|
||||
ExerciseState build();
|
||||
|
||||
Reference in New Issue
Block a user