updated the look and feel of the home page

This commit is contained in:
2026-05-28 11:47:38 +02:00
parent 6fdd3183fb
commit 88aad6ec3e
12 changed files with 1225 additions and 735 deletions

View File

@@ -0,0 +1,153 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:decimal/decimal.dart';
part 'transaction_model.g.dart';
/// JsonConverter for [Decimal] values — reads from [num] (int or double)
/// in JSON and writes back as [num].
class DecimalJsonConverter implements JsonConverter<Decimal, num> {
const DecimalJsonConverter();
@override
Decimal fromJson(num json) => Decimal.parse(json.toString());
@override
num toJson(Decimal object) => object.toDouble();
}
/// JsonConverter for [DateTime] values — reads from ISO8601 [String]
/// and writes back as ISO8601 [String].
class DateTimeJsonConverter implements JsonConverter<DateTime, String> {
const DateTimeJsonConverter();
@override
DateTime fromJson(String json) => DateTime.parse(json);
@override
String toJson(DateTime object) => object.toIso8601String();
}
/// JsonConverter for a list of key-value entries (additionalData).
class AdditionalDataJsonConverter
implements JsonConverter<List<Map<String, dynamic>>?, List<dynamic>?> {
const AdditionalDataJsonConverter();
@override
List<Map<String, dynamic>>? fromJson(List<dynamic>? json) {
return json
?.map((e) => Map<String, dynamic>.from(e as Map))
.toList();
}
@override
List<dynamic>? toJson(List<Map<String, dynamic>>? object) {
return object?.map((e) => e as dynamic).toList();
}
}
@DecimalJsonConverter()
@DateTimeJsonConverter()
@AdditionalDataJsonConverter()
@JsonSerializable(explicitToJson: true)
class TransactionModel {
final String? id;
final DateTime? createdAt;
final String userId;
final String trace;
final Decimal amount;
final Decimal charge;
final Decimal gatewayCharge;
final Decimal tax;
final Decimal totalAmount;
final String reference;
final String paymentProcessorLabel;
final String integrationProcessorLabel;
final String confirmationProcessorLabel;
final String providerLabel;
final String debitPhone;
final String debitCurrency;
final String debitRef;
final String? creditPhone;
final String? creditAccount;
final String? creditRef;
final String? billClientId;
final String billName;
final String paymentProcessorName;
final String? providerImage;
final String? paymentProcessorImage;
final String confirmationStatus;
final String paymentStatus;
final String integrationStatus;
final String pollingStatus;
final String? orderId;
final String? orderTrace;
final String? orderTransactionTrace;
final String? erpSalesRef;
final String? erpSalesPaymentRef;
final int workflowId;
final String? type;
final String? authType;
final String? responseCode;
final String? status;
final String? errorMessage;
final String? billProductName;
final String? creditName;
final String? creditEmail;
final String? productUid;
final String? targetUrl;
final List<Map<String, dynamic>>? additionalData;
const TransactionModel({
this.id,
this.createdAt,
required this.userId,
required this.trace,
required this.amount,
required this.charge,
required this.gatewayCharge,
required this.tax,
required this.totalAmount,
required this.reference,
required this.paymentProcessorLabel,
required this.integrationProcessorLabel,
required this.confirmationProcessorLabel,
required this.providerLabel,
required this.debitPhone,
required this.debitCurrency,
required this.debitRef,
this.creditPhone,
this.creditAccount,
this.creditRef,
this.billClientId,
required this.billName,
required this.paymentProcessorName,
this.providerImage,
this.paymentProcessorImage,
required this.confirmationStatus,
required this.paymentStatus,
required this.integrationStatus,
required this.pollingStatus,
this.orderId,
this.orderTrace,
this.orderTransactionTrace,
this.erpSalesRef,
this.erpSalesPaymentRef,
required this.workflowId,
this.type,
this.authType,
this.responseCode,
this.status,
this.errorMessage,
this.billProductName,
this.creditName,
this.creditEmail,
this.productUid,
this.targetUrl,
this.additionalData,
});
factory TransactionModel.fromJson(Map<String, dynamic> json) =>
_$TransactionModelFromJson(json);
Map<String, dynamic> toJson() => _$TransactionModelToJson(this);
}

View File

