Line data Source code
1 : // Copyright 2023 The terCAD team. All rights reserved. 2 : // Use of this source code is governed by a CC BY-NC-ND 4.0 license that can be found in the LICENSE file. 3 : 4 : import 'dart:convert'; 5 : import 'package:app_finance/_classes/controller/encryption_handler.dart'; 6 : import 'package:app_finance/_classes/structure/interface_app_data.dart'; 7 : import 'package:app_finance/_ext/date_time_ext.dart'; 8 : import 'package:flutter/material.dart'; 9 : import 'package:flutter_currency_picker/flutter_currency_picker.dart'; 10 : 11 : abstract class AbstractAppData implements InterfaceAppData { 12 : @override 13 : String? uuid; 14 : double _amount = 0.0; 15 : DateTime _createdAt; 16 : DateTime _updatedAt; 17 : @override 18 : String title; 19 : double progress; 20 : @override 21 : bool hidden; 22 : String? description; 23 : @override 24 : MaterialColor? color; 25 : @override 26 : IconData? icon; 27 : @override 28 : Currency? currency; 29 : 30 2 : AbstractAppData({ 31 : required this.title, 32 : this.uuid, 33 : this.description, 34 : this.color, 35 : this.icon, 36 : this.currency, 37 : DateTime? updatedAt, 38 : DateTime? createdAt, 39 : String? createdAtFormatted, 40 : details = 0.0, 41 : this.progress = 1.0, 42 : this.hidden = false, 43 2 : }) : _createdAt = createdAt ?? (createdAtFormatted != null ? DateTime.parse(createdAtFormatted) : DateTime.now()), 44 2 : _updatedAt = updatedAt ?? DateTime.now(), 45 2 : _amount = 0.0 + (details ?? 0.0); 46 : 47 : AbstractAppData clone(); 48 : 49 0 : @override 50 0 : void deactivate() => hidden = true; 51 : 52 0 : factory AbstractAppData.fromJson(Map<String, dynamic> json) { 53 0 : throw Exception('Implement by extending'); 54 : } 55 : 56 0 : Map<String, dynamic> toJson() => { 57 0 : 'uuid': uuid, 58 0 : 'title': title, 59 0 : 'description': description, 60 0 : 'color': color?.value, 61 0 : 'icon': icon?.codePoint, 62 0 : 'currency': currency?.code, 63 0 : 'createdAt': createdAt.toIso8601String(), 64 0 : 'updatedAt': updatedAt.toIso8601String(), 65 0 : 'details': details, 66 0 : 'progress': progress, 67 0 : 'hidden': hidden, 68 : }; 69 : 70 0 : Map<String, Map<String, dynamic>> toFile() { 71 0 : var data = {...toJson()}; 72 0 : return { 73 0 : 'type': { 74 0 : 'name': getClassName(), 75 0 : 'hash': EncryptionHandler.getHash(data), 76 : }, 77 : 'data': data, 78 : }; 79 : } 80 : 81 0 : String toStream() => EncryptionHandler.encrypt(toString()); 82 : 83 0 : @override 84 0 : String toString() => json.encode(toFile()); 85 : 86 2 : @override 87 2 : dynamic get details => _amount; 88 : 89 4 : set details(dynamic value) => _amount = value; 90 : 91 0 : Widget? get error => null; 92 : 93 : // ignore: unnecessary_getters_setters 94 0 : DateTime get updatedAt => _updatedAt; 95 0 : set updatedAt(DateTime value) => _updatedAt = value; 96 0 : String get updatedAtFormatted => _updatedAt.yMEd(); 97 0 : set updatedAtFormatted(String value) => _updatedAt = DateTime.parse(value); 98 : 99 : // ignore: unnecessary_getters_setters 100 0 : @override 101 0 : DateTime get createdAt => _createdAt; 102 0 : @override 103 0 : set createdAt(DateTime value) => _createdAt = value; 104 0 : String get createdAtFormatted => _createdAt.yMEd(); 105 0 : set createdAtFormatted(String value) => _createdAt = DateTime.parse(value); 106 : }