diff --git a/packages/mirai/lib/src/framework/mirai.dart b/packages/mirai/lib/src/framework/mirai.dart index 5388be24..3dd3f5e0 100644 --- a/packages/mirai/lib/src/framework/mirai.dart +++ b/packages/mirai/lib/src/framework/mirai.dart @@ -92,6 +92,8 @@ class Mirai { const MiraiSliderParser(), const MiraiOpacityParser(), const MiraiPlaceholderParser(), + const MiraiAspectRatioParser(), + const MiraiFittedBoxParser(), ]; static final _actionParsers = [ diff --git a/packages/mirai/lib/src/parsers/mirai_aspect_ratio/mirai_aspect_ratio.dart b/packages/mirai/lib/src/parsers/mirai_aspect_ratio/mirai_aspect_ratio.dart new file mode 100644 index 00000000..c4239708 --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_aspect_ratio/mirai_aspect_ratio.dart @@ -0,0 +1,16 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; +export 'package:mirai/src/parsers/mirai_aspect_ratio/mirai_aspect_ratio_parser.dart'; + +part 'mirai_aspect_ratio.freezed.dart'; +part 'mirai_aspect_ratio.g.dart'; + +@freezed +class MiraiAspectRatio with _$MiraiAspectRatio { + const factory MiraiAspectRatio({ + @Default(1) double aspectRatio, + Map? child, + }) = _MiraiAspectRatio; + + factory MiraiAspectRatio.fromJson(Map json) => + _$MiraiAspectRatioFromJson(json); +} diff --git a/packages/mirai/lib/src/parsers/mirai_aspect_ratio/mirai_aspect_ratio.freezed.dart b/packages/mirai/lib/src/parsers/mirai_aspect_ratio/mirai_aspect_ratio.freezed.dart new file mode 100644 index 00000000..8e0f9fed --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_aspect_ratio/mirai_aspect_ratio.freezed.dart @@ -0,0 +1,195 @@ +// coverage:ignore-file +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint +// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark + +part of 'mirai_aspect_ratio.dart'; + +// ************************************************************************** +// FreezedGenerator +// ************************************************************************** + +T _$identity(T value) => value; + +final _privateConstructorUsedError = UnsupportedError( + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models'); + +MiraiAspectRatio _$MiraiAspectRatioFromJson(Map json) { + return _MiraiAspectRatio.fromJson(json); +} + +/// @nodoc +mixin _$MiraiAspectRatio { + double get aspectRatio => throw _privateConstructorUsedError; + Map? get child => throw _privateConstructorUsedError; + + /// Serializes this MiraiAspectRatio to a JSON map. + Map toJson() => throw _privateConstructorUsedError; + + /// Create a copy of MiraiAspectRatio + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + $MiraiAspectRatioCopyWith get copyWith => + throw _privateConstructorUsedError; +} + +/// @nodoc +abstract class $MiraiAspectRatioCopyWith<$Res> { + factory $MiraiAspectRatioCopyWith( + MiraiAspectRatio value, $Res Function(MiraiAspectRatio) then) = + _$MiraiAspectRatioCopyWithImpl<$Res, MiraiAspectRatio>; + @useResult + $Res call({double aspectRatio, Map? child}); +} + +/// @nodoc +class _$MiraiAspectRatioCopyWithImpl<$Res, $Val extends MiraiAspectRatio> + implements $MiraiAspectRatioCopyWith<$Res> { + _$MiraiAspectRatioCopyWithImpl(this._value, this._then); + + // ignore: unused_field + final $Val _value; + // ignore: unused_field + final $Res Function($Val) _then; + + /// Create a copy of MiraiAspectRatio + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? aspectRatio = null, + Object? child = freezed, + }) { + return _then(_value.copyWith( + aspectRatio: null == aspectRatio + ? _value.aspectRatio + : aspectRatio // ignore: cast_nullable_to_non_nullable + as double, + child: freezed == child + ? _value.child + : child // ignore: cast_nullable_to_non_nullable + as Map?, + ) as $Val); + } +} + +/// @nodoc +abstract class _$$MiraiAspectRatioImplCopyWith<$Res> + implements $MiraiAspectRatioCopyWith<$Res> { + factory _$$MiraiAspectRatioImplCopyWith(_$MiraiAspectRatioImpl value, + $Res Function(_$MiraiAspectRatioImpl) then) = + __$$MiraiAspectRatioImplCopyWithImpl<$Res>; + @override + @useResult + $Res call({double aspectRatio, Map? child}); +} + +/// @nodoc +class __$$MiraiAspectRatioImplCopyWithImpl<$Res> + extends _$MiraiAspectRatioCopyWithImpl<$Res, _$MiraiAspectRatioImpl> + implements _$$MiraiAspectRatioImplCopyWith<$Res> { + __$$MiraiAspectRatioImplCopyWithImpl(_$MiraiAspectRatioImpl _value, + $Res Function(_$MiraiAspectRatioImpl) _then) + : super(_value, _then); + + /// Create a copy of MiraiAspectRatio + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? aspectRatio = null, + Object? child = freezed, + }) { + return _then(_$MiraiAspectRatioImpl( + aspectRatio: null == aspectRatio + ? _value.aspectRatio + : aspectRatio // ignore: cast_nullable_to_non_nullable + as double, + child: freezed == child + ? _value._child + : child // ignore: cast_nullable_to_non_nullable + as Map?, + )); + } +} + +/// @nodoc +@JsonSerializable() +class _$MiraiAspectRatioImpl implements _MiraiAspectRatio { + const _$MiraiAspectRatioImpl( + {this.aspectRatio = 1, final Map? child}) + : _child = child; + + factory _$MiraiAspectRatioImpl.fromJson(Map json) => + _$$MiraiAspectRatioImplFromJson(json); + + @override + @JsonKey() + final double aspectRatio; + final Map? _child; + @override + Map? get child { + final value = _child; + if (value == null) return null; + if (_child is EqualUnmodifiableMapView) return _child; + // ignore: implicit_dynamic_type + return EqualUnmodifiableMapView(value); + } + + @override + String toString() { + return 'MiraiAspectRatio(aspectRatio: $aspectRatio, child: $child)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$MiraiAspectRatioImpl && + (identical(other.aspectRatio, aspectRatio) || + other.aspectRatio == aspectRatio) && + const DeepCollectionEquality().equals(other._child, _child)); + } + + @JsonKey(includeFromJson: false, includeToJson: false) + @override + int get hashCode => Object.hash( + runtimeType, aspectRatio, const DeepCollectionEquality().hash(_child)); + + /// Create a copy of MiraiAspectRatio + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + @override + @pragma('vm:prefer-inline') + _$$MiraiAspectRatioImplCopyWith<_$MiraiAspectRatioImpl> get copyWith => + __$$MiraiAspectRatioImplCopyWithImpl<_$MiraiAspectRatioImpl>( + this, _$identity); + + @override + Map toJson() { + return _$$MiraiAspectRatioImplToJson( + this, + ); + } +} + +abstract class _MiraiAspectRatio implements MiraiAspectRatio { + const factory _MiraiAspectRatio( + {final double aspectRatio, + final Map? child}) = _$MiraiAspectRatioImpl; + + factory _MiraiAspectRatio.fromJson(Map json) = + _$MiraiAspectRatioImpl.fromJson; + + @override + double get aspectRatio; + @override + Map? get child; + + /// Create a copy of MiraiAspectRatio + /// with the given fields replaced by the non-null parameter values. + @override + @JsonKey(includeFromJson: false, includeToJson: false) + _$$MiraiAspectRatioImplCopyWith<_$MiraiAspectRatioImpl> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/packages/mirai/lib/src/parsers/mirai_aspect_ratio/mirai_aspect_ratio.g.dart b/packages/mirai/lib/src/parsers/mirai_aspect_ratio/mirai_aspect_ratio.g.dart new file mode 100644 index 00000000..2bc94e90 --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_aspect_ratio/mirai_aspect_ratio.g.dart @@ -0,0 +1,21 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'mirai_aspect_ratio.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +_$MiraiAspectRatioImpl _$$MiraiAspectRatioImplFromJson( + Map json) => + _$MiraiAspectRatioImpl( + aspectRatio: (json['aspectRatio'] as num?)?.toDouble() ?? 1, + child: json['child'] as Map?, + ); + +Map _$$MiraiAspectRatioImplToJson( + _$MiraiAspectRatioImpl instance) => + { + 'aspectRatio': instance.aspectRatio, + 'child': instance.child, + }; diff --git a/packages/mirai/lib/src/parsers/mirai_aspect_ratio/mirai_aspect_ratio_parser.dart b/packages/mirai/lib/src/parsers/mirai_aspect_ratio/mirai_aspect_ratio_parser.dart new file mode 100644 index 00000000..2eaf477a --- /dev/null +++ b/packages/mirai/lib/src/parsers/mirai_aspect_ratio/mirai_aspect_ratio_parser.dart @@ -0,0 +1,24 @@ +import 'package:flutter/material.dart'; +import 'package:mirai/src/framework/framework.dart'; +import 'package:mirai/src/parsers/mirai_aspect_ratio/mirai_aspect_ratio.dart'; +import 'package:mirai/src/utils/widget_type.dart'; +import 'package:mirai_framework/mirai_framework.dart'; + +class MiraiAspectRatioParser extends MiraiParser { + const MiraiAspectRatioParser(); + + @override + String get type => WidgetType.aspectRatio.name; + + @override + MiraiAspectRatio getModel(Map json) => + MiraiAspectRatio.fromJson(json); + + @override + Widget parse(BuildContext context, MiraiAspectRatio model) { + return AspectRatio( + aspectRatio: model.aspectRatio, + child: Mirai.fromJson(model.child, context), + ); + } +} diff --git a/packages/mirai/lib/src/parsers/parsers.dart b/packages/mirai/lib/src/parsers/parsers.dart index a6d14bd7..9e1787d2 100644 --- a/packages/mirai/lib/src/parsers/parsers.dart +++ b/packages/mirai/lib/src/parsers/parsers.dart @@ -87,3 +87,5 @@ export 'package:mirai/src/parsers/mirai_radio_group/mirai_radio_group.dart'; export 'package:mirai/src/parsers/mirai_slider/mirai_slider.dart'; export 'package:mirai/src/parsers/mirai_opacity/mirai_opacity.dart'; export 'package:mirai/src/parsers/mirai_placeholder/mirai_placeholder.dart'; +export 'package:mirai/src/parsers/mirai_aspect_ratio/mirai_aspect_ratio.dart'; +export 'package:mirai/src/parsers/mirai_fitted_box/mirai_fitted_box.dart'; diff --git a/packages/mirai/lib/src/utils/widget_type.dart b/packages/mirai/lib/src/utils/widget_type.dart index a8262727..c14bcd9c 100644 --- a/packages/mirai/lib/src/utils/widget_type.dart +++ b/packages/mirai/lib/src/utils/widget_type.dart @@ -62,4 +62,6 @@ enum WidgetType { slider, opacity, placeholder, + aspectRatio, + fittedBox, }