@@ -0,0 +1,132 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'transaction_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
TransactionModel _$TransactionModelFromJson(Map<String, dynamic> json) =>
TransactionModel(
id: json['id'] as String?,
createdAt: _$JsonConverterFromJson<String, DateTime>(
json['createdAt'],
const DateTimeJsonConverter().fromJson,
),
userId: json['userId'] as String,
trace: json['trace'] as String,
amount: const DecimalJsonConverter().fromJson(json['amount'] as num),
charge: const DecimalJsonConverter().fromJson(json['charge'] as num),
gatewayCharge: const DecimalJsonConverter().fromJson(
json['gatewayCharge'] as num,
),
tax: const DecimalJsonConverter().fromJson(json['tax'] as num),
totalAmount: const DecimalJsonConverter().fromJson(
json['totalAmount'] as num,
),
reference: json['reference'] as String,
paymentProcessorLabel: json['paymentProcessorLabel'] as String,
integrationProcessorLabel: json['integrationProcessorLabel'] as String,
confirmationProcessorLabel: json['confirmationProcessorLabel'] as String,
providerLabel: json['providerLabel'] as String,
debitPhone: json['debitPhone'] as String,
debitCurrency: json['debitCurrency'] as String,
debitRef: json['debitRef'] as String,
creditPhone: json['creditPhone'] as String?,
creditAccount: json['creditAccount'] as String?,
creditRef: json['creditRef'] as String?,
billClientId: json['billClientId'] as String?,
billName: json['billName'] as String,
paymentProcessorName: json['paymentProcessorName'] as String,
providerImage: json['providerImage'] as String?,
paymentProcessorImage: json['paymentProcessorImage'] as String?,
confirmationStatus: json['confirmationStatus'] as String,
paymentStatus: json['paymentStatus'] as String,
integrationStatus: json['integrationStatus'] as String,
pollingStatus: json['pollingStatus'] as String,
orderId: json['orderId'] as String?,
orderTrace: json['orderTrace'] as String?,
orderTransactionTrace: json['orderTransactionTrace'] as String?,
erpSalesRef: json['erpSalesRef'] as String?,
erpSalesPaymentRef: json['erpSalesPaymentRef'] as String?,
workflowId: (json['workflowId'] as num).toInt(),
type: json['type'] as String?,
authType: json['authType'] as String?,
responseCode: json['responseCode'] as String?,
status: json['status'] as String?,
errorMessage: json['errorMessage'] as String?,
billProductName: json['billProductName'] as String?,
creditName: json['creditName'] as String?,
creditEmail: json['creditEmail'] as String?,
productUid: json['productUid'] as String?,
targetUrl: json['targetUrl'] as String?,
additionalData: const AdditionalDataJsonConverter().fromJson(
json['additionalData'] as List?,
),
);
Map<String, dynamic> _$TransactionModelToJson(
TransactionModel instance,
) => <String, dynamic>{
'id': instance.id,
'createdAt': _$JsonConverterToJson<String, DateTime>(
instance.createdAt,
const DateTimeJsonConverter().toJson,
),
'userId': instance.userId,
'trace': instance.trace,
'amount': const DecimalJsonConverter().toJson(instance.amount),
'charge': const DecimalJsonConverter().toJson(instance.charge),
'gatewayCharge': const DecimalJsonConverter().toJson(instance.gatewayCharge),
'tax': const DecimalJsonConverter().toJson(instance.tax),
'totalAmount': const DecimalJsonConverter().toJson(instance.totalAmount),
'reference': instance.reference,
'paymentProcessorLabel': instance.paymentProcessorLabel,
'integrationProcessorLabel': instance.integrationProcessorLabel,
'confirmationProcessorLabel': instance.confirmationProcessorLabel,
'providerLabel': instance.providerLabel,
'debitPhone': instance.debitPhone,
'debitCurrency': instance.debitCurrency,
'debitRef': instance.debitRef,
'creditPhone': instance.creditPhone,
'creditAccount': instance.creditAccount,
'creditRef': instance.creditRef,
'billClientId': instance.billClientId,
'billName': instance.billName,
'paymentProcessorName': instance.paymentProcessorName,
'providerImage': instance.providerImage,
'paymentProcessorImage': instance.paymentProcessorImage,
'confirmationStatus': instance.confirmationStatus,
'paymentStatus': instance.paymentStatus,
'integrationStatus': instance.integrationStatus,
'pollingStatus': instance.pollingStatus,
'orderId': instance.orderId,
'orderTrace': instance.orderTrace,
'orderTransactionTrace': instance.orderTransactionTrace,
'erpSalesRef': instance.erpSalesRef,
'erpSalesPaymentRef': instance.erpSalesPaymentRef,
'workflowId': instance.workflowId,
'type': instance.type,
'authType': instance.authType,
'responseCode': instance.responseCode,
'status': instance.status,
'errorMessage': instance.errorMessage,
'billProductName': instance.billProductName,
'creditName': instance.creditName,
'creditEmail': instance.creditEmail,
'productUid': instance.productUid,
'targetUrl': instance.targetUrl,
'additionalData': const AdditionalDataJsonConverter().toJson(
instance.additionalData,
),
};
Value? _$JsonConverterFromJson<Json, Value>(
Object? json,
Value? Function(Json json) fromJson,
) => json == null ? null : fromJson(json as Json);
Json? _$JsonConverterToJson<Json, Value>(
Value? value,
Json? Function(Value value) toJson,
) => value == null ? null : toJson(value);