diff --git a/lib/models/index.dart b/lib/models/index.dart new file mode 100644 index 0000000..15be62e --- /dev/null +++ b/lib/models/index.dart @@ -0,0 +1,2 @@ +export 'src/media.dart'; +export 'src/response.dart'; diff --git a/lib/models/src/media.dart b/lib/models/src/media.dart new file mode 100644 index 0000000..733a35a --- /dev/null +++ b/lib/models/src/media.dart @@ -0,0 +1,44 @@ +import 'package:built_collection/built_collection.dart'; +import 'package:built_value/built_value.dart'; +import 'package:built_value/serializer.dart'; + +import 'serializers.dart'; + +part 'media.g.dart'; + +abstract class Media implements Built { + String get id; + + String get caption; + + String get url; + + MediaType get type; + + Media._(); + + factory Media([void Function(MediaBuilder) updates]) = _$Media; + + static Media fromJson(String jsonString) { + return serializers.fromJson(Media.serializer, jsonString)!; + } + + String toJson() { + return serializers.toJson(Media.serializer, this); + } + + static Serializer get serializer => _$mediaSerializer; +} + +class MediaType extends EnumClass { + static const MediaType image = _$image; + static const MediaType video = _$video; + + const MediaType._(super.name); + + static BuiltSet get values => _$values; + + static MediaType valueOf(String name) => _$valueOf(name); + + static Serializer get serializer => _$mediaTypeSerializer; +} diff --git a/lib/models/src/media.g.dart b/lib/models/src/media.g.dart new file mode 100644 index 0000000..5326393 --- /dev/null +++ b/lib/models/src/media.g.dart @@ -0,0 +1,232 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'media.dart'; + +// ************************************************************************** +// BuiltValueGenerator +// ************************************************************************** + +const MediaType _$image = const MediaType._('image'); +const MediaType _$video = const MediaType._('video'); + +MediaType _$valueOf(String name) { + switch (name) { + case 'image': + return _$image; + case 'video': + return _$video; + default: + throw new ArgumentError(name); + } +} + +final BuiltSet _$values = new BuiltSet(const [ + _$image, + _$video, +]); + +Serializer _$mediaSerializer = new _$MediaSerializer(); +Serializer _$mediaTypeSerializer = new _$MediaTypeSerializer(); + +class _$MediaSerializer implements StructuredSerializer { + @override + final Iterable types = const [Media, _$Media]; + @override + final String wireName = 'Media'; + + @override + Iterable serialize(Serializers serializers, Media object, + {FullType specifiedType = FullType.unspecified}) { + final result = [ + 'id', + serializers.serialize(object.id, specifiedType: const FullType(String)), + 'caption', + serializers.serialize(object.caption, + specifiedType: const FullType(String)), + 'url', + serializers.serialize(object.url, specifiedType: const FullType(String)), + 'type', + serializers.serialize(object.type, + specifiedType: const FullType(MediaType)), + ]; + + return result; + } + + @override + Media deserialize(Serializers serializers, Iterable serialized, + {FullType specifiedType = FullType.unspecified}) { + final result = new MediaBuilder(); + + final iterator = serialized.iterator; + while (iterator.moveNext()) { + final key = iterator.current! as String; + iterator.moveNext(); + final Object? value = iterator.current; + switch (key) { + case 'id': + result.id = serializers.deserialize(value, + specifiedType: const FullType(String))! as String; + break; + case 'caption': + result.caption = serializers.deserialize(value, + specifiedType: const FullType(String))! as String; + break; + case 'url': + result.url = serializers.deserialize(value, + specifiedType: const FullType(String))! as String; + break; + case 'type': + result.type = serializers.deserialize(value, + specifiedType: const FullType(MediaType))! as MediaType; + break; + } + } + + return result.build(); + } +} + +class _$MediaTypeSerializer implements PrimitiveSerializer { + @override + final Iterable types = const [MediaType]; + @override + final String wireName = 'MediaType'; + + @override + Object serialize(Serializers serializers, MediaType object, + {FullType specifiedType = FullType.unspecified}) => + object.name; + + @override + MediaType deserialize(Serializers serializers, Object serialized, + {FullType specifiedType = FullType.unspecified}) => + MediaType.valueOf(serialized as String); +} + +class _$Media extends Media { + @override + final String id; + @override + final String caption; + @override + final String url; + @override + final MediaType type; + + factory _$Media([void Function(MediaBuilder)? updates]) => + (new MediaBuilder()..update(updates))._build(); + + _$Media._( + {required this.id, + required this.caption, + required this.url, + required this.type}) + : super._() { + BuiltValueNullFieldError.checkNotNull(id, r'Media', 'id'); + BuiltValueNullFieldError.checkNotNull(caption, r'Media', 'caption'); + BuiltValueNullFieldError.checkNotNull(url, r'Media', 'url'); + BuiltValueNullFieldError.checkNotNull(type, r'Media', 'type'); + } + + @override + Media rebuild(void Function(MediaBuilder) updates) => + (toBuilder()..update(updates)).build(); + + @override + MediaBuilder toBuilder() => new MediaBuilder()..replace(this); + + @override + bool operator ==(Object other) { + if (identical(other, this)) return true; + return other is Media && + id == other.id && + caption == other.caption && + url == other.url && + type == other.type; + } + + @override + int get hashCode { + var _$hash = 0; + _$hash = $jc(_$hash, id.hashCode); + _$hash = $jc(_$hash, caption.hashCode); + _$hash = $jc(_$hash, url.hashCode); + _$hash = $jc(_$hash, type.hashCode); + _$hash = $jf(_$hash); + return _$hash; + } + + @override + String toString() { + return (newBuiltValueToStringHelper(r'Media') + ..add('id', id) + ..add('caption', caption) + ..add('url', url) + ..add('type', type)) + .toString(); + } +} + +class MediaBuilder implements Builder { + _$Media? _$v; + + String? _id; + String? get id => _$this._id; + set id(String? id) => _$this._id = id; + + String? _caption; + String? get caption => _$this._caption; + set caption(String? caption) => _$this._caption = caption; + + String? _url; + String? get url => _$this._url; + set url(String? url) => _$this._url = url; + + MediaType? _type; + MediaType? get type => _$this._type; + set type(MediaType? type) => _$this._type = type; + + MediaBuilder(); + + MediaBuilder get _$this { + final $v = _$v; + if ($v != null) { + _id = $v.id; + _caption = $v.caption; + _url = $v.url; + _type = $v.type; + _$v = null; + } + return this; + } + + @override + void replace(Media other) { + ArgumentError.checkNotNull(other, 'other'); + _$v = other as _$Media; + } + + @override + void update(void Function(MediaBuilder)? updates) { + if (updates != null) updates(this); + } + + @override + Media build() => _build(); + + _$Media _build() { + final _$result = _$v ?? + new _$Media._( + id: BuiltValueNullFieldError.checkNotNull(id, r'Media', 'id'), + caption: BuiltValueNullFieldError.checkNotNull( + caption, r'Media', 'caption'), + url: BuiltValueNullFieldError.checkNotNull(url, r'Media', 'url'), + type: + BuiltValueNullFieldError.checkNotNull(type, r'Media', 'type')); + replace(_$result); + return _$result; + } +} + +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/lib/models/src/response.dart b/lib/models/src/response.dart new file mode 100644 index 0000000..b87dd7d --- /dev/null +++ b/lib/models/src/response.dart @@ -0,0 +1,26 @@ +import 'package:built_collection/built_collection.dart'; +import 'package:built_value/built_value.dart'; +import 'package:built_value/serializer.dart'; + +import 'media.dart'; +import 'serializers.dart'; + +part 'response.g.dart'; + +abstract class Response implements Built { + BuiltList get medias; + + Response._(); + + factory Response([void Function(ResponseBuilder) updates]) = _$Response; + + static Response fromJson(String jsonString) { + return serializers.fromJson(Response.serializer, jsonString)!; + } + + String toJson() { + return serializers.toJson(Response.serializer, this); + } + + static Serializer get serializer => _$responseSerializer; +} diff --git a/lib/models/src/response.g.dart b/lib/models/src/response.g.dart new file mode 100644 index 0000000..ee6c9ba --- /dev/null +++ b/lib/models/src/response.g.dart @@ -0,0 +1,145 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'response.dart'; + +// ************************************************************************** +// BuiltValueGenerator +// ************************************************************************** + +Serializer _$responseSerializer = new _$ResponseSerializer(); + +class _$ResponseSerializer implements StructuredSerializer { + @override + final Iterable types = const [Response, _$Response]; + @override + final String wireName = 'Response'; + + @override + Iterable serialize(Serializers serializers, Response object, + {FullType specifiedType = FullType.unspecified}) { + final result = [ + 'medias', + serializers.serialize(object.medias, + specifiedType: + const FullType(BuiltList, const [const FullType(Media)])), + ]; + + return result; + } + + @override + Response deserialize(Serializers serializers, Iterable serialized, + {FullType specifiedType = FullType.unspecified}) { + final result = new ResponseBuilder(); + + final iterator = serialized.iterator; + while (iterator.moveNext()) { + final key = iterator.current! as String; + iterator.moveNext(); + final Object? value = iterator.current; + switch (key) { + case 'medias': + result.medias.replace(serializers.deserialize(value, + specifiedType: + const FullType(BuiltList, const [const FullType(Media)]))! + as BuiltList); + break; + } + } + + return result.build(); + } +} + +class _$Response extends Response { + @override + final BuiltList medias; + + factory _$Response([void Function(ResponseBuilder)? updates]) => + (new ResponseBuilder()..update(updates))._build(); + + _$Response._({required this.medias}) : super._() { + BuiltValueNullFieldError.checkNotNull(medias, r'Response', 'medias'); + } + + @override + Response rebuild(void Function(ResponseBuilder) updates) => + (toBuilder()..update(updates)).build(); + + @override + ResponseBuilder toBuilder() => new ResponseBuilder()..replace(this); + + @override + bool operator ==(Object other) { + if (identical(other, this)) return true; + return other is Response && medias == other.medias; + } + + @override + int get hashCode { + var _$hash = 0; + _$hash = $jc(_$hash, medias.hashCode); + _$hash = $jf(_$hash); + return _$hash; + } + + @override + String toString() { + return (newBuiltValueToStringHelper(r'Response')..add('medias', medias)) + .toString(); + } +} + +class ResponseBuilder implements Builder { + _$Response? _$v; + + ListBuilder? _medias; + ListBuilder get medias => _$this._medias ??= new ListBuilder(); + set medias(ListBuilder? medias) => _$this._medias = medias; + + ResponseBuilder(); + + ResponseBuilder get _$this { + final $v = _$v; + if ($v != null) { + _medias = $v.medias.toBuilder(); + _$v = null; + } + return this; + } + + @override + void replace(Response other) { + ArgumentError.checkNotNull(other, 'other'); + _$v = other as _$Response; + } + + @override + void update(void Function(ResponseBuilder)? updates) { + if (updates != null) updates(this); + } + + @override + Response build() => _build(); + + _$Response _build() { + _$Response _$result; + try { + _$result = _$v ?? new _$Response._(medias: medias.build()); + } catch (_) { + late String _$failedField; + try { + _$failedField = 'medias'; + medias.build(); + } catch (e) { + throw new BuiltValueNestedFieldError( + r'Response', _$failedField, e.toString()); + } + rethrow; + } + replace(_$result); + return _$result; + } +} + +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/lib/models/src/serializers.dart b/lib/models/src/serializers.dart new file mode 100644 index 0000000..971a37c --- /dev/null +++ b/lib/models/src/serializers.dart @@ -0,0 +1,18 @@ +library serializers; + +import 'package:built_collection/built_collection.dart'; +import 'package:built_value/serializer.dart'; +import 'package:built_value/standard_json_plugin.dart'; + +import 'media.dart'; +import 'response.dart'; + +part 'serializers.g.dart'; + +@SerializersFor([ + MediaType, + Media, + Response, +]) +final Serializers serializers = + (_$serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build(); diff --git a/lib/models/src/serializers.g.dart b/lib/models/src/serializers.g.dart new file mode 100644 index 0000000..16ea4c4 --- /dev/null +++ b/lib/models/src/serializers.g.dart @@ -0,0 +1,18 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'serializers.dart'; + +// ************************************************************************** +// BuiltValueGenerator +// ************************************************************************** + +Serializers _$serializers = (new Serializers().toBuilder() + ..add(Media.serializer) + ..add(MediaType.serializer) + ..add(Response.serializer) + ..addBuilderFactory( + const FullType(BuiltList, const [const FullType(Media)]), + () => new ListBuilder())) + .build(); + +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/pubspec.lock b/pubspec.lock index fd99ba7..91b1aec 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,6 +1,30 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + url: "https://pub.dev" + source: hosted + version: "61.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + url: "https://pub.dev" + source: hosted + version: "5.13.0" + args: + dependency: transitive + description: + name: args + sha256: c372bb384f273f0c2a8aaaa226dad84dc27c8519a691b888725dec59518ad53a + url: "https://pub.dev" + source: hosted + version: "2.4.1" async: dependency: transitive description: @@ -17,6 +41,78 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "43865b79fbb78532e4bff7c33087aa43b1d488c4fdef014eaef568af6d8016dc" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "5f02d73eb2ba16483e693f80bee4f088563a820e47d1027d4cdfe62b5bb43e65" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: db49b8609ef8c81cca2b310618c3017c00f03a92af44c04d310b907b2d692d95 + url: "https://pub.dev" + source: hosted + version: "2.2.0" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: "220ae4553e50d7c21a17c051afc7b183d28a24a420502e842f303f8e4e6edced" + url: "https://pub.dev" + source: hosted + version: "2.4.4" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "88a57f2ac99849362e73878334caa9f06ee25f31d2adced882b8337838c84e1e" + url: "https://pub.dev" + source: hosted + version: "7.2.9" + built_collection: + dependency: "direct main" + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: "direct main" + description: + name: built_value + sha256: "7dd62d9faf105c434f3d829bbe9c4be02ec67f5ed94832222116122df67c5452" + url: "https://pub.dev" + source: hosted + version: "8.6.0" + built_value_generator: + dependency: "direct dev" + description: + name: built_value_generator + sha256: de8657db23599dfb104a66fca02a45a55bb62a3b27c4e637c91610783896263c + url: "https://pub.dev" + source: hosted + version: "8.6.0" characters: dependency: transitive description: @@ -25,6 +121,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" clock: dependency: transitive description: @@ -33,6 +137,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: "4ad01d6e56db961d29661561effde45e519939fdaeb46c351275b182eac70189" + url: "https://pub.dev" + source: hosted + version: "4.5.0" collection: dependency: transitive description: @@ -41,6 +153,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.17.2" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" cupertino_icons: dependency: "direct main" description: @@ -49,6 +177,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.5" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: f4f1f73ab3fd2afcbcca165ee601fe980d966af6a21b5970c6c9376955c528ad + url: "https://pub.dev" + source: hosted + version: "2.3.1" fake_async: dependency: transitive description: @@ -57,6 +193,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" flutter: dependency: "direct main" description: flutter @@ -80,6 +232,46 @@ packages: description: flutter source: sdk version: "0.0.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + graphs: + dependency: transitive + description: + name: graphs + sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + url: "https://pub.dev" + source: hosted + version: "2.3.1" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" intl: dependency: "direct main" description: @@ -88,6 +280,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.18.1" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" js: dependency: transitive description: @@ -96,6 +296,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.7" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 + url: "https://pub.dev" + source: hosted + version: "4.8.1" lints: dependency: transitive description: @@ -104,6 +312,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" matcher: dependency: transitive description: @@ -128,6 +344,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.1" + mime: + dependency: transitive + description: + name: mime + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" + source: hosted + version: "1.0.4" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" path: dependency: transitive description: @@ -136,11 +368,59 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 + url: "https://pub.dev" + source: hosted + version: "1.2.3" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + url: "https://pub.dev" + source: hosted + version: "1.0.4" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "373f96cf5a8744bc9816c1ff41cf5391bbdbe3d7a96fe98c622b6738a8a7bd33" + url: "https://pub.dev" + source: hosted + version: "1.3.2" source_span: dependency: transitive description: @@ -165,6 +445,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" string_scanner: dependency: transitive description: @@ -189,6 +477,22 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.2" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" vector_math: dependency: transitive description: @@ -197,5 +501,29 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + url: "https://pub.dev" + source: hosted + version: "2.4.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" sdks: dart: ">=3.0.0 <4.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index 547dd92..b84f857 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,11 +13,15 @@ dependencies: sdk: flutter intl: any cupertino_icons: ^1.0.5 + built_collection: ^5.1.1 + built_value: ^8.6.0 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.1 + built_value_generator: ^8.6.0 + build_runner: ^2.4.4 flutter: uses-material-design: true diff --git a/test/models/media_test.dart b/test/models/media_test.dart new file mode 100644 index 0000000..9e15d96 --- /dev/null +++ b/test/models/media_test.dart @@ -0,0 +1,59 @@ +import 'dart:convert'; + +import 'package:flutter_test/flutter_test.dart'; +import 'package:instreal/models/index.dart'; + +const sampleMediaString1 = { + 'id': '1', + 'caption': 'photo1', + 'url': + 'https://raw.githubusercontent.com/fluttermtl/instreal-assets/main/assets/media/photo1.jpg', + 'type': 'image', +}; + +const sampleMediaString2 = { + 'id': '2', + 'caption': 'photo2', + 'url': + 'https://raw.githubusercontent.com/fluttermtl/instreal-assets/main/assets/media/photo2.jpg', + 'type': 'image', +}; + +final sampleMedia1 = Media( + (b) => b + ..id = '1' + ..caption = 'photo1' + ..url = + 'https://raw.githubusercontent.com/fluttermtl/instreal-assets/main/assets/media/photo1.jpg' + ..type = MediaType.image, +); +final sampleMedia2 = Media( + (b) => b + ..id = '2' + ..caption = 'photo2' + ..url = + 'https://raw.githubusercontent.com/fluttermtl/instreal-assets/main/assets/media/photo2.jpg' + ..type = MediaType.image, +); + +void main() { + group('Media serialization', () { + test('From json', () { + final media1 = Media.fromJson(jsonEncode(sampleMediaString1)); + final media2 = Media.fromJson(jsonEncode(sampleMediaString2)); + + expect(media1.id, '1'); + expect(media2.id, '2'); + expect(media2.caption, 'photo2'); + expect(media1.type, MediaType.image); + }); + + test('To json', () { + final mediaString1 = sampleMedia1.toJson(); + final mediaString2 = sampleMedia2.toJson(); + + expect(mediaString1, jsonEncode(sampleMediaString1)); + expect(mediaString2, jsonEncode(sampleMediaString2)); + }); + }); +} diff --git a/test/models/response_test.dart b/test/models/response_test.dart new file mode 100644 index 0000000..54b96b9 --- /dev/null +++ b/test/models/response_test.dart @@ -0,0 +1,45 @@ +import 'dart:convert'; + +import 'package:flutter_test/flutter_test.dart'; +import 'package:instreal/models/index.dart'; + +import 'media_test.dart'; + +const sampleResponseString = { + 'medias': [ + { + 'id': '1', + 'caption': 'photo1', + 'url': + 'https://raw.githubusercontent.com/fluttermtl/instreal-assets/main/assets/media/photo1.jpg', + 'type': 'image', + }, + { + 'id': '2', + 'caption': 'photo2', + 'url': + 'https://raw.githubusercontent.com/fluttermtl/instreal-assets/main/assets/media/photo2.jpg', + 'type': 'image', + }, + ], +}; + +final sampleResponse = + Response((b) => b..medias.addAll([sampleMedia1, sampleMedia2])); + +void main() { + group('Response serialization', () { + test('From json', () { + final response = Response.fromJson(jsonEncode(sampleResponseString)); + + expect(response.medias.first.id, '1'); + expect(response.medias.first.type, MediaType.image); + }); + + test('To json', () { + final responseString = sampleResponse.toJson(); + + expect(responseString, jsonEncode(sampleResponseString)); + }); + }); +} diff --git a/untranslated-messages.json b/untranslated-messages.json index 0967ef4..9e26dfe 100644 --- a/untranslated-messages.json +++ b/untranslated-messages.json @@ -1 +1 @@ -{} +{} \ No newline at end of file