diff --git a/lib/models/account.dart b/lib/models/account.dart index f4d837f0..b88aa96c 100644 --- a/lib/models/account.dart +++ b/lib/models/account.dart @@ -216,6 +216,7 @@ sealed class SnExperienceRecord with _$SnExperienceRecord { required int delta, required String reasonType, required String reason, + @Default(1.0) double? bonusMultiplier, required DateTime createdAt, required DateTime updatedAt, required DateTime? deletedAt, diff --git a/lib/models/account.freezed.dart b/lib/models/account.freezed.dart index b1c9548d..7ea48619 100644 --- a/lib/models/account.freezed.dart +++ b/lib/models/account.freezed.dart @@ -3024,7 +3024,7 @@ as bool, /// @nodoc mixin _$SnExperienceRecord { - String get id; int get delta; String get reasonType; String get reason; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt; + String get id; int get delta; String get reasonType; String get reason; double? get bonusMultiplier; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt; /// Create a copy of SnExperienceRecord /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) @@ -3037,16 +3037,16 @@ $SnExperienceRecordCopyWith get copyWith => _$SnExperienceRe @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is SnExperienceRecord&&(identical(other.id, id) || other.id == id)&&(identical(other.delta, delta) || other.delta == delta)&&(identical(other.reasonType, reasonType) || other.reasonType == reasonType)&&(identical(other.reason, reason) || other.reason == reason)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is SnExperienceRecord&&(identical(other.id, id) || other.id == id)&&(identical(other.delta, delta) || other.delta == delta)&&(identical(other.reasonType, reasonType) || other.reasonType == reasonType)&&(identical(other.reason, reason) || other.reason == reason)&&(identical(other.bonusMultiplier, bonusMultiplier) || other.bonusMultiplier == bonusMultiplier)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)); } @JsonKey(includeFromJson: false, includeToJson: false) @override -int get hashCode => Object.hash(runtimeType,id,delta,reasonType,reason,createdAt,updatedAt,deletedAt); +int get hashCode => Object.hash(runtimeType,id,delta,reasonType,reason,bonusMultiplier,createdAt,updatedAt,deletedAt); @override String toString() { - return 'SnExperienceRecord(id: $id, delta: $delta, reasonType: $reasonType, reason: $reason, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)'; + return 'SnExperienceRecord(id: $id, delta: $delta, reasonType: $reasonType, reason: $reason, bonusMultiplier: $bonusMultiplier, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)'; } @@ -3057,7 +3057,7 @@ abstract mixin class $SnExperienceRecordCopyWith<$Res> { factory $SnExperienceRecordCopyWith(SnExperienceRecord value, $Res Function(SnExperienceRecord) _then) = _$SnExperienceRecordCopyWithImpl; @useResult $Res call({ - String id, int delta, String reasonType, String reason, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt + String id, int delta, String reasonType, String reason, double? bonusMultiplier, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt }); @@ -3074,13 +3074,14 @@ class _$SnExperienceRecordCopyWithImpl<$Res> /// Create a copy of SnExperienceRecord /// with the given fields replaced by the non-null parameter values. -@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? delta = null,Object? reasonType = null,Object? reason = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) { +@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? delta = null,Object? reasonType = null,Object? reason = null,Object? bonusMultiplier = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) { return _then(_self.copyWith( id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable as String,delta: null == delta ? _self.delta : delta // ignore: cast_nullable_to_non_nullable as int,reasonType: null == reasonType ? _self.reasonType : reasonType // ignore: cast_nullable_to_non_nullable as String,reason: null == reason ? _self.reason : reason // ignore: cast_nullable_to_non_nullable -as String,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable +as String,bonusMultiplier: freezed == bonusMultiplier ? _self.bonusMultiplier : bonusMultiplier // ignore: cast_nullable_to_non_nullable +as double?,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable as DateTime,deletedAt: freezed == deletedAt ? _self.deletedAt : deletedAt // ignore: cast_nullable_to_non_nullable as DateTime?, @@ -3165,10 +3166,10 @@ return $default(_that);case _: /// } /// ``` -@optionalTypeArgs TResult maybeWhen(TResult Function( String id, int delta, String reasonType, String reason, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt)? $default,{required TResult orElse(),}) {final _that = this; +@optionalTypeArgs TResult maybeWhen(TResult Function( String id, int delta, String reasonType, String reason, double? bonusMultiplier, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt)? $default,{required TResult orElse(),}) {final _that = this; switch (_that) { case _SnExperienceRecord() when $default != null: -return $default(_that.id,_that.delta,_that.reasonType,_that.reason,_that.createdAt,_that.updatedAt,_that.deletedAt);case _: +return $default(_that.id,_that.delta,_that.reasonType,_that.reason,_that.bonusMultiplier,_that.createdAt,_that.updatedAt,_that.deletedAt);case _: return orElse(); } @@ -3186,10 +3187,10 @@ return $default(_that.id,_that.delta,_that.reasonType,_that.reason,_that.created /// } /// ``` -@optionalTypeArgs TResult when(TResult Function( String id, int delta, String reasonType, String reason, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt) $default,) {final _that = this; +@optionalTypeArgs TResult when(TResult Function( String id, int delta, String reasonType, String reason, double? bonusMultiplier, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt) $default,) {final _that = this; switch (_that) { case _SnExperienceRecord(): -return $default(_that.id,_that.delta,_that.reasonType,_that.reason,_that.createdAt,_that.updatedAt,_that.deletedAt);} +return $default(_that.id,_that.delta,_that.reasonType,_that.reason,_that.bonusMultiplier,_that.createdAt,_that.updatedAt,_that.deletedAt);} } /// A variant of `when` that fallback to returning `null` /// @@ -3203,10 +3204,10 @@ return $default(_that.id,_that.delta,_that.reasonType,_that.reason,_that.created /// } /// ``` -@optionalTypeArgs TResult? whenOrNull(TResult? Function( String id, int delta, String reasonType, String reason, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt)? $default,) {final _that = this; +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String id, int delta, String reasonType, String reason, double? bonusMultiplier, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt)? $default,) {final _that = this; switch (_that) { case _SnExperienceRecord() when $default != null: -return $default(_that.id,_that.delta,_that.reasonType,_that.reason,_that.createdAt,_that.updatedAt,_that.deletedAt);case _: +return $default(_that.id,_that.delta,_that.reasonType,_that.reason,_that.bonusMultiplier,_that.createdAt,_that.updatedAt,_that.deletedAt);case _: return null; } @@ -3218,13 +3219,14 @@ return $default(_that.id,_that.delta,_that.reasonType,_that.reason,_that.created @JsonSerializable() class _SnExperienceRecord implements SnExperienceRecord { - const _SnExperienceRecord({required this.id, required this.delta, required this.reasonType, required this.reason, required this.createdAt, required this.updatedAt, required this.deletedAt}); + const _SnExperienceRecord({required this.id, required this.delta, required this.reasonType, required this.reason, this.bonusMultiplier = 1.0, required this.createdAt, required this.updatedAt, required this.deletedAt}); factory _SnExperienceRecord.fromJson(Map json) => _$SnExperienceRecordFromJson(json); @override final String id; @override final int delta; @override final String reasonType; @override final String reason; +@override@JsonKey() final double? bonusMultiplier; @override final DateTime createdAt; @override final DateTime updatedAt; @override final DateTime? deletedAt; @@ -3242,16 +3244,16 @@ Map toJson() { @override bool operator ==(Object other) { - return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnExperienceRecord&&(identical(other.id, id) || other.id == id)&&(identical(other.delta, delta) || other.delta == delta)&&(identical(other.reasonType, reasonType) || other.reasonType == reasonType)&&(identical(other.reason, reason) || other.reason == reason)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)); + return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnExperienceRecord&&(identical(other.id, id) || other.id == id)&&(identical(other.delta, delta) || other.delta == delta)&&(identical(other.reasonType, reasonType) || other.reasonType == reasonType)&&(identical(other.reason, reason) || other.reason == reason)&&(identical(other.bonusMultiplier, bonusMultiplier) || other.bonusMultiplier == bonusMultiplier)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)); } @JsonKey(includeFromJson: false, includeToJson: false) @override -int get hashCode => Object.hash(runtimeType,id,delta,reasonType,reason,createdAt,updatedAt,deletedAt); +int get hashCode => Object.hash(runtimeType,id,delta,reasonType,reason,bonusMultiplier,createdAt,updatedAt,deletedAt); @override String toString() { - return 'SnExperienceRecord(id: $id, delta: $delta, reasonType: $reasonType, reason: $reason, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)'; + return 'SnExperienceRecord(id: $id, delta: $delta, reasonType: $reasonType, reason: $reason, bonusMultiplier: $bonusMultiplier, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)'; } @@ -3262,7 +3264,7 @@ abstract mixin class _$SnExperienceRecordCopyWith<$Res> implements $SnExperience factory _$SnExperienceRecordCopyWith(_SnExperienceRecord value, $Res Function(_SnExperienceRecord) _then) = __$SnExperienceRecordCopyWithImpl; @override @useResult $Res call({ - String id, int delta, String reasonType, String reason, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt + String id, int delta, String reasonType, String reason, double? bonusMultiplier, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt }); @@ -3279,13 +3281,14 @@ class __$SnExperienceRecordCopyWithImpl<$Res> /// Create a copy of SnExperienceRecord /// with the given fields replaced by the non-null parameter values. -@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? delta = null,Object? reasonType = null,Object? reason = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) { +@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? delta = null,Object? reasonType = null,Object? reason = null,Object? bonusMultiplier = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) { return _then(_SnExperienceRecord( id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable as String,delta: null == delta ? _self.delta : delta // ignore: cast_nullable_to_non_nullable as int,reasonType: null == reasonType ? _self.reasonType : reasonType // ignore: cast_nullable_to_non_nullable as String,reason: null == reason ? _self.reason : reason // ignore: cast_nullable_to_non_nullable -as String,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable +as String,bonusMultiplier: freezed == bonusMultiplier ? _self.bonusMultiplier : bonusMultiplier // ignore: cast_nullable_to_non_nullable +as double?,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable as DateTime,deletedAt: freezed == deletedAt ? _self.deletedAt : deletedAt // ignore: cast_nullable_to_non_nullable as DateTime?, diff --git a/lib/models/account.g.dart b/lib/models/account.g.dart index 9d1917b7..16981496 100644 --- a/lib/models/account.g.dart +++ b/lib/models/account.g.dart @@ -355,6 +355,7 @@ _SnExperienceRecord _$SnExperienceRecordFromJson(Map json) => delta: (json['delta'] as num).toInt(), reasonType: json['reason_type'] as String, reason: json['reason'] as String, + bonusMultiplier: (json['bonus_multiplier'] as num?)?.toDouble() ?? 1.0, createdAt: DateTime.parse(json['created_at'] as String), updatedAt: DateTime.parse(json['updated_at'] as String), deletedAt: @@ -369,6 +370,7 @@ Map _$SnExperienceRecordToJson(_SnExperienceRecord instance) => 'delta': instance.delta, 'reason_type': instance.reasonType, 'reason': instance.reason, + 'bonus_multiplier': instance.bonusMultiplier, 'created_at': instance.createdAt.toIso8601String(), 'updated_at': instance.updatedAt.toIso8601String(), 'deleted_at': instance.deletedAt?.toIso8601String(), diff --git a/lib/screens/account/leveling.dart b/lib/screens/account/leveling.dart index 685f8013..a771dbac 100644 --- a/lib/screens/account/leveling.dart +++ b/lib/screens/account/leveling.dart @@ -194,8 +194,15 @@ class LevelingScreen extends HookConsumerWidget { ).opacity(0.8), ], ), - subtitle: Text( - '${record.delta > 0 ? '+' : ''}${record.delta} EXP', + subtitle: Row( + spacing: 8, + children: [ + Text( + '${record.delta > 0 ? '+' : ''}${record.delta} EXP', + ), + if (record.bonusMultiplier != 1.0) + Text('x${record.bonusMultiplier}'), + ], ), minTileHeight: 56, contentPadding: EdgeInsets.symmetric(horizontal: 4),