diff --git a/lib/data/models/transaction.dart b/lib/data/models/transaction.dart index 1a4bbfb2293d1f2d434869e5844b8e0c57071417..d2f849b846b8253fe7c0a4c3f6a89f261fcf0f79 100644 --- a/lib/data/models/transaction.dart +++ b/lib/data/models/transaction.dart @@ -67,20 +67,32 @@ class Transaction extends Equatable { @JsonSerializable() @CopyWith() class TransactionsAndBalanceState extends Equatable { - const TransactionsAndBalanceState({ - required this.transactions, - required this.balance, - required this.lastChecked, - }); + const TransactionsAndBalanceState( + {required this.transactions, + required this.balance, + required this.lastChecked, + this.lastSent, + this.lastReceived, + this.lastReceivedNotif}); factory TransactionsAndBalanceState.fromJson(Map<String, dynamic> json) => _$TransactionsAndBalanceStateFromJson(json); final List<Transaction> transactions; final double balance; final DateTime lastChecked; + final DateTime? lastSent; + final DateTime? lastReceived; + final DateTime? lastReceivedNotif; Map<String, dynamic> toJson() => _$TransactionsAndBalanceStateToJson(this); @override - List<Object?> get props => <dynamic>[transactions, balance, lastChecked]; + List<Object?> get props => <dynamic>[ + transactions, + balance, + lastChecked, + lastSent, + lastReceived, + lastReceivedNotif + ]; } diff --git a/lib/data/models/transaction.g.dart b/lib/data/models/transaction.g.dart index 9442400adfcbe57bd654f92e99fb55f6ed6dad22..8014175d5f93a109a78e09b1bd2ad2e590a7ab16 100644 --- a/lib/data/models/transaction.g.dart +++ b/lib/data/models/transaction.g.dart @@ -161,6 +161,12 @@ abstract class _$TransactionsAndBalanceStateCWProxy { TransactionsAndBalanceState lastChecked(DateTime lastChecked); + TransactionsAndBalanceState lastSent(DateTime? lastSent); + + TransactionsAndBalanceState lastReceived(DateTime? lastReceived); + + TransactionsAndBalanceState lastReceivedNotif(DateTime? lastReceivedNotif); + /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `TransactionsAndBalanceState(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. /// /// Usage @@ -171,6 +177,9 @@ abstract class _$TransactionsAndBalanceStateCWProxy { List<Transaction>? transactions, double? balance, DateTime? lastChecked, + DateTime? lastSent, + DateTime? lastReceived, + DateTime? lastReceivedNotif, }); } @@ -192,6 +201,18 @@ class _$TransactionsAndBalanceStateCWProxyImpl TransactionsAndBalanceState lastChecked(DateTime lastChecked) => this(lastChecked: lastChecked); + @override + TransactionsAndBalanceState lastSent(DateTime? lastSent) => + this(lastSent: lastSent); + + @override + TransactionsAndBalanceState lastReceived(DateTime? lastReceived) => + this(lastReceived: lastReceived); + + @override + TransactionsAndBalanceState lastReceivedNotif(DateTime? lastReceivedNotif) => + this(lastReceivedNotif: lastReceivedNotif); + @override /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `TransactionsAndBalanceState(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. @@ -204,6 +225,9 @@ class _$TransactionsAndBalanceStateCWProxyImpl Object? transactions = const $CopyWithPlaceholder(), Object? balance = const $CopyWithPlaceholder(), Object? lastChecked = const $CopyWithPlaceholder(), + Object? lastSent = const $CopyWithPlaceholder(), + Object? lastReceived = const $CopyWithPlaceholder(), + Object? lastReceivedNotif = const $CopyWithPlaceholder(), }) { return TransactionsAndBalanceState( transactions: @@ -220,6 +244,18 @@ class _$TransactionsAndBalanceStateCWProxyImpl ? _value.lastChecked // ignore: cast_nullable_to_non_nullable : lastChecked as DateTime, + lastSent: lastSent == const $CopyWithPlaceholder() + ? _value.lastSent + // ignore: cast_nullable_to_non_nullable + : lastSent as DateTime?, + lastReceived: lastReceived == const $CopyWithPlaceholder() + ? _value.lastReceived + // ignore: cast_nullable_to_non_nullable + : lastReceived as DateTime?, + lastReceivedNotif: lastReceivedNotif == const $CopyWithPlaceholder() + ? _value.lastReceivedNotif + // ignore: cast_nullable_to_non_nullable + : lastReceivedNotif as DateTime?, ); } } @@ -278,6 +314,15 @@ TransactionsAndBalanceState _$TransactionsAndBalanceStateFromJson( .toList(), balance: (json['balance'] as num).toDouble(), lastChecked: DateTime.parse(json['lastChecked'] as String), + lastSent: json['lastSent'] == null + ? null + : DateTime.parse(json['lastSent'] as String), + lastReceived: json['lastReceived'] == null + ? null + : DateTime.parse(json['lastReceived'] as String), + lastReceivedNotif: json['lastReceivedNotif'] == null + ? null + : DateTime.parse(json['lastReceivedNotif'] as String), ); Map<String, dynamic> _$TransactionsAndBalanceStateToJson( @@ -286,4 +331,7 @@ Map<String, dynamic> _$TransactionsAndBalanceStateToJson( 'transactions': instance.transactions, 'balance': instance.balance, 'lastChecked': instance.lastChecked.toIso8601String(), + 'lastSent': instance.lastSent?.toIso8601String(), + 'lastReceived': instance.lastReceived?.toIso8601String(), + 'lastReceivedNotif': instance.lastReceivedNotif?.toIso8601String(), }; diff --git a/lib/data/models/transaction_cubit.dart b/lib/data/models/transaction_cubit.dart index fb54f6a35f3bb8a94d74f287b8e7f733885a0847..4d11e687beff135b571d017dd60dc7373ce94390 100644 --- a/lib/data/models/transaction_cubit.dart +++ b/lib/data/models/transaction_cubit.dart @@ -2,6 +2,7 @@ import 'package:hydrated_bloc/hydrated_bloc.dart'; import '../../../g1/api.dart'; import '../../../g1/transaction_parser.dart'; +import '../../notification_controller.dart'; import '../../shared_prefs.dart'; import '../../ui/logger.dart'; import 'node_list_cubit.dart'; @@ -41,6 +42,16 @@ class TransactionsCubit extends HydratedCubit<TransactionsAndBalanceState> { transactions: state.transactions, balance: state.balance, lastChecked: state.lastChecked)); + final DateTime? lastReceived = state.lastReceived; + final DateTime lastReceivedNotification = + state.lastReceivedNotif ?? DateTime(1970); + // final DateTime? lastSent = transBalanceState.lastSent; + if (lastReceived != null && + lastReceivedNotification.compareTo(lastReceived) == 1) { + // Notify + NotificationController.createNewNotification( + lastReceived.millisecondsSinceEpoch.toString()); + } } @